PROCITY/docs/LANES/ROUND13_INSTRUCTIONS.md
jing 79852ca220 Fable (integrator): round-13 instructions — v3.0-beta, the district
v3.0-alpha re-verified green (qa.sh --strict 6/6, 0 warn) on the shipped tree. Round 13
opens the beta: 2-4 venues (pub/band_room/rsl), full week schedule, posters town-wide,
the outdoor queue, walla+applause, night-readability pass — all behind ?gigs=1.

All six R12 debts assigned: gigKey contract (manifest key IS the gigKey, gig-<genre>),
D wires E's instrument GLBs, the drummer (band goes 4-piece — John may veto), the
RY_FLIP facing audit, A's poster verge offset, F's stature-gate hardening.

Three items for John, only the depot-publish OK blocks anything.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-15 21:30:01 +10:00

12 KiB
Raw Permalink Blame History

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 — 24 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-<genreKey> (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. 24 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; ~46 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 68, RSL 812 — 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 (3096k 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 (26), 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-livegig-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: 12 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.