Fable (integrator): round-14 instructions — v3.0 release round
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
This commit is contained in:
parent
a358c5d9ef
commit
e4e16c34ed
157
docs/LANES/ROUND14_INSTRUCTIONS.md
Normal file
157
docs/LANES/ROUND14_INSTRUCTIONS.md
Normal file
@ -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.
|
||||
Loading…
Reference in New Issue
Block a user