Wave 0 · Run in integrator space (recommended) or its own agent · Spec §4, §5, §6, §9.2–§9.3 · Decisions D7–D10, D13 · Unblocks L05, L07–L16
Pin every interface two lanes share, with executable examples, so downstream lanes build in parallel against fixtures and mock data instead of waiting.
contracts/README.md: index; number and date formatting rules shared by findings.py and format.js; shape of validation_summary.json; how nulls are representedcontracts/metrics.md: one row per metric file (name, params, grain, output columns and types, source tables, questions)contracts/site/*.example.json: one per SPEC §9.2 file (a single example zone file)contracts/site/pages.yaml: route → data files it loads; methods-page anchorstests/factories.py: builders for unified clean trips (SPEC §4, §4.1, §4.2) and every aggregate table (SPEC §5 plus agreed D7–D10), with defaults and per-row overridestests/contract_check.py: assert_matches_contract(actual, example) checking keys, types and array element shape (no new dependency)tests/test_contracts.pyscripts/make_mock_site_data.py: writes contract-shaped mocks (all 263 zones) to site/src/data/ with as_of_month: "MOCK"; run by make site-mockairports.json, congestion.json, drivers.json and prices.json (one key per chart)title and a subtitles map (one finding per chart), so page markdown carries no numbersYYYY-MM-01trip_share, driver_share, fare_rates, fare_dist, price_volatility, wait_time, pay_per_hour, trips_per_hour_worked, tip_rate, wav_match_rate, shared_match_rate, fee_revenue, airport_share, airport_fares, zone_share_change, cp_effect, pay_event#cleaning, #flags, #cbd-zones, #validation, #congestion-method, #pay-rise-method, #tips, #waits, #limits, #downloadsmake site-mock fills site/src/data/tests/test_contracts.py greenOnly this lane writes here. Newest first.
| Date | State | Note |
|---|---|---|
| not started |
Blocked: none
Hand-off