Follow a ped into a shop and find them browsing. D owns occupancy truth; C owns browse points;
F wires the handoff. Validated end-to-end in-shell (?stock=real). qa --strict GREEN; v1 untouched.
Occupancy (D1): patronage records who's inside which shop by shopId. New
citizens.occupancyOf(shopId) -> {count, occupants:[{seed,enteredAt,pedIndex}]} (pedIndex = the
exact ped who ducked in, for identity continuity). Cleaned on emerge/chunk-drop/stream-toggle.
Deterministic: 17 shops + occupants byte-equal across two runs (fixed a stale-occupancy leak on
stream toggle).
Browsers: keepers.js gained browse:true (faces the shelf via ry, no player-greet) + pedIndex +
seedKey. Each = a merged ped ~1 draw. 12 enter/exit cycles: count == min(occupancy,3) 12/12,
worst 61 draws <=350 (C's headroom holds), leak-free (0 GPU delta after warmup), disposed every
exit via keepers.disposeAll().
Consistency (D2): inside peds hidden on the street (0 rendered), re-emerge at the door.
F handoff verified by running F's exact interior_mode wiring (enter -> occupancyOf ->
browsePoints.slice(0,min(count,3)) -> keepers.spawn). index.html setShops door points need
shopId:s.id added. Closing-time handled by the dwell model (pending A's explicit ruling).
Evidence: docs/shots/laneD/r9_browsers_in_shop.jpg. Changed sim.js + keepers.js + test page.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
|
||
|---|---|---|
| .. | ||
| before | ||
| laneA | ||
| laneB | ||
| laneB_r4 | ||
| laneC | ||
| laneD | ||
| laneE | ||
| laneF | ||
| references | ||
| v1_tour | ||
| contact.html | ||
| README.md | ||
docs/shots — visual regression + devlog reference tree
Owned by Lane F (each lane also drops its own acceptance screenshots here).
docs/shots/
laneA/ … A: 5 seeds rendered in map.html (spine, arcade, market, milkbars)
laneB/ … B: 3 fixed street cameras (P-key shot harness)
laneC/ … C: 9 types × 5 archetypes interior grid
laneD/ … D: near / mid tiers + busy main street
laneE/ … E: skin contact sheets (new skins vs originals)
v1_tour/ … F: the 10 beauty shots (see tools/shots.py TOUR) — the devlog set
before/ … F: last known-good capture, for side-by-side regression
references/ … real-world reference photos named per shot (street_noon.jpg, arcade.png, …)
contact.html … generated by tools/shots.py — this-run | before | reference
Capture (Lane F, once Lane B's shell + window.DBG hook land)
cd web && python3 -m http.server 8130 # terminal 1
python3 -m venv tools/.venv # once
tools/.venv/bin/pip install playwright
tools/.venv/bin/python -m playwright install chromium
tools/.venv/bin/python tools/shots.py v1_tour --seed 20261990 # terminal 2
open docs/shots/contact.html
Before a risky change, snapshot the good state into before/
(tools/.venv/bin/python tools/shots.py before), then re-run and eyeball contact.html.
The v1 tour list (LANE_F_INTEGRATION §Shots): main-street noon, arcade, market square,
milkbar dusk, night neon, warehouse fringe, residential collar, record interior, opshop
interior, busy crossroads. Adjust TOUR in tools/shots.py as the town evolves.