The report honesty rules
If a report section looks different from last month, or a value reads "—", or a number is framed as "so far", that's the report being honest rather than broken.
Every report is built on one rule: it never pretends to know more than it does.
A section can vanish
Sections adapt to what's actually there.
The Inspiration winners section is hidden entirely in the client preview when there are no inspiration winners — a client shouldn't meet an empty "add brands" prompt — so the later sections simply renumber up.
Reads that need the client's own brand don't appear when their profiles aren't tracked: the followers block, the client's leaderboard row, the blind spots.
Some sections also have an honest minimum. The Quarterly report's winning-mix comparison needs enough fully-read winners to compare formats; below that it collapses to theme level only and says so plainly on the cover. The section shows its coarser honest form rather than noisy cells — never a fake pattern.
"As of" and "so far"
The Monthly report reads the just-closed month with numbers as of the generation date. Because a win is only ever added, never taken away, the month's tally is honest "so far" — a few late wins may still join after generation, and the footer's "Generated …" stamp carries that.
The Quarterly report is different: its window is fully settled, so it states every verdict as final.
A monthly number that isn't called "final" isn't incomplete data. It's an honest picture with the clock stated.
"—" never means zero
A dash means the value is absent at its source, not that it's zero. An Instagram carousel has no public view count, so its reach reads "—". A winner whose AI read failed shows "—" on its AI columns rather than dropping out of the counts.
Where a distribution runs over AI-read posts only, it names how many posts it covers. The report discloses its gaps instead of papering over them.
Counted facts carry their base
Every observation names what it counts — "9 of 14 winners", "produced N winning posts". A counted fact is honest at any sample size, and the base lets the reader calibrate their own confidence.
It also means the report only ever observes, never recommends. You'll never read "post more of this": that interpretation is your job.
When the data is thin
A brand-new client, a quiet month, a market that produced no winners — none of these breaks a report. Each has a designed honest state.
If nothing crossed into a winner that month, the "What's winning" section reads an honest line — "No winners across your market in June yet" — and points to the market log, which still carries the month's full activity. A no-winner month is a valid reading, not a failure.
A client's first report leans on what's available. Sections that need accumulated movement — the followers curves, month-over-month momentum — read "collecting — your first movement appears next month" rather than inventing a line.
The market log, the coverage and any winners that already exist all still deliver.
Thin data reads differently in each lens
This split matters before you share:
- Client preview shows the honest line the client should see — "Your own profiles aren't tracked yet, so this report reads your market only" — with "—" in the affected cells. No prompts, no teaching.
- Agency view adds a teacher card naming what's missing and what adding it would unlock, for example tracking the client's own brand. That guidance is for you, not the client.
So the "add the client's own brand" prompts you see in agency view never reach the client. Read the client lens before sending, to confirm exactly what they'll get.
A report is never blocked on thin data. It always delivers something honest.