# PROCITY — Round 20 lane instructions (from Fable, integrator) Date: 2026-07-16 · **v4.0-alpha SHIPPED** (tag on origin, `ddd1e68`). The alpha close was textbook: A's junction-protected Douglas–Peucker + bridge/cull took Katoomba from **105 components → 1** (100% street-metres connected, 0 silently-stranded shops — every drop counted), D re-measured with the R18 harness and confirmed the ruling landed clean (near-crowd on fragments: ~10% → 0%), F landed B's `BIG_CITY` one-liner early exactly as ordered (280k → 12k tris in play) and gated the close, B shipped the town selector with **zero shell seam** (hud.js owns it end-to-end) plus the corner-strip spot-check, C re-soaked 19/19 doors, E stayed cleanly on-call. The money shot is the epoch thesis made real: Katoomba's actual main street — asphalt, zebra crossing, walking crowd, gig posters, PROCITY's look on real bones. All five real-town goldens are pinned. Round 20 is **v4.0-beta: THE FIVE TOWNS** — the two honest alpha findings become the beta's headline (density), the tram gets its ruling, and every real town is proven end-to-end. Tag **`v4.0-beta`** at close. ## The two filed findings that shape this round 1. **Poster density scales with edges, not shops** (A's R19 finding + F's one open budget edge): real Katoomba emits **438 posters** (~14 on synthetic), which reads busy and drives the one matrix breach — `venue_night` at **200,965 tris (+0.5% over the 200k soft ceiling)**. In-play views are fine (121k); this is the stress view. 2. **Real towns are sparse** (F's density note): 19 secondhand shops spread across a whole real town ⇒ a real *street* with life on it, not a retail strip. The vision says "walk the actual main street" — main streets have bakeries, cafes, chemists, clothes shops. We fetch only the thriftgod heritage classes. ## The ledger 1. **Poster cap (A).** Cap spine posters per real town — seeded subsample of the pole run, scaled by shop count not edge count (you own the number; ~2–3× the synthetic feel is the target, not 438). Real-town goldens re-pin (amendment law, one commit); synthetic + gig frozen. This closes F's venue_night edge — tell F to re-measure. 2. **THE DENSITY WIDENING (the beta headline — C rules, E fetches, A absorbs).** Fable's ruling (John veto in Standing): real towns fetch **general retail**, not just secondhand — the main street should hold its real bakery, cafe, chemist, newsagent, clothes shops. Mechanics: - **C publishes FIRST**: the OSM-class → registry-archetype mapping table (e.g. cafe/bakery → `milkbar`, pharmacy/newsagent/clothes → `retail`/`opshop` flavors — C owns which existing archetype each class wears; **no new archetypes this round**, the mapping is the deliverable; your R18 proof says unknowns degrade safely anyway). Publish in LANE_C_PUB (v4-beta marker). - **E re-fetches** with the widened `shop=*` class list (same bbox, raw-cached, one more Overpass pass per town under the standing authorization), maps per C's table, re-emits the five caches (v2, deterministic) + **`web/assets/towns/index.json`** (key, town, state, shop count, roads flag) so B's selector stops hardcoding `REAL_TOWNS`. - **A absorbs the density**: five towns re-run at 3–6× shop count — seating capacity, overflow accounting (`norm.dropped` stays honest), venue placement still lands, goldens re-pin once at the end. If a town's real density overwhelms an edge, widen capacity or split runs — your R18 overflow fence, now load-tested. 3. **The tram ruling (B).** Alpha left the tram on an arbitrary longest-chain (21% of mains). Beta ruling: **route by shop adjacency** — pick the main chain whose edges front the most shops (the actual high street; on synthetic towns this must resolve to the current spine so the goldens/feel don't move). If the shop-adjacent chain reads wrong on any real town, fence the tram per-town instead (the `edges > 200` signal you left ready) and say which towns run it. 4. **Ground polish at real intersections (B).** The R19 spot-check accepted overlap-fill; now the finer pass: acute-angle junctions and z-fighting at the 58 degree-4 intersections. Fix what's cheap, file what's structural (A's lot geometry) with measurements. 5. **Selector polish (B + F).** Derive towns from E's `index.json` (drop the hardcode); F rules the gating (always-on HUD vs `?dbg`) at close — F's call, one line either way. 6. **Interiors across the five (C).** After E's widened caches land: sampled door-soak per town (the R18/R19 harness — every town, sampled doors at the new density, all types resolve, no carve fails, budgets). One table, five rows. 7. **Citizens at density (D).** Re-run the R18 audit on the densest post-widening town: patronage at 3–6× targets, chunk rosters, determinism, identity — and the gig crowd on all five towns' venues (the district gate covers placement; you cover behaviour). Cheap by design — your scaffolds exist. File anything that leaks with measurements. 8. **The beta gate (F, last).** Full five-town matrix on real roads (boot/determinism/budget/ district/noassets/roads per town), the venue_night re-measure post-poster-cap (the +965 edge must close), classic + default gates frozen as ever, selector gating ruling, beta money shot (the densest real main street at golden hour — the retail strip reading), docs (README beta paragraph, notes §20), tag **`v4.0-beta`**, push (standing authorization). ## Laws Charter (V4_REAL_MAP.md) unchanged. Golden discipline this round: real-town goldens re-pin **twice at most** (A's poster cap; A's density absorb — batch them if the timing allows), each under the amendment law; synthetic `0x3fa36874`, gig `0xb1d48ea1`, fixtures — frozen. E's caches stay deterministic (same raw → same cache); the widened fetch is a NEW raw snapshot, committed like the first. Budgets unchanged and now measured at real density — if the widened towns bust them in play (not just stress views), that's a Fable scope call, say so loudly. ## Order **C's mapping table first** (half-day rule — E builds to it), **A's poster cap in parallel** (independent). Then **E** (fetch + re-emit + index), then **A absorbs**, then **B / C / D** verify at density (B's tram + ground items are independent of density — start anytime). **F last.** Handshakes: C→E the table; E→A "caches re-emitted"; A→all "densities absorbed, goldens pinned"; B→F tram verdict + selector; C/D→F density verdicts. ## Standing - **John — the density widening is APPROVED (kickoff, 2026-07-16), with one directive: SUBTLE.** John: "subtle changes are great." Interpretation for C + E: general retail is **texture, not takeover** — the secondhand shops stay the heroes of the town (they're the game). Practically: keep the widened class list tasteful (the everyday main-street staples, not every OSM `shop=*` value); if a real town's retail would drown the secondhand strip visually, E may seed-subsample the texture classes (count it, like every drop). The player should notice the town feels more alive, not that the game changed. FYI standing: tram routes by shop adjacency (B may fence per-town); the selector ships from an index; poster density gets capped. - **v4.0 preview (next round, do not start):** the curated town pack (~15–25 towns through E's pipeline at scale) · the release tour on real streets · docs freeze · the `v4.0` tag. - **Backlog:** instrument LOD · tram tri diet · audioEmitter · flag retirement · awning ripple · editor · multiplayer.