96 lines
7.1 KiB
Markdown
96 lines
7.1 KiB
Markdown
# 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).
|