Live numbers

Impact

What Sach has done, counted by the server itself. Generated 2026-11-12 20:27:07+00:00 UTC.

Read this first

Counting since 2026-11-12T17:46:07+00:00. This server's counters are persistent.

Numbers are computed from the ledger and counters on every page load; nothing here is typed in. Counters live in a shared remote store and survive server restarts. If that store cannot be reached, counters read as zero.

Checks

8

checks counted

4

ran the full pipeline

4

answered from the cache (50.0% of all checks)

0

had nothing checkable

Verdicts

  • TRUE: 1, 12.5%
  • FALSE: 4, 50.0%
  • MISLEADING: 0, 0.0%
  • UNVERIFIED: 3, 37.5%

Shares are out of 8 (the sum of the four verdict counters).

Languages of the forwards

  • English: 7, 87.5%
  • Hindi: 0, 0.0%
  • Bengali: 1, 12.5%
  • Marathi: 0, 0.0%
  • Telugu: 0, 0.0%
  • Tamil: 0, 0.0%
  • Gujarati: 0, 0.0%
  • Urdu: 0, 0.0%
  • Kannada: 0, 0.0%
  • Odia: 0, 0.0%
  • Malayalam: 0, 0.0%
  • Punjabi: 0, 0.0%
  • Assamese: 0, 0.0%
  • Konkani: 0, 0.0%
  • Nepali: 0, 0.0%
  • Manipuri (Meitei): 0, 0.0%
  • Tinglish: 0, 0.0%

Shares are out of 8 (the sum of the language counters).

Evaluation

  • Claims in the evaluation set: 31
  • Judged exactly right: 26
  • Percent right: 83.9%
  • Overclaimed FALSE: 0
  • Overclaimed TRUE: not available
  • Said unverified instead of guessing: 5
  • Run on commit: not available
  • Run date: not available

Not in this evaluation file (older format): overclaimed_true, commit, date, by_lang. Shown as not available.

Read from data/eval_summary.json, which scripts/run_eval.py writes after a full run of the evaluation set. Percent correct = correct / n.

Public ledger

14 claim rows in the public ledger: 2 TRUE, 8 FALSE, 0 MISLEADING, 4 UNVERIFIED.

Latest FALSE verdicts

Source rules in sach/fetch.py: 3 official suffixes, 3 official hosts, 1 official zones, 16 more official domains; 6 fact-checker sites and 6 more with path rules (secondary, labelled). Open the full ledger.

How each number is computed

  • checks total: Counter checks_total: incremented once for every completed check, including cache hits.
  • checks served fresh: checks_total minus cache_hits: checks that ran the full pipeline.
  • cache hits: Counter cache_hits: incremented when an identical forward was answered from the verdict cache.
  • no claims: Counter no_claims: forwards with nothing checkable (greetings, emoji, bare links). They are not in the verdict breakdown.
  • verdicts: Counters verdict:TRUE, verdict:FALSE, verdict:MISLEADING, verdict:UNVERIFIED (overall verdict of each check). Each share = that count / the sum of the four, and the denominator is shown.
  • languages: Counters lang:<code> for every supported language code, e.g. lang:en, lang:hi, lang:bn (language of the forward as detected). Each share = count / the sum of those counters.
  • ledger: Rows returned by ledger.load(): the bundled starter ledger plus rows recorded by this server. One row per claim (a forward can hold several claims), so this is not the same number as checks.
  • recent false: The latest rows in that ledger whose verdict is FALSE, newest first, with the first citation on each.
  • counting since: Counter first_event_at: the time of the first check this store ever counted.
  • sources policy: Counted from the lists in sach/fetch.py (OFFICIAL_SUFFIXES, OFFICIAL_HOSTS, OFFICIAL_ZONES, EXTRA_OFFICIAL, FACTCHECKER_HOSTS, FACTCHECKER_PATHS). Fact-checkers are secondary: they are labelled and can never produce TRUE or FALSE on their own.
  • evaluation: Read from data/eval_summary.json, which scripts/run_eval.py writes after a full run of the evaluation set. Percent correct = correct / n.

The same data as JSON