From e4e16c34edfb1584e7b07dbec4af42924b6e3337 Mon Sep 17 00:00:00 2001 From: m3ultra Date: Thu, 16 Jul 2026 00:56:00 +1000 Subject: [PATCH] =?UTF-8?q?Fable=20(integrator):=20round-14=20instructions?= =?UTF-8?q?=20=E2=80=94=20v3.0=20release=20round?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-Authored-By: Claude Fable 5 --- docs/LANES/ROUND14_INSTRUCTIONS.md | 157 +++++++++++++++++++++++++++++ 1 file changed, 157 insertions(+) create mode 100644 docs/LANES/ROUND14_INSTRUCTIONS.md diff --git a/docs/LANES/ROUND14_INSTRUCTIONS.md b/docs/LANES/ROUND14_INSTRUCTIONS.md new file mode 100644 index 0000000..3cf6ea7 --- /dev/null +++ b/docs/LANES/ROUND14_INSTRUCTIONS.md @@ -0,0 +1,157 @@ +# PROCITY — Round 14 lane instructions (from Fable, integrator) + +Date: 2026-07-16 · **v3.0-beta shipped** (the district, `?gigs=1`, tag local; qa `--strict` 6/6, +0 warn — the queue assert went live after D landed). Seed 20261990 = Boolarra Heads: 3 venues, +14 gigs/week, tonight Screaming Utes @ The Exchange Hotel $10 + The Dead Ringers @ the RSL free. +Round 14 is **v3.0: THE RELEASE** — identity continuity into the crowd (the one remaining charter +promise), the money-shot tour, the soaks, docs freeze, and the `v3.0` tag. **No new systems this +round** — if it isn't continuity, hardening, or documentation, it's v3.1. + +## First: the R13 debt ledger (all owned this round) + +R13 closed its six debts cleanly (gigKey contract landed everywhere, instruments wired, drummer +seated, RY convention fixed **at the source** — D's `buildFigure` normalisation also silently fixed +keepers/browsers/walkers that had been back-to-front whenever the GLB fleet loaded; good catch, C+D). +What carries: + +1. **Alpha alias retirement (B → F, ordered).** F kept the R12 single-venue + `window.PROCITY.gigs` shape (`.state/.on/.venueShopId/.cover/.paid`) as a one-round compat + alias; that round is over. **B first** removes its fallback readers (`audio.js` alias→clock + chain, `venue.update()` bare-string arm — keep the clock fallback, drop the alias hop), **then + F** deletes the alias so `byVenue` + the per-venue accessors are the only surface. CITY_SPEC §v3 + runtime block loses the alias line in the same commit (F). +2. **Drummer sit hack (D).** The 4th member is a standing rig sunk `SEAT_DROP` behind the kit — + reads seated only from the front. `~/Documents/mixamo-fetch/out/` holds **34 clips incl. `sit`** + (LANE_D_NOTES wishlist #1 — **check what exists first, never re-download**). Wire the real clip, + retire `SEAT_DROP` + the `m.seated` branch. +3. **Town-wide streetlamp pools (B) — RULING: stays venue-scoped for v3.0.** Town-wide needs + always-on `furniture.js` changes and that fights flags-off parity in release week. Venue blocks + read fine (F's `venue_night` shot proves it). Document as a v3.1 candidate in LANE_B_NOTES; + no code. +4. **Poster repetition (B judges, E executes).** B: during the tour audit, eyeball the spine poster + runs — if the per-gig instanced skins read repetitive, ask E for 1–2 more templates. E: build + only on B's ask (R13 law, unchanged). + +Closed for good, for the record: depot publish (John OK'd mid-R13; Gate-3 provenance flag cleared, +`digalot.fyi` serves the 14k instruments + `_hi` originals). + +## Laws for the round (unchanged, plus release discipline) + +- **Prime flag law holds through the tag**: `?gigs=1` stays **opt-in for v3.0** (Fable's default — + John may overrule, see Standing #2). Flags-off boot byte-identical, synthetic golden + `0x3fa36874`, gig golden `0x1f636349` — **neither moves this round**. Any diff that would move + a golden is out of scope by definition; park it. +- Deterministic from citySeed · asset-free (`?noassets=1&gigs=1` silent-and-fine) · audio law + (gesture-gated, fail-soft) · budgets: gig-night interior ≤350, street ≤300 draws / 200k tris at + the busiest venue block · human-sized line on every humanoid shot · **fresh browser contexts** + (the stale-module trap bit B in R13 — `cache:'reload'` + hard nav, or the no-store server). +- **Shared-tree discipline**: commit atomically by explicit pathspec; lanes land concurrently. +- **Release-round law: no new rng draws on any seeded stream.** Continuity work must ride new + sub-streams or consume existing identities — if two runs of R13 code and R14 code disagree on + any golden or any R13 smoke, the change is wrong. + +## Lane D — identity continuity: the ped you followed is in the crowd (the headline) + +The last charter promise, deferred at R12 and R13 ("opportunistic, not now"). Now. + +1. **Continuity contract.** The sim already knows who enters a venue (queue `admitOne()` drains + + surge occupants). Record a per-venue **tonight roster** of entered identities + ({pedIndex, height, …whatever pins "the same person"}), and have `GigCrew.spawn` consume it: + crowd slots fill from the roster first, seeded strangers only for the remainder. Design is + yours; the acceptance is behavioural: **follow a punter from the queue through the door, walk + in behind them, and find them in the crowd — same ped, same height.** Works across exit/re-enter + (roster persists for the night, not per interior build). +2. **Determinism**: the roster is a consequence of seeded sim behaviour; interior crowd identity + for a given (seed, night, entry time-segment) must be stable enough for F's smoke — expose + `window.PROCITY.citizens.tonightRoster(venueShopId) → [{pedIndex, …}]` (or your preferred name — + tell F) so the smoke can assert crowd ⊇ roster ∩ cap without screenshot forensics. +3. **The sit clip** (debt #2 above). Data task, not rig work — clips bind through the canonical + `mixamorig` skeleton like walk/idle. +4. **Sim soak**: 30+ min equivalent (accelerated segments fine) with gigs on — full week roll, + repeated surge/drain/queue cycles at all venues; assert leak geo0/tex0, roster bounded, no + identity churn. Numbers in your notes. + +Budget note: continuity is bookkeeping, not new rigs — draw/tri delta should be ~0; state it. + +## Lane B — alias retirement + the tour audit + +1. **Drop the alias readers** (debt #1 — you go first, tell F when landed). +2. **Bookmark/tour audit**: every bookmark (16 v2 + `venue_night` + `district_posters`) still + frames un-letterboxed, 0 errors, with `?gigs=1` on — the district changed the streetscape under + some of the old poses. Fix poses, don't touch world code. +3. **`queue_night` bookmark** — John's queue shot: close framing on the pub door at `doors`/`on`, + queue line + marquee + poster in frame, punters facing the door. This is the release hero shot; + F scripts it into the tour. +4. **Poster repetition call** (debt #4): judge, and either "fine" in your notes or a one-line ask + to E. + +## Lane C — venue audit + docs freeze (light round, by design) + +1. **Interior release audit**: one pass over the three venue archetypes against CITY_SPEC §v3 + + LANE_C_PUB — watchPoint caps, stage/riser numbers, gigKey resolution, quiet-night variants — + and re-run your 60-room soak + drawSweep against D's continuity changes (crowd identities + change; geometry must not). Fix only regressions. +2. **`guitar_amp` placement ruling** (R13 left it "C's call"): D planted it as stage dressing — + bless the placement or give D the corrected pose; one line in LANE_C_PUB either way. +3. **Docs freeze**: LANE_C_PUB.md + LANE_C_AUDIO.md are the durable contracts — final wording + pass, mark them v3.0-frozen. + +## Lane E — provenance close-out (light round, by design) + +1. **`publish.py --verify` drift check** against the live depot post-R13-publish; qa Gate 3 must + be green with zero flags for the tag. +2. **Poster templates** only on B's ask (debt #4). +3. **Docs freeze**: provenance table + audio/GLB inventories in LANE_E_NOTES current and + v3.0-frozen. No new synthesis this round unless John re-flavours a genre (Standing #3, R13 — + still open, still names-only). + +## Lane A — invariant sweep + CITY_SPEC freeze + +1. **District seed sweep**: 400-seed run asserting the district invariants — 2–4 venues, ≥1 pub, + never the openLate shop, no band twice in one night town-wide, every poster behind + `poleOffset`, per-venue 4–6 nights — plus **one osm town** proving graceful placement (no + spine/warehouse district). Promote any invariant not already in `selfcheck.js` into it. +2. **CITY_SPEC v3 freeze**: you own the spec — final pass over §v3 (venues table, genre map, + gigKey contract, gig golden `0x1f636349`, F's runtime block minus the retired alias), then mark + the section frozen for the tag. Coordinate the alias-line deletion with F (debt #1). + +## Lane F — soaks, the tour, the tag (last) + +1. **Delete the alpha alias** once B lands (debt #1) + the CITY_SPEC line (with A). +2. **Continuity smoke**: extend `smoke_gigs` — queue identities admitted at `doors` appear in the + interior crowd via D's roster seam (assert on the seam, not pixels); crowd ⊇ roster ∩ cap; + determinism arm re-run. +3. **Full-week soak**: drive the segment spine through all 7 nights × all venues in one context — + every latch fires per `plan.gigs` schedule (dark nights stay quiet), covers stamp per venue per + night, walla/applause never double-fire, leak geo0/tex0 across ≥20 enter/exit cycles. Wire it + into qa as a non-strict extra (strict stays the 6 gates). +4. **The money-shot tour**: `tools/qa/tour_shots.py` — scripted capture of the release set in one + deterministic run: `rain_verandah` (winmap+rain hero) · `tram_stop` · `venue_night` · + `district_posters` · **`queue_night` (John's shot)** · gig interior (4-piece + instruments + + crowd). Contact sheet into `docs/shots/release_v3/`. +5. **Docs assembly**: README v3 section (what shipped, the flags table, the shots), confirm every + lane's freeze landed, LANE_F_NOTES §14 runbook. +6. **Acceptance + tag**: `qa.sh --strict` 6/6 + continuity smoke + week soak green → tag **v3.0**. + Tag and push are separate commands; the push itself waits on John (Standing #1). + +## Order + +**B first** (alias readers out — F is blocked on it for the deletion) and **D first** (continuity — +F's smoke and the tour hang off the roster seam); they're disjoint files, run in parallel. A, C, E +anytime, independent. **F last**, as always. Mid-round handshakes: B→F "readers gone", D→F the +roster accessor name, C→D the amp ruling. + +## Standing + +- **v3.1 preview (do not start):** flag-default flip (if John rules it), town-wide lamp pools, + tram-gig composition (ride to the gig), wind sway, bench-sit loiter from the same `sit` clip. +- **John — three items:** + 1. **The push.** The R13 epoch (7 commits + `v3.0-beta`) and everything R14 lands are **local + only**. F is ready to `git push origin main` + tags on your word — it's the one + outward-facing step every lane held. + 2. **Flag default at v3.0**: Fable's call is `?gigs=1` stays **opt-in** for the tag (prime-flag + discipline through release; flip considered at v3.1 after the soak bakes). Overrule if you + want the district on by default at v3.0 — that becomes an F task with a full golden re-pin, + and it goes FIRST in the round, not last. + 3. **Genre re-flavour** (carried from R13, names-only, A+E coordinated): defaults + pubrock/grunge/covers stand unless you say otherwise — last call before the docs freeze.