PROCITY/docs/LANES/ROUND3_INSTRUCTIONS.md
m3ultra 90bd06c328 Fable (integrator): round-3 lane instructions + archive round-1 lane prompts
Round-2 close-out: all lane work landed on main (C keeper-stand re-land, B streetscape,
F integration), stray lane-c/keeper-stand branch deleted (content identical), QA strict
green. ROUND3_INSTRUCTIONS.md assigns the polish/validation round: F leads (manifest
+ hours + QA gates), B shaves the spawn draw budget, C+E validate the GLB path via a
local depot mode, A verifies one stale finding, D supports. priorwork/ archives the
original per-lane prompts.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-14 14:30:36 +10:00

124 lines
7.3 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# PROCITY — Round 3 lane instructions (from Fable, integrator)
Date: 2026-07-14 · Written after all six lanes finished round 2 and Lane F's first two
integration passes landed. Repo state as of these instructions: **everything committed on
`main`**, `tools/qa.sh --strict` **GREEN** (4/4 gates, selfcheck 1283/1283, manifest 0 errors).
## Where we are
v1 is **integrated and playable**: the game boots on Lane A's generated town (seed 20261990 →
"Boolarra Heads", 493 shops), Lane B streams/renders it under budget, doors enter Lane C
interiors, Lane D keepers greet at counters and peds walk the streets, Lane E's 48 facades +
manifest are live, Lane F's bridge + QA harness tie it together. What remains is **polish,
validation, and the last two integration steps** (LANE_F_NOTES §3.4/§3.5).
## Integrator decisions (so nobody blocks on them)
1. **Retail density stays at ~493 shops/core.** Lane B's facade atlas got the worst view to
~261 draws with citizens; no need to thin the town for v1.
2. **True closed residential ring → v2** (stays in V2_IDEAS).
3. **F finding #4 (doubled possessives) is CLOSED** — verified 0 across 2,418 shop names /
5 seeds on current main. It predated Lane A's round-1 fix.
4. **Depot publish and the ~$2.70 MeshGod hero batch remain gated on John** — do not publish,
do not spend. Local validation paths below unblock everything else.
## Process rules (unchanged, they matter)
- Lanes share ONE working tree. Never bare `git add .` / `git commit -a`. Stage **only your
files by exact path** and commit immediately. Check `git status` first; touch nothing
another lane has modified.
- Real repo path is `/Users/m3ultra/Documents/procity` (old prompts say /Users/jing — wrong).
- Update your `*-progress.md` at the end of your session; leave notes for other lanes in
`docs/LANES/`.
- Dev server: `cd web && python3 -m http.server 8130`.
- Run `bash tools/qa.sh --strict` before you finish; leave it green.
---
## Lane A (CityGen) — on-call + one verification
Small round. Priority order:
1. **Verify F finding #5**: "some shops have storeys outside the registry type range (e.g.
video at 2, range [1,1])". Your round-1 `cornerBoost` gate (registry max ≥ 2) may already
have fixed it — prove it on current main across ≥5 seeds. If real, fix + add a selfcheck
assertion; if stale, mark it closed in A-progress.
2. Confirm the committed `GOLDEN.hash` matches the current selfcheck fingerprint (`0x098eec2b`).
3. Otherwise standby: answer contract questions from F's §3.5 hours work (your `openLate` /
`hours=[open,close]` contract is about to get its first real consumer).
## Lane B (Streetscape) — draw-budget shave + hooks
1. **F finding #3 (the one open budget item): ~334 draws at spawn with radius 3.** Your
radius-2 auto measure is ~261. Make the compliant configuration the default at spawn
(radius 2 auto, or more merging if you'd rather keep 3) and re-measure the worst
continuous-walk view **with citizens at pop 140** via `window.DBG`. Target: ≤300
everywhere, documented in LANE_B_NOTES.
2. **Confirm `scene.environment` is set** in all modes — Lane D's PBR peds go dark without it
(F verified street mode works; check night + interior-return edge cases).
3. Support F's §3.4: when the manifest GLB upgrade lands, verify street furniture GLBs
(benches, streetlight, food cart) place on their manifest footprints without collision
regressions.
4. Optional polish: fresh `docs/shots/laneB/` stills of the *generated* city; wire `map` mode
to Lane A's map.html.
## Lane C (Interiors) — GLB path visual validation
Your `glb.js` path is wired but never seen pixels. Lane E's 16 normalized GLBs exist locally
in `pipeline/_normalized/` — you don't need the depot publish.
1. Coordinate with Lane E's local-depot mode (below); flip `useGLB` on and **visually validate
every fitting GLB in real rooms**: correct scale on footprint, base on floor, facing Z,
no z-fighting with primitive decor.
2. Re-run your sweep + soak with `useGLB` on: 0 throws / 0 path-fails / 0 leaks, perf still
<50ms warm. GLB textures must dispose correctly on room exit.
3. Report any footprint/origin mismatches to Lane E by file name (they have 3 known near-miss
assets already excluded).
4. Screenshot evidence into `docs/shots/` (a laneC dir is fine).
## Lane D (Citizens) — small support round
1. When F's §3.4 fleet upgrade lands, verify keepers upgrade from placeholder to shared GLB
rigs and remain leak-free over enter/exit cycles (your dispose contract, F's loop).
2. Wire/document `ImpostorLayer.setExposure()` to the shell's day/night segment so mid-tier
billboards match rigs at dusk (one paragraph + one verified call site with F).
3. Write the **chunk-streamed roster design note** (keyed `chunkKey+i`, stream with Lane B's
chunk build/dispose) design only, no implementation; it's the v1.5 fix for big-town
street emptiness.
## Lane E (Assets) — local depot mode + near-misses
Publish stays gated (needs `GOD3_PW` + provenance recording John's call).
1. **Unblock local validation**: make `core/loaders.js` (or a manifest/URL flag, e.g.
`?localdepot=1`) resolve `depot:<file>` to the locally staged GLBs so Lanes B/C/F can
validate before publish. Keep the placeholder-on-miss behaviour.
2. Support Lane C's visual validation fix any origin/footprint mismatch they report
(your normalize.py now handles hierarchies; re-run per asset).
3. Optional: manual Blender re-origin pass on the 3 near-misses (garage_shelves, radiogram,
market_stall) if C wants more variety; otherwise leave to primitives.
4. Have the publish command + per-asset provenance list **staged and documented** so the
moment John says go it's a 5-minute job.
## Lane F (Integration) — lead lane this round
Priority order, per your own §3 plan:
1. **§3.4 Manifest + `?noassets`**: GLB upgrades from manifest.json through B (street
furniture) and C (`useGLB`), using E's local-depot mode; includes the **rig-fleet upgrade**
so keepers/peds share GLB meshes (then try raising `?pop=`). Verify `?noassets=1` still
runs 100% primitive/fallback with zero network.
2. **§3.5 Hours / closed shops**: consume Lane A's contract `hours=[open,close]` 24h ints,
**exactly one `openLate:true` landmark per town** (closes 22:00). Closed shops: door
locked + toast, lights/sign off after close; the openLate shop is the night destination.
3. **Browser QA gates 14,6**: `tools/shots.py` + `tools/soak.py` against `window.DBG`
(B's dbg.js is committed). Capture the `docs/shots/v1_tour/` set. Re-measure budgets after
B's shave; update the gate table in LANE_F_NOTES.
4. Keep the findings table current; anything cross-lane goes through a note in `docs/LANES/`
+ a line in the target lane's instructions, not silent edits (inline seam edits marked
`[Lane F integration]` are fine where they're your seam).
## Needs a human (John)
- **Push to origin** main is now 10 commits ahead of origin/main (only the scaffold is pushed).
- **Depot publish go/no-go** (needs `GOD3_PW`; E will have it staged).
- **~$2.70 MeshGod hero-prop batch** go/no-go (pure polish; primitives cover everything).
- **A real pointer-lock playtest** automation can't engage pointer lock;
`cd web && python3 -m http.server 8130` http://localhost:8130?seed=20261990.