fix(codex): Phase-0 canary runtime fixes (stdin EOF + sandbox mode) #28

Merged
janpeter merged 2 commits from fix/codex-runner-stdin into master 2026-06-08 07:50:10 +02:00
Owner

Twee fixes die de Phase-0 codex-canary op host 154 van hangend/stormend naar één schone claim→DONE brachten.

1. stdin-hang (run-one-job.ts)

codex exec blokkeert eeuwig op Reading additional input from stdin... omdat de child een open stdin-pipe erft die nooit EOF krijgt (de prompt gaat al als positional arg mee). Fix: stdio:['ignore','pipe','pipe'] voor de CODEX-runtime; Claude (-p) leest geen stdin en blijft ongewijzigd.

2. bwrap sandbox (codex/config.toml)

sandbox_mode=workspace-write gebruikt bubblewrap, dat in de geharde worker-container (read_only + cap_drop:ALL + no-new-privileges) geen user-namespace kan maken → bwrap: No permissions to create namespace op elk shell-commando. Codex thrashte daardoor en annuleerde z'n eigen update_job_status-calls → job nooit DONE → retry-storm. Fix: sandbox_mode=danger-full-access — de container is zelf al de isolatie-grens.

Verificatie (host 154)

Canary cmq4rbe1s0002qf7rmr0ppe0s (PLAN_CHAT / CODEX / SYSTEM) → DONE met niet-lege summary, bwrap_errors=0, één enkele claim→done-iteratie (geen storm), CLAUDE-fleet ononderbroken heartbeatend.

🤖 Generated with Claude Code

Twee fixes die de Phase-0 codex-canary op host 154 van hangend/stormend naar **één schone claim→DONE** brachten. ## 1. stdin-hang (run-one-job.ts) `codex exec` blokkeert eeuwig op `Reading additional input from stdin...` omdat de child een open stdin-pipe erft die nooit EOF krijgt (de prompt gaat al als positional arg mee). Fix: `stdio:['ignore','pipe','pipe']` voor de CODEX-runtime; Claude (`-p`) leest geen stdin en blijft ongewijzigd. ## 2. bwrap sandbox (codex/config.toml) `sandbox_mode=workspace-write` gebruikt bubblewrap, dat in de geharde worker-container (`read_only` + `cap_drop:ALL` + `no-new-privileges`) geen user-namespace kan maken → `bwrap: No permissions to create namespace` op elk shell-commando. Codex thrashte daardoor en annuleerde z'n eigen `update_job_status`-calls → job nooit DONE → retry-storm. Fix: `sandbox_mode=danger-full-access` — de container is zelf al de isolatie-grens. ## Verificatie (host 154) Canary `cmq4rbe1s0002qf7rmr0ppe0s` (PLAN_CHAT / CODEX / SYSTEM) → **DONE** met niet-lege summary, `bwrap_errors=0`, één enkele claim→done-iteratie (geen storm), CLAUDE-fleet ononderbroken heartbeatend. 🤖 Generated with [Claude Code](https://claude.com/claude-code)
run-one-job spawnt de agent-CLI met node's default stdio (pipe). `codex exec`
leest stdin voor "additional input" en blokkeert eeuwig op
"Reading additional input from stdin..." wanneer die pipe nooit EOF krijgt —
de prompt gaat al als positional arg mee. Gevolg: elke CODEX-job hangt tot de
lease verloopt. Claude (-p) leest geen stdin en houdt het bestaande gedrag.

Fix: stdin = 'ignore' voor de CODEX-runtime (directe EOF), pipe voor Claude.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
codex' workspace-write/read-only modes gebruiken bubblewrap (OS-sandbox) dat in
de worker-container (read_only + cap_drop:ALL + no-new-privileges) geen
user-namespace kan maken → "bwrap: No permissions to create namespace" op elk
shell-commando. Codex thrashte daardoor en annuleerde z'n eigen
update_job_status-calls → job nooit DONE → retry-storm.

De container ÍS al de isolatie-grens, dus codex' interne sandbox is hier
redundant. danger-full-access zet 'm uit; canary voltooit nu in één iteratie.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
janpeter changed title from fix(codex): give codex exec an EOF stdin so it does not hang to fix(codex): Phase-0 canary runtime fixes (stdin EOF + sandbox mode) 2026-06-08 07:46:26 +02:00
janpeter merged commit 5f8c3ba4e1 into master 2026-06-08 07:50:10 +02:00
Sign in to join this conversation.
No reviewers
No labels
No milestone
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set.

Reference
janpeter/scrum4me-docker!28
No description provided.