# LANE-CONTENT — Door depth & the moral layer (Phase 3, parallel) **Executor:** Opus 4.8. **Branch:** `lane/content` (from main after Phase 2). **Owns:** `src/scenes/door/`, `src/rules/`, `src/data/strings/` (door-related files), tests. **Prereq reading:** CLAUDE.md → `docs/GAME_DESIGN.md` §3.1/§4 → the Phase-2 REVIEW block in `LANEHANDOVER.md`. ## Phase-2 reality (read before coding) - The night is now a real flow: `NightScene` owns clock/meters/audio/save and a `NightContext` (see its interface — `sfx`, `requestLocation`, `beatIntervalMs` are new since Phase 1). Door and Floor run concurrently ALL night; the player toggles via the doorway ("step inside") and the floor's entry exit. - While the player is on the floor, **Kayden rules the real queue** in `DoorScene.kaydenRule()` (admit 80%, same `judge()`, no UV stamp 1-in-7 — stamp accuracy is decided in `NightScene.onVerdict`). - Heat is run-scoped and saved; 3rd strike ends the night AND the run immediately (`endReason: 'licence'`). Nights chain Thu→Fri→Sat via `NightSummaryScene.nextAction()`; `save.ts` carries `GameState`. - `ui/Stamp` + sfx are live in the deny path; `data/strings/door.ts` has `FAIL_TEXT.licence`. ## Deliverables (in priority order) ### 1. The Guest List clipboard (design §3.1 — specced, never built) A desk clipboard panel: tonight's list (generated, 8–14 names, some misspelled versions of real patron names). Patrons with `claimsGuestList` get a "'m on the list" line when they step up; player cross-checks. `knowsOwner` patrons who are DENIED trigger the existing furious-Dazza path (judge already scores this — surface it: their step-up line should drop hints ("Terry said swing by"), and `data/strings/dazza.ts` has the `owner-scare` text to foreshadow). Misspelling rule: a name that ALMOST matches is usually legit (bad handwriting); an exact-match name on a confident patron is sometimes a lift. Tells, not certainty. Pure logic in `rules/guestList.ts` + tests. ### 2. Scripted moral encounters (design §4.3 — the heart) 2–3 scripted patrons injected per night by the generator override hook (`generatePatron(ctx, clockMin, archetypeOverride)` + a new scripted-encounter scheduler in `rules/` or `data/`): the girl who needs back in to grab her mate (no stamp, over capacity), the freshly-dumped regular who just wants one quiet beer (already `loose`). Multi-beat dialogue via the existing toast/dialogue patterns. Doing the human thing costs Vibe or risks Heat; the game never says which choice was right. NO achievement chimes, no morality meter — the design doc is explicit that this stays unscored. ### 3. The Inspector (archetype exists, does nothing yet) Activate `inspector`: reads as a boring `punter` at the rope (their doll is deliberately unremarkable). If admitted, they observe for ~30 clock-min: any live breach in that window (capacity over licensed, a `maggot` on the floor, underage inside) converts its deferred strike to IMMEDIATE. Then they leave and Dazza texts "that was the INSPECTOR you muppet". If denied — nothing happens, ever (they were just a quiet person; paranoia is the tax). Pure logic `rules/inspector.ts` + tests; wiring via bus events only. ### 4. The Incident Report (design §3.3 — lying groundwork) On the Night Summary: a short form (3–4 incidents sampled from `NightState.incidents`) where the player picks a written account per incident — truthful or flattering. Store both truth and account in `GameState.pastReports`. Cross-night audit (contradictions → strikes) is Phase 4; THIS lane only builds the form + storage + one taste: a lie about a `kayden` incident can be contradicted by Kayden's own log line next morning (Dazza text). Keep the form fast — 20 seconds, not homework. ### 5. Sobriety line-walk (stretch) The third challenge: cursor-follow line at the desk. Only if 1–4 land clean. ## Constraints - All scoring through `judge()`/`meters:delta`/`heat:strike` — no new direct meter paths. New events need a CONTRACT CHANGE REQUEST (declaration-merge bridges are BANNED now — request and wait for the fold). - Kayden must interact sanely with everything you add (e.g. he auto-admits guest-list liars — that's fine and funny; make sure it can't crash). - Every pure module tested; play a full 3-night run before your handover and report what the run FELT like — the economy findings from Phase 1 are still open and your content changes the mix.