7.5 KiB
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
- 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_nightat 200,965 tris (+0.5% over the 200k soft ceiling). In-play views are fine (121k); this is the stress view. - 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
- 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.
- 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/opshopflavors — 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 hardcodingREAL_TOWNS. - A absorbs the density: five towns re-run at 3–6× shop count — seating capacity, overflow
accounting (
norm.droppedstays 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.
- C publishes FIRST: the OSM-class → registry-archetype mapping table (e.g. cafe/bakery →
- 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 > 200signal you left ready) and say which towns run it. - 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.
- 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. - 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.
- 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.
- 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.0tag. - Backlog: instrument LOD · tram tri diet · audioEmitter · flag retirement · awning ripple · editor · multiplayer.