PROCITY/docs/LANES/ROUND8_INSTRUCTIONS.md
2026-07-15 09:16:59 +10:00

12 KiB
Raw Blame History

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

⚠ SUPERSEDED by 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 <X>-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. $4060), 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 ~150250 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=<key>, 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 R4R5 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 (~4060%), 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, ~150250 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.