AutoCoder detached worker capacity showed stale busy state after runner pod restarts and re-enqueued work. PostgreSQL had running codex_worker_tasks rows assigned to a previous 20-slot worker instance.
5d53d3c to recover stale detached worker task rows on worker startup and persist preflight failures.autocoder-agent-worker-261d6b7c-f93a-4234-83d9-31941cb52308 in namespace autocoder-engine after approval so it would restart on the fixed image.8f82d49 was pushed to parse Codex CLI info.total_token_usage events for dashboard usage accounting.bd55d41 was pushed to harden detached worker Git runtime behavior and add tini for child process reaping.6e31d7e was pushed to replace detached worker pods when their image differs from the desired backend image, even if the old pod still has active tasks. Orphan reconciliation handles requeue/fail accounting after replacement.6e31d7e rollout, the node entered node.kubernetes.io/disk-pressure:NoSchedule. The old backend pod was already stopped by the Recreate rollout strategy and the new backend pod could not schedule.gitea-act-runner-74699f5469-p4grk in namespace gitea; its Docker emptyDir held about 26 GiB. This freed enough nodefs space for kubelet to clear DiskPressure and schedule the backend.gitea.app.lan/autocoder/autocoder-engine:sha-5d53d3cd4c01 during the first recovery pass.gitea.app.lan/autocoder/autocoder-engine:sha-6e31d7e4ac42.gitea.app.lan/autocoder/autocoder-engine:sha-6e31d7e4ac42.codex exec tasks rather than abandoned rows.cargo fmt, git diff --check, and cargo test --lib --bins passed for the code changes.Some recovered tasks failed during repository sync because their persisted task workspaces contained stale Git lock files from the interrupted pod. The new worker code records those failures instead of leaving tasks running indefinitely.
Codex usage-limit messages were observed for one auth slot with reset time 2026-05-12 13:16 UTC; the cooldown path marked that slot unavailable and retried through normal auth-slot selection.