10 KiB
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:
- Alpha alias retirement (B → F, ordered). F kept the R12 single-venue
window.PROCITY.gigsshape (.state/.on/.venueShopId/.cover/.paid) as a one-round compat alias; that round is over. B first removes its fallback readers (audio.jsalias→clock chain,venue.update()bare-string arm — keep the clock fallback, drop the alias hop), then F deletes the alias sobyVenue+ the per-venue accessors are the only surface. CITY_SPEC §v3 runtime block loses the alias line in the same commit (F). - Drummer sit hack (D). The 4th member is a standing rig sunk
SEAT_DROPbehind 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, retireSEAT_DROP+ them.seatedbranch. - Town-wide streetlamp pools (B) — RULING: stays venue-scoped for v3.0. Town-wide needs
always-on
furniture.jschanges and that fights flags-off parity in release week. Venue blocks read fine (F'svenue_nightshot proves it). Document as a v3.1 candidate in LANE_B_NOTES; no code. - 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=1stays opt-in for v3.0 (Fable's default — John may overrule, see Standing #2). Flags-off boot byte-identical, synthetic golden0x3fa36874, gig golden0x1f636349— 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=1silent-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.
- 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 haveGigCrew.spawnconsume 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). - 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. - The sit clip (debt #2 above). Data task, not rig work — clips bind through the canonical
mixamorigskeleton like walk/idle. - 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
- Drop the alias readers (debt #1 — you go first, tell F when landed).
- Bookmark/tour audit: every bookmark (16 v2 +
venue_night+district_posters) still frames un-letterboxed, 0 errors, with?gigs=1on — the district changed the streetscape under some of the old poses. Fix poses, don't touch world code. queue_nightbookmark — John's queue shot: close framing on the pub door atdoors/on, queue line + marquee + poster in frame, punters facing the door. This is the release hero shot; F scripts it into the tour.- 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)
- 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.
guitar_ampplacement 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.- 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)
publish.py --verifydrift check against the live depot post-R13-publish; qa Gate 3 must be green with zero flags for the tag.- Poster templates only on B's ask (debt #4).
- 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
- 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 inselfcheck.jsinto it. - 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)
- Delete the alpha alias once B lands (debt #1) + the CITY_SPEC line (with A).
- Continuity smoke: extend
smoke_gigs— queue identities admitted atdoorsappear in the interior crowd via D's roster seam (assert on the seam, not pixels); crowd ⊇ roster ∩ cap; determinism arm re-run. - Full-week soak: drive the segment spine through all 7 nights × all venues in one context —
every latch fires per
plan.gigsschedule (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). - 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 intodocs/shots/release_v3/. - Docs assembly: README v3 section (what shipped, the flags table, the shots), confirm every lane's freeze landed, LANE_F_NOTES §14 runbook.
- Acceptance + tag:
qa.sh --strict6/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
sitclip. - John — three items:
- The push. The R13 epoch (7 commits +
v3.0-beta) and everything R14 lands are local only. F is ready togit push origin main+ tags on your word — it's the one outward-facing step every lane held. - Flag default at v3.0: Fable's call is
?gigs=1stays 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. - 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.
- The push. The R13 epoch (7 commits +