Lane B round 18 (v4.0-alpha REAL ROADS): irregular-geometry audit (ledger #4) — the failure list

Audited katoomba_real on E's real roads (schema v2, 484 OSM ways -> 799-edge/872-node graph, 126 real
intersections, edges 3.5m-1303m incl 28 short <12m, ~4x5km span). E's roads landed mid-audit; verified
fresh Chromium, cache-busted. Docs-only (no code change: streetscape is road-agnostic).

VERDICT: Lane B streetscape is ROAD-AGNOSTIC — boots real Katoomba 0-error, every B system builds and
renders on the irregular graph (ground, furniture 39 chunks/148 trees, town-wide pools, tram, chunk
streaming, buildings, wind). Real main street reads well (road+footpath+lamps+working gig poster+citizens).
Like C's interiors, needed no code change to eat real geometry.

FINDING -> F (gate-blocking, PROVEN one-line fix): the BIG_CITY adaptive heuristic misfires on real roads.
index.html BIG_CITY = plan.shops.length>120 -> Katoomba has 20 shops(<120) but 799 edges/5km, so it stays
small-town mode (radius 3 + shadows ON), streams 50-52 chunks -> busiest venue block ~280k tris (clean,
settled) = BREACHES 200k gate (draws 150 <300). Proven fix: ?r=2&shadows=0 (BIG_CITY mode) -> 84k day /
104k night, 20 chunks, 72 draws, well under. Recommend: BIG_CITY = shops>120 || edges>200 (catches
Katoomba's 799, leaves synthetic Boolarra's 22). B's R3 adaptive-streaming concept, edge-count not shop-count.

Tram (Fable's flagged spine risk): degrades gracefully, no crash. spinePolyline runs one main chain =
3527m/49 edges = 21% of 232 mains (longest walkable chain). Arbitrary-but-functional for alpha; smarter
route or hard fence = beta (no plan.mode marker exposed to fence off; didn't add untested fencing).

Furniture/pools scale: town-wide pools ~4989 instances = still ~1 draw; 28 short edges get 0 lamps
(graceful). Correction: the disconnected graph I first saw was a synthetic-fixture DP artifact (junction
vertices dropped on near-collinear ways) — real Katoomba forms 126 intersections correctly; flagged to A.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
m3ultra 2026-07-16 16:35:55 +10:00
parent 10db373e67
commit d4fcf68860

View File

@ -1,5 +1,58 @@
# LANE B — NOTES (measured)
## Round 18 (Fable's ROUND18 → Lane B) — irregular-geometry audit (ledger #4, v4.0-alpha REAL ROADS)
**The deliverable is the failure list.** Audited `katoomba_real` on E's real roads (schema v2, **484 OSM
ways → a 799-edge / 872-node graph, 126 real intersections** (99 deg-3, 27 deg-4), edges **3.5 m1303 m
(28 short <12 m)**, span **~3945 × 4944 m**). E's roads cache landed mid-audit; verified fresh Chromium,
cache-busted (the shell force-caches town JSON).
### Verdict: Lane B's streetscape is ROAD-AGNOSTIC — it consumes the CityPlan graph generically and survives
Real Katoomba boots with **0 page errors**; every B system builds and renders on the irregular graph —
ground strips, furniture (39 chunks / 148 trees), town-wide pools, tram, chunk streaming (`chunks.count`
scales), buildings, wind. The real main street reads well (road + footpath + streetlamps + a working gig
poster + citizens; `docs/shots` — the Screaming Utes bill renders on real bones). Like C's interiors, the
streetscape needed **no code change** to eat real geometry. The real risks are elsewhere (below).
### FINDING → F (gate-blocking, proven one-line fix): the `BIG_CITY` adaptive heuristic misfires on real roads
`index.html` sets `BIG_CITY = plan.shops.length > 120` → radius + shadow-pass. Real-roads towns invert
the assumption: Katoomba has **20 shops (< 120)** but a **799-edge / 5 km** graph, so it stays small-town
mode (**radius 3 + sun-shadow ON**) and streams **5052 chunks** → the busiest venue block hits
**~280k tris (clean load, settled) — BREACHES the 200k gate** (draws 150, still < 300).
**Proven fix** — boot with `?r=2&shadows=0` (= what BIG_CITY mode would give): venue block drops to
**84k tris day / 104k night, 20 chunks, 72 draws** — comfortably under. **Recommend**: extend the
heuristic to the graph, e.g. `BIG_CITY = plan.shops.length > 120 || (plan.streets?.edges?.length||0) > 200`
(catches Katoomba's 799; leaves synthetic Boolarra's 22 untouched). One line, index.html; the concept is
B's adaptive-streaming (LANE_B_NOTES R3) extended from shop-count to edge-count. This is the charter's
mega-strip/density risk in Lane B's budget.
### Tram (spine assumption — Fable's flagged risk): degrades gracefully, no crash — fence-ready, not fenced
`spinePolyline` walks one main chain from a degree-1 node. On real Katoomba (232 main edges) it runs a
**3527 m / 49-edge chain = 21% of mains** (the longest walkable chain — plausibly the real main road);
the other mains form other chains with no tram. **No crash**, deterministic, ≤2 draws as ever. Arbitrary-
but-functional for the alpha. A smarter route (pick the shop-adjacent chain) or a hard fence (tram off on
real-roads towns) is a **v4.0-beta** call — no clean `plan.mode` marker is exposed to key a fence off, so
I did **not** add untested fencing this round (alpha philosophy: surface + document). Fence-ready via the
same `edges.length > 200` signal if beta wants it.
### Furniture / pools scale to real geometry (no break)
Town-wide pools = **~4989 instances** on Katoomba (all in the ONE InstancedMesh → still **~1 draw**;
built upfront, fogged beyond the streaming radius). Lamp cadence = ~4906 town-wide. **28 short edges
(<12 m) get 0 lamps** (the `for(s=8; s<len-4; …)` loop graceful sparsity, not a crash). No fix needed.
### Correction — the "disconnected graph" I first saw was a SYNTHETIC-FIXTURE artifact, NOT real Katoomba
Stress-testing A's `selfcheck` roads fixture first (before E's real cache landed) produced a **fully
disconnected graph** (4 edges / 8 nodes / all deg-1 / 0 intersections) — DouglasPeucker flattened its
near-collinear coordinates and dropped the junction vertices. **Real Katoomba does NOT have this**
(126 intersections form correctly). So it's a fixture-degeneracy note, not a real-town finding — but
worth flagging to A that DP can drop junctions on near-straight ways (charter risk #4, fidelity).
### For F's alpha gate (assertion list, all green on real Katoomba except the budget finding)
boots 0-error · graph has real intersections (deg ≥ 3 present) · my modules all build · budget **needs
the BIG_CITY fix** (else 280k > 200k at the venue block; with it, 104k) · tram no-crash · pools ~1 draw.
---
## Round 17 (Fable's ROUND17 → Lane B) — wind sway SHIPS (ledger #5, parked since R7)
**Verdict: SHIPPED, not killed.** The R7 park reason ("touches shared materials") was tested against