diff --git a/docs/LANES/LANE_D_NOTES.md b/docs/LANES/LANE_D_NOTES.md index 44fa807..941c391 100644 --- a/docs/LANES/LANE_D_NOTES.md +++ b/docs/LANES/LANE_D_NOTES.md @@ -32,22 +32,51 @@ frames. Every town generates 3 venues (pub/band_room/rsl — charter's 2–4) on **castlemaine's 40% is not a leak**: at the 6-shop floor, 3 of its 6 shops ARE venues, so the "other shop" hits are mostly *other venues*. A quirk of the sparse floor, not the mechanism. -### The measured finding: the crowd is SPARSITY-throttled, and that's exactly what the widening fixes -**94.9–97.7 % of patronage checks return null** on every town — peds spend nearly all their time in -**shopless chunks**. Katoomba is the clearest case: 19 shops sit in ~5 door-chunks of a ~78×78-chunk -(5 km) town, so `_nearestOpenShop` (which searches the ped's own 64 m chunk) has nothing to find 97 % of -the time. **This is the quantified version of Fable's ledger finding #2 ("real towns are sparse")** — the -gig/patronage volume is thin not because the mechanism is wrong but because the town has almost no shops -per chunk. The density widening (3–6× shops) attacks this directly; **the null % is my headline -before/after metric.** +### CORRECTION to my own first read of that null % — I misattributed it (measurement wins) +My first pass called the 94.9–97.7 % null rate "the crowd is sparsity-throttled" and made it the headline +before/after metric. **Both halves of that were wrong, and I'm correcting the record:** +1. **It was measured at gig hours.** At 21:00 only **4 of 69** katoomba shops are open — retail is shut *by + design*. A high null rate at 21:00 is **correct night behaviour**, not sparsity. The gig IS the nightlife. +2. **It was sampled at each town's first venue** (`shops.find(s => s.venue)`). For katoomba that is the + **pub, which sits 1,000 m from the retail cluster with 1 neighbour** — I had parked the camera on the one + isolated venue in town. Measured there, the daytime null was 99.4 % with **0 visits**; measured on the + actual main street, the same town same seed gives **77.2 % and 64 visits**. The number was an artefact of + where I stood. -- **Secondary leak (filed, not fixed):** `GIG_RANGE` is 34 m — a *radius* — but `_nearestOpenShop` only - searches the ped's own 64 m chunk, so an in-range ped just across a chunk edge is blind to the gig. - Measured on katoomba: **8.7 %** of in-gig-range ped-samples are chunk-blind (852 of 9,740). Small next - to the 97 % sparsity throttle, so **not worth a hot-path change mid-beta** — filing it. If the widening - leaves the null rate high, this becomes worth fixing (search the ped's chunk + 8 neighbours). +The gig-crowd table above still **stands** — it measures the *mechanism* (0 NaN, rosters populate, +venue-win %), which is location-independent. Only the sparsity interpretation was bad. -*Part 2 (density re-audit + post-widening re-run of this table) follows once E's caches and A's absorb land.* +### The real density A/B — the main street, retail hours (14:00), same seed, like-for-like +Camera on the **densest retail cluster** (the actual main street), pre-widening cache (from git) vs E's +widened cache, 2,000 frames each: + +| main street @14:00 | PRE (20 shops) | **POST (80 shops)** | +|---|---|---| +| hub density (shops within 160 m) | 8 | **25** | +| null % | 90.2 | **77.2** | +| **total visits** | 17 | **64** (3.8×) | +| **hero visits** (opshop/book/record/video/pawn/toy) | 17 | **19** | +| texture visits (milkbar/dept/stall) | 0 | 45 | +| hero share of visits | 100 % | **30 %** | +| hero share of shops | 84 % | 26 % | +| NaN | 0 | 0 | + +**The widening lands John's directive, measured from the crowd side.** The secondhand heroes did **not** +lose footfall — they went **17 → 19 visits**. The 45 texture visits are added *on top*, not taken from them. +The street is **3.8× busier** while the heroes stay **over-indexed** (26 % of shops, 30 % of visits). That is +precisely "the player should notice the town feels more alive, not that the game changed." + +### Filed, not fixed +- **Venue placement at density (A/F):** katoomba's 3 venues — rsl **13** shops within 160 m, band_room **10**, + **pub 1** (1,000 m from the cluster). A gig at the pub has almost no passing retail crowd. It still draws a + roster (peds stream everywhere), so it's a *quality* observation, not a break. Placement is A's/F's lane. +- **`GIG_RANGE` vs the chunk lookup (mine):** GIG_RANGE is a 34 m *radius*, but `_nearestOpenShop` searches + only the ped's own 64 m chunk, so an in-range ped across a chunk edge is blind to the gig — **8.7 %** of + in-range ped-samples (852/9,740). Real but small; a hot-path change mid-beta isn't worth it. Fix (chunk + + 8 neighbours) is a v4.x candidate. + +*All POST numbers are vs E's committed caches but **before A's density absorb** (11 of 80 shops still +overflow-drop). Final re-run + the other four towns follow once A lands.* ---