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>
115 lines
7.1 KiB
Markdown
115 lines
7.1 KiB
Markdown
# 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)
|
||
|
||
1. **Crowd: both.** Most of the audience stands and watches; a seeded subset dances.
|
||
2. **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.
|
||
3. **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.gigs` interface FIRST** (half-day handshake rule) — D, C, F all hang
|
||
off it.
|
||
|
||
## Lane A — gig truth (publish interface first)
|
||
|
||
1. **Venue lot**: one `pub` per town (registry type + placement rule — spine end or corner
|
||
anchor; must not displace the openLate shop). Venue is enterable like any shop.
|
||
2. **`plan.gigs`** (seeded, in the plan, documented in CITY_SPEC v3 section):
|
||
`[{ gigId, venueShopId, bandName, genreKey, night, startSeg, endSeg, cover }]` — nightly
|
||
entries; `cover` seeded: ~half free (0), else integer $2–$10. Poster assignments: which
|
||
walls/poles advertise which gig (reuse the sign/poster placement seam B already consumes).
|
||
3. **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.
|
||
4. Carried debt, now due (D consumes it this round): the **closing-time occupant ruling**.
|
||
|
||
## Lane C — the band room (pub archetype)
|
||
|
||
1. 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).
|
||
2. **`room.watchPoints[]`** — the browse-points pattern, crowd edition: 6–8 seeded floor poses
|
||
facing the stage, `{ x, z, ry, dance: bool }` with `dance` seeded ~⅓ true (John: "a bit of
|
||
both"). Same coord frame + ry convention as `counter.stand`. Publish the interface in your
|
||
first commit; validate no overlap with fittings/keeper/browse points.
|
||
3. `room.audio` gains `gigKey` when 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
|
||
|
||
1. **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.
|
||
2. **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).
|
||
3. 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).
|
||
4. Budget + leak numbers in your progress note, as ever.
|
||
|
||
## Lane E — instruments, posters, gig sound
|
||
|
||
1. 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.
|
||
2. 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).
|
||
3. `gen_audio.py` extension: 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)
|
||
|
||
1. 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`.
|
||
2. 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.
|
||
3. **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)
|
||
|
||
1. **Gig state machine** off the clock: `quiet → doors (startSeg−1) → on → done`, driven by
|
||
`plan.gigs`; exposed on `window.PROCITY.gigs` for smokes.
|
||
2. `?gigs=1` seam + **flags-off regression stays green** (prime law).
|
||
3. **Door charge**: entering the venue while doors/on and `cover > 0` debits 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).
|
||
4. Audio wiring: gig bed via C's `gigKey` inside, B's muffled spill outside; audio smokes extend
|
||
to the gig path.
|
||
5. 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=1`
|
||
still silent-and-fine with `?gigs=1`.
|
||
6. Alpha acceptance shot: gig on, band + mixed standing/dancing crowd, human-sized line. Then
|
||
tag **v3.0-alpha** (remember: `git tag` and `git push` as 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.
|