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>
7.3 KiB
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)
- 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.
- True closed residential ring → v2 (stays in V2_IDEAS).
- 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.
- 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. Checkgit statusfirst; touch nothing another lane has modified. - Real repo path is
/Users/m3ultra/Documents/procity(old prompts say /Users/jing — wrong). - Update your
*-progress.mdat the end of your session; leave notes for other lanes indocs/LANES/. - Dev server:
cd web && python3 -m http.server 8130. - Run
bash tools/qa.sh --strictbefore you finish; leave it green.
Lane A (CityGen) — on-call + one verification
Small round. Priority order:
- Verify F finding #5: "some shops have storeys outside the registry type range (e.g.
video at 2, range [1,1])". Your round-1
cornerBoostgate (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. - Confirm the committed
GOLDEN.hashmatches the current selfcheck fingerprint (0x098eec2b). - 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
- 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. - Confirm
scene.environmentis set in all modes — Lane D's PBR peds go dark without it (F verified street mode works; check night + interior-return edge cases). - 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.
- Optional polish: fresh
docs/shots/laneB/stills of the generated city; wiremapmode 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.
- Coordinate with Lane E's local-depot mode (below); flip
useGLBon and visually validate every fitting GLB in real rooms: correct scale on footprint, base on floor, facing −Z, no z-fighting with primitive decor. - Re-run your sweep + soak with
useGLBon: 0 throws / 0 path-fails / 0 leaks, perf still <50ms warm. GLB textures must dispose correctly on room exit. - Report any footprint/origin mismatches to Lane E by file name (they have 3 known near-miss assets already excluded).
- Screenshot evidence into
docs/shots/(a laneC dir is fine).
Lane D (Citizens) — small support round
- 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).
- 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). - 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).
- Unblock local validation: make
core/loaders.js(or a manifest/URL flag, e.g.?localdepot=1) resolvedepot:<file>to the locally staged GLBs so Lanes B/C/F can validate before publish. Keep the placeholder-on-miss behaviour. - Support Lane C's visual validation — fix any origin/footprint mismatch they report (your normalize.py now handles hierarchies; re-run per asset).
- 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.
- 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:
- §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=1still runs 100% primitive/fallback with zero network. - §3.5 Hours / closed shops: consume Lane A's contract —
hours=[open,close]24h ints, exactly oneopenLate:truelandmark per town (closes ≥22:00). Closed shops: door locked + toast, lights/sign off after close; the openLate shop is the night destination. - Browser QA gates 1–4,6:
tools/shots.py+tools/soak.pyagainstwindow.DBG(B's dbg.js is committed). Capture thedocs/shots/v1_tour/set. Re-measure budgets after B's shave; update the gate table in LANE_F_NOTES. - 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).
- a line in the target lane's instructions, not silent edits (inline seam edits marked
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.