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

7.3 KiB
Raw Blame History

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 8130http://localhost:8130?seed=20261990.