Long-lived app-server keeps stale paginated metadata behavior after Codex upgrade
Summary
A long-lived Codex App Server can continue serving an older implementation after the local @openai/codex package is upgraded. New paginated threads then fail thread/name/set even though the newly installed Codex version supports the same operation.
Reproduction
Using the same local Codex home and cwd:
- Start
codex-cli 0.145.0-alpha.19withcodex app-server --stdio. - Initialize with
capabilities.experimentalApi=true. - Call
thread/startwithhistoryMode: "paginated". - Call
thread/name/setfor the returned non-ephemeral thread.
Observed on 0.145.0-alpha.19:
thread/name/set -> -32601
thread metadata update is not supported by this store: paginated_threads
The same sequence on a fresh codex-cli 0.148.0 App Server succeeds, and thread/read returns the new name for the new paginated thread. A fresh codex-cli 0.144.6 server defaults to historyMode: legacy, where naming also succeeds.
Real-world impact
On a machine with a shared App Server started on 2026-07-23 using the older binary, upgrading the npm package to 0.148.0 did not replace the running server. The process remained alive with its executable shown as (deleted), while new TUI clients continued connecting to its Unix socket. External automatic-title integrations therefore saw repeated failures for newly created paginated sessions.
Expected behavior
After a Codex upgrade, a managed/long-lived App Server should either:
- restart or replace the old server; or
- expose a protocol/version/capability mismatch and refuse the connection with an actionable message.
At minimum, thread/name/set should report that the connected server is stale and identify the server capability/version, rather than returning a store-level error that looks like a permanent paginated-thread limitation.
Evidence
- Client package before/after:
0.145.0-alpha.19->0.148.0 - Old server result: paginated
thread/name/setrejected - Fresh 0.148.0 server result: paginated
thread/name/setaccepted and verified bythread/read - Existing shared server start time: 2026-07-23; executable was
(deleted)after package replacement - No credentials, tokens, or private endpoints included
<!-- issue-capture:v2 -->
{
"captured_at": "2026-08-19T07:55:00Z",
"repository": "openai/codex",
"incident_head": "0e57385fc2ec4452258b7f2cf9929c95f0d7b847",
"branch": "main",
"dirty": true,
"root_cause_status": "candidate",
"builder_loop_runtime": {
"builder_loop_version": "0.1.0",
"adapter": "codex",
"adapter_commit": "8140fed742f06babaf41e17703f712454e5ec445",
"adapter_dirty": false,
"capture_status": "captured"
}
}
<!-- /issue-capture:v2 -->