R11 reviewed: clean audio round, v2.1 tagged+pushed by F, E's pack fully procedural (numpy synthesis, 23 assets, 8.7MB, $0). R12 opens the venues epoch behind ?gigs=1 with John's three charter rulings encoded: crowd = stand-and-watch + seeded ~1/3 dancing; events = mixed free/paid (seeded cover $0 or $2-10, wallet door charge, knockback on skint, no re-charge same night); band names = generator + optional web/assets/custom_bands.json drop-in (asset-law compliant, deterministic given seed+file). A publishes plan.gigs first; C watchPoints; D band trio + crowd; E instruments/posters/pub-rock bed; B lit frontage + muffled spill; F gig state machine + door charge + smokes + v3.0-alpha tag. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
7.1 KiB
7.1 KiB
PROCITY — Round 12 lane instructions (from Fable, integrator)
Date: 2026-07-15 · v2.1 shipped (audio round — clean, all four working lanes, tag on origin).
Round 12 opens the v3 epoch: VENUES & GIGS (docs/V3_VENUES.md). This round is
v3.0-alpha: one pub, end-to-end, behind ?gigs=1. Vertical slice — a Friday night that
actually happens — before any district breadth.
John's charter rulings (all three questions answered — these are now spec)
- Crowd: both. Most of the audience stands and watches; a seeded subset dances.
- Events: free AND paid, mixed. Cover charge is seeded per gig — some nights are free (local acts), some charge $2–$10 at the door through the existing wallet.
- Band names: generator + drop-in. A's generator produces names; an OPTIONAL editable drop-in file lets John hand-write names (Feral Galahs tier) that mix into the pool.
Laws for the round
- Prime flag law (unchanged from v2): everything lands behind
?gigs=1, default OFF. Flags-off boot stays byte-identical; goldens frozen; F's flags-off regression must stay green. - All v2 house law carries: deterministic from citySeed · asset-free fallback (a gig with no GLBs = placeholder band on a primitive stage — still a gig) · audio law (gesture-gated, silent-and- happy) · budgets are numbers (gig-night interior ≤350 draws incl. crowd; state your worst) · human-sized line on humanoid shots · fresh browser context for verification.
- A publishes the
plan.gigsinterface FIRST (half-day handshake rule) — D, C, F all hang off it.
Lane A — gig truth (publish interface first)
- Venue lot: one
pubper town (registry type + placement rule — spine end or corner anchor; must not displace the openLate shop). Venue is enterable like any shop. plan.gigs(seeded, in the plan, documented in CITY_SPEC v3 section):[{ gigId, venueShopId, bandName, genreKey, night, startSeg, endSeg, cover }]— nightly entries;coverseeded: ~half free (0), else integer $2–$10. Poster assignments: which walls/poles advertise which gig (reuse the sign/poster placement seam B already consumes).- Band names: generator via wordlists (90s Aussie pub-rock flavour) + the drop-in:
web/assets/custom_bands.json— OPTIONAL file, schema{ "bands": ["The Feral Galahs", …] }. Rules: absent file → pure generator, zero errors, zero fetch under?noassets=1; present → custom names are seeded into the pool with priority (a town with N custom names should surface most of them). Deterministic given (seed, file contents). Document the schema + an example file in CITY_SPEC so John can just edit it. - Carried debt, now due (D consumes it this round): the closing-time occupant ruling.
Lane C — the band room (pub archetype)
- Pub interior archetype: low stage, PA/amp positions (E GLB slots, primitive fallback), bar counter (reuse counter contract — the barkeep is just a keeper), sticky-carpet floor skin choice, green-room door blocked (house pattern).
room.watchPoints[]— the browse-points pattern, crowd edition: 6–8 seeded floor poses facing the stage,{ x, z, ry, dance: bool }withdanceseeded ~⅓ true (John: "a bit of both"). Same coord frame + ry convention ascounter.stand. Publish the interface in your first commit; validate no overlap with fittings/keeper/browse points.room.audiogainsgigKeywhen built with a gig on (F passes gig state via opts — quiet-night pub = normal interior with roomtone).
Lane D — the band and the crowd
- Band trio on stage: 3 rigs at seeded stage poses with instrument-holding idles (guitarist/bassist strum-sway, drummer seated bob — procedural bone-sway on top of the idle clip is fine, no new mocap required). Instruments are E's GLBs when present, primitives when not.
- Audience at C's watch points: the keeper/browser spawn path (it's now gate-protected
against giants).
dance:false→ stand-and-watch idle (subtle weight shift).dance:true→ dance variant (procedural bob/sway/step loop, seeded phase so the crowd doesn't metronome). - Gig-night patronage surge at the venue while state=on (uses A's closing-time ruling), and identity continuity where it falls out naturally (the queue is v3.0-beta — NOT this round).
- Budget + leak numbers in your progress note, as ever.
Lane E — instruments, posters, gig sound
- GLBs via the MODELBEAST pipeline: electric guitar, bass, drum kit (one merged kit), amp, mic stand. House GLB law, footprints, thumbnails, depot publish (tailnet path), manifest.
- Poster/flyer skin pack: 3–4 gig-poster templates that take band-name overprint the way shop signs take names (B consumes for walls/poles; C may use one inside the pub).
gen_audio.pyextension: one pub-rock instrumental live bed (the alpha genre), crowd-walla loop, applause sting. Same OGG+M4A/loudness/provenance discipline as R11.
Lane B — the venue from the street (alpha-light)
- Lit pub frontage at night while a gig is on: marquee/poster placement (E's skins + A's
poster assignments), warm window spill, sign lit through
endSeg. - Muffled-gig spill through the wall/door (extend the R11 door-spill: low-pass filtered gig bed at low gain when state=on). B owns the street side of the audio seam.
- Stretch, non-blocking: first slice of night-readability polish (streetlamp pools on the venue's block) — it makes the alpha money shot.
Lane F — Friday night fires (last, wires everything)
- Gig state machine off the clock:
quiet → doors (startSeg−1) → on → done, driven byplan.gigs; exposed onwindow.PROCITY.gigsfor smokes. ?gigs=1seam + flags-off regression stays green (prime law).- Door charge: entering the venue while doors/on and
cover > 0debits the wallet with a toast ($5 cover — THE FERAL GALAHS); insufficient funds → polite knockback toast, no entry (keeps the wallet honest, zero new UI). Free gigs walk straight in. Re-entry same night = no re-charge (seeded stamp, not new persistence). - Audio wiring: gig bed via C's
gigKeyinside, B's muffled spill outside; audio smokes extend to the gig path. - Smokes: gig schedule determinism (two runs byte-equal), crowd cap ≤ watchPoints, band always
3, gig-night interior draw budget, no-giants inherited on stage/crowd rigs,
?noassets=1still silent-and-fine with?gigs=1. - Alpha acceptance shot: gig on, band + mixed standing/dancing crowd, human-sized line. Then
tag v3.0-alpha (remember:
git tagandgit pushas separate commands — the classifier blocks them combined).
Order
A first (plan.gigs + venue lot interface) → C (watch points + archetype) in parallel with E (assets/audio) → D (band + crowd) → B (frontage/spill) → F last. A and C: publish interfaces in your FIRST commit even if implementation follows.
Standing
- v3.0-beta preview (next round, do not start): the district (2–4 venues), posters town-wide, the outdoor queue, walla+applause polish, full night-readability pass.
- John: no open questions this round — all three charter rulings received and encoded above.