commit 5086a325d8e51a9dc8f0dac7e7473536994adcc1 Author: type-two Date: Sun Jul 19 15:48:44 2026 +1000 Design docs, build plan, contracts, and lane instructions for NOT TONIGHT Co-Authored-By: Claude Fable 5 diff --git a/CLAUDE.md b/CLAUDE.md new file mode 100644 index 0000000..3d80ad1 --- /dev/null +++ b/CLAUDE.md @@ -0,0 +1,35 @@ +# NOT TONIGHT — instructions for Claude sessions in this repo + +Papers, Please-style bouncer sim. Browser game: Phaser 3 + TypeScript (strict) + +Vite + Vitest. You are probably an **Opus 4.8 lane executor** — this repo is built +by parallel "lanes" coordinated through files, reviewed by Fable. + +## Before writing any code +1. Read `LANEHANDOVER.md` — find the latest REVIEW block and any block for your + lane. Review instructions override lane files. +2. Read your lane file in `lanes/` (John/Fable will tell you which lane you are; + if not stated, ask — do not guess). +3. Skim `docs/GAME_DESIGN.md`, `docs/BUILD_PLAN.md`, and read `docs/CONTRACTS.md` + fully. Contracts are law. + +## Hard rules +- Work ONLY on your lane branch (`lane/`), only in your owned directories + (BUILD_PLAN.md §2) + your tests + LANEHANDOVER.md. **Never merge or push main.** +- Parallel lanes on one machine: use a git worktree + (`git worktree add ../not-tonight- lane/`), don't switch branches in + a shared checkout. +- Don't modify `docs/CONTRACTS.md`, `src/core/`, or `src/data/types.ts` after + Phase 0 — file a CONTRACT CHANGE REQUEST in the handover instead, stub locally + with `// TODO(contract):`, keep working. +- No `Math.random()` — SeededRNG streams only. No cross-lane scene imports. + Game logic in pure tested functions (`src/rules/`, per-lane logic modules); + scenes stay thin. +- End EVERY session: `npm run lint && npm run build && npm test` clean, append a + SESSION block to `LANEHANDOVER.md` (template in that file), commit, push your + branch. An unpushed session didn't happen. +- Remote is Gitea: `ssh://git@100.71.119.27:222/monster/not-tonight.git`. + +## Tone guard +The game is Aussie hospitality satire — affectionate, funny, with a moral undertow +(design doc §4.3). If content you're writing reads as mean-spirited rather than +absurd, soften toward absurd. diff --git a/LANEHANDOVER.md b/LANEHANDOVER.md new file mode 100644 index 0000000..c3db89f --- /dev/null +++ b/LANEHANDOVER.md @@ -0,0 +1,48 @@ +# LANE HANDOVER LOG + +Coordination file between lanes (Opus 4.8 execution sessions) and the reviewer +(Fable). **Append-only** — never edit or delete previous blocks. Newest block at the +BOTTOM. Push after every session so the reviewer can see state remotely. + +## Protocol + +1. Before starting work: read this whole file + your lane file in `lanes/` + + `docs/CONTRACTS.md`. Check for a REVIEW block addressed to your lane — it + overrides your lane file where they conflict. +2. Work only inside your lane's owned directories (see BUILD_PLAN.md §2). +3. End of session: append a SESSION block (template below), commit, push your + `lane/` branch. +4. Never merge to main — the reviewer does that. +5. Blocked on a contract ambiguity? Don't stall and don't silently change the + contract: stub locally with `// TODO(contract):`, log a CONTRACT CHANGE REQUEST + below, keep moving. + +## SESSION block template + +```markdown +--- +### SESSION —