156 lines
10 KiB
Markdown
156 lines
10 KiB
Markdown
# 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 — all three items RESOLVED at kickoff (2026-07-16):**
|
||
1. **The push — DONE.** John OK'd it; Fable pushed `main` (R13 epoch + these instructions) and
|
||
the `v3.0-beta` tag to origin at kickoff. Release tags only, as ever — lane-round tags stay
|
||
local. Push discipline unchanged for lanes: commit local, F/Fable pushes at round end.
|
||
2. **Flag default at v3.0 — RULED (John concurs):** `?gigs=1` stays **opt-in** for the tag;
|
||
default-flip is a v3.1 candidate after the soak bakes. No golden re-pin this round.
|
||
3. **Genre re-flavour — CLOSED:** John: "fine for now." pubrock/grunge/covers are final for
|
||
v3.0; the docs freeze proceeds on those names.
|