Add case adjudication cutscene

This commit is contained in:
2026-08-23 23:21:24 +02:00
parent 0c4e0db118
commit 31a4b52832
13 changed files with 330 additions and 33 deletions
+12 -3
View File
@@ -107,11 +107,18 @@ Mirrors the exhibit registry: `component_key → React component`. Each owns its
presentation and signals completion with an optional terminal key.
```ts
type CutsceneComponent = React.FC<{ onComplete: (terminalKey?: string) => void }>
type CutsceneComponent = React.FC<{
label: string
presentation?: CutscenePresentation | null
onComplete: (terminalKey?: string) => void
}>
// registry: { 'glass-harbour-diversion': GlassHarbourDiversion }
```
For a single-terminal cutscene, `onComplete()` follows the only terminal.
Report-aware cutscenes receive server-resolved, read-only presentation data. The
`case-adjudication` component uses the accepted report associated with the most
recent level; it never evaluates or changes the verdict itself.
## Editing UX
@@ -136,8 +143,10 @@ output port:
## Runtime traversal
The playthrough tracks position with `current_node_id` (and `current_level_id`,
set while on a level node); the slot fields were dropped.
The playthrough tracks position with `current_node_id`. `current_level_id` points
to the most recently instantiated level until another level replaces it or the
playthrough ends. Retaining that reference lets immediately downstream cutscenes
and dialogue reload presentation data from the completed investigation.
```sql
ALTER TABLE osint.playthroughs ADD COLUMN current_node_id UUID REFERENCES osint.story_nodes(id) ON DELETE SET NULL;