PROCITY/docs/LANES/ROUND3_INSTRUCTIONS.md
m3ultra 862bbcd8de Lane E publish landed: 16 GLBs + thumbs live on 3GOD depot; pipeline fixes
Depot publish executed over the new passwordless tailnet path (allowlist auth,
GOD3_DEPOT=http://100.94.195.115:8788). Two contract bugs fixed en route:
- publish.py: /api/thumb wants JPEG keyed by the GLB name (was posting PNG keyed
  by a .png name -> 404 that mislabelled successful GLB uploads as ERR); thumb
  push now isolated per the MESHGOD house contract (cosmetic, never fails publish).
- validate_manifest.py: send a custom User-Agent (Cloudflare 403s Python-urllib
  on the public path) + honor GOD3_DEPOT override like publish.py.

validate_manifest.py --depot -> 0 errors, 0 warnings. qa.sh --strict all green.
_published.json records the 16 published assets.

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

142 lines
8.8 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. **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` imageGLB (`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 origin~~ **done** (2026-07-14, Fable).
- ~~Run the depot publish~~ **done** (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 8130` http://localhost:8130?seed=20261990.