PROCITY/docs/LANES/ROUND3_INSTRUCTIONS.md
m3ultra 5485d67ae8 Lane F R5 start: archive R3/R4 instruction claims + v2 flags table + v1.1 watch
- ROUND3/ROUND4_INSTRUCTIONS.md: 'SUPERSEDED by R5' banner (F4 archive task).
- LANE_F_NOTES §10: round-5 tracking — v2 flag-seam table (?plansrc/?winmap/?dig/?roster,
  all pending owning-lane specs), v2 QA-harness plan, v1.1 watch.
- F-progress: round-5 section. Confirmed fal already un-parked at 039c179 (no F change needed).
- v1.1 tag is on watch for Lane C re-map (C1) + Lane E hero-prop bake (E1).

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-07-14 20:48:19 +10:00

9.0 KiB
Raw Permalink Blame History

PROCITY — Round 3 lane instructions (from Fable, integrator)

⚠ SUPERSEDED by ROUND5_INSTRUCTIONS.md (2026-07-14). Rounds 34 are complete — v1.0 tagged. Historical reference only; do not action.

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. The depot publish is DONE (2026-07-14): all 16 GLBs + thumbs live on 3GOD, verified validate_manifest.py --depot → 0 errors. The depot is now reachable passwordless over tailnet from allowlisted boxes: GOD3_DEPOT=http://100.94.195.115:8788 (this box 100.89.131.57 is allowlisted; GOD3_PW only needs any non-empty placeholder). Public digalot.fyi/3god stays read-only+locked. Gotchas fixed in the pipeline scripts: /api/thumb wants JPEG keyed by the GLB name; Cloudflare 403s the Python-urllib user-agent. Lane F: add --depot to the qa.sh manifest gate now.
  5. Hero props: free-first on MODELBEAST — the local path is READY, no setup needed. The round-2 "HF-gated, setup needed" note is stale: sf3d (3.7 GB) and TRELLIS.2-4B (14 GB) weights are already cached on this box with working venvs. Do not spend the ~$2.70 fal.ai batch up front; it's the fallback for local rejects only.

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) — hero props on MODELBEAST + local depot mode

Publish is authorized but John runs it himself (GOD3_PW): record the per-asset provenance list in AUDIT.md first, then hand him the two-liner. Your new headline task:

  1. Hero props, free, on-device. The meshgod_batch.json gap list (glass case, fridge, till, listening booth, …) now goes through MODELBEAST instead of fal.ai: gen_skins.py-style concept images via flux_local (proven on the facades) → trellis_mac image→GLB (1024_cascade, ~35 min/gen; use sf3d for seconds-fast drafts to iterate the concept image before committing to a TRELLIS run) → normalize.py house law → thumbnails → manifest. Weights are already cached (verified 2026-07-14); both operator venvs exist under ~/Documents/MODELBEAST/server/operators/. Eyeball every thumbnail; anything unusable after 2 local attempts goes on the fal.ai fallback list (still gated, ask John — budget ≤$2.70 total). First check the DealGod cache / depot for reuse (cash-register + glass-case may exist).
  2. 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/without the depot. Keep the placeholder-on-miss behaviour.
  3. Support Lane C's visual validation — fix any origin/footprint mismatch they report (your normalize.py now handles hierarchies; re-run per asset).
  4. 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.

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 origindone (2026-07-14, Fable).
  • Run the depot publishdone (2026-07-14, John + Fable, via the tailnet path).
  • fal.ai spend: only if MODELBEAST hero-prop rejects need it (≤$2.70, per-prop go).
  • A real pointer-lock playtest (after the current Opus round, per John) — cd web && python3 -m http.server 8130http://localhost:8130?seed=20261990.