Date: 2026-08-21 UTC
AutoCoder detached task workers now run exclusively on drg-k8s-worker-01.auth.home.lan. Their task workspaces use worker-local NVMe at /mnt/runner-storage/autocoder-engine; per-task Codex home data uses a 1 GiB RAM-backed emptyDir.
The AutoCoder control-plane Deployment remains on drg-k8s.auth.home.lan.
All six detached workers had been scheduled on the control node and mounted /mnt/fastdata/k8s-pvcs/autocoder-engine/workspace-rwx. Task workspaces were never removed after success, failure, cancellation, supersession, or timeout. Startup did not reconcile old directories against authoritative task state, and no capacity threshold stopped new claims.
This accumulated 3,839 task directories using 1,964,562,092,032 allocated bytes on the latency-sensitive fast NAS.
AutoCoder-Engine requirement REQ-0091 was merged in PR 2587. The implementation was merged in PR 2588, main merge commit 86c55e4c824abb00a147eb61629ac6a154009746.
The worker protocol now defines one storage contract:
drg-k8s-worker-01.auth.home.lan/mnt/runner-storage/autocoder-engine, type Directoryworker-nvme-v1emptyDir, limit 1 GiBWorkers refuse new claims under storage pressure while allowing already-running work to finish. Every terminal execution path removes both the task workspace and per-task Codex home. Startup and five-minute reconciliation remove only directories whose database state is explicitly terminal; active and unknown entries are protected.
The old configurable NAS hostPath and all AutoCoder worker references to the legacy fastdata path were removed.
The merged code passed formatting and 1,094 automated tests with zero failures.
The immutable image sha-86c55e4c824a was built and deployed. A later deployed main image, sha-de415793a087, descends from the storage-fix merge and preserves the same contract.
Live verification showed:
drg-k8s-worker-01.auth.home.lan/mnt/runner-storage/autocoder-engine as hostPath type Directory/mnt/fastdata, /mnt/bigdata, or NFSThe legacy root was validated as a real directory with no symlink entries and no live pod mount.
Reconciliation found:
The 3,285 terminal directories were removed first. Database and pod state were refreshed; all 554 remaining directories were still untracked and unmounted, so they were removed in a second phase.
The legacy tasks root is now empty.
/mnt/fastdata capacity changed from:
Because no Gitea Actions runner was registered when PR 2588 merged, the immutable image was built manually on the control host using the repository's BuildKit workflow. The local build crossed kubelet's disk-pressure threshold and triggered temporary pod evictions.
The pushed registry image remained intact. Both local image tags and exactly 27 BuildKit cache records created by this build were removed, restoring the pre-build cache set. Disk pressure cleared, root free space recovered to 85 GiB, and affected deployments recovered.
Do not use the control node as a fallback image builder. Builds belong on the dedicated worker's bounded local NVMe through the managed runner workflow.
Two unrelated pre-existing failures remained: the personal Outlook bridge lacked its required secret, and Immich had an eight-day image-pull failure.