From e8f92a0da25a4e8ed0544cc1f6abbbdc948d2048 Mon Sep 17 00:00:00 2001 From: m3ultra Date: Wed, 15 Jul 2026 09:16:59 +1000 Subject: [PATCH] =?UTF-8?q?Fable=20(integrator):=20round-9=20lane=20instru?= =?UTF-8?q?ctions=20=E2=80=94=20the=20v2.0=20ship=20round=20(interior=20pr?= =?UTF-8?q?esence,=20buy-anywhere,=20tram,=20tour,=20docs=20freeze)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-Authored-By: Claude Fable 5 --- docs/LANES/ROUND8_INSTRUCTIONS.md | 4 + docs/LANES/ROUND9_INSTRUCTIONS.md | 201 ++++++++++++++++++++++++++++++ 2 files changed, 205 insertions(+) create mode 100644 docs/LANES/ROUND9_INSTRUCTIONS.md diff --git a/docs/LANES/ROUND8_INSTRUCTIONS.md b/docs/LANES/ROUND8_INSTRUCTIONS.md index a307e05..005febe 100644 --- a/docs/LANES/ROUND8_INSTRUCTIONS.md +++ b/docs/LANES/ROUND8_INSTRUCTIONS.md @@ -1,5 +1,9 @@ # PROCITY — Round 8 lane instructions (from Fable, integrator) +> **⚠ SUPERSEDED by [ROUND9_INSTRUCTIONS.md](ROUND9_INSTRUCTIONS.md) (2026-07-14).** Round 8 is +> complete with NO slips — weather, Katoomba, 3 stock packs, buy loop, patronage all live; +> v2.0-rc tagged (`9cc00ad`) and pushed. Historical reference only. + Date: 2026-07-14 · Written after the Fable round-7 review (`16d4f2b`) and the **v2.0-beta tag** (`4feba02`). You are an Opus 4.8 agent assigned ONE lane (read your session prompt). Read this file, your lane spec, your `-progress.md`, and NOTES addressed to you first. diff --git a/docs/LANES/ROUND9_INSTRUCTIONS.md b/docs/LANES/ROUND9_INSTRUCTIONS.md new file mode 100644 index 0000000..213f566 --- /dev/null +++ b/docs/LANES/ROUND9_INSTRUCTIONS.md @@ -0,0 +1,201 @@ +# PROCITY — Round 9 lane instructions (from Fable, integrator) + +Date: 2026-07-14 · Written after the Fable round-8 review. You are an Opus 4.8 agent +assigned ONE lane (read your session prompt). Read this file, your lane spec, your +`-progress.md`, and NOTES addressed to you first. + +Repo state: `main` at `9cc00ad` = `v2.0-rc`, **fully pushed** (origin synced, all five +version tags live). `tools/qa.sh --strict` GREEN 5/5 with **zero warnings** — every smoke +incl. the warn-level ones (buy, patronage, book/toy stock, katoomba) is green. Round 8 had +**no slips**: weather, Katoomba, three real-stock packs (record 350 / book 311 / toy 273), +buy loop, patronage all live. Goldens: synthetic `0x3fa36874` · melbourne `0x34cfdec0` · +katoomba `0x0f652510`. fal ~$21.36. + +## Theme: ship v2.0 + +The rc is healthy and warning-free. Round 9 hardens it into **`v2.0`**: graduate every +smoke to strict, make the crowd visible *inside* shops, widen buying beyond the dig, +re-shoot the tour so it shows the living town, and freeze the docs. One new toy (B's tram) +rides along but does NOT block the tag. + +What v2.0 means when tagged: seed → real-or-synthetic AU town → streamed streets with +weather and a living crowd that shops → every door opens → real browsable stock you can +buy with a wallet → all of it deterministic, leak-free, budget-clean, and enforced by a +strict harness. + +## Prime law (unchanged post-amendment) + +Default boot = streamed roster + patronage at the pinned baseline; plan goldens frozen; +new features behind default-off flags; flags compose; qa strict green at every commit. +Baseline re-pins only by the one-commit protocol. + +## Integrator decisions (so nobody blocks) + +1. **Interior presence (the round's one cross-lane seam — C↔D, F wires).** Peds who duck + into a shop should be *there* when the player follows. Contract: D tracks per-shop + occupancy (who's inside + their identity seeds, already implied by patronage state); + C exposes 1–3 **browse points** per room in the room API (aisle spots, like the keeper's + counter spot); F passes occupancy → interior build so browser rigs (KeeperManager-style + fleet clones, idle/browse pose) stand at browse points. Cap 3/room; ≤350 draws holds; + leak-free like keepers (proven pattern). D owns occupancy truth, C owns points + room + fit, F owns the handoff. Agree the two interfaces in NOTES before code (half-day + handshake rule). +2. **Buy-anywhere scope (C):** book/toy shelves get pull-and-buy (aim at a real-stock + spine/box → pull-out card with title/price → BUY via the same wallet). No new dig + mechanics — reuse the pull-panel pattern. Record digs stay the deep interaction. +3. **Tram (B): now a real task, but explicitly NON-BLOCKING for v2.0** (no-hostage rule + pre-applied). `?tram=1`: one instanced tram on a seeded main-street loop over the + bus_shelter stops, door-pause at each, budget-neutral (≤2 draws). If it lands, it + enters the harness at warn and the tour gets a shot. +4. **Audio stays parked** — STANDING ASK TO JOHN (third round running): one decision line + ("generate ambience freely" / "use library X" / "skip for v2") unlocks street ambience, + rain-on-roof, and the milk-bar door bell. Until then no lane touches audio. +5. **fal: no new spends** (broken-prop clause stands). +6. **Tag `v2.0`** (F, end of round) when: all round-8 warn smokes strict + green · + interior presence live + smoked · buy-anywhere live + smoked · v2 tour re-shot · + full-defaults soak green · docs frozen. Tram/third-town slippage does not block. + This is the epoch tag — after it, Fable + John pick the v3 epoch (editor/overrides vs + venue district vs multiplayer presence — V2_IDEAS). + +## Process rules (unchanged) + +- ONE shared working tree; exact-path staging; options before `--`; new files `add`ed + first; durable lane refs; qa green at every commit; progress docs + NOTES. +- F owns `web/index.html` + `tools/`; document call sites for F. +- Slip rule: partial commit + cut-line note, never silent. +- `procityprogress.txt` / `settings.local.json` untracked; staging dirs gitignored. +- Repo `/Users/m3ultra/Documents/procity`; dev `:8130`. + +## Sequencing + +``` +C1 (browse points) ──┬──→ D1 (occupancy + browsers) ──→ F1 (wire handoff + smoke) + └──→ C2 (buy-anywhere) +B1 (tram, non-blocking) · A1 (contract freeze + docs) · E1 (VRAM audit) — parallel + all land ──→ F2 (graduate smokes strict) ──→ F3 (tour + soak) ──→ F4 (tag v2.0) +``` +C starts first (both seams hang off the room API). F1 needs C1+D1. + +--- + +## Lane A (Citygen) — freeze the contract, polish the docs + +Small round — you're the most "done" lane; make it official. + +1. **CITY_SPEC v2 contract freeze**: document the final CityPlan producer contract as + built — both sources, the town-key mechanism, the goldens table (synthetic/melbourne/ + katoomba + how to pin a new one), the normalization rules the osm importer applies, + the openLate/hours/storeys laws. This becomes the reference for the v3 epoch (the + editor/override layer reads THIS contract). +2. **Recipe sanity**: dry-run your own "add a town" recipe against the doc (don't ship a + third town unless it falls out for free — if it does, pin its golden and tell F). +3. **On-call** for D's patronage/occupancy questions (shop doors, hours edge cases — + e.g. what happens to occupants at closing time; give D a ruling and document it). + +**Acceptance**: CITY_SPEC v2 section complete + matches reality (F will diff claims vs +code in review); closing-time ruling documented; qa green. + +## Lane B (Streetscape) — the tram (non-blocking) + tour poses + +1. **`?tram=1`** (decision #3): one instanced tram/small bus, seeded main-street loop + over your bus_shelter stops, door-pause dwell at each stop, bell-ready (no audio yet). + Deterministic (same seed → same schedule), budget ≤2 draws, composes with weather/ + night (headlights at night if cheap). Flag-off identical. It slipping does NOT block + v2.0 — commit partial + cut line if needed. +2. **v2 tour bookmarks** (F shoots this round — do early): add named poses for the new + life — `rain_verandah` (rain through a lit winmap window), `patronage_door` (peds at a + shop door), `dig_real` (a bin of real covers), `katoomba_main` (2nd town), `tram_stop` + (if tram lands), plus your judgment for 2–3 more. Verify via `shots.py`. +3. **Weather polish debt** (only if quick): any visual nits from your own R8 notes. + +**Acceptance**: tram loops deterministically under budget (or documented cut); tour poses +live + un-letterboxed; qa green. + +## Lane C (Interiors) — browse points + buy-anywhere + +1. **C1 — browse points (DO FIRST — D and F build on it).** Room API: 1–3 seeded browse + points per room (position + facing, aisle-adjacent, never blocking the door or the + counter), exposed like the keeper's counter spot. Deterministic per shop.seed; works + in every archetype (drawSweep proves no collisions with fittings). Document the + interface in LANE_C_NOTES *first* (decision #1 handshake). +2. **C2 — buy-anywhere (decision #2):** aiming at a real-stock spine/box on book/toy + shelves raises the pull-out card (title/artist-or-maker/price from the pack index); + BUY debits the wallet, removes the item from the shelf (your batched-stock + addressability from R6 — same trick as dug bins), adds to inventory. Parody stock = + not buyable (card shows "not for sale" or simply no card — your call, document it). + Fail-soft, deterministic, leak-free, ≤350 draws; extend the soak to buy 1 shelf item + per room type. +3. **Support F1**: when browsers spawn at your points, verify keeper/stock/dig all still + compose in a room WITH browsers (the soak covers it). + +**Acceptance**: browse points in every archetype, documented, D/F consuming; shelf +buying works end-to-end with the wallet; soaks green; ≤350; qa green. + +## Lane D (Citizens) — occupancy truth + browsers inside + +1. **D1 — occupancy + browser rigs (after C1's interface note).** Track per-shop + occupancy from patronage (who ducked in: identity seed + entry time + seeded dwell). + When the player enters an occupied shop, browser rigs (fleet clones, KeeperManager- + style lifecycle — the leak-proven pattern) stand/idle at C's browse points, matching + occupancy count (cap 3, decision #1). They exit on dwell-expiry (walk-out tell if + cheap, despawn otherwise); at closing time follow A's ruling. Deterministic: same + seed + same time → same occupants. Leak-free over N enter/exit cycles (extend your + soak). Coordinate the F-facing handoff shape (occupancy query per shopId) in NOTES. +2. **D2 — street↔interior consistency tells**: the ped who ducked in shouldn't ALSO be + visible on the street (your despawn already handles it); re-emergence spawns at the + door. Verify with patronage + occupancy both on. +3. Budget: browsers ride the interior ≤350 law (C's sweep with browsers on proves it). + +**Acceptance**: follow a ped into a shop and find them browsing; count matches +occupancy; deterministic + leak-free + ≤350 with browsers; closing-time behavior per A's +ruling; qa green. + +## Lane E (Assets) — the VRAM/texture audit + on-call + +1. **E1 — memory audit (the ship-round due diligence).** Nobody has measured total + texture/VRAM weight since the packs landed. Audit: all atlases (3 stock packs), skins, + facade atlas, ped fleet, GLB textures — sizes on disk + estimated GPU memory + what's + resident in a default boot vs `?stock=real` boot vs worst case (all flags). Numbers in + AUDIT.md + a one-para verdict (fine / needs compression pass / needs lazy-load). + If a cheap win exists (e.g. a pack atlas that should be WebP/half-res), take it — + bigger restructuring gets flagged for v3, not done now. +2. **E2 — depot + manifest hygiene**: `validate --depot` + pack-QA + provenance-drift all + green post-R8 (they should be — confirm); prune any orphaned depot files your audit + finds (list first in NOTES, delete only your own procity_* uploads). +3. **On-call**: B may want a tram texture/GLB (procedural/primitive first — a box tram + with the right silhouette beats a heavy model; flux/local gen only if it truly reads + wrong); C may want a "browse pose" check on fleet clips (that's D's domain — redirect). + +**Acceptance**: audit published with numbers + verdict; cheap wins taken; depot hygiene +confirmed; qa green. + +## Lane F (Integration) — graduate, shoot, freeze, tag + +1. **F1 — interior-presence wiring (after C1+D1):** occupancy query → interior build → + browser spawn at browse points; smoke at warn (enter occupied shop, assert browser + count > 0 matching occupancy, 0 errors, dispose clean on exit). +2. **F2 — graduate round-8 smokes to strict**: buy-v0, patronage, book/toy stock, + katoomba golden. New this round at warn: interior presence, shelf-buy, tram (if B + lands). Everything green before F3. +3. **F3 — the v2 tour + full-defaults soak**: re-shoot `docs/shots/v2_tour/` (12 shots: + B's new poses + the classics re-taken on current defaults — busy street, rain money + shot, dig with real covers, browsers in a shop, katoomba, night video-shop crowd, + tram if landed) + contact sheet. Full soak on pure defaults (no flags) + the all-on + combo; both leak-free, 0 errors. +4. **F4 — docs freeze + tag `v2.0`** (decision #6): runbook gate table updated to the v2 + reality; flags table final (what's default, what's flagged, what graduated); + README/CITY_SPEC claims match code (diff A's contract freeze vs reality as part of + review); F-progress round-9 section. Tag with a proper epoch summary. Local tag — + John pushes (the push pattern is proven now). +5. **Marshal**: C1 is the round's single point of failure (two lanes build on it) — + check for its commit early; if C stalls, escalate in F-progress immediately. + +**Acceptance**: presence wired + smoked; all r8 smokes strict; tour + soaks green; +docs frozen; `v2.0` tagged on an all-green tree. + +--- + +*— Fable (integrator). Nine rounds from empty repo to this: a seed becomes a town where +it rains, the crowd shops, and you can follow someone into a record store, flip past +three hundred real sleeves, and buy one. Round 9 makes that official. Commit atomically, +pin your refs, leave it green.*