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

7.1 KiB
Raw Permalink Blame History

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.