PROCITY/docs/shots
m3ultra c68bba8f32 Lane C round-9 C2: buy-anywhere — pull-and-buy on book spines + toy boxes
Book/toy shelves get pull-and-buy over the SAME wallet; records keep the
deep dig. New stockpack.buildBuyableShelf(): a real shelf is merged,
per-item-ADDRESSABLE meshes — one per atlas (all covers drawn from one
seeded atlas → one draw/shelf), tagged noBatch so batch.js leaves them
intact. Aim a spine/box → pull card (title/author-or-maker/$price/band
from the pack index) → BUY debits the wallet, adds to inventory, and
collapseBuyItem() zero-areas the item's quad in place (removed from the
shelf, no geometry churn). Parody stock → no buy mesh → no card. Fail-
soft per pack; atlasPool() keeps each shelf single-atlas (one draw).

Test page: E interacts (bin→dig, shelf→card) + a #shelfBuy pull card;
shelfBuySoak() buys one item per book/toy seed. Validated: raycast→card
→BUY end-to-end (quad collapses to centre, cash/inventory update),
buy-soak 6/6 collapseOk leak geo0/tex0, ?stock=real draws record 41/
book 58/toy 57 ≤350, drawSweep GLB-off 168/on 344 unchanged, placement
determinism 0 fails, qa --strict GREEN 5/5. Shot: browse_buy_r9.jpg.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-07-15 09:56:21 +10:00
..
before Lane F: integration — interiors + keepers + street peds + QA harness 2026-07-14 14:29:03 +10:00
laneA Lane A round 8: OSM to parity + a second town (Katoomba) — carried R7 brief, full 2026-07-15 04:15:12 +10:00
laneB Lane B round-8: weather (?weather=1) — seeded rain/overcast/clear, exposes PROCITY.weather for D 2026-07-15 02:34:14 +10:00
laneB_r4 Lane B round-4: closed facades (§3.5) + shot poses/letterbox + furniture GLB + novelty_record 2026-07-14 19:59:27 +10:00
laneC Lane C round-9 C2: buy-anywhere — pull-and-buy on book spines + toy boxes 2026-07-15 09:56:21 +10:00
laneD Lane D round-5: chunk-streamed roster (v2) behind ?roster=stream 2026-07-14 21:07:10 +10:00
laneE Lane E round 5 (E3): fal Hunyuan glass_case + bus_shelter + magazine_rack (~$0.64) 2026-07-14 21:20:44 +10:00
laneF Lane F R8: wire town/weather/patronage/buy + graduate harness + new smokes 2026-07-15 09:09:11 +10:00
references Lane F: integration — interiors + keepers + street peds + QA harness 2026-07-14 14:29:03 +10:00
v1_tour Lane F R5 F1: v1.1 — re-capture interior shots on C1 re-map + E1 bake 2026-07-14 21:05:11 +10:00
contact.html Lane F R3: hours/closed-shops + manifest/rig-fleet/?noassets + --depot + QA harness fixes 2026-07-14 17:19:11 +10:00
README.md Lane F: integration — interiors + keepers + street peds + QA harness 2026-07-14 14:29:03 +10:00

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.