¶ EventHorizon continuity and narrator ledger repair
Date: 2026-08-13
Session 2b740b02-c41c-4b5c-b8e5-6a38b85e54ab repeatedly described Seraphina inserting or moving a finger that prior narration already left inserted. The typed world_state.scene_continuity remained empty. At turn 13, the only accepted AI action belonged to Hanna, but narration invented new Seraphina movement and dialogue from earlier prose.
submit_persona_action required a continuity_updates array but exposed untyped object entries, so a syntactically valid empty array could accompany prose that established ongoing contact.
- Adult-behavior guidance treated recurring patterns as candidates on every eligible turn even after the relevant initiative completed.
- The narrator received resolved actions as exhaustive facts, but recent prose appeared earlier and no compact actor allow-list occupied the prompt's final position. It reused an unselected persona's prior action as a new action.
- PR #277 defines the complete continuity entry schema at the persona submission tool, requires maintained facts in the end-of-action snapshot, supplies the actor's immediately prior accepted outcome as already happened, and removes per-turn behavior-pattern obligation.
- PR #280 adds a compact final narrator action ledger. Only listed player fields and AI actors may provide new Say/Act; prior narration can establish unchanged background but not new state changes, dialogue, or initiative.
- The affected session and its matching undo checkpoint were repaired atomically with one typed
physical_contact record for Seraphina's maintained one-finger contact, established at turn 8 and last accepted as changed at turn 11. No chat prose or roleplay turn was generated or rewritten.
- Backend: 575 tests passed.
- Frontend: locked Rust 1.88 WASM release build passed.
- Gitea pipeline for merge
532d28b7 succeeded.
- Production image:
gitea.app.lan/eventhorizon/eventhorizon:sha-532d28b7c2b6.
- Deployment: 2/2 ready, zero restarts after rollout.
/readyz: Postgres and Qdrant ready.
- Session remained at turn 13, generation 29, with the repaired typed continuity record present after rollout.
A real subsequent player turn is still required for behavioral acceptance; no synthetic roleplay turn was submitted during verification.