# PROCITY — Round 19 lane instructions (from Fable, integrator) Date: 2026-07-16 · **R18 verdict: the alpha did exactly what the charter asked — it surfaced the failure list. NOT yet tagged, and correctly so.** A shipped schema v2 + the graph lift (proven on synthetic irregular geometry) but the A→E→A finalization never fired — E's katoomba roads landed after A's commits, so the real-roads golden is unpinned and the lift is unhardened against real data. B/C/D audited against E's landed data anyway (right call) and the audits are excellent: **B** — the streetscape is road-agnostic, real Katoomba boots 0-error and reads well, but the `BIG_CITY` heuristic misfires (20 shops < 120 ⇒ small-town streaming on a 799-edge/5 km graph ⇒ **280k tris, breaching the 200k gate**; proven one-line fix). **D** — the sim needs zero changes (1M+ samples, 0 NaN, byte-identical rerun), but the real graph is **105 disconnected components** (42% of street-metres on islands, 2 shops stranded, ~10% of near-crowd wandering fragments), with the DP-collinear junction-drop independently confirmed by B and D as a contributing mechanism. **C** — 20/20 real doors build valid interiors. **E** — 484 real streets in schema v2 + the other four towns as data, plus a poster-clearance finding filed for A. F never ran — its gate would have failed on the budget breach + unpinned golden, so nothing was mis-skipped. This is the alpha working as designed: surface, measure, file. Round 19 is **the ALPHA CLOSE** — A resolves the filed findings and finalizes, F applies the budget fix and gates, D re-measures, and the tag lands. Tag **`v4.0-alpha`** at close. ## The ledger 1. **A — the finalization (the round's spine; everything hangs off you).** a. **The fragmentation ruling (D's finding — Fable rules, you own the details):** the town is the **main component plus joined near-fragments; far shopless islands are CULLED.** Concretely: (i) protect junction/shared-snap points from Douglas–Peucker (the collinear junction-drop B and D both hit — simplify *between* junctions, never through them); (ii) join fragments within a snap/mid-edge-split tolerance (D measured 9 islands <10 m, 20 <30 m — pick the tolerance and defend it); (iii) cull remaining islands **unless they hold a shop** — a stranded shop is always either connected (nearest-edge connector) or explicitly dropped with a count in `norm.dropped`. Rationale: bbox-clipped periphery is noise, and 42% dead street-metres waste streaming budget (it's half of B's tris problem). b. **E's poster-clearance finding** (LANE_E_NOTES §18) — resolve it in the same hardening pass. c. **Harden against real katoomba** (the deferred A→E→A leg), verify the R18 failure-list items you predicted (overflow drop — did Katoomba keep all 20 shops? crossing-without- shared-node — did any survive into the graph?), **pin `katoomba_real`'s real-roads golden**, and fire the handshake. d. **Sweep + pin the other four towns** (E's data is already in) — beta pull-forward that costs you one loop now and saves a round later. Any town whose real data breaks the lift: file it, fence it, don't force it — katoomba alone gates the tag. 2. **F — B's `BIG_CITY` fix + the alpha gate (last).** a. The one-liner is yours (`index.html`): extend the heuristic to the graph — `plan.shops.length > 120 || (plan.streets?.edges?.length || 0) > 200` (B proved the effect: 280k → 104k tris at the venue block, 72 draws). Land it early so D/B re-measures see it. b. The gate, after A: town-matrix roads dimension (katoomba_real real-roads: boot/determinism/budget/district/noassets-fallback), classic + default-boot gates untouched, budgets on the busiest real block post-fix. c. **The money shot:** an uncommitted `docs/shots/v4_alpha/katoomba_mainstreet.png` is sitting in the tree (almost certainly B's audit evidence — verify provenance in B's notes). Reshoot deterministically via the tour harness for the official shot, commit both or supersede. d. Docs (README "real towns" paragraph, LANE_F_NOTES §18/§19 honest record incl. why F correctly didn't run in R18), tag **`v4.0-alpha`**, push (standing authorization). 3. **D — re-measure after A's connectivity pass.** The same audit table, post-fix: component count, % street-metres in the main net, stranded shops (must be 0 or explicitly dropped), % near-crowd on fragments (should collapse toward 0). One table, one verdict line. Your R18 crafted-irregular-town scaffold makes this cheap — that's why you built it. 4. **B — the town selector (beta pull-forward, NON-blocking for the tag).** A small in-game town picker (HUD/debug-menu grade, not a title screen): synthetic + fixtures + real towns (`osmTownKeys()` + registered caches), selecting navigates to the right URL params. Your HUD/dbg territory; document any shell seam for F rather than editing `index.html` (F owns it). If A's pass or F's gate needs your re-measure (tris post-cull, strips at tight corners — A's failure-item #3 asked you to audit corner strips with a measurement), that comes first. 5. **C — on-call.** Your alpha work is done (20/20). If A's connectivity pass moves lots, a one-loop re-run of the katoomba door soak confirms nothing regressed. 6. **E — on-call.** Re-emit caches only if A's junction handling needs different data (e.g. pre-DP full geometry is already shipped — likely nothing). Your data discipline this epoch has been faultless; nothing else asked. ## Laws Charter laws (V4_REAL_MAP.md) unchanged. This round's golden rules: `katoomba_real`'s golden is UNPINNED until A pins it (so A's connectivity work is free to iterate — pin once, at the end); the four other towns' goldens pin with A's sweep; synthetic/fixtures/classic/default remain frozen — the alpha changed nothing outside the cache-schema path, and the gate proves it. ## Order **F's one-liner first** (independent, unblocks honest re-measures) and **A's finalization in parallel** (the long pole). Then **D re-measures**, **C spot-confirms**, **B's selector** rides alongside. **F gates last** once A pins and D confirms. Handshakes: A→all "katoomba_real real roads, golden pinned, findings resolved"; D→F "fragmentation verdict post-fix"; B→F "selector seam" (if any). ## Standing - **John — nothing blocks this round.** FYI: Fable ruled on the fragmentation (main component + joins, cull shopless islands) — it's a town-quality call; overrule if you'd rather keep the full clipped periphery. The tag lands as `v4.0-alpha` at close. - **v4.0-beta preview (next round, do not start):** all five towns proven end-to-end on real roads (A's pins land this round — beta becomes verification + polish) · the town selector wired + polished · tram ruling on real graphs (route-by-shop-adjacency vs fence) · D's spawn-bias mitigation if any fragmentation survives A's pass. - **Backlog:** unchanged (instrument LOD · tram tri diet · audioEmitter · flag retirement · awning ripple · editor · multiplayer).