Date: 2026-08-01
EventHorizon persona decisions now maintain a private, typed agenda across game turns. A persona selects an exact server-owned source from authored goals, desires, the session objective or hooks, or a player direction when no authored/session source exists. Each agenda defines a concrete current milestone and a bounded scene outcome that must resolve within at most four accepted persona actions.
The backend validates the agenda alongside the persona action, hydrates source text server-side, requires exact continuation of unfinished milestones, and permits only typed advanced, completed, blocked, awaiting-player, or player-caused superseded states. An agenda update is committed atomically only when the corresponding persona action survives shared conflict resolution unchanged.
Agenda state is actor-scoped. A persona receives only its own private agenda, and the field is removed from narrator and player-visible session projections. Existing sessions self-start an agenda on their next accepted persona action. No database migration was required.
A production roleplay could remain in a loop of locally distinct preparation, posture, contact, breathing, and intensity changes even though the persona had decisive authored goals. Per-turn anti-repetition instructions were insufficient because there was no durable higher-level objective or milestone. Progress resumed only after an explicit player request.
3d43dd43.ddd7dfefe105c334b081755b66cac785ec704c93.gitea.app.lan/eventhorizon/eventhorizon:sha-ddd7dfefe105./healthz returned {"status":"ok"}./readyz reported PostgreSQL and Qdrant ready.2b8c6d5b-74a4-49c5-9c3d-60c6f98b116c remained running at turn 24 after rollout, with no agenda yet and no new game-turn job after the restored turn 23 job.Startup logs also showed an unrelated pre-existing asynchronous persona-memory extraction job being requeued after an invalid model response. Both application replicas started normally and the turn-serving health/readiness path remained healthy.