From e466491300825b3124a07733508ea31a67493aa0 Mon Sep 17 00:00:00 2001 From: m3ultra Date: Thu, 16 Jul 2026 09:21:39 +1000 Subject: [PATCH] =?UTF-8?q?Fable=20(integrator):=20round-15=20instructions?= =?UTF-8?q?=20=E2=80=94=20close=20the=20v3.0=20release=20(F's=20carried=20?= =?UTF-8?q?brief=20+=20poster-face=20fix=20+=20amp=20fix)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-Authored-By: Claude Fable 5 --- docs/LANES/ROUND15_INSTRUCTIONS.md | 138 +++++++++++++++++++++++++++++ 1 file changed, 138 insertions(+) create mode 100644 docs/LANES/ROUND15_INSTRUCTIONS.md diff --git a/docs/LANES/ROUND15_INSTRUCTIONS.md b/docs/LANES/ROUND15_INSTRUCTIONS.md new file mode 100644 index 0000000..da1862f --- /dev/null +++ b/docs/LANES/ROUND15_INSTRUCTIONS.md @@ -0,0 +1,138 @@ +# 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.