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 <noreply@anthropic.com>
This commit is contained in:
type-two 2026-07-19 22:17:57 +10:00
parent df70c99dd0
commit 662060388a
2 changed files with 72 additions and 1 deletions

View File

@ -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.

View File

@ -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/<name> 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 810.
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.