Data health

Every fact on Mzalendo is drillable to its source. This page shows when we last fetched each one, whether it is within its freshness target, and how to verify it yourself.

80sources tracked
59within SLA
21SLA breached
4never run
24failed last attempt

Parked scheduled jobs (5)

These jobs are defined in the beat schedule but the production task-policy partition withholds them from unattended execution — they do not run automatically. Listed here so the withholding is visible, not silent. Each is reviewed by its date below.

JobTaskWhy parkedReview by
daily-parlgoke-roster-snapshot parliament.parlgoke_roster_snapshot Captures editorial snapshots directly; needs raw-observation conversion. Same shape as the accuracy check above; convert together. Measured consequence (dev, 2026-08-29): with both parked and `propose_member_profile_evidence` on no schedule at all, member evidence is refreshed only by hand. Its TTL is snapshot retrieval + 30 days, so ~30 days after any manual load every current member's MemberPublicationVerdict expires — 418 of 418 stale, 401 of 418 evidence-expired, 397 of 417 members disagreeing with a fresh derive. `daily-rebuild-member-publication` still runs nightly and cannot fix it: it recomputes the expiry from the same lapsed evidence. Readers keep seeing every member (the trust check is a fast path, never a gate) but pay the per-member derive the warehouse exists to avoid. CORRECTION, same day (MZ-1203): un-parking these two is NOT the remedy, and this note said it was. `daily-certified-member-source-observation` (00:05) ALREADY retains the day's roster bytes, so no new fetching was needed — what was missing was a renewal step over the bytes we hold, now `politicians.renew_member_fact_evidence` at 02:30, plus the loader-side predicate that let an expired claim be replaced at all. These two stay parked on their own merits. `daily-member-publication-verdict-audit` (04:25) reports the chain. 2026-11-01
daily-roster-accuracy-check parliament.roster_accuracy_check Writes RosterVerificationRun outside the crawler API; needs raw-observation conversion. Consequence while parked: the public 'last verified' badge only moves on a manual run — AND, corrected 2026-08-29 (MZ-20260829-V), the whole member-evidence chain has no automated refresh. See the note on the pair below. 2026-11-01
daily-search-health-check search.health_check_deployment Creates/repairs pgai vectorizer database objects — schema repair, not a data refresh; needs an operational role designed for unattended DDL. Consequence while parked is now SMALL: it never reindexed anyway (the deployment mode explicitly skips backfill and reindex), and the index refresh it was wrongly relied on for runs at 02:20 as `daily-search-content-reindex`, watched at 05:52 by `daily-search-section-coverage-audit`. 2026-11-17
daily-sync-policytopic-counts topics.sync_policytopic_counts Recomputes denormalized PolicyTopic counts; un-park needs INDEPENDENT evidence (an audit guard, or a dry run taken BEFORE any manual apply) — not a post-apply dry run, which reports 0 movements regardless of whether the sync logic is correct. The 2026-08-20 parking note's flagged residual (legislation-bills count 45 -> 0) was never diagnosed and still has not been. 2026-11-01
weekly-search-maintenance search.health_check_maintenance Same pgai schema repair as above, plus a 30-60 minute vectorizer backfill on a 2-vCPU box. Its reindex leg is superseded by `daily-search-content-reindex`; what remains parked is the trigger repair and the queue backfill, neither of which has ever been measured on prod. Un-parking needs that measurement first — and note the task SWALLOWS its own exceptions and returns success=False without raising, so scheduling it as-is would buy a job that can fail silently on a schedule. 2026-11-17

Roster drift

How the parliament.go.ke MP & Senator directories compare to our local roster. Green = within 2 rows, amber = 3-10, red = >10.

National Assembly 347 on parliament.go.ke · 348 local (1 row delta) 3 missing-local · 0 missing-remote 4 Aug 17:47

Missing locally (on parliament.go.ke, not in our roster)

Missing remotely (in our roster, not on parliament.go.ke)

None.

Senate 67 on parliament.go.ke · 67 local (0 row delta) 0 missing-local · 0 missing-remote 10 Jul 02:48

Missing locally (on parliament.go.ke, not in our roster)

None.

Missing remotely (in our roster, not on parliament.go.ke)

None.

Extractor queue

Per-extractor delta vs the previous run + currently-pending Celery tasks. Use this when a downstream count looks stale.

Extractor Last run Rows last run Δ vs previous Queue depth Last success
Bill stages
bill_stage_extractor
Success — wrote rows
1 Jul 10:15
0 0 0 1 Jul 10:15
Gazette notices
kenyalaw_gazette_extract
Success — wrote rows
1 Jul 10:23
0 -6 0 1 Jul 10:23
Motions
hansard_motions_extract
Success — wrote rows
10 Jul 03:23
0 0 0 10 Jul 03:23
Petitions
hansard_petitions_extract
Success — wrote rows
10 Jul 03:27
0 0 0 10 Jul 03:27
Questions
hansard_questions_extract
Success — wrote rows
10 Jul 03:34
0 -1 0 10 Jul 03:34
Statements
hansard_statements_extract
Success — wrote rows
10 Jul 03:47
0 0 0 10 Jul 03:47
Papers laid
hansard_papers_laid_extract
Success — wrote rows
10 Jul 03:51
0 0 0 10 Jul 03:51
Votes
hansard_votes_extract
Success — wrote rows
10 Jul 03:56
15 -3 0 10 Jul 03:56

Speaker-attribution drain

602582 total speech rows
375028 attributed
227554 NULL contributor
62.2% resolved share
0 resolved last 24h

AI search coverage

593066 of 866121 Hansard chunks are embedded (68%). This is what the chat assistant searches over.

Hansard

Source Last run Status Rows Freshness SLA Drift alert Authority
Hansard — National Assembly
tazabu_hansard_na · http
never No_run 0 129600 s · breached — Verify on source ↗
Hansard — Senate
tazabu_hansard_senate · http
never No_run 0 129600 s · breached — Verify on source ↗
Hansards — immutable official PDF evidence
parlgoke_hansard_document_sources · authority_snapshot
30 Oct 2026, 03:04
0d ago
Success 987 129600 s — Verify on source ↗
Hansards — retained-PDF text extraction candidates
parlgoke_hansard_document_extraction · docling
30 Oct 2026, 01:37
0d ago
Success 10 129600 s — Verify on source ↗
Official two-House Hansard index — raw observation
hansard_source_observations · http
30 Oct 2026, 03:03
0d ago
Success 43 129600 s Delivery failed
configured source-drift alert delivery failed: TransportUnavailable: EMAIL_BACKEND django.core.mail.backends.console.EmailBackend cannot deliver mail
Verify on source ↗
Guard: Hansard two-store reconciliation (daily)
guard_reconcile_hansard_stores · api
never Failed 0 194400 s — Verify on source ↗
Guard: the published latest sitting keeps up with Parliament's listing (daily)
guard_audit_hansard_ingest_lag · api
30 Oct 2026, 01:36
0d ago
Success 987 194400 s — Verify on source ↗
Guard: each lane is as current as its source, and is reloaded when it is not (daily)
guard_reconcile_lane_freshness · api
30 Oct 2026, 03:03
0d ago
Failed 10 194400 s — Verify on source ↗
Guard: contributions carrying no words (daily)
guard_audit_wordless_contributions · api
30 Oct 2026, 08:48
0d ago
Success 94816 194400 s — Verify on source ↗
Guard: chat embedding coverage + orphan vectors (daily)
guard_audit_embedding_coverage · api
30 Oct 2026, 08:48
0d ago
Success 928253 194400 s — Verify on source ↗
Guard: chat vector stores still have an ANN index (daily)
guard_audit_vector_index_health · api
30 Oct 2026, 08:48
0d ago
Success 991910 194400 s — Verify on source ↗
Guard: Hansard store is in the chat's embedding space (daily)
guard_audit_hansard_embed_space · api
never Failed 0 194400 s — Verify on source ↗
Guard: no chat retrieval lane has gone silent (daily)
guard_audit_retrieval_lane_silence · api
30 Oct 2026, 08:53
0d ago
Success 32 194400 s — Verify on source ↗
Guard: golden questions still retrieve the right documents (daily)
guard_audit_rag_retrieval_eval · api
never Failed 0 194400 s — Verify on source ↗
Guard: published sittings still serve a transcript (daily)
guard_audit_hansard_render_integrity · api
30 Oct 2026, 08:48
0d ago
Success 980 194400 s — Verify on source ↗
Guard: tracker/Hansard reconciliation (weekly)
guard_audit_tracker_hansard_reconciliation · api
26 Oct 2026, 06:40
4d ago
Success 0 1036800 s — Verify on source ↗
Guard: Hansard ranking readiness (daily)
guard_audit_hansard_ranking_readiness · api
never Failed 0 194400 s — Verify on source ↗
Guard: attributed Hansard speech that no public count covers (daily)
guard_audit_stranded_attribution · api
never Failed 0 194400 s — Verify on source ↗
Guard: every Hansard byline still reaches the member it names (daily)
guard_audit_hansard_byline_resolution · api
never Failed 0 194400 s — Verify on source ↗
Guard: the Senate's record and the published contributions agree (daily)
guard_audit_senate_contribution_reconciliation · api
never Failed 0 194400 s — Verify on source ↗
Guard: Hansard speaker labels carry only a label (daily)
guard_audit_hansard_label_integrity · api
12 Aug 2026, 05:35
0d ago
Failed 236028 194400 s — Verify on source ↗
Guard: duplicate sittings flagged, and flagging hides no member (daily)
guard_audit_duplicate_sitting_integrity · api
30 Oct 2026, 06:56
0d ago
Success 931 194400 s — Verify on source ↗
Guard: stored Hansard text vs its source PDF, newest first (daily batch)
guard_audit_hansard_source_coverage · api
30 Oct 2026, 07:09
0d ago
Success 25 194400 s — Verify on source ↗

Legislation

Source Last run Status Rows Freshness SLA Drift alert Authority
Bills — Parliament of Kenya
parlgoke_bills · http
never No_run 0 691200 s · breached — Verify on source ↗
Bills — retained atomic two-House crawl
parlgoke_bills_atomic · http
30 Oct 2026, 01:36
0d ago
Success 546 691200 s — Verify on source ↗
Bills — immutable official PDF attribution evidence
parlgoke_bill_attribution_sources · authority_snapshot
21 Oct 2026, 01:00
9d ago
Success 550 129600 s · breached — Verify on source ↗
Bills — OCR attribution candidate extraction
parlgoke_bill_attribution_extraction · docling
30 Oct 2026, 01:36
0d ago
Success 0 129600 s — Verify on source ↗
Acts — Kenya Law
kenyalaw_acts · http
21 Jun 2026, 21:56
130d ago
Success 2966 691200 s · breached — Verify on source ↗
Acts — long-title + commencement enrichment (Kenya Law)
kenyalaw_acts_enrich · http
23 Jun 2026, 02:20
129d ago
Empty 6 129600 s · breached — Verify on source ↗
Motions tracker — National Assembly
parliament_motions_tracker_na · http
3 Sep 2026, 14:50
57d ago
Success 174 691200 s · breached — Verify on source ↗
Motions tracker — Senate
parliament_motions_tracker_senate · http
3 Sep 2026, 14:51
57d ago
Success 67 691200 s · breached — Verify on source ↗
Questions tracker — National Assembly
parliament_question_tracker_na · http
3 Sep 2026, 15:01
57d ago
Success 683 691200 s · breached — Verify on source ↗
Petitions tracker — National Assembly
parliament_petitions_tracker_na · http
3 Sep 2026, 15:07
57d ago
Success 119 691200 s · breached — Verify on source ↗
Petitions tracker — Senate
parliament_petitions_tracker_senate · http
3 Sep 2026, 15:07
57d ago
Success 87 691200 s · breached — Verify on source ↗
Statements tracker — National Assembly
parliament_statements_tracker_national_assembly · http
17 Oct 2026, 10:24
13d ago
Success 1118 691200 s · breached — Verify on source ↗
Statements tracker — Senate
parliament_statements_tracker_senate · http
17 Oct 2026, 10:29
13d ago
Success 2406 691200 s · breached — Verify on source ↗
Order Papers — National Assembly
parlgoke_order_papers_na · browser
15 Aug 2026, 22:29
75d ago
Success 687 129600 s · breached — Verify on source ↗
Order Papers — Senate
parlgoke_order_papers_senate · browser
15 Aug 2026, 22:43
75d ago
Success 601 129600 s · breached — Verify on source ↗
Guard: civic-alert queue and provider-receipt integrity (daily)
guard_audit_alert_delivery · api
30 Oct 2026, 04:10
0d ago
Success 0 194400 s — Verify on source ↗
Guard: cross-store vote-duplicate (daily)
guard_audit_votes_cross_store · api
30 Oct 2026, 06:43
0d ago
Success 30 194400 s — Verify on source ↗
Guard: the configured beat schedule is the running one (daily)
guard_audit_beat_schedule_installed · api
30 Oct 2026, 03:10
0d ago
Success 115 194400 s — Verify on source ↗
Guard: a failing guard can actually reach a human (daily)
guard_audit_guard_alerting · api
never Failed 0 194400 s — Verify on source ↗
Guard: published Bills vs the nightly listing inventory (daily)
guard_audit_bill_inventory_coverage · api
30 Oct 2026, 07:07
0d ago
Success 546 194400 s — Verify on source ↗
Guard: vital-stats ribbon reconciliation (daily)
guard_audit_vital_stats · api
30 Oct 2026, 06:46
0d ago
Success 10 194400 s — Verify on source ↗
Guard: policy-topic count parity (daily)
guard_audit_policytopic_counts · api
30 Oct 2026, 06:48
0d ago
Success 64 194400 s — Verify on source ↗
Guard: homepage snapshot reconciliation (daily)
guard_audit_home_snapshot · api
13 Oct 2026, 05:48
17d ago
Success 2486 194400 s · breached — Verify on source ↗
Guard: the ribbon reconciles to the official trackers (daily)
guard_reconcile_vital_metrics · api
30 Aug 2026, 05:46
0d ago
Failed 7 194400 s — Verify on source ↗
Guard: sealed tracker evidence present, fresh and verifying (daily)
guard_audit_tracker_evidence · api
30 Oct 2026, 07:06
0d ago
Success 7 194400 s — Verify on source ↗
Guard: no division advertises more votes than its roll holds (daily)
guard_audit_division_roll_balance · api
never Failed 0 194400 s — Verify on source ↗
Guard: House-business tracker -> member metric coverage (weekly)
guard_audit_tracker_member_coverage · api
never Failed 0 1036800 s — Verify on source ↗
Guard: Bill inventory and sponsor reconciliation (daily)
guard_audit_bill_sponsor_coverage · api
never Failed 0 194400 s — Verify on source ↗
Guard: literal Bills Tracker sponsor projection (daily)
guard_audit_bill_tracker_interim · api
28 Oct 2026, 07:15
0d ago
Failed 518 194400 s — Verify on source ↗
Guard: published Bills vs the Houses' own Bills Trackers (daily)
guard_audit_bills_against_tracker · api
20 Oct 2026, 07:23
0d ago
Failed 542 194400 s — Verify on source ↗
Guard: published Bill sponsor counts vs a fresh derivation (daily)
guard_rebuild_bill_sponsor_facts · api
28 Oct 2026, 07:33
0d ago
Failed 251 194400 s — Verify on source ↗

Gazette

Source Last run Status Rows Freshness SLA Drift alert Authority
Kenya Gazette — Kenya Law
kenyalaw_gazette · http
5 Jul 2026, 06:40
117d ago
Success 102 691200 s · breached — Verify on source ↗

Members

Source Last run Status Rows Freshness SLA Drift alert Authority
MPs — National Assembly directory
parlgoke_members_na · http
4 Aug 2026, 17:47
86d ago
Success 347 129600 s · breached — Verify on source ↗
Senators — Senate directory
parlgoke_members_senate · http
10 Jul 2026, 02:48
112d ago
Success 67 129600 s · breached — Verify on source ↗
Certified member sources — raw Parliament observation
certified_member_sources · http
30 Oct 2026, 00:05
0d ago
Success 570 129600 s Delivery failed
configured source-drift alert delivery failed: TransportUnavailable: EMAIL_BACKEND django.core.mail.backends.console.EmailBackend cannot deliver mail
Verify on source ↗
Official committee directories and pages — raw observation
committee_source_observations · http
30 Oct 2026, 01:36
0d ago
Success 69 129600 s Nothing to send Verify on source ↗
Top Performers — committee ranking readiness guard
guard_audit_committee_ranking_readiness · api
never Failed 0 129600 s — Verify on source ↗
Official county and constituency stable-ID inventory
official_boundary_inventory · http
never No_run 0 691200 s · breached — Verify on source ↗
Guard: staff discovery probes for unseen source documents (weekly)
guard_run_direction_probes · api
never Failed 0 1036800 s — Verify on source ↗
Guard: 13th-Parliament reconciliation (daily)
guard_audit_13th_reconciliation · api
never Failed 0 194400 s — Verify on source ↗
Guard: non-official source traces (daily)
guard_audit_unofficial_sources · api
30 Oct 2026, 06:40
0d ago
Success 13424 194400 s — Verify on source ↗
Guard: biographies corroborate their own subject (daily)
guard_audit_bio_identity · api
30 Oct 2026, 07:07
0d ago
Success 89 194400 s — Verify on source ↗
Guard: topic-coverage (daily)
guard_audit_topic_coverage · api
never Failed 0 194400 s — Verify on source ↗
Guard: the countercheck runs on the intended model (daily)
guard_check_countercheck_providers · api
30 Oct 2026, 06:57
0d ago
Success 237 194400 s — Verify on source ↗
Guard: member-totals parity (daily)
guard_audit_member_totals · api
30 Oct 2026, 06:45
0d ago
Success 367 194400 s — Verify on source ↗
Guard: membership fact evidence staleness + lead time (daily)
guard_audit_membership_fact_evidence · api
never Failed 0 194400 s · breached — Verify on source ↗
Guard: every sitting member is findable in member search (daily)
guard_audit_member_search_coverage · api
30 Oct 2026, 06:41
0d ago
Success 417 194400 s — Verify on source ↗
Guard: verified identity bindings re-derive (daily)
guard_audit_identity_bindings · api
30 Oct 2026, 06:41
0d ago
Success 0 194400 s — Verify on source ↗
Guard: member publication verdicts current and intact (daily)
guard_audit_member_publication_verdicts · api
never Failed 0 194400 s — Verify on source ↗
Guard: scorecard house-stats reconciliation (daily)
guard_audit_scorecard_house_stats · api
30 Oct 2026, 06:57
0d ago
Success 415 194400 s — Verify on source ↗
Guard: roster seat columns still match the canonical roster (daily)
guard_audit_roster_seat_integrity · api
30 Oct 2026, 06:45
0d ago
Success 428 194400 s — Verify on source ↗

Media

Source Last run Status Rows Freshness SLA Drift alert Authority
Guard: every offered search section can return rows (daily)
guard_audit_search_section_coverage · api
30 Oct 2026, 06:57
0d ago
Success 7 194400 s — Verify on source ↗

Publicfinance

Source Last run Status Rows Freshness SLA Drift alert Authority
Guard: NG-CDF published sum vs the printed Annex total (weekly)
guard_audit_ngcdf_printed_total · api
25 Oct 2026, 04:02
5d ago
Success 290 691200 s — Verify on source ↗
Guard: NG-CDF project replay from retained bytes (weekly)
guard_audit_ngcdf_project_replay · api
25 Oct 2026, 03:40
5d ago
Success 0 691200 s — Verify on source ↗

Elections

Source Last run Status Rows Freshness SLA Drift alert Authority
Guard: repeated gazetted ward codes, exactly the known two (weekly)
guard_audit_ward_code_collisions · api
25 Oct 2026, 06:34
5d ago
Success 1450 691200 s — Verify on source ↗

Bills

Source Last run Status Rows Freshness SLA Drift alert Authority
Guard: merged Bill table vs the two legacy tables (daily)
guard_sync_merged_bill_table · api
30 Oct 2026, 06:45
0d ago
Success 788 194400 s — Verify on source ↗
Guard: a Bill's shown stage rests on dated official evidence (daily)
guard_audit_bill_stage_provenance · api
never Failed 0 194400 s — Verify on source ↗