diff --git a/docs/LANES/LANE_B_NOTES.md b/docs/LANES/LANE_B_NOTES.md index 4bd89fc..92b97d4 100644 --- a/docs/LANES/LANE_B_NOTES.md +++ b/docs/LANES/LANE_B_NOTES.md @@ -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 m–1303 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 **50–52 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 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