9.4 KiB
PROCITY — Round 15 lane instructions (from Fable, integrator)
Date: 2026-07-16 · Round-14 verdict: A–E landed and green; LANE F NEVER RAN. The R14 release
round produced excellent hardening from five lanes — D's continuity seam (8/8 surge + 4/4 queue
identities, empty-roster byte-identical), B's alias-reader retirement + 19-bookmark tour audit +
queue_night hero pose, A's 400-seed invariant sweep + §v3 freeze, C's adversarial venue audit
(which caught a real amp defect), E's provenance freeze (Gate 3 green, 0 blockers) — but v3.0 is
NOT tagged. F's whole release brief (continuity wiring, alias deletion, week soak, the tour, the
tag) is untouched, and the round surfaced one live bug and one cosmetic defect that gate the money
shots. Round 15 closes the release. F carries its R14 brief in full; A and D each land one
small fix; B and C verify; E is on-call only. Nothing else — the freeze holds.
The ledger (everything between here and the tag)
- Frontage posters are on the BACK WALL (A — live bug, gates John's hero shot).
gigs.js:205seats each playing venue's own-frontage poster at local −Z ("house convention"), but B's buildings canon puts the street facade on +Z — B measured the pub's poster 15.9 m behind the street face. Every venue's own poster has been invisible from the street since R13, andqueue_nightframes no poster because of it. Fix: flip item 1 ofbuildPostersto+sin,+cos. This movesplan.posters→ the gig golden moves — this is the round's ONE sanctioned golden move (amendment law: re-pin0x1f636349 → newin the same commit, and amend the §v3 FROZEN marker's golden line in that commit too — the freeze allows exactly this, a recorded amendment). - Alias deletion (F — B unblocked you, with a map). B's sweep: cross-lane CLEAN — no A/C/D/E
file reads the scalar alias; the only remaining readers are F's own ~20 tool lines. Delete
gig_state.js:141–151, migratetools/flags_check.py+tools/qa/gig_shot.py(.venueShopId → venueShopIds[0]/explicit id ·.state → stateOf(id)·.cover → coverOf(id)·.bandName → bandNameOf(id)), and delete the two CITY_SPEC §v3 alias sentences (~lines 271–272 — A deliberately left them for you to avoid a doc-ahead-of-code race). While in that spec block, add the omittednightOf(id)to the accessor list (A's note). One atomic commit. - Continuity wiring + smoke (F — D handed you three touches).
crew.spawn(…, { roster: citizens.tonightRoster(shop.id) })atinterior_mode.js:239;onAdmit: id => citizens.recordVenueEntry(venueShopId, id)in the shell's per-venue queue loop (index.html~380–393); the clear is automatic on your existingsetGig(id,false). Smoke: assert crowd ⊇ roster ∩ cap on the seam (crew.crewInfo.fromRoster,member.pedIndex ∈ tonightRoster(id)), not pixels; re-run the determinism arm (empty roster must stay byte-identical to R13). guitar_ampreposition (D — C's ruling, not blessed as-is). Your backline plant is 0.29 m from the bassist (interpenetrates; confirmed by render + three audit agents) and redundant with C's primitive ampStacks. Move to C's corrected pose (LANE_C_PUB §3): up-stage-right(stage.x + stage.w·0.36, deckY, stage.z − stage.d·0.22). One-liner inband.js _addBackline; C verifies. (Fullstage.backline[]unification stays v3.1.)- Settled-tris honesty (F). C caught that your gig smoke measures before the async instrument GLBs land: reported ~34k, settled reality ~182k tris (5×14k instruments + rigs). The interior gate is draws (passes at ≤71) so no violation — but measure settled (wait for fleet + instruments, or shoot-twice) in the smoke and the tour, and report both numbers in your notes. Same discipline for tour shots generally (B: orphan-chunk inflation — shoot from a clean load or twice).
- Drummer sit clip — deferral RATIFIED (v3.1). D investigated properly: the clip exists (on
the tailnet source box — Fable's
~/Documents/mixamo-fetchpath was stale), converts and binds clean, but correct wiring needs a_rotWithHipsvariant in the shared rig stack + a seated-stature exemption in F's no-giants gate. Two cross-cutting changes for a polish item in freeze week = v3.1. TheSEAT_DROPhack ships in v3.0; it reads seated from the crowd POV.
Laws (unchanged, one exception)
- Prime flag law:
?gigs=1opt-in at the tag (John concurred, R14). Flags-off byte-identical; synthetic golden0x3fa36874frozen. Gig golden moves ONCE (ledger #1, A's commit only). - Release law: no new rng draws on any seeded stream · no new systems · deterministic from citySeed · asset-free silent-and-fine · audio gesture-gated fail-soft · budgets (interior ≤350 draws · street ≤300 / 200k at the busiest venue block) · human-sized line on humanoid shots · fresh browser contexts (no-store server; rAF is throttled in automation — drive live-spawned things like the queue explicitly, per B's note).
- Shared-tree discipline: atomic commits by explicit pathspec.
Lane A — the poster flip (first, everything waits on you)
- Ledger #1: flip
buildPostersitem 1 to the +Z street face; re-pin the gig golden; amend the §v3 FROZEN marker (golden line + a one-line amendment note) — all in ONE commit. Re-run your 400-seed sweep (the off-carriageway assert must still hold with the flipped face — a frontage poster sits on the facade plane, not the verge, so expect green; prove it). - Tell B + F the new golden the moment it lands.
Lane B — verify the hero (after A)
- Re-shoot
queue_night: A's flip should seat the pub's own poster by the door in the existing frame with no pose change (your prediction — verify it). Confirmdistrict_posters+venue_nightstill read; spot-check the spine runs (posters now face the street everywhere). - Nothing else. Your R14 alias/tour/pools work is done and frozen;
tram_stop's ~293k close-ped tris is on the v3.1 list.
Lane C — verify the amp (after D)
- Re-render the pub + RSL stages with D's corrected plant: amp clear of the bassist (state the measured clearance), flanking the primitives, nothing interpenetrating. One line in your notes; your freeze stands otherwise.
Lane D — the amp one-liner
- Ledger #4: move the backline plant to C's §3 pose. No other code — your continuity work and the
ratified sit-clip deferral are closed. Confirm draw/tri delta 0 and
?noassetsunaffected.
Lane E — no tasks (frozen)
On-call only: if F's tour surfaces an asset defect, fix on ask. Nothing else — your provenance freeze is the release contract.
Lane F — the release (last; this is your R14 brief, carried in full)
- Continuity wiring + smoke (ledger #3) — D's three touches, assert on the seam.
- Alias deletion (ledger #2) — after this round's B/A commits land; one atomic commit
(gig_state + your two tools + the spec sentences +
nightOf). - Full-week soak: all 7 nights × all venues in one context — every latch fires per
plan.gigs(dark nights stay quiet), covers stamp per venue per night, walla/applause never double-fire, roster clears per night (D's soak already proves the sim side; yours proves the shell), leak geo0/tex0 across ≥20 enter/exit cycles. Non-strict qa extra. - The money-shot tour:
tools/qa/tour_shots.py— one deterministic run capturing the release set intodocs/shots/release_v3/:rain_verandah·tram_stop·venue_night·district_posters·queue_night(John's hero — queue + marquee + A's now-visible poster) · gig interior settled (4-piece + real instruments + roster crowd). Settled-measurement discipline (ledger #5); drive the queue live (B's rAF note). - Docs assembly: README v3 section (what shipped, flags table, the shots), confirm all five freezes landed, LANE_F_NOTES §14/§15 runbook, F-progress current.
- Acceptance + tag + push:
qa.sh --strict6/6 + continuity smoke + week soak green → tagv3.0→git push origin mainandgit push origin v3.0as separate commands. John's R14 kickoff authorization to keep origin current stands; release tags only, lane tags stay local.
Order
A first (the poster flip + re-pin — B's verify and F's hero shot hang off it). D anytime (one line); C verifies D; B verifies A. F last, once A+D are in. Handshakes: A→B/F the new golden; D→C "amp moved"; B→F "hero verified".
Standing — the v3.1 backlog (consolidated; do not start)
Flag-default flip (?gigs=1 → on, full golden re-pin) · drummer sit clip (_rotWithHips +
seated-stature gate exemption) · instrument LOD (settled interiors ~182k tris) · town-wide
streetlamp pools (flags-off-safe design needed) · stage.backline[] unification (GLB amp replaces
primitives) · wind sway · bench-sit loiter (same sit clip) · no-spine osm fixture for A's sweep ·
tram_stop close-ped tri diet · C's audioEmitter idea.
John — nothing blocks this round
All three R14 items were resolved at kickoff and stand. FYI only: the gig golden re-pins once
(ledger #1, a real bug fix under the amendment law), and F tags + pushes v3.0 at round end under
your standing OK. If you'd rather eyeball the tour contact sheet before the tag, say so and F holds
the tag on your review.