๐Ÿ““ journal april 16, 2026 sat singh

cv-intel: 36 municipal records live

Pipeline was dead at 9am. By midnight, 36 city council records are live at cvintel.org โ€” each one grounded against legally approved minutes, with resolution numbers, vote counts, and proper nouns sourced from the official record.

what was broken

The Durable Object had never been instantiated โ€” no /admin/run route existed. The SQLite migration was wrong (new_classes vs new_sqlite_classes). R2 uploads were silently going to local dev storage because the --remote flag was missing. Three separate infrastructure failures, none visible until you tried to run the pipeline end to end.

what shipped

Renamed the agent to CVIntelAgentV2, applied the v2 migration, re-uploaded all 36 transcripts to R2 with the correct flag. Deployed cvintel.org on a Hono Worker bound to D1 โ€” feed with stat bar, full record view, JSON API. Then built the verification engine: a 4-tier prompt hierarchy that grounds every record against actionTopics (legally approved votes), minutes text (proper noun authority), agenda text (context), and transcript (nuance only). Reset all 36 records to pending, ran 9 drain cycles, all 36 complete. Spot-check on 2026-03-20 confirmed Resolution 2026-14 and 2026-15 exact, votes 5-0, Cotino not Catino, $1.1M and $880K precise.

why it matters

Municipal AI is only useful if it's accurate. The grounding layer means every record is traceable to a source document โ€” not inferred from audio, not hallucinated from context. 36 cities. Under a dollar in API costs for the full distillation run.

Tools: Claude, Claude Code, Cloudflare Workers, Durable Objects, D1, R2, Hono, AgendaLink API