# Codex app-server crash reproduction

AI-assisted; verified with the tests and tools listed above.

Environment on both sides: Linux web development app, Chromium browser, 1280 x 800 CSS viewport, light theme, device scale factor 2. Each checkout used a fresh isolated database with T3CODE_DEV_SEED=0. No database was copied.

Base: b3fdf2b10fb92e5dbc71a83381c602a8a464bbca
Head: b0355997280a875641fff093b1446e04bab8fcae

1. Make the accompanying codex-crash launcher executable.
2. Start each checkout with T3CODE_DEV_SEED=0 vp run dev and pair its browser.
3. Open Settings > Providers, select Codex, and set Binary path to the launcher. Press Tab to save.
4. Click Refresh provider status. Wait for refresh to settle.
5. Record three more refreshes using the same steps on each side.
6. Inspect the selected Codex card's Status text.

Browser driver actions used on each side:
- Navigate to /settings/providers.
- Fill #provider-instance-codex-binaryPath with the launcher absolute path.
- Press Tab.
- Click button:has-text("Refresh provider status").
- Wait for button:has-text("Refresh provider status"):not(:disabled).
- Repeat the click and wait three times while recording.

Observed base: Codex App Server transport operation 'write-output-stream' failed.
Observed head: Codex App Server process exited with code 1: Error: invalid config.
The launcher exits before any model request; no real agent turn was sent.

Evidence preparation: screenshots were identical more than 500 ms apart. Both screenshots and videos were cropped to the same provider status area (1720 x 410 pixels, offset 660,330 in a 2560 x 1600 capture), excluding private surrounding details. No status text was edited. Video contact sheets were inspected at one-second intervals, and both final stills were opened and inspected.

Not covered: a broken stdin pipe while the subprocess remains alive; failed-thread diagnostics after a successful provider handshake; desktop and mobile clients.
