Date: 2026-07-27
Game turns frequently returned llm request failed after narration had already reached the browser. Telemetry showed the required item_state_evaluation phase timing out after narration, including its retry. Item evaluator inputs were also unnecessarily large because full authored item/effect records were sent on every turn.
reconciling job state with bounded delayed retries. A retry resumes only item reconciliation and the atomic commit; it does not rerun personas, narration, or resolved mechanics.b3d41569c4ac314bddcb67e9a18e967406b1b416gitea.app.lan/eventhorizon/eventhorizon:sha-b3d41569c4ac0026_resumable_item_reconciliation.sql / version 26cargo fmt --all -- --check, backend compile check, rendered Kubernetes manifests, and diff checks passed./healthz returned ok; /readyz reported PostgreSQL and Qdrant ready.reconciling constraint, active-turn uniqueness, and claim index.Monitor game_turn_jobs for reconciling, increasing retry_count, and delayed next_attempt_at; correlate with llm_usage_events.operation_key = 'item_state_evaluation'.
The previous image can be restored while leaving migration 26 in place, but only when no job is in reconciling. An older worker does not claim that state. If reconciliation jobs exist, allow the new version to drain them or resolve them deliberately before rollback. Do not rewrite checkpointed jobs to queued without first confirming the session generation and expected turn count.