Drain Texas pending city profilesactive
Owner harness53 · Target 2026-05-15
Close the 22 pending + 5 corrupted TX city profiles. TX is the #2 state by combined pending records.
- 2026-04-30 — Rewrite 5 template-bleed cities (allen-tx, austin-tx, arlington-tx, fort-worth-tx, georgetown-tx)
- 2026-05-05 — Drain top 10 pending V2 soft-fails through publication-validator
- 2026-05-12 — Upgrade remaining V1 legacy TX profiles to V2 schema
- 2026-05-15 — All TX city profiles at status=shipped
Drain Ohio pending city profilesactive
Owner harness53 · Target 2026-05-22
11 OH cities are pending in the repair queue — the largest non-TX/CA single-state stack. One focused fleet drain closes them.
- 2026-05-01 — Triage OH pending entries — sort template-bleed corrupted from V2 soft-fails from V1 legacy
- 2026-05-08 — Rewrite any template-bleed cities
- 2026-05-15 — Drain OH V2 soft-fails through publication-validator
- 2026-05-20 — Upgrade remaining V1 legacy OH profiles to V2 schema
- 2026-05-22 — All OH city profiles at status=shipped
Drain Arkansas pending city profilesactive
Owner harness53 · Target 2026-05-29
9 AR cities are pending in the repair queue — close them following the TX/CA single-state pattern.
- 2026-05-08 — Triage AR pending entries — sort template-bleed corrupted from V2 soft-fails from V1 legacy
- 2026-05-15 — Rewrite any template-bleed cities
- 2026-05-22 — Drain AR V2 soft-fails through publication-validator
- 2026-05-27 — Upgrade remaining V1 legacy AR profiles to V2 schema
- 2026-05-29 — All AR city profiles at status=shipped
Drain North Carolina pending city profilesactive
Owner harness53 · Target 2026-06-05
9 NC cities are pending in the repair queue — close them following the TX/CA single-state pattern.
- 2026-05-15 — Triage NC pending entries — sort template-bleed corrupted from V2 soft-fails from V1 legacy
- 2026-05-22 — Rewrite any template-bleed cities
- 2026-05-29 — Drain NC V2 soft-fails through publication-validator
- 2026-06-03 — Upgrade remaining V1 legacy NC profiles to V2 schema
- 2026-06-05 — All NC city profiles at status=shipped
Drain Tennessee pending city profilesactive
Owner harness53 · Target 2026-06-12
8 TN cities are pending in the repair queue — close them following the TX/CA single-state pattern.
- 2026-05-22 — Triage TN pending entries — sort template-bleed corrupted from V2 soft-fails from V1 legacy
- 2026-05-29 — Rewrite any template-bleed cities
- 2026-06-05 — Drain TN V2 soft-fails through publication-validator
- 2026-06-10 — Upgrade remaining V1 legacy TN profiles to V2 schema
- 2026-06-12 — All TN city profiles at status=shipped
Wire the next wave of public-data APIsactive
Owner harness53 · Target 2026-06-15
Take the 18 pending APIs from PUBLIC-APIS.md and land the top-ranked 5-8 into scripts/fetch_city_overlay.py so every city gets richer context.
- 2026-05-08 — USGS Earthquake + NOAA Storms (rank 2) — disaster event history
- 2026-05-15 — HUD FMR (rank 3) — rent-by-bedroom ladder
- 2026-05-22 — Census PEP (rank 10) — annual pop estimates
- 2026-06-05 — EPA Envirofacts (rank 7) + EPA AirNow (rank 13)
- 2026-06-15 — Batch-fetch the corpus — run fetch_city_overlay.py across all 325 cities
Blocked: HUD APIs require free-tier token approval — register early.; EPA AirNow + NOAA CDO both need free API keys stored in .env.
Drain California pending city profilesactive
Owner harness53 · Target 2026-06-15
29 CA cities are pending/corrupted — the largest single-state gap left once the TX effort closes.
- 2026-05-01 — Close HCD data retrieval gaps (SB 423 tier, Housing Element compliance)
- 2026-05-15 — Drain top-10 CA V2 soft-fails through publication-validator
- 2026-06-01 — Upgrade remaining V1 legacy CA profiles to V2 schema
- 2026-06-15 — All CA city profiles at status=shipped
Blocked: Municode retrieval block on several CA cities (pomona, salinas). Needs DOM-based or authenticated drain path before shipped is reachable for those.
Drain Missouri pending city profilesactive
Owner harness53 · Target 2026-06-19
7 MO cities are pending in the repair queue — close them following the TX/CA single-state pattern.
- 2026-05-29 — Triage MO pending entries — sort template-bleed corrupted from V2 soft-fails from V1 legacy
- 2026-06-05 — Rewrite any template-bleed cities
- 2026-06-12 — Drain MO V2 soft-fails through publication-validator
- 2026-06-17 — Upgrade remaining V1 legacy MO profiles to V2 schema
- 2026-06-19 — All MO city profiles at status=shipped
Write missing state-overlay JSONsactive
Owner harness53 · Target 2026-06-30
34 states have a preemption markdown but no structured overlay JSON. Writing each one flips a state from pending to shipped.
- 2026-05-10 — Wave 1: 8 high-population states (PA, NC, VA, GA, MI, IN, TN, MA)
- 2026-05-31 — Wave 2: 12 mid-population states (MO, WI, MD, MN, CO, AL, SC, LA, KY, OR, OK, CT)
- 2026-06-30 — Wave 3: 14 remaining states + DC
Blocked: Some preemption markdowns are thin (<500 words) — may need fresh research before the JSON can be written.
Upgrade pending counties to deep/solidactive
Owner harness53 · Target 2026-07-31
87 of 162 counties carry at least one city at partial/stub. Push the research to deep/solid so the county ships.
- 2026-05-24 — TX counties: 15 pending → shipped
- 2026-06-07 — FL counties: 11 pending → shipped
- 2026-06-21 — CA counties: 9 pending → shipped
- 2026-07-31 — OH + GA + remainder: 52 counties → shipped
Drain schema-baseline errors below 6,000active
Owner harness53 · Target 2026-12-31
13,413 schema-validation errors across 320 profiles are baselined. The CI gate now refuses to ratchet them up; this effort drains them, top-offenders first.
- 2026-06-30 — Total below 12,000 — clear ~2 of the top-10 offenders (odessa-tx 289, destin-fl 282 are likely structural mismatches worth a deep look)
- 2026-09-30 — Total below 9,000 — drain the remaining top-10 plus 5–10 of the 26–99 tier
- 2026-12-31 — Total below 6,000 — break the 35-profile 100+ tier down to under 15 profiles
National layer — codes matrix + rollup pagedone
Owner harness53 · Target 2026-06-30
Federal overlays are all shipped, but the 50-state code adoption matrix is thin and there is no national-rollup view. Close those two gaps so the corpus reads as a coherent national dataset.
- 2026-05-08 — Audit zoning/_generator/building-codes/ for missing state×code-type cells; inventory in a gap manifest
- 2026-05-22 — Backfill IBC + IRC adoption notes (M2): all 51 states/DC verified at primary .gov tier; honest 'No statewide' for home-rule states
- 2026-06-05 — Backfill IECC + IFC + NEC adoption notes (M3): all 51 states/DC verified for all 5 codes via combined M2+M3 batches
- 2026-06-20 — Ship a national-rollup landing page (totals by domain, freshness, top pending) wired into build.mjs (lands at /zoning/national/)
- 2026-06-30 — Add national-rollup KPIs to the data-status dashboard header (5 KPIs at top of dashboard, +2.7 KB)
Simplify embedded data + normalize cross-page linksdone
Owner harness53 · Target 2026-06-30
v1-v2-completeness.html is 546KB of inlined JSON and the generators hand-roll cross-page links. Extract sidecar JSON, build a single link helper, and add a size budget.
- 2026-05-08 — Audit zoning/_generator/*.py for embedded JSON blocks; rank by byte size
- 2026-05-22 — Extract cities-table sidecar (largest dashboard block) — proof of concept
- 2026-06-05 — Extract codes-table + counties-table sidecars using the same pattern
- 2026-06-19 — Extract per-city explorer sidecars (313 cities × 2 sidecars = 626 files; 465 KB HTML reduction at build time — actual payload was 5-8 KB per city, not 14+ KB as M1 audit estimated)
- 2026-06-05 — Build a shared link_for(kind, slug) helper and replace hand-rolled links across generators (11 of 74 sites converted; MD5-verified byte-identical output)
- 2026-06-15 — Pull the dashboard's repeated section/card markup into a shared layout helper (all 7 render_* converted; MD5-verified byte-identical output)
- 2026-06-30 — Add a size-budget check to build.mjs that fails CI if v1-v2-completeness.html exceeds 150KB (currently 121 KB)
Test suite — close gaps and pay down debtdone
Owner harness53 · Target 2026-06-30
Audit found `counties/tests/` is orphaned (59 files, 71 failing, 0 CI), `npm run test:zoning` points at a missing venv, half the wired suite hard-fails when dist isn't built (the other half skips), and `schema-baseline.json` permanently accepts 13,413 errors. Shipped: F2/F3/F5/F6 in PR #155, counties waves 2a/2b/2c/3 in PR #155, F11 in PR #156, F8 in PR #157. Schema-baseline ratchet (F4) shipped separately in PR #154.
- 2026-04-25 — Fix `npm run test:zoning` — replace broken `.venv` path with `python3 -m pytest` and document the dep set in tests/README.md
- 2026-04-25 — Make dist-dependent tests consistent — pick skip-on-missing vs fail-on-missing and apply uniformly across `tests/test_link_check.py` and `tests/test_wiki_generators.py` (added `require_dist` helper in conftest with CI=1 → fail promotion; also closes finding F9)
- 2026-04-25 — Add `tests/test_build_gates.py` covering build.mjs dashboard-size budget and atlas/dashboard parity checks (7 tests; budget reads from build.mjs source-of-truth, parity test parametrized per domain so drift is per-domain visible; verified against synthetic drift)
- 2026-04-25 — Add `tests/test_manifest_reconciler.py` — invariant tests for v2-completeness, pending-repair, freshness-queue, district-proposals, overlay-proposals (31 tests; 2 of them are ratchets that capture existing drift — 8 pending-repair entries with stale failed_gates, 14 overlay type_code collisions across canonicals — and only fail if the count grows)
- 2026-04-25 — Triage `counties/tests/` — wave 1: classify each of the 59 files as keep / repair / delete; document in counties/tests/TRIAGE.md
- 2026-04-25 — Triage `counties/tests/` — wave 2a: fix the path-drift root cause that blocks 18 files (added 3 missing symlinks under counties/ops/ to vectors/04, 05, 06 — matches the existing legacy-anchor convention; also unblocks the parallel production-loader bug). Effect: 71 → 7 failing tests in one move.
- 2026-04-25 — Triage `counties/tests/` — wave 2b: geopandas dep (no pyproject.toml change — it's already a counties main dep; the new counties-tests workflow installs via `pip install -e counties/` which pulls geopandas+pandas+requests+shapely transitively)
- 2026-04-25 — Triage `counties/tests/` — wave 2c: rewrote test_docs_sync.py to skip-when-missing for the gitignored BEA/PLACES CSVs and fixed the doc paths to point at counties/vectors/01_federal_static_county_build/docs/ (the actual location after the same reorganization)
- 2026-04-25 — Triage `counties/tests/` — wave 3: new .github/workflows/counties-tests.yml triggers on counties/** changes; runs pytest counties/tests/ -v --durations=20 after pip install -e counties/
- 2026-04-25 — Stop counties tests mutating tracked corpus files — F11 fix in PR #156 (provenance.py: spec_path/raw_path now stored repo-relative; rewrote 30 already-committed manifests in place; 5 regression tests in counties/tests/test_provenance.py)
- 2026-04-25 — Add CI timing summary — F8 fix in PR #157 (--durations=20 on pytest, $GITHUB_STEP_SUMMARY block with total wall time, hard-fail at 480s/600s budgets for zoning/counties workflows respectively)
Enrich API records with platform/vendor/tech metadatadone
Owner harness53 · Target 2026-07-15
The 30 records in zoning/apis/ know the endpoint and auth but not the underlying tech (Socrata vs ArcGIS REST vs CKAN vs custom). Add platform/vendor/query_lang fields and backfill every record.
- 2026-05-08 — Extend zoning/apis/SCHEMA.md with platform, vendor, query_lang, rate_limits, client_libs, docs_url fields
- 2026-05-22 — Backfill all 12 already-shipped APIs with the new fields (WebFetch-verified)
- 2026-06-12 — Backfill the 18 pending APIs with platform/vendor (15 done; 3 bulk-drop records correctly omit platform per schema rule)
- 2026-06-30 — Cross-emit platform fields into per-city overlay records under zoning/overlays/ where source is identifiable
- 2026-07-15 — Add a dashboard counter for 'API records with platform set' so progress is visible
State layer — deepen preemptions + structured rulesdone
Owner harness53 · Target 2026-07-15
Beyond shipping overlay JSONs, raise every state's preemption markdown to ≥800 words and emit a structured preemption-rules JSON so the data is machine-queryable, not just prose.
- 2026-05-10 — Run a word-count audit across zoning/us/<state>/preemptions.md; emit a thin-preemptions manifest
- 2026-05-20 — Define preemption-rules JSON schema (statute, scope, effective_date, carveouts, last_reviewed) + texas pilot
- 2026-06-05 — Deepen the 5 thinnest preemption MDs to ≥800 words with primary-source citations (CT 878, MN 913, MT 1120, OR 1200, NJ 1270; 42 primary-source URLs added; caught 3 fabrications in prior MDs)
- 2026-06-25 — Emit structured preemption-rules JSON for the top 15 states — 16/15 DONE: TX, CA, FL, WA, UT, AZ, CO, MA, NY, GA, IL, VA, NC, OH, MI, PA (89 rules; schema enum expanded from 26 to 46 scope values)
- 2026-07-15 — Cross-link state pages to code-adoption pages from national-coverage-push (bidirectional via generate_state_wiki + generate_code_state_pages)
Atlas — new layers, mobile, deep links, dashboard paritydone
Owner harness53 · Target 2026-07-31
_pages/atlas.html has no owner. Add freshness + code-adoption + preemption-depth layers, fix mobile, add deep-link routing, and couple legend counts to the same manifests the dashboard reads.
- 2026-05-15 — Add a freshness-tier layer (volatile/standard/stable, color-coded) sourced from manifests/freshness-queue.json
- 2026-05-31 — Add a code-adoption layer fed by national-coverage-push's matrix (51/51 states tiered: complete=29, partial=15, sparse=2, none=5)
- 2026-06-15 — Add a state-preemption-depth layer fed by state-deep-dive's word-count audit
- 2026-06-30 — Responsive breakpoints below 720px — sidebar collapses to a bottom sheet
- 2026-07-15 — Deep-link routing — /atlas/?state=tx&county=dallas-county-tx opens the detail panel
- 2026-07-31 — Couple atlas legend counts to the same manifests the dashboard reads, with a parity check in build.mjs (caught a real bug: charleston-sc/wv + rochester-mn/ny were collapsing on short-slug key)