# PROCITY — Round 13 lane instructions (from Fable, integrator) Date: 2026-07-15 · **v3.0-alpha shipped** (one pub end-to-end, `?gigs=1`, tag on origin; qa `--strict` 6/6 green, gig-night interior 47 draws / 171 asset-free of 350). Round 13 is **v3.0-beta: THE DISTRICT** — 2–4 venues, a full week's schedule, posters town-wide, the outdoor queue, walla + applause, and the night-readability pass. Same flag, same laws. ## First: the R12 debt ledger (all six are owned this round) F wired the alpha last and surfaced these (LANE_F_NOTES §12). Each is assigned below in its owner's section, but here is the ledger so nothing dangles: 1. **gigKey contract (C ↔ E ↔ B ↔ F)** — C emitted `gig-pubrock`, E shipped `pubrock-live`, B hardcoded `pubrock-live`, F bridged at the glue. **Ruling: the manifest key IS the gigKey.** Canonical form `gig-` (`gig-pubrock`, `gig-grunge`, …). E renames the bed in manifest + gen_audio, B's spill reads the same key, F deletes the `GIG_BED` bridge, and the contract line lands in CITY_SPEC §v3. One key, zero mapping — genre #2 must not rediscover the R1 facade-skin trap. 2. **Instrument GLBs unwired (D)** — E's 5 GLBs landed in R12; D's band still holds primitives. D owns the join via its own `opts.instrumentFor(role)` seam. 3. **No drummer (C + D)** — R12 spec said drummer, C's poses were a front-line trio, D built to C. **Ruling (Fable): bring implementation to spec — the kit gets played.** C adds a 4th `drums` pose on the riser; D adds the drummer (seated bob, E's `drum_kit`). The band is now **4** (front-line trio + drummer); F's `band==3` smoke moves to 4. *John can veto to a front-line trio — say so and C/D skip it, F amends the spec line instead.* 4. **RY_FLIP audit (C + D)** — D found C's pose `ry` plants the fleet mesh 180° off (fleet visual front is local +Z, not the −Z the sim comments assume) and compensated with `RY_FLIP = π`. C+D: agree whose convention is canonical, write it into the pose contract in LANE_C_PUB.md, and check whether **keepers/browsers have been subtly back-to-front all along**. If a flip is needed there, it's a visual fix — no golden moves. 5. **Poster placement (A)** — B reports main-street posters land mid-road on intersection nodes. A: add a verge/pole offset so posters seat on furniture, not bitumen. 6. **Stature-vs-crown gate (F)** — F's smoke measures stature (`crown − base.y`) because the band stands on a 0.32 m deck; `tools/qa/interior_scale_check.py` still asserts world crown and inherits the bug the day a keeper stands on a platform. F: port the stature measure into the shared gate (keep the ceiling-clip assert as its own line). ## Laws for the round (unchanged) - **Prime flag law:** everything behind `?gigs=1`, default OFF; flags-off boot byte-identical; v2 goldens frozen; the **gig golden `0xa6ae5a5e` re-pins this round** (multi-venue changes gig-plan output — A re-pins it in the same commit as the change, CITY_SPEC amendment law). - Deterministic from citySeed · asset-free fallback (`?noassets=1` + `?gigs=1` stays silent-and-fine) · audio law (gesture-gated, fail-soft) · budgets are numbers — gig-night interior **≤350** incl. crowd; street **≤300 draws / 200k tris** *at the busiest venue block with all frontages/posters/queue in* — state your measured worst · human-sized line on every humanoid shot · fresh browser contexts for verification. - **A publishes the multi-venue `plan.gigs` interface FIRST** (half-day handshake rule) — C, D, B, F all hang off it. ## Lane A — the district in the plan (publish interface first) 1. **2–4 venues per town** (seeded count). Registry types: `pub` (have it), **`band_room`**, **`rsl`**. Placement rules per charter: pub at spine end/corner (as now), band_room on the warehouse fringe, RSL off-spine. Same conversion-in-place trick as R12 (keep lot id + geometry, no overlap, never the openLate shop, enterable). Each venue carries `venueKind` and a **`genreKey` by kind**: pub → `pubrock`, band_room → `grunge`, rsl → `covers` (E ships the two new beds; John may re-flavour — see Standing). 2. **`plan.gigs` goes district**: 7 nights × all venues (not every venue plays every night — seeded dark nights are fine and read true; ~4–6 gigs per venue per week). Same entry shape; `cover` law unchanged (~half free; RSL skews cheap, band_room skews free). Custom band names spread across the whole schedule, still priority-seeded, still ≤1 slot per name per night across town (no band plays two venues at once). 3. **`plan.posters` goes town-wide**: each venue's tonight-gig gets frontage + spine coverage; add the **verge/pole offset** (debt #5). Posters may advertise different venues' gigs on the same pole run — that's the district reading. 4. Re-pin the gig golden + CITY_SPEC v3 section update (venues table, genre-by-kind map, the gigKey contract line from debt #1 — coordinate the wording with C/E). ## Lane C — two more rooms + the drummer 1. **`band_room` and `rsl` interior archetypes.** Reuse the pub recipe machinery — different dressing, same contracts: band_room = smaller/scuzzier (posters on walls — E's skins, low ceiling, stage barely a riser); RSL = carpet-and-bistro (bigger floor, stage at one end, bar counter). Both return `stage`, `watchPoints[]` (band_room 6–8, RSL 8–12 — RSL is the crowd-cap stress case), `audio.gigKey = 'gig-'+genreKey`, quiet-night variants. Budgets in your note. 2. **`drums` pose** on the riser in all three archetypes (debt #3): `stage.bandPoses` grows to 4, role `drums`, seated height noted for D. 3. **RY audit with D** (debt #4): pin the pose `ry` convention in LANE_C_PUB.md, check keepers/browsers facing, fix or document. 4. Publish the two new archetype interfaces (watchPoints counts, stage shapes, gigKeys) in your FIRST commit even if dressing follows. ## Lane D — instruments in hand, a drummer, and the queue 1. **Wire E's instrument GLBs** (debt #2): manifest fittings via your `instrumentFor(role)` seam — electric_guitar/bass_guitar/mic_stand in hand, drum_kit planted at the `drums` pose, guitar_amp as stage dressing if it reads (C's call on placement). Orientation/scale is yours; primitives remain the fallback (asset law). Note the draw/tri delta — E's meshes are heavy (30–96k tris) and E is decimating in parallel; wire against whatever's in the manifest and re-measure after E's pass. 2. **The drummer** (debt #3): 4th rig, seated bob at the `drums` pose, behind the kit. 3. **The outdoor queue** (charter item, parked since v2): patrons visibly queue at the venue door during `doors` (and overflow during `on` if the room is at watchPoint cap). Seeded short line (2–6), spaced poses along the frontage (B marks the zone — consume it if present, else straight line from the door), drains into the venue as entries happen, gone by `done`. Queue rigs ride the same gate-protected spawn path; budget stated. 4. **Multi-venue surge**: `setGig` per venue (multiple concurrent). Identity continuity stays opportunistic — the full "ped you followed is in the crowd" promise is v3.0, not now. ## Lane E — two genres, lighter meshes, the publish 1. **Two new gig beds**: `gig-grunge` (band_room) and `gig-covers` (RSL — mellower, organ-ish covers-band feel). Same procedural discipline as R11/12 (seeded, loopable, OGG+M4A, loudness, provenance). **Rename `pubrock-live` → `gig-pubrock`** (debt #1) in gen_audio + manifest in the same commit B/F switch readers. 2. **Decimation/LOD pass on the 5 instrument GLBs** — the amp is 96k tris and a district means multiple stages. Target ≤15k per instrument (they're 1m props, not hero assets); re-run footprints/thumbs; keep originals in the depot as `_hi` variants. 3. **Depot publish** of the instrument GLBs — *gated on John's OK* (the tailnet push the harness blocked in R12). If John OKs it in this round's kickoff, publish and clear the Gate-3 provenance flag; if not, note it and carry. 4. Poster pack: 1–2 extra templates only if the town-wide spread looks repetitive in B's verification — B's call, don't pre-build. ## Lane B — the night the district reads by 1. **Night-readability pass** (the epoch's bundled polish, now due): streetlamp pools on venue blocks + window light spill so the Friday-night walk reads. Budget-safe (state the draw/tri cost); scoped to venue blocks first, town-wide only if budget holds. 2. **Generalize the venue presentation to N venues**: frontage glow + posters per venue, driven per-venue by F's state (`update(gigStates)` — agree the shape with F early). Spill goes per-genre: read each venue's `gigKey` bed (debt #1's canonical key), same 470 Hz lowpass law. 3. **Queue zone marker**: a subtle door-adjacent zone (rope/chalk/nothing-fancy, primitive fine) publishing `venue.queueZone = {x,z,ry,len}` for D's queue poses. 4. **Bookmarks debt** (F's ask + R3 §9): add `venue_night` (pub frontage, `seg:5`) and close out the missing bookmark set in one pass, so `tools/qa/gig_shot.py` can script the street money shot. ## Lane F — the district fires (last) 1. **Gig state machine goes per-venue**: one latch per venue off the same `procity:segment` spine (keep the getter law; keep the landing-segment night-roll law — they were both hard-won). `window.PROCITY.gigs` becomes per-venue state keyed by venueShopId, with the alpha shape kept as a compat alias for one round (B reads it mid-round). 2. **Walla + applause wiring**: E's `ambience-crowd-walla` under the gig bed while `on`; `sfx-applause` sting on `on → done`. Audio law throughout. 3. **Cover charge per venue** (existing seam; per-venue paid stamps — a night at two venues is two covers). 4. **Delete the `GIG_BED` bridge** once E's rename lands (debt #1) and add the CITY_SPEC contract line with A/C/E. 5. **Gate hardening** (debt #6): stature measure into `interior_scale_check.py`. 6. **Smokes**: district determinism (two runs byte-equal across all venues), per-venue crowd ≤ watchPoints, band==4, queue ≤ cap and drains by `done`, every venue's gigKey resolves (the debt-#1 assert, now for 3 genres), street budget at the busiest venue block, `?noassets=1`+`?gigs=1` silent-and-fine, flags-off regression green. 7. Acceptance: the district money shots — street: lit frontage + queue + posters at night (use B's `venue_night` bookmark); interior: 4-piece with real instruments + mixed crowd, human-sized line. Then tag **v3.0-beta** (`git tag` and `git push` as separate commands — the classifier blocks them combined). ## Order A first (multi-venue `plan.gigs` + venue kinds + golden re-pin) → C (archetypes + drums pose) in parallel with E (beds + decimation + rename) → D (instruments/drummer/queue) → B (night pass + N-venue frontage + queue zone + bookmarks) → F last. A and C: interfaces in your FIRST commit. The debt-#1 rename is a three-way (E rename, B reader, F bridge-delete) — land E's side early so B/F switch inside the round, and nobody merges a half-renamed manifest. ## Standing - **v3.0 preview (next round, do not start):** identity continuity into the crowd, the money-shot tour (John's queue shot), soaks, docs freeze, the v3.0 tag. - **John — three items, only #1 blocks anything:** 1. **Depot publish OK?** E's 5 instrument GLBs are staged locally; the tailnet depot push needs your explicit go (harness classifier flagged it outward-facing). Until then qa Gate 3 carries a provenance flag. 2. **Genre flavours**: defaults are band_room → grunge, RSL → covers. Re-flavour freely (names only — E synthesizes to order). 3. **Drummer ruling**: Fable ruled 4-piece (kit on the riser, spec intent). Veto to front-line trio if you prefer — before D starts, ideally.