From 22a0741ad1287a88b4b7eae97be8dd47cc41c1a8 Mon Sep 17 00:00:00 2001 From: m3ultra Date: Wed, 15 Jul 2026 17:32:34 +1000 Subject: [PATCH] =?UTF-8?q?Fable=20(integrator):=20round-12=20instructions?= =?UTF-8?q?=20=E2=80=94=20v3.0-alpha,=20one=20pub=20end-to-end?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 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 --- docs/LANES/ROUND12_INSTRUCTIONS.md | 114 +++++++++++++++++++++++++++++ 1 file changed, 114 insertions(+) create mode 100644 docs/LANES/ROUND12_INSTRUCTIONS.md diff --git a/docs/LANES/ROUND12_INSTRUCTIONS.md b/docs/LANES/ROUND12_INSTRUCTIONS.md new file mode 100644 index 0000000..2ddc66e --- /dev/null +++ b/docs/LANES/ROUND12_INSTRUCTIONS.md @@ -0,0 +1,114 @@ +# 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.