PROCITY/docs/LANES/ROUND12_INSTRUCTIONS.md
m3ultra 22a0741ad1 Fable (integrator): round-12 instructions — v3.0-alpha, one pub end-to-end
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>
2026-07-15 17:32:34 +10:00

115 lines
7.1 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# 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: 68 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: 34 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 (startSeg1) → 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 (24 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.