diff --git a/docs/LANES/ROUND20_INSTRUCTIONS.md b/docs/LANES/ROUND20_INSTRUCTIONS.md new file mode 100644 index 0000000..7ba5b89 --- /dev/null +++ b/docs/LANES/ROUND20_INSTRUCTIONS.md @@ -0,0 +1,100 @@ +# 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 — one ruling to veto (kickoff):** the density widening (ledger #2) — real towns will + gain their real cafes, bakeries, chemists etc. as enterable shops wearing existing interior + archetypes. It changes the texture of real towns from "secondhand crawl" toward "real main + street" (the charter's vision). Veto or trim the class list before C/E start if you want the + towns to stay pure-secondhand. FYI: 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.