{"generated_at": "2026-11-12T20:33:09+00:00", "counting_since": "2026-11-12T17:46:07+00:00", "storage": "persistent", "storage_note": "Counters live in a shared remote store and survive server restarts. If that store cannot be reached, counters read as zero.", "checks_total": 8, "checks_served_fresh": 4, "cache_hits": 4, "cache_hit_pct": 50.0, "no_claims": 0, "verdicts": {"denominator": 8, "TRUE": {"count": 1, "pct": 12.5}, "FALSE": {"count": 4, "pct": 50.0}, "MISLEADING": {"count": 0, "pct": 0.0}, "UNVERIFIED": {"count": 3, "pct": 37.5}}, "languages": {"denominator": 8, "en": {"count": 7, "pct": 87.5}, "hi": {"count": 0, "pct": 0.0}, "bn": {"count": 1, "pct": 12.5}, "mr": {"count": 0, "pct": 0.0}, "te": {"count": 0, "pct": 0.0}, "ta": {"count": 0, "pct": 0.0}, "gu": {"count": 0, "pct": 0.0}, "ur": {"count": 0, "pct": 0.0}, "kn": {"count": 0, "pct": 0.0}, "or": {"count": 0, "pct": 0.0}, "ml": {"count": 0, "pct": 0.0}, "pa": {"count": 0, "pct": 0.0}, "as": {"count": 0, "pct": 0.0}, "kok": {"count": 0, "pct": 0.0}, "ne": {"count": 0, "pct": 0.0}, "mni": {"count": 0, "pct": 0.0}, "tl": {"count": 0, "pct": 0.0}}, "ledger": {"rows": 14, "by_verdict": {"TRUE": 2, "FALSE": 8, "MISLEADING": 0, "UNVERIFIED": 4}, "recent_false": [{"claim": "Government is giving Rs 1000 to everyone under Corona Sahayata Yojana.", "date": "2026-11-12", "citation_url": "https://pib.gov.in/PressReleasePage.aspx?PRID=1618314", "citation_source": "PIB (Press Information Bureau)"}, {"claim": "A Health Ministry office memorandum on state holidays has been issued.", "date": "2026-11-12", "citation_url": "https://pib.gov.in/PressReleasePage.aspx?PRID=2216041", "citation_source": "PIB (Press Information Bureau)"}, {"claim": "Union Minister Sarbananda Sonowal's office has issued a letter on this matter.", "date": "2026-11-12", "citation_url": "https://www.pib.gov.in/PressReleasePage.aspx?PRID=2216041&reg=3&lang=2", "citation_source": "www.pib.gov.in"}, {"claim": "Government is giving Rs 1000 to everyone under Corona Sahayata Yojana, click the link to register.", "date": "2026-11-12", "citation_url": "https://pib.gov.in/PressReleasePage.aspx?PRID=1618314", "citation_source": "PIB (Press Information Bureau)"}, {"claim": "WHO doctors are advising against wearing masks and social distancing.", "date": "2026-11-12", "citation_url": "https://www.who.int/emergencies/diseases/novel-coronavirus-2019/advice-for-public/", "citation_source": "www.who.int"}]}, "evaluation": {"available": true, "error": null, "n": 31, "correct": 26, "overclaimed_false": 0, "overclaimed_true": null, "abstained": 5, "commit": null, "date": null, "by_lang": null, "correct_pct": 83.9, "missing_fields": ["overclaimed_true", "commit", "date", "by_lang"], "how": "Read from data/eval_summary.json, which scripts/run_eval.py writes after a full run of the evaluation set. Percent correct = correct / n."}, "sources_policy": {"official_suffixes": 3, "official_hosts": 3, "official_zones": 1, "official_extra_domains": 16, "factchecker_hosts": 6, "factchecker_sites_with_path_rules": 6, "how": "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."}, "how": {"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."}}