From 662060388acbd6e3032a4581e2a2e1436102a56b Mon Sep 17 00:00:00 2001 From: type-two Date: Sun, 19 Jul 2026 22:17:57 +1000 Subject: [PATCH] Phase 3 review: merge content/floor2/juice2, port stale-base floor work into night mode, aggro decay, Ambience+MixDesk wiring Co-Authored-By: Claude Fable 5 --- CLAUDE.md | 3 ++- LANEHANDOVER.md | 70 +++++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 72 insertions(+), 1 deletion(-) diff --git a/CLAUDE.md b/CLAUDE.md index bc008d2..24f2e6e 100644 --- a/CLAUDE.md +++ b/CLAUDE.md @@ -35,7 +35,8 @@ by parallel "lanes" coordinated through files, reviewed by Fable. floor WASD + E (E at the entry exits back to the door). While you're inside, Kayden works the door — badly, on purpose. - Dev routes: N night · P parade · F floor demo · J juice demo (+ same-named - URL hashes). `localStorage.removeItem('not-tonight-save')` for a clean run. + URL hashes) · M toggles the MIX DESK overlay anywhere (ear-pass rig). + `localStorage.removeItem('not-tonight-save')` for a clean run. - Audio unlocks on first click (TechnoEngine + location filter). Before that a StubBeatClock keeps `beat:tick` honest. diff --git a/LANEHANDOVER.md b/LANEHANDOVER.md index 250a739..ba5d653 100644 --- a/LANEHANDOVER.md +++ b/LANEHANDOVER.md @@ -862,3 +862,73 @@ No new ones: the fight reuses the existing `'fight'` infraction kind and `heat:s `TechnoEngine` for `beat:tick`, real meter HUD. - All five v0.2 floor infractions are now built — the floor is feature-complete against design §3.2. + +--- +### REVIEW — Fable — 2026-07-19 (Phase 3 review & integration) +**Reviewed:** lane/content @ 37f9892 (518 tests), lane/floor @ 906a366 (225), +lane/juice2 @ 10462eb (460). All gates verified green per-branch. Merged +content → juice2 → floor; **621 tests green on main** post-merge + integration. +Verified in-browser: a Kayden-heavy night produced the full integrated strike +sheet (a fake-ID minor via Kayden, a hip flask, and an UNATTENDED FLOOR FIGHT — +cause: "someone said the kebab shop has gone downhill"), the incident-report +form runs between summary and next shift, and the mix desk overlays a live scene +via the new M route. + +**Quality notes:** +- CONTENT: measured guest-list posteriors instead of asserting them, and the + judge() intoxication fix closed the worst scoring gap in the game — the exact + right person fixed it (rules owner). The §4.3 catch (humane choice must not be + secretly optimal) is the review of the phase. +- FLOOR2: six real defects found by re-reviewing YOUR OWN previous session is + the standard now set. The honest note that your verify harness had a 100% + false-negative rate (refute-biased + unanimity) is going in the reviewer + playbook: that pattern is an off switch, not a quality bar. +- JUICE2: the mix desk turns the ear-pass from a code task into a 10-minute + human task. Correct instinct throughout. + +**Protocol breach (FLOOR2) — no harm, don't repeat:** the session branched from +its OLD lane tip (3eee843), not main — so it never saw Phase 2, its handover +re-requests CCRs that were folded a phase ago, and its round-2 code imported a +file main had moved. I ported everything at merge (fight files re-pointed at +data/strings/floor, fights wired into NIGHT mode incl. the unattended path, +live-body cap applied to the night spawn path). Next session: `git fetch && +git switch -c lane/ origin/main`, and read the CURRENT handover first. + +**Integration applied (beyond the merges):** +- Aggro physiology (approved round-1 request) implemented: `tickCalm` in the + floor — no brewing fight + no unhandled maggot → ~0.3 aggro/clock-min cools, + both modes, player present or not. Numbers are tuning-pass fodder. +- Fight swings radio the door (urgency 3) when the player is at the rope. +- `Ambience` created/destroyed by NightScene beside the engine; starts on + `audio:unlocked`. +- `MixDeskScene` registered globally; **M** toggles it as an overlay anywhere. + +**Rulings:** +1. CONTENT Q1 (`RunInfo.game` mutable ref): ACCEPTED as-is. If a third writer + to the save ever appears, we revisit with an event; two is fine. +2. CONTENT Q2 (double save): accepted, cheap. Leave it. +3. CONTENT Q3 (encounter repeats): YES — gate repeats across nights via + GameState next content session, and grow the table to 8–10. +4. FLOOR2 (fight fuse burns through overlays): CONFIRMED as design. ESC exists; + choosing what to abandon is the floor. +5. FLOOR2 (doll texture cache growth): bounded per-night by the crowd cap; + acceptable until the v0.4 art pass, which owns texture lifecycle anyway. +6. JUICE2 Q1 (the arc changes what "the mix" means by hour): CONFIRMED wanted. + The desk pinning PEAK on entry is the right tuning default. +7. JUICE2 Q2 (Ambience owner): NightScene, done. +8. Fight heat strike as `deferred: true` + 150s cooldown: good rebalance, + approved retroactively. + +**Open items carried:** +- The Kayden-contradiction path (lie about him in the report) has never fired in + real play — someone play a floor-heavy night and lie about it. +- Stall/pat-down/bin SFX still unwired (overlay constructors want the handle). +- Cut-off overlay ↔ DialogueBox drunk-typo integration (widget ready, call site + floor-owned). + +**NO NEW LANES OPEN.** The bottleneck is no longer code: it is two sessions with +John — (1) the EAR PASS (press M in a real night, solo voices, DUMP MIX, paste +the literal back), and (2) the ECONOMY TUNING PASS (baselines: content's +3-night run data + door's Phase-1 measurements + floor's idle/attentive table). +After those land, the next lanes are content-expansion (encounters, repeat +gating), venue 2, and the v0.4 art pass per docs/ASSETS.md.