139 lines
9.4 KiB
Markdown
139 lines
9.4 KiB
Markdown
# 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)
|
||
|
||
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:141–151`, 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
|
||
271–272 — 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` ~380–393); 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.
|