Wave 3 · Phase 3–4 · Spec §9.2, §11 (phase 3), CLAUDE.md “Language on the site” · Feeds L12–L17
make publish turns metric outputs into the contract files the site reads, including every title, subtitle and finding sentence, all generated from computed values and never typed.
pipeline/publish.py, pipeline/findings.py, tests/test_publish.py, tests/test_findings.pysite/src/data/** (real data only)pipeline.metrics; shape each file exactly to contracts/site/; as_of_month and generated_at on every filevalidation_summary.json passes. --dev writes locally with "validated": false, which deploy refusestaxi_zones.simplified.geojson; zone files 1–263 each under 50 KB; thin zones produce nulls, not errorsfindings.py: one builder per question (Q1–Q15), plus page titles and chart subtitles. Numbers formatted per contracts/README.md. Language: “estimated effect”; “per hour with a passenger”; taxi tips “card-only”make publish writes every contract fileOnly this lane writes here. Newest first.
| Date | State | Note |
|---|---|---|
| not started |
Blocked: none
Hand-off