Corrected game sessions that inverted explicit player intent, reused stale actions on Proceed, stalled in one physical beat, or recursively converted an NPC's body contact into an increasingly severe cross-turn restraint.
The earlier continuity and actor-boundary deployment did not solve the long-session failure. A reset Elara session reached 20 turns while repeatedly preventing ordinary player actions and escalating the same hold. This follow-up addresses the persisted-state feedback loop and adds structured scene-progression validation.
Initial continuity defects:
Long-session escalation defect:
restraint effect.The progression model could also return malformed review output or an invalid replacement. The narrator could then add NPC movement or contact absent from the enforced persona action.
Initial commits:
62c50fa: bounded recent-turn continuity, compact authoritative world context, authoritative Proceed request selection, and removal of keyword-derived state.72091af: simplified global and narrator prompts and required coherent scene beats.e23414f: bypassed player enforcement when Proceed contains no Say/Act.e0cc96e: scoped persona intent to persona behavior and required authoritative effect selection.7608a52: added focused narration finalization before visible output or persistence.Follow-up commits:
28ec4e1: broke recursive restraint escalation. Ordinary event-based body-contact restraints are neither persisted nor enforced across turns. Durable restraint requires a typed, independently continuing mechanism.ac0eb31: added structural validation for scene-progression replacements, including required release or repositioning when the same pressure is repeated.2e4fcdf: added a deterministic release-and-reposition fallback when progression repair remains invalid.d5f95f7: added a separate focused retry for malformed progression decisions and made enforced NPC actions exhaustive during narration finalization.Every persona candidate now passes through a compact typed progression decision before enforcement. The decision records whether the candidate changes the scene, repeats a recent beat, negates an accepted player action, or continues/escalates the same physical pressure. Invalid candidates must be replaced with a typed scene change. Invalid model repairs fall back to releasing contact and repositioning at arm's length.
Narration finalization now removes AI speech, movement, contact, item use, or consequences absent from the enforced AI action. This preserves discipline and NPC initiative without allowing narration to invent another escalating hold.
Durable requirement REQ-0012 is version 7.
cargo fmt --all -- --check: passed.gitea.app.lan/eventhorizon/eventhorizon:sha-d5f95f7952a2./healthz and /readyz: HTTP 200.Controlled production audit, 12 turns:
active_effects empty throughout.Affected session 2b8c6d5b-74a4-49c5-9c3d-60c6f98b116c, conversation 4db7150f-cf53-4ec3-909a-432decedb09b, was backed up and repaired with an optimistic turn-count guard.
Preserved:
Removed:
restraint-player-1 contact-only restraint effectPost-remediation state: 20 turns, 20 messages, zero active effects.
Local mode-0600 backups:
/home/ax_julian/temp/eventhorizon-session-repair-2026-07-13/pre-progression-repair-session.json/home/ax_julian/temp/eventhorizon-session-repair-2026-07-13/pre-progression-repair-history.json/home/ax_julian/temp/eventhorizon-session-repair-2026-07-13/pre-continuity-cleanup.sqlRevert the listed commits through the normal repository workflow and deploy the resulting main revision. Restore the backed-up session rows only if the removed invalid derived state is explicitly required; transcript data was not removed.
A production mobile request to POST /api/workbench/chat-stream remained open for 186.695 seconds while sending only 466 bytes. The browser reloaded immediately after that wait; the backend completed and persisted the reply about 10 seconds later. Replies therefore appeared missing even though persistence eventually succeeded.
The normal turn path was making 6-9 sequential model calls: player checking/enforcement, physical structuring, persona generation, progression review/repair, persona checking/enforcement/commitments, and narrator drafting/finalization. Merely carrying an unrelated item could also activate a player rule check. This was the primary latency cause.
44ac2b6 reduced normal resolution to an integrated persona action/self-audit and a directly streamed narrator response.b2b2efd restored one independent, focused progression review after live auditing found that persona self-review alone could approve a recursive pressure escalation.turn-latency-20260714.REQ-0012, REQ-0019, and REQ-0457 describe the simplified pipeline and independent progression gate.The progression review must either accept the candidate or return a complete replacement in the same response. Invalid replacement output uses the existing deterministic release-and-reposition fallback; it does not trigger another model retry.
gitea.app.lan/eventhorizon/eventhorizon:sha-b2b2efd0f14a./healthz and /readyz: HTTP 200.The controlled audit verified that:
The isolated seven-turn audit session, conversation, messages, and local mode-0600 captures were deleted after verification.