Peregrine v4 — Beat Schedule (proposal)
Date: 2026-09-19 · Status: Approved (Sarah, 2026-09-19 morning): the mechanism, the placeholder round counts, and un-stick at 6 rounds. Unbuilt hosts wait for their games instead of falling back to the table. See §7. Not built yet.
Why it exists: the handoff spec and the season record say what each act contains. Neither says what moves the season from one act to the next, or when a document arrives. The Docket countdown (4 rounds until something turns up) has nothing to count toward until this exists.
Sources: handoff spec §5–§8 and §11, season-record.proposed.json (act_turns, proof_documents), solved-case doc §"Still open" (un-stick round counts).
1. Rules the schedule keeps
These come from locked decisions. The schedule adds no new rules.
- No timed drops. Nothing arrives by the clock. A beat waits on rounds, and a round is one whole game, recorded as one
NightTakerow. Prime Suspect banks a round only when a case closes. - Acts fire strictly in order. Nothing can be bought or compressed.
- The app doesn't do the noticing. An act closes when the student draws its closing line on the board. The app never draws the line for them.
- The Docket never lies. A line is logged when its document arrives, and it carries its in-fiction day. It never records the moment the student happened to play.
- Routine play is never gated. A beat rides on play and never blocks it.
2. How a beat works
Beat { id, act, delivers: [docID], docket: [DocketEntry], afterRounds: Int,
hosts: [gameKey] (≤ 2), requires: [flag or beat id] }
1. Arming. A beat arms when everything in requires is true. From then on the countdown shows afterRounds − rounds played since armed, plus the beat's hosts. That is where Could be in The Blotter · Client file 02 comes from.
2. Arrival. When the count reaches zero, the next round played in a host game delivers the document inside that game's result screen, as Something turned up. The document then goes on the file-room table and its Docket lines are written.
3. Guaranteed fallback. If no host is built, or afterRounds × 2 rounds pass without a host being played, the document goes straight onto the file-room table. The next session opens on the file room, as the burn does. The spec already uses this pattern for Act III (Before She's Back "if reached; guaranteed file-room fallback"). This proposal applies it to every beat. It matters today because none of the three named hosts is built: The Dossier, The Blotter (Fault in the Record) and Before She's Back are all build_status: proposed.
4. Only one beat at a time. The countdown shows the next beat and nothing else.
3. Act closes
An act closes when its closing line holds on the Connection Board. The next act then opens at the next session open, with the same cadence as the burn. That gives the moment a screen of its own: the Case Board's Act II · neighbor pinned hero is exactly this pause.
| Act | Closes when this line holds (§8) | Next act opens |
|---|---|---|
| I | Not a line. Case 01 closes (already built: Day 8 line, burn next session) | II, via the burn |
| II | Lamp complaint × Neighbor's statement (Inference) → neighborPinned | III, next session |
| III | Docket line × Intake sheet (Contradiction) and Roster card × Clerk's note (Corroboration) | IV, next session |
| IV | Intake plate × Identity plate (Corroboration) and Memo × Request log × Identity page (Recurrence) | V, next session |
| V | The Proof accepted (built as acceptProof) | CLEARED |
Un-stick (spec §7, confidence 65):
- When it fires: once every document an act needs is delivered and read, and
unstickRoundsrounds pass without the closing line. - What arrives: Falconer's official version, as a document on the table, titled Interim review finding.
- What it does: it counts as the close. The student who doesn't notice gets the official version, on paper.
- Before the burn: there's no un-stick in Act I, because a case closing is not a noticing task.
4. The schedule
Days are in-fiction and taken from the spec's Docket (§6). Round counts are placeholders for Sarah to set. The solved-case doc lists them as "session data".
| # | Act | Delivers | Docket line (day) | Requires | After | Hosts (built?) | Fallback |
|---|---|---|---|---|---|---|---|
| 1 | I | Trace in case 01 | Trace — M. Corrigan, clue 3 (4) | — | — | Prime Suspect case 01, clue E03 (built, needs the renumber) | none; it lives in the case |
| 2 | I | Method memo (method-memo) | Received — briefing memo, unsigned (6) | beat 1 | 2 | The Dossier (not built), Prime Suspect | table |
| 3 | I→II | The burn: death-file copy | three Day 9 lines | case 01 closed | next session | — | — (built) |
| 4 | II | Neighbor's statement | (new line, day ~10: "Received — neighbor's statement.") | burn read | 4 | The Blotter (not built), client file 02 | table |
| 5 | II | Housekeeper's lamp complaint | (new line, day ~14) | beat 4 read | 3 | Red String (built), client file 03 | table |
| 6 | III | Pharmacy log + clerk's note | Credential — used. Halloran's. (29) | Act III open | 3 | Prime Suspect client file (built) | table |
| 7 | III | Falconer's desk file (request log, intake sheet, roster card) | Read — her desk file, secondhand. (30) | beat 6 read | 4 | Before She's Back (not built) | table (the spec's own fallback) |
| 8 | IV | Wren's memo, original death file inside | Received — memo, W. (33) | Act IV open | 5 | table only (spec: "File room, Docket countdown") | — |
| 9 | V | The Proof opens | — | Act V open | — | the board | — |
Two consequences to check:
- New Docket lines. Beats 4 and 5 need Docket lines the spec doesn't list. Both use the locked verb received, and their days are placeholders.
- Out-of-order days: resolved 2026-09-19. The pharmacy log moved from Day 12 to Day 29, which matches the season record's approved trace ("three weeks after the death"), and the desk file moved from Day 22 to Day 30 so it still follows. The Docket now reads in order without the beats swapping, which would have made the pharmacy log wait on the unbuilt Before She's Back.
5. What this needs from Sarah
1. Approve the mechanism: rounds, not time; a host game or the table; the act opens the session after its line holds.
2. Set the round counts (the bold numbers), or approve the placeholders for playtesting.
3. Beats 4 and 5: the Docket copy and days, and whether their hosts are right.
4. Un-stick: approve it, and set unstickRounds. A suggested starting point is 6.
5. The Dossier, The Blotter, Before She's Back: confirm the table fallback until they're built. Otherwise the season waits on three unbuilt games.
6. The content itself: all eight documents are unwritten in the season record. The engine can run on titles, as the file room does now, but a playtest needs the pages.
6. Build shape once approved
SeasonBeatsin PeregrineCore: the table above as data, plus pure functionsarmed(state),countdown(state, roundsSince)andarrivals(state, round: gameKey). The shippedSeasonBoard.countdownthen returns real values instead of nil.SeasonStategainsbeatArmedAtRound: [beatID: Int]and a totalroundsPlayedcounter, bumped from the one place a round is banked (NightDebriefandCaseSession.bankTheNight).- Session open: the act-advance check sits beside the burn (
SeasonSession.open), with the same "next session" rule and the same tests. - The Something turned up card on result screens: one shared component, placed in
NightDebriefso every built game gets it at once.
Confidence: 70 that the mechanism is right. 40 on the round counts, which are placeholders by design.
7. Decision: unbuilt hosts wait (2026-09-19)
Sarah chose to have beats wait for their host games instead of using the table fallback while a host is unbuilt. Applied to the schedule, the effect is narrower than "the season stalls":
| Beat | Hosts | Effect |
|---|---|---|
| 2 · method memo | The Dossier (unbuilt), Prime Suspect (built) | Arrives via Prime Suspect. Not blocked. |
| 4 · neighbor's statement | The Blotter (unbuilt), client file 02 (built) | Arrives via client file 02. Not blocked. |
| 5 · lamp complaint | Red String, client file 03 (both built) | Not blocked. |
| 7 · Falconer's desk file | Before She's Back only (unbuilt) | Blocked. Act III can't complete until Before She's Back ships, or until this beat gets a built second host. |
| 8 · Wren's memo | table only (by the spec) | Not blocked. The spec itself delivers it to the table. |
Open follow-up. The table fallback also covered a student who never plays a built host. For example, someone who never opens a Prime Suspect client file would never receive beat 4. The decision above concerns unbuilt hosts. Whether the fallback still applies to built-but-unplayed hosts is not yet decided.