diff --git a/docs/LANES/ROUND7_INSTRUCTIONS.md b/docs/LANES/ROUND7_INSTRUCTIONS.md index 0f477b3..c3d6711 100644 --- a/docs/LANES/ROUND7_INSTRUCTIONS.md +++ b/docs/LANES/ROUND7_INSTRUCTIONS.md @@ -1,5 +1,10 @@ # PROCITY — Round 7 lane instructions (from Fable, integrator) +> **⚠ SUPERSEDED by [ROUND8_INSTRUCTIONS.md](ROUND8_INSTRUCTIONS.md) (2026-07-14).** Round 7 is +> complete — roster flipped to default, `?stock=real` live, harness strict, v2.0-beta tagged +> (`4feba02`). B (weather) and A (osm parity) slipped — round 8 carries both §Lane A and §Lane B +> verbatim; everything else is historical reference only. + Date: 2026-07-14 · Written after the Fable round-6 review (`6948372`) and the **v2.0-alpha tag**. 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/ROUND8_INSTRUCTIONS.md b/docs/LANES/ROUND8_INSTRUCTIONS.md new file mode 100644 index 0000000..a307e05 --- /dev/null +++ b/docs/LANES/ROUND8_INSTRUCTIONS.md @@ -0,0 +1,193 @@ +# PROCITY — Round 8 lane instructions (from Fable, integrator) + +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. + +Repo state: everything committed on `main` at `16d4f2b`. `tools/qa.sh --strict` GREEN 5/5 +with the flags harness **STRICT**. **The streamed roster is the DEFAULT** (`?roster=v1` is +the escape hatch; baseline re-pinned 164 draws / 66k tris; plan goldens frozen at +`0x3fa36874` synthetic / `0x34cfdec0` osm-Melbourne). `?stock=real` puts real GODVERSE +sleeves in record-shop crates and digs. John is pushing main + v1.0/v1.1/v2.0-alpha/ +v2.0-beta to origin. fal balance ~$21.36. + +## Theme: catch-up + the town comes alive + +Round 7 turned the two big keys but **two lanes slipped**: B (weather) and A (osm parity) +have no round-7 work. Round 8 is those debts plus the "living town" tier that the flip and +the stock pack unlock: + +- **A and B execute their carried tasks** — B's weather is now also a dependency for D. +- **C widens real stock** (book/toy) and gives the dig a working **buy loop v0**. +- **D makes crowds react** — weather + shop patronage (peds actually enter shops). +- **E feeds packs** and stays the asset kitchen. +- **F graduates the new smokes to strict** and tags **`v2.0-rc`**. + +A slip note (this applies to everyone): a lane that can't finish its round MUST commit a +partial + write the cut line in its progress doc before the session ends. Round 7's slips +were silent again — the schedule harness (F) catches them at round end, but a one-line +"stopped at X because Y" turns a re-derive into a resume. + +## Prime law (post-amendment state) + +Default boot = streamed roster at the re-pinned baseline; plan goldens frozen; everything +NEW still lands behind a default-off flag; flags compose; `qa.sh --strict` green at every +commit. The flags harness is strict — if your feature leaks into the default path, qa fails +and it's yours to fix. + +## Integrator decisions (so nobody blocks) + +1. **B goes first on weather** (carried R7 brief, unchanged — ROUND7 §Lane B): D's crowd + reactions consume `window.PROCITY.weather`, so B1 landing early unblocks D2. If B slips + again, D ships patronage only (hours-based) and weather-reaction carries — do not fake a + weather source. +2. **Buy loop v0 scope (C)**: in-memory only. Player cash starts at a seeded-per-town float + (e.g. $40–60), HUD chip, `onBuy` deducts price + removes the sleeve from the bin + + adds to a simple inventory list (I key). NO persistence (no localStorage — a page reload + resets; that's fine for v0), no selling, no economy sim. Deterministic world, free-agent + player: purchases mutate live room state only, never generation. +3. **Pack expansion (E)**: book spines + toy boxes packs, same pipeline/laws as the record + pack (build-time extract, parody-transform, atlas + index, depot publish, provenance). + Target ~150–250 items each; reuse C's schema (already proven); C wires shelves. +4. **Patronage v0 scope (D)**: streamed peds occasionally path to an OPEN shop's door, + pause, "enter" (despawn with a door-swing tell or fade), re-emerge after seeded dwell. + No interior presence (interiors stay player-only this round), no queues. Respect hours + (closed shops get no visitors; the openLate video shop gets night traffic). +5. **Audio stays parked** (needs John's sourcing decision — flagging it: one line from John + unlocks street ambience + door bell, the V2_IDEAS "greenfield" item). +6. **Tag `v2.0-rc`** (F, end of round) when: weather + patronage + buy-v0 + ≥1 new pack + landed and smoke-green, stock/weather smokes graduated strict, qa strict green. Same + no-hostage rule: tag what landed, note what slipped. + +## Process rules (unchanged) + +- ONE shared working tree; stage only your files by exact path; options before `--`; + `add` new files first; pin a durable lane ref; leave qa GREEN; progress doc + NOTES. +- F owns `web/index.html` + `tools/`; document call sites for F. +- `procityprogress.txt` / `settings.local.json` stay untracked; `pipeline/_stockpack/` + and staging dirs are gitignored — keep build output out of the repo. +- Repo `/Users/m3ultra/Documents/procity`; GODVERSE at `~/Documents/dealgod`; dev `:8130`. + +## Sequencing + +``` +B1 (weather, carried) ──────────→ D2 (weather-reactive crowds) ─┐ +E1 (book/toy packs) ──→ C2 (wire shelves) ──┐ │ +C1 (buy loop v0) ── independent ─────────────┼──→ F1 (strict graduations + new smokes) +A1 (osm parity + 2nd town, carried) ─────────┘ └──→ F2 (tag v2.0-rc) +D1 (patronage, hours-based) ── independent of B +``` +B and E start immediately (both feed others). C1 and D1 need nobody. + +--- + +## Lane A (Citygen) — carried round-7 brief, unchanged + +Execute ROUND7_INSTRUCTIONS.md §Lane A verbatim. Summary: (1) selfcheck parity for osm +plans (full invariant suite runs on both sources; F pins both goldens); (2) a second +fixture town (`?plansrc=osm&town=`, checked-in module, zero network, golden pinned — +pick a small coastal/regional strip for contrast with inner-Melbourne); (3) the "add a +town" recipe in LANE_A_NOTES; (4) importer normalizes real-world data to the contracts +(exactly-one openLate etc.) and logs what it changed. + +This brief has now slipped twice (R7; and R4–R5 for its predecessor). If a full session +isn't available, land ANY complete subset with a cut-line note — parity alone is a fine +round. + +**Acceptance**: full selfcheck green on every (source, town); second town boots end-to-end +(or a documented cut); goldens pinned; qa green. + +## Lane B (Streetscape) — carried round-7 brief: weather + +Execute ROUND7_INSTRUCTIONS.md §Lane B verbatim. Summary: `?weather=1` — seeded per +(citySeed, day) state (clear/overcast/rain) exposed at `window.PROCITY.weather`; rain +particles (ONE draw), wet-ground response, matching sky dome from the existing set; wind +sway if cheap; ≤300 draws worst view; composes with winmap/night (rain-through-lit-window +screenshot); flag-off identical. Tram (`?tram=1`) remains the stretch, only after weather. + +**New this round**: D consumes `window.PROCITY.weather` (decision #1) — expose it early +(even while polishing visuals) and document the shape in LANE_B_NOTES: at minimum +`{ state: 'clear'|'overcast'|'rain', intensity: 0..1 }`, stable per day segment. + +**Acceptance**: as ROUND7 §Lane B, plus the documented `PROCITY.weather` contract; qa green. + +## Lane C (Interiors) — buy loop v0 + wire the new packs + +1. **C1 — buy loop v0** (decision #2, in the dig, works with parody AND real stock): + seeded starting cash → HUD chip (street + interior); pulling the front sleeve and + confirming buys it: cash decreases by the sleeve's price, sleeve leaves the bin (bin + mesh updates — your batching keeps dug bins addressable, use that), inventory list on + I. Broke = can't buy (a "not enough cash" tell). In-memory only; reload resets. + Leak/determinism laws: world generation unchanged (purchases are runtime state); + dig soak extended to buy 2 items per visit — no leaks, ≤350 draws. +2. **C2 — wire book spines + toy boxes** when E1's packs land: `?stock=real` extends to + book/toy shelves through the same stockAdapter path (static shelf stock; digging other + shop types is NOT this round). Fail-soft per pack (record pack present but book missing + → records real, books parody). +3. Keep the pack schema doc current if E's new packs need any field additions. + +**Acceptance**: buying works end-to-end in a dig (cash/HUD/inventory/bin-update), soak +green with purchases; book+toy shelves show real stock when packs present, fail-soft +otherwise; ≤350 draws; qa green. + +## Lane D (Citizens) — the crowd comes alive + +1. **D1 — shop patronage v0** (decision #4, independent of B): streamed peds occasionally + select an OPEN shop within their chunk, path to its door, pause, despawn-with-tell, + re-emerge after a seeded dwell. Hours-aware: closed = no visitors; night = the openLate + video shop is the only draw. Deterministic per seed+time; budget-neutral (it's the same + peds, different paths); leak-free (despawn/respawn through your existing lifecycle). + Behind `?patronage=0` OFF-switch — patronage is default-ON for streamed rosters (it's + crowd behavior, not a new system; the flags-off baseline may move a hair — coordinate + the re-pin with F if draws shift, same protocol as the flip). +2. **D2 — weather reaction** (after B1 exposes `PROCITY.weather`): rain → density drops + (~40–60%), walk speed up slightly, more peds choose shop doors (shelter patronage); + clear → v1 behavior. Read the contract from LANE_B_NOTES; do not import B's modules. +3. Re-run the roster soak with patronage on (leak-free over the despawn/respawn cycles). + +**Acceptance**: peds visibly enter/leave open shops day-long and cluster on the video shop +at night; deterministic + leak-free + budget-neutral; rain thins and redirects the crowd +(or documented as carried if B slips); qa green. + +## Lane E (Assets) — pack kitchen + +1. **E1 — book spines + toy boxes packs** (decision #3): same pipeline as the record pack + (`build_stock_pack.py` — generalize it rather than copying), build-time extract from + the GODVERSE datasets (bookgod/toygod per GODVERSE.md), parody-transform, ~150–250 + items each, atlas + index to C's schema, depot publish + local stage, provenance in + AUDIT.md. Book spines are TALL-thin (different atlas cell aspect) — coordinate the + cell geometry with C before baking. +2. **E2 — pack QA**: extend your provenance-drift gate (or add a small check) to validate + pack indexes — every entry has atlas+UV in range, price band sane, no empty titles — + so a bad bake fails qa instead of rendering blank sleeves. +3. **On-call**: B may want a rain-streak/puddle texture (procedural first, flux_local if + truly needed — free); D may want a door-swing tell sprite (same rule). +4. No fal spends (broken-prop clause stands). Audio assets stay parked (decision #5). + +**Acceptance**: two new packs live (depot + staged), indexes validate in qa, C consumes +them; pack-QA gate green; provenance logged; qa green. + +## Lane F (Integration) — graduate, marshal, tag + +1. **F1 — smoke graduations + additions**: `stock=real` and (when B lands) `weather=1` + graduate warn → strict. New smokes at warn: buy-v0 (open dig, buy 1 item, assert cash + decreased + bin count dropped, 0 errors), patronage (advance time, assert ≥1 ped + despawns at an open shop door over N seconds), book/toy stock (enter book shop with + `?stock=real`, assert real spine meshes), 2nd osm town if A lands (pin its golden). +2. **F2 — patronage default-on baseline**: if D1 moves the flags-off draws/tris beyond + tolerance, re-pin with the same one-commit protocol as the flip (old values in the + message). Plan goldens still frozen. +3. **F3 — tag `v2.0-rc`** (decision #6 criteria; no-hostage rule). Update flags table + + runbook; note anything carried. Remind John of unpushed refs if any remain. +4. **Marshal**: B and A are on carried briefs — check for their commits mid-round; if + either stalls again, note it in F-progress the moment you see it, not at tag time. + +**Acceptance**: graduated smokes strict + green; new smokes running at warn; baseline +re-pin (if needed) done by protocol; `v2.0-rc` tagged on a green tree; runbook current. + +--- + +*— Fable (integrator). The machine is built and strict; this round is about the town +feeling inhabited — rain on the awnings, peds ducking into shops, and walking out of a +dig with a record you paid for. Commit atomically, pin your refs, leave it green — and if +you must stop early, say where and why.*