Peregrine v4 — Non-Game Screens: Build Plan

Date: 2026-09-19

Source: docs/Peregrine-Plot/2026-09-19 - Peregrine v4 - Non-Game Screens Handoff Spec.md (cited as §n)

Mockups on disk: docs/Peregrine-Plot/plot ui mockups/peregrine-case-board-v4.html, peregrine-get-out-of-town-v4.html

Status (2026-09-19, overnight):

A. What exists today

Spec conceptIn the app nowGap
Season act enum, flags (§4)Nothing. ActRecord / Acts (NarrativeState.swift) are the con-narrative acts (Pattern, Crew), a different system shown on Case Board caseFileSectionNew model; naming collision to settle (§D4)
Credential number (§4, §9.3)CredentialBadge has face/name/role/stamp, no number, no statusNumber + three states
Session-open routing (§5)PeregrineRootView.init picks a tab from launch args only; default Play. No session notion; ProfileManager.activate is the only open pointRouter + session ordinal
Docket (§6)Copy only: You row "The Docket" → CasesClosedViewModel, verbs, countdown, UI
Documents / file room (§7, §9.2)NoneLedger, drawers, reader
Case 1 closedPrimeSuspectRun.solved for CaseLibrary.openingCaseID ("CASE001" = The Calder Cipher)Agency case must become Halloran's (Slice 2)
Agency play-day gate (§3)None. The committed play gates (fde786b) are in-case gates onlyNew
Theme tokens (§2)All eleven colours exist by value under other names (PG.ink, Desk.ink, PG.bg, PG.surface, Desk.chrome, PG.clock, Desk.lamp, PG.clean, PG.con, PG.alert, PG.taupe/PG.inkSoft)None. Desk.gold (#D6A62C) is not Stake Gold.

B. Slices

Each slice lands on main in working increments, except Slice 2 (see its note).

Slice 1 — Season state + session-open routing ✅ this session

Slice 2 — Case renumber: Halloran's books becomes case 01 ⚠️ branch

Wide data migration (corpus, exported files, saved progress, tests), so it runs on a branch, -u on first push, and merges as soon as verified.

Slice 3 — Case Board v4 + Agency assignment ✅ built (behind the flag)

Direction (Sarah, 2026-09-19): the Cases tab becomes the plot-driven board, and the routine games stay available and reachable in every season state.

Slice 4 — File room + reader + burn delivery (turns -seasonV4 on by default) ◐ partial

Slice 5 — Credential states (You tab + Night Desk card) ✅ built (behind the flag)

Slice 6 — Handler's Notes ✅ built (behind the flag)

Slice 7 — Connection Board

Slice 8 — The Proof

Slice 9 — Get Out of Town

B2. Names

NameIsStatus
The RoundsThe screen behind the Play tab (today LaunchDeckView, which has no title). It pairs with Cases → The Case Board. Tab labels stay plain function words: Play · Cases · Training · YouSarah's proposal, 2026-09-19. Header lands in Slice 3
a roundOne game played from The Rounds. The Docket countdown (§6) counts in this unit: 4 rounds until something turns up. Could be in The Blotter, on your rounds.Rule. Season copy never uses "round" for anything smaller than a game. The in-game step counters (NightTake.rounds, Target Practice SUSPECT 3/5, Go Undercover 2 of 5) keep their visible "n of m" labels
The BlotterThe new name for Fault in the Record (corpus fault-in-the-record, order 20, the Writing game)Sarah, 2026-09-19 ("I think"), matching the 2026-09-16 unlock-verbs review's inference. The rename isn't recorded in guide.json, so stage it through /cr-corpus. The game is build_status: proposed, with no bank and no code (only the game_fault_in_the_record image set)

Countdown rule that follows. The countdown names only rooms that exist in the build. Until The Blotter ships, the countdown can't say Could be in The Blotter, and the mockup's line (The Blotter · Client file 02) needs a built room in its place. The "measure a Blotter line" word-ceiling item in the solved-case doc stays unmeasurable for the same reason.

B3. What the overnight build did, and the calls made

Where things live

Calls made where the sources disagreed or were silent. Each is reversible.

1. UNDER REVIEW stamp colour. The spec contradicts itself. §2's palette row gives Oxblood to "the UNDER REVIEW chip stamp", while §2's stamp rule says "under review is a status… so it is ink". The mockup uses oxblood. Built: ink, following the rule.

2. Dark act rows. They show the mockup's — / Dark. beside the numeral. The spec says "a numeral and nothing else". Neither is a title, so nothing leaks.

3. Act I open questions. Both of the spec's questions show (the mockup shows one), followed by the blank slot and Answered on the board, not here.

4. The Day 3 assignment line is written at intake. The Act I hero shows the assignment from the first open, so the Docket carries it from the start.

5. The in-fiction day is the latest day anything was logged or drawn. That's how the hero reads DAY 6, 9, 16 and 41.

6. Falconer's notes are posted by Docket lines. Each note appears only when the line it answers exists, so the feed can't run ahead of the Docket.

7. Handler's Notes entry point. The spec doesn't say where it lives. It's a row in You → Your record, beside The Docket.

8. The countdown is hidden in every state except cleared until the beat schedule is approved. That avoids showing a made-up number.

9. The file room is partial. The table, the courier slip (spec copy), drawers, reading and pinning all work. The reader says This page isn't written yet because no page text exists: all eight documents are unwritten, and the death-file draft is in the missing mockup.

10. Burn routing still lands on the Cases tab rather than pushing the file room. The hero's gold button opens the room.

Known issues

C. Art inventory

AssetStatus
Image-Assets/Dark-Courtyard.png 1448×1086Landed 2026-09-19. Courtyard with the window lit, man at the gate, lanterns off: the neighbor pinned hero
Image-Assets/Dark-Station.png 1448×1086Landed. Platform at night (Get Out of Town)
Image-Assets/Falconer-Face.png, Falconer-Back.png 1000×1250Landed. Handler's Notes portrait slot (Act III / cleared) and the Proof header
Image-Assets/Desk.png, Envelope.png 800×800Landed. Act III and IV season-row thumbnails
Image-Assets/Chalk-Outline.png 800×800Landed. The chalk bird on stone, an opaque RGB photo. The transparent overlay for the platform lip still has to be made from it
House from the street (214 on the transom), courtyard with nothing lit, house darker (cleared)Not in Image-Assets/. Only the 1200×900 copies embedded in the case-board mockup exist. They are the Act I, burn-night and cleared heroes
Act I / II thumbnailsPlan crops. Wanted: front room from the couch; study door, closed (800×800)
Act III thumbnailThe night desk with the falcon, clean, no numeral
Act III–IV heroesIV emptied drawer (1600×1200); III TBD
Chalk overlayRough extraction in the mockup; a clean transparent PNG is wanted
File-room drawer iconsOptional, six paper objects (400×400)

D0. Decided 2026-09-19 (morning)

#QuestionDecisionConsequence
D1214 vs 2214Change both. The account gets a number that doesn't end in 14, and the transom is repainted to a number unlike either.Corpus edit to ps-case101-hallorans-books.json (the figure trace needs re-approval), a new Day 8 line, and a repaint of the Act I house art. Candidate numbers are proposed with the corpus staging.
D2DatesDAY n everywhere.Case 1's "7 April" becomes a day number on its evidence. The season record keeps 7 April as an internal anchor only.
D3aHalloran's sign-offSarah plays it blind first.Make it playable behind a debug flag with the new account number, then run the renumber on a branch once it passes.
D3bCases 3–8Renumber regardless.Their review stays independent of the plot.
D4Old con-story actsRetire them.Stop firing Acts, and remove ActInterstitial and the Case File section. Existing ActRecord rows sit unused.
D5You tab "The Docket" rowRename to "Cases closed" (live only)."The Docket" means only the season log.
D6Story documentsClaude drafts them into the corpus from the season record's notes and locks, staged via /cr-corpus with a review page.This unblocks the file room pages, the Connection Board and The Proof.
D7Credential numberP-0417 for everyone, reissued as P-0418.Replace random issuance with a constant. Stored seasons keep their number unless reset.
—UNDER REVIEW stampInk, as built.—
—Dark-bar back buttonsNavigation-level fix.Restores the system Back and swipe-back on Handler's Notes and the file room.
—CaptureThe room rows are enough. No Training card.—
—The Blotter renameHold. It stays "I think" in the plan and isn't staged.—
BeatsMechanismApproved as proposed, with placeholder round counts tuned in playtest, and un-stick after 6 rounds.—
BeatsUnbuilt hostsWait for the games. There's no table fallback for The Dossier, The Blotter or Before She's Back.See the beat schedule §7 for what this blocks.

D. Decisions needed (none block Slice 1) — superseded by §D0 where decided

1. 214 vs 2214. These are two different things, and neither record reconciles them.

2. In-fiction dates. The spec says DAY n, never wall-clock. The season record anchors burn night at 7 April. Slice 1 uses day numbers. Which one does a document show?

3. Cases 3–8 sign-off. They're exported and playable, but nothing records your review. The renumber moves them to 4–9.

4. Two "act" systems. The board is settled: it's plot-driven, and the con-story ActRecord cards come off it (Slice 3). Still open: whether the con-story acts keep firing at the debrief (ActInterstitial) under a new name, or retire.

5. You tab "The Docket" row currently opens Cases Closed. Rename it, or point it at the new Docket?

6. Death-file word ceiling (§11), the Wren reveal in the accepted note (§11), and the un-stick documents (§7, confidence 65).

7. Credential number format. Slice 1 issues P- + four digits, random 0100–9898, and reissues as +1 (matching P-0417 → P-0418). If P-0417 is canon for every student, say so and it becomes a constant.

E. Final review

Pros. Slice 1 is pure data with no UI risk. It doesn't depend on the renumber, because the agency case id is one constant. The defaults-suite store keeps SwiftData's schema and the export archive untouched. The Night Desk can read a profile's credential without opening its store.

Cons and edges.

Confidence: 80 that Slice 1's shape is right. 75 that the built Slices 3, 5 and 6 match the spec closely enough to review on device. 55 on the slice order from here, because Slices 7–9 depend on documents that aren't written.