not-tonight/tests
m3ultra 22bd43857c Review pass: the room-specific bugs a shared FloorView was hiding
Three independent reviewers checked each new venue against its brief. No
blockers, all three rooms genuinely distinct — but two of the findings were
mine, in the file the layout authors were told not to touch.

FloorView was still drawing two things at Voltage's coordinates:
- The scan beams pivoted on a hardcoded (38,23) — Voltage's mirror ball. In The
  Royal that swept two beams across the empty middle of the pub, twenty-five
  tiles from that venue's dance floor. Now derived from the layout's own
  discoball, and a venue without one gets no beams, because the beams ARE the
  ball's light.
- The resident DJ stood at a hardcoded (55.5, 22.5) — Voltage's booth, which in
  The Royal is the middle of the bistro. Now placed from the venue's own gear
  and stepped clear of `posts.decks`, so a player on a DJ shift is never
  standing inside him. The beat-bob had the same constant baked into it.

Elevate's staffDj prop is dropped as a consequence: with a resident DJ derived
per venue it would have made two DJs on the plinth, and three once the player
took the shift.

New invariant: a staff prop may not stand on a post tile. Elevate's bartender
was on the exact tile the bar shift teleports the player to, so the shift would
have been played from inside her. Caught by the rule, then fixed.

`mirror` and `graffiti` kinds added. Elevate was standing BOTH its mirrors up as
`poster3` (the author raised it as a contract request and stubbed it honestly),
which would have hung the same torn gig poster in a marble bathroom and called
it a mirror. ROOM's toilets get the graffiti its brief always asked for.

The Royal: TAB screens moved onto the wall they belong on rather than floating
mid-carpet, the trough given its own fluoro (the one fixture that room is known
for was rendering unlit), the beer garden's dark middle band lit — 288 tiles on
two lights left the gate everyone walks through in the dark — the out-of-order
sign moved off the tile the queue stands on, and two comments corrected to
describe what the code actually does.

Also hardened the farm client: `_req` raised SystemExit, which is a
BaseException, so `except Exception` in the batch's worker threads did not catch
it and one stray 401 during a poll killed a 43-asset run after a single asset.
It now raises a normal error and retries transient 401/429/5xx with backoff.

Gate: lint clean, tsc clean, floor suite 271 passing.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-07-28 20:01:40 +10:00
..
floor Review pass: the room-specific bugs a shared FloorView was hiding 2026-07-28 20:01:40 +10:00
sim The bar sells the room, and the inspector makes one bad pour matter 2026-07-26 19:53:25 +10:00
arc.test.ts LANE-JUICE2: ear-pass mix desk, ambience beds, night arc in the engine 2026-07-19 21:47:53 +10:00
arrivalCurve.test.ts Economy tuning pass: sim harness + 9 feel-bands, Dazza rule cap, natural churn, capacity strike fix, hype decay, vibe cooling 2026-07-20 05:35:47 +10:00
beatclock.test.ts Phase 0: scaffold, contracts, core systems, patron generator, paper-doll renderer, Parade demo (49 tests) 2026-07-19 16:20:53 +10:00
clock.test.ts Phase 0: scaffold, contracts, core systems, patron generator, paper-doll renderer, Parade demo (49 tests) 2026-07-19 16:20:53 +10:00
dazzaSchedule.test.ts Late game: 1:30 lockout law, ID passback (SEEN TONIGHT), regular step-up lines, yard fence-jumpers 2026-07-20 18:45:50 +10:00
dollFrames.test.ts Three jobs: sweep out of the god object, story beats per role, and dolls that breathe 2026-07-26 20:49:42 +10:00
dollplan.test.ts Phase 0: scaffold, contracts, core systems, patron generator, paper-doll renderer, Parade demo (49 tests) 2026-07-19 16:20:53 +10:00
dressCode.test.ts Economy tuning pass: sim harness + 9 feel-bands, Dazza rule cap, natural churn, capacity strike fix, hype decay, vibe cooling 2026-07-20 05:35:47 +10:00
dressCodeShuffle.test.ts ROOM boss week: venue 4 — seeded 15-min dress-code shuffle (the board is the law), lip-read rope dialogue, ROOM crowd/knobs; SCENARIOS shelf cleared 2026-07-21 02:06:16 +10:00
encounters.test.ts The whole shelf: 9 scripted characters (cop/celebrity/sovereign/rider/promoter/neighbour/hens/twins/ex-doorman) + 5 floor systems (vomit/phone/water/first-aid/kebab run) 2026-07-20 19:27:43 +10:00
eventbus.test.ts Phase 0: scaffold, contracts, core systems, patron generator, paper-doll renderer, Parade demo (49 tests) 2026-07-19 16:20:53 +10:00
filterCurve.test.ts LANE-JUICE: audio engine, SFX set, five UI widgets, JuiceDemoScene 2026-07-19 18:52:43 +10:00
floorScore.test.ts The floor score: lights on at close — sweep the notes, the shrapnel, the untouched kebab; the baggie is a choice and the pay line knows 2026-07-21 03:40:24 +10:00
generator.test.ts Cross-night regulars with disguises, venue crowd identities, retractions as texts 2026-07-20 16:43:40 +10:00
guestList.test.ts LANE-CONTENT: the guest list, the moral encounters, the inspector, the paperwork 2026-07-19 21:32:37 +10:00
idCheck.test.ts Late game: 1:30 lockout law, ID passback (SEEN TONIGHT), regular step-up lines, yard fence-jumpers 2026-07-20 18:45:50 +10:00
incidentReport.test.ts The report catches up: frequency-aware interest weights and eleven banks for the floor's own paperwork 2026-07-26 19:43:06 +10:00
inspect.test.ts LANE-DOOR: land the adversarial review findings 2026-07-19 19:06:31 +10:00
inspector.test.ts LANE-CONTENT: the guest list, the moral encounters, the inspector, the paperwork 2026-07-19 21:32:37 +10:00
judge.test.ts Late game: 1:30 lockout law, ID passback (SEEN TONIGHT), regular step-up lines, yard fence-jumpers 2026-07-20 18:45:50 +10:00
lipRead.test.ts ROOM boss week: venue 4 — seeded 15-min dress-code shuffle (the board is the law), lip-read rope dialogue, ROOM crowd/knobs; SCENARIOS shelf cleared 2026-07-21 02:06:16 +10:00
memory.test.ts Phase 0: scaffold, contracts, core systems, patron generator, paper-doll renderer, Parade demo (49 tests) 2026-07-19 16:20:53 +10:00
meters.test.ts Phase 0: scaffold, contracts, core systems, patron generator, paper-doll renderer, Parade demo (49 tests) 2026-07-19 16:20:53 +10:00
mix.test.ts LANE-JUICE2: ear-pass mix desk, ambience beds, night arc in the engine 2026-07-19 21:47:53 +10:00
nightSummary.test.ts Fix build break in the shoe tests: freshNightState takes (venueId, nightIndex, licensed) 2026-07-22 03:18:49 +10:00
queueManager.test.ts Floor-economy sim: bot nights for the carpet and the bar — caught the carpet's uncapped hype ratchet (vibe-pin 0.27 to 0.71) and capped the trickle 2026-07-25 21:03:44 +10:00
regularCast.test.ts Cross-night regulars with disguises, venue crowd identities, retractions as texts 2026-07-20 16:43:40 +10:00
rng.test.ts Phase 0: scaffold, contracts, core systems, patron generator, paper-doll renderer, Parade demo (49 tests) 2026-07-19 16:20:53 +10:00
roleBeats.test.ts Three jobs: sweep out of the god object, story beats per role, and dolls that breathe 2026-07-26 20:49:42 +10:00
roster.test.ts Role permissions: the glassie can see everything and touch nothing 2026-07-26 20:02:54 +10:00
save.test.ts Phase 0: scaffold, contracts, core systems, patron generator, paper-doll renderer, Parade demo (49 tests) 2026-07-19 16:20:53 +10:00
scheduling.test.ts LANE-JUICE: audio engine, SFX set, five UI widgets, JuiceDemoScene 2026-07-19 18:52:43 +10:00
sobriety.test.ts LANE-DOOR: the full v0.1 Door night — queue, ID minigame, dress code, stamps, summary 2026-07-19 18:49:27 +10:00
staff.test.ts Radio command: the Head of Security verb — Bump sorts the mess, Shan waters the worst, Kayden holds the rope (Elevate+, competence not guaranteed) 2026-07-21 02:49:14 +10:00
tutorialFade.test.ts Door tween leak: tutorial fade spawned an 800ms tween per frame — now pure tutorialAlpha() driven from update() 2026-07-21 01:41:21 +10:00
typo.test.ts LANE-JUICE: audio engine, SFX set, five UI widgets, JuiceDemoScene 2026-07-19 18:52:43 +10:00