Phone runtime (2b): inventory phone on the board dials for real

The phone gains a session mode that reads the live directory (/phone) and
dials (/dial); the inventory threads it through. On a campaign level the
board shows an INVENTORY nav button that opens the tool rack, and connecting
a call hands back to the campaign via /?resume=1 (a fast-path that resumes
the current node instead of the splash). On Barricelli's note-board: open
inventory -> phone -> dial 5550100 -> Glitch Hunter.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
2026-08-22 19:49:00 +02:00
co-authored by Claude Opus 4.8
parent 56bf2f97d0
commit 80bc9b21a7
4 changed files with 57 additions and 21 deletions
+7
View File
@@ -41,6 +41,13 @@ export function Play() {
if (!cancelled) res.ok ? apply(await res.json()) : setStatus('NODE NOT FOUND')
return
}
// ?resume=1 (e.g. handed back from the in-board phone) drops straight into the
// current node instead of the splash.
if (new URLSearchParams(window.location.search).has('resume')) {
const res = await fetch('/api/playthroughs/current')
if (cancelled) return
if (res.ok && res.status !== 204) { apply(await res.json()); return }
}
// The bare root is always the front door: list the playable cases, and offer
// Resume on the one already in progress rather than auto-resuming into it.
const [cases, current] = await Promise.all([fetch('/api/mysteries'), fetch('/api/playthroughs/current')])