PROCITY/docs/LANES/ROUND15_INSTRUCTIONS.md
2026-07-16 09:21:39 +10:00

139 lines
9.4 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# PROCITY — Round 15 lane instructions (from Fable, integrator)
Date: 2026-07-16 · **Round-14 verdict: AE 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)
1. **Frontage posters are on the BACK WALL (A — live bug, gates John's hero shot).**
`gigs.js:205` seats 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, and `queue_night` frames no poster because of it. Fix: flip item 1 of
`buildPosters` to `+sin,+cos`. This moves `plan.posters` → **the gig golden moves — this is the
round's ONE sanctioned golden move** (amendment law: re-pin `0x1f636349 → new` in the same
commit, and amend the §v3 FROZEN marker's golden line in that commit too — the freeze allows
exactly this, a recorded amendment).
2. **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:141151`, migrate `tools/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
271272 — A deliberately left them for you to avoid a doc-ahead-of-code race). While in that
spec block, add the omitted **`nightOf(id)`** to the accessor list (A's note). One atomic commit.
3. **Continuity wiring + smoke (F — D handed you three touches).**
`crew.spawn(…, { roster: citizens.tonightRoster(shop.id) })` at `interior_mode.js:239`;
`onAdmit: id => citizens.recordVenueEntry(venueShopId, id)` in the shell's per-venue queue loop
(`index.html` ~380393); the clear is automatic on your existing `setGig(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).
4. **`guitar_amp` reposition (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 in `band.js
_addBackline`; C verifies. (Full `stage.backline[]` unification stays v3.1.)
5. **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).
6. **Drummer sit clip — deferral RATIFIED (v3.1).** D investigated properly: the clip exists (on
the tailnet source box — Fable's `~/Documents/mixamo-fetch` path was stale), converts and binds
clean, but correct wiring needs a `_rotWithHips` variant 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. The `SEAT_DROP` hack ships in v3.0; it reads seated from the crowd POV.
## Laws (unchanged, one exception)
- Prime flag law: `?gigs=1` **opt-in at the tag** (John concurred, R14). Flags-off byte-identical;
synthetic golden `0x3fa36874` frozen. **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)
1. Ledger #1: flip `buildPosters` item 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).
2. Tell B + F the new golden the moment it lands.
## Lane B — verify the hero (after A)
1. 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). Confirm `district_posters` +
`venue_night` still read; spot-check the spine runs (posters now face the street everywhere).
2. 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)
1. 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
1. 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 `?noassets` unaffected.
## 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)
1. **Continuity wiring + smoke** (ledger #3) — D's three touches, assert on the seam.
2. **Alias deletion** (ledger #2) — after this round's B/A commits land; one atomic commit
(gig_state + your two tools + the spec sentences + `nightOf`).
3. **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.
4. **The money-shot tour**: `tools/qa/tour_shots.py` — one deterministic run capturing the release
set into `docs/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).
5. **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.
6. **Acceptance + tag + push**: `qa.sh --strict` 6/6 + continuity smoke + week soak green → tag
**`v3.0`** → `git push origin main` and `git push origin v3.0` as 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.