Filed by the SaaS launch review. Priority P0.20 — severity critical, category unfinished.
Problem
Verified against the schema from codex-cli 0.142.5: InitializeParams requires clientInfo but the adapter sends {"capabilities": {}}, so the server returns a JSON-RPC error, the adapter's '"result" not in response' check trips and every run dies at handshake. thread/start and turn/start are sent id-less with invented params; the event loop waits for session_started/notification/tool_call, none of which exist in ServerNotification, and replies with an invented tool_call/approved. Transport is broken too: _recv_line mixes selectors with a buffered TextIOWrapper so a burst ending in turn/completed strands and stall-times-out after 5 minutes, and it returns None for both EOF and JSONDecodeError so one stray non-JSON log line aborts a live turn as 'Process terminated unexpectedly'. --engine codex is advertised in the README and cannot work at all.
Evidence
codeframe/core/adapters/codex.py:224
codeframe/core/adapters/codex.py:241
codeframe/core/adapters/codex.py:299
codeframe/core/adapters/codex.py:181
codeframe/core/adapters/codex.py:180
Acceptance criteria
Atomic by construction: one developer, one focused session.
Problem
Verified against the schema from codex-cli 0.142.5: InitializeParams requires clientInfo but the adapter sends {"capabilities": {}}, so the server returns a JSON-RPC error, the adapter's '"result" not in response' check trips and every run dies at handshake. thread/start and turn/start are sent id-less with invented params; the event loop waits for session_started/notification/tool_call, none of which exist in ServerNotification, and replies with an invented tool_call/approved. Transport is broken too: _recv_line mixes selectors with a buffered TextIOWrapper so a burst ending in turn/completed strands and stall-times-out after 5 minutes, and it returns None for both EOF and JSONDecodeError so one stray non-JSON log line aborts a live turn as 'Process terminated unexpectedly'.
--engine codexis advertised in the README and cannot work at all.Evidence
codeframe/core/adapters/codex.py:224codeframe/core/adapters/codex.py:241codeframe/core/adapters/codex.py:299codeframe/core/adapters/codex.py:181codeframe/core/adapters/codex.py:180Acceptance criteria
Atomic by construction: one developer, one focused session.