Methodology
The honest spine
Every number SONAR reports traces back to the pool that produced it. This page states how the pool is built, how it is weighted, and where the method refuses to speak.
Dome confirmation
The dome is the set of accounts confirmed to belong to the place being measured. An account enters it on resident evidence, not on a keyword or a location tag.
- Stated residence. The account profile places the person in the market: a home town or region in the bio, resolved against the market geography.
- Community membership. The account participates in a confirmed local community rather than a national or diaspora one.
- Geo-tagged posts are not confirmation. A post tagged to a city can come from a visitor, a campaign, or a bot. A tag adds a weak signal, never a confirmed account.
- Diaspora is rejected. An account that reads as expatriate or out of region is excluded, even when it posts constantly about the race.
The confirmed-pool size and the decided-pool size are reported on every output. A small dome is stated as a small dome.
Impact weighting and the five percent cap
Standing is not a count of posts. Each confirmed account contributes by realized engagement first and reach second, so one loud account does not outvote a quiet neighborhood by posting more.
To keep any single account from dominating a thin pool, an anti-concentration cap holds each account to at most five percent of the pool's weight. Below the account count where the cap can bind, it cannot engage, and the output says so with a cap_infeasible flag rather than hiding the concentration.
Pool gates and what inconclusive means
A headline is published only when the pool can support it. Two floors apply: a minimum count of decided signals, and a minimum count of decided accounts, so a handful of accounts posting many times does not clear the gate on volume alone.
When a floor is not met, the standing reads inconclusive or pool building, with the reasons attached: thin, concentrated, cap infeasible, or no calibration record. Inconclusive is a real answer. It is reported plainly, never dressed as a number.
Inauthenticity screening
Before weighting, the pool is screened for coordinated and inauthentic behavior: posting bursts, duplicated text, and freshly created accounts. The screen flags, it does not silently remove.
Both the unfiltered standing and the standing with flagged accounts removed are shown together, so the effect of the screen is visible rather than assumed. Volume from a coordinated cluster is reported as coordinated, not as breakthrough.
Stance classification and accuracy checks
Each post about a candidate is classified as supportive, opposed, or neutral. The classifier reads any language and returns a stance in English. Each market carries a short language context so local idiom is read correctly rather than dropped as noise. In Gambia, for example, the Wolof phrase for asking an incumbent to step down is read as opposition, not as support.
Classifier accuracy is checked against a labeled review and published with the source of the labels stated distinctly:
- Human-validated. A person labels a blind sample and the agreement rate is recorded.
- Cross-model AI check. A second, larger model labels the same sample. This is reported as a cross-model check, never as human validation.
Alongside agreement, an attribution error rate is reported: the share of reviewed posts that were wrongly attributed to a candidate in the first place. A misattribution is an error to publish, not to bury.
What SONAR refuses to do
No demographic modeling. Slices are by platform, geography, and community source only. SONAR does not infer age, race, or gender and does not weight by them.
No turnout claims. SONAR measures conversation among confirmed residents. It does not project who will vote.
No verdict without a calibration record. In a market with no scored calibration pair, the standing renders inconclusive by rule. Confidence comes from pool volume and the published record, never from model features or narrative fit.
The record that backs all of this is public. See the calibration record.