You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
On Windows with the current Codex App Beta, a zero-byte native write-coordinator database caused every ocx sync / startup sync to regenerate the routed catalog but refuse the config injection:
A missing coordinator row cannot be initialized while native Codex routing residue exists.
The CLI left the user with a partially updated state: opencodex-catalog.json contained routed models, but config.toml had no model_catalog_json or openai_base_url, so the Beta app restarted onto the native OpenAI catalog. ocx doctor reported the app-server catalog as current and did not identify the rowless coordinator or provide a recovery command.
After moving the proven-empty coordinator file aside, ocx sync succeeded and wrote the two root config keys. The fresh cache then contained 12 rows, including five routed rows. The Beta Desktop picker still displayed only OpenAI models, which is a separate renderer allowlist/compatibility condition related to #241 and the explicit nativeAlias workaround from #1244. This report is primarily about the unrecoverable rowless coordinator state and missing diagnosis; the Beta picker behavior is included so the two failure layers are not conflated.
Expected behavior:
OpenCodex must not leave or reuse a zero-byte coordinator as permanent authority.
ocx doctor should identify an empty/unversioned/rowless coordinator and print a safe, actionable recovery.
A failed config injection should be surfaced prominently enough that a successful catalog write is not mistaken for a successful sync.
The Codex App Beta renderer allowlist should be named separately when the on-disk catalog/cache and app-server side are already correct.
Reproduction
Use Codex App Beta on Windows with a running OpenCodex service and at least one routed provider.
Reach a state where the effective coordinator path exists as a zero-byte file while ~/.codex/opencodex-catalog.json contains routed entries.
Run ocx sync or restart the service.
Observe that provider discovery/catalog generation succeeds, then config injection fails with the missing-coordinator/native-residue message.
Restart the Codex app-server.
Observe that the app rebuilds models_cache.json from the native OpenAI path because the root injection keys were not written.
Move only the proven-zero-byte coordinator aside and rerun ocx sync.
Observe successful injection and a deliberately stale 12-row models_cache.json containing five routed rows.
Verified coordinator: size 0, PRAGMA user_version = 0, no tables, no rows.
Verified residue: routed opencodex-catalog.json; integration record missing.
Moved the empty file to a same-directory .rowless-backup-20260821T2045 path; did not delete it.
Ran ocx sync: exit 0, config injection succeeded.
Ran ocx sync --restart-codex: the stale app-server and code-mode host stopped and respawned.
Verified fresh state: model_catalog_json and openai_base_url present; cache has 12 rows and five routed entries; proxy/service healthy.
Version
OpenCodex 2.27.0, dev checkout 3e130d239a98
Operating system
Windows 11 Insider build 26200; OpenAI.CodexBeta 26.727.4816.0 x64
Provider and model
Anthropic OAuth plus OpenCode Go routed models; not specific to one model
Logs or error output
+ 5 models appended to Codex catalog
Codex configuration was not written: A missing coordinator row cannot be initialized while native Codex routing residue exists.
# coordinator inspection before recovery
size: 0
PRAGMA user_version: 0
tables: []
rows: []
residue: catalog
integration record: missing
# after moving only the empty coordinator aside
+ 5 models appended to Codex catalog
Pointed Codex's built-in openai provider at the opencodex proxy (openai_base_url).All models now route through opencodex proxy (like OpenRouter).# post-recovery cachefetched_at: 2000-01-01T00:00:00Zclient_version: 0.0.0models: 12routed models: 5
The repeated Removed unsupported reasoning efforts: max, ultra warning is a separate runtime skew: OpenCodex selected global codex.cmd 0.141.0 for catalog clamping while the Codex App Beta cache identified client 0.146.0. It did not cause the missing routed rows, but it adds misleading noise during recovery.
Client or integration
Codex App
Area
Catalog / models
Summary
On Windows with the current Codex App Beta, a zero-byte native write-coordinator database caused every
ocx sync/ startup sync to regenerate the routed catalog but refuse the config injection:A missing coordinator row cannot be initialized while native Codex routing residue exists.The CLI left the user with a partially updated state:
opencodex-catalog.jsoncontained routed models, butconfig.tomlhad nomodel_catalog_jsonoropenai_base_url, so the Beta app restarted onto the native OpenAI catalog.ocx doctorreported the app-server catalog as current and did not identify the rowless coordinator or provide a recovery command.After moving the proven-empty coordinator file aside,
ocx syncsucceeded and wrote the two root config keys. The fresh cache then contained 12 rows, including five routed rows. The Beta Desktop picker still displayed only OpenAI models, which is a separate renderer allowlist/compatibility condition related to #241 and the explicitnativeAliasworkaround from #1244. This report is primarily about the unrecoverable rowless coordinator state and missing diagnosis; the Beta picker behavior is included so the two failure layers are not conflated.Expected behavior:
ocx doctorshould identify an empty/unversioned/rowless coordinator and print a safe, actionable recovery.Reproduction
~/.codex/opencodex-catalog.jsoncontains routed entries.ocx syncor restart the service.models_cache.jsonfrom the native OpenAI path because the root injection keys were not written.ocx sync.models_cache.jsoncontaining five routed rows.nativeAliascombo is configured, the Desktop picker may still show only OpenAI models due to the separate renderer allowlist behavior tracked by [Bug]: Routed models are loaded by Codex app-server but missing from Desktop model picker #241/fix(codex): preserve routed models in desktop picker #1244.Recovery performed on the affected device:
PRAGMA user_version = 0, no tables, no rows.opencodex-catalog.json; integration record missing..rowless-backup-20260821T2045path; did not delete it.ocx sync: exit 0, config injection succeeded.ocx sync --restart-codex: the stale app-server and code-mode host stopped and respawned.model_catalog_jsonandopenai_base_urlpresent; cache has 12 rows and five routed entries; proxy/service healthy.Version
OpenCodex 2.27.0, dev checkout
3e130d239a98Operating system
Windows 11 Insider build 26200; OpenAI.CodexBeta 26.727.4816.0 x64
Provider and model
Anthropic OAuth plus OpenCode Go routed models; not specific to one model
Logs or error output
The repeated
Removed unsupported reasoning efforts: max, ultrawarning is a separate runtime skew: OpenCodex selected globalcodex.cmd0.141.0 for catalog clamping while the Codex App Beta cache identified client 0.146.0. It did not cause the missing routed rows, but it adds misleading noise during recovery.Screenshots and supporting files
No screenshot attached. Relevant related work:
model/list.nativeAlias: truecombo compatibility path.Redacted configuration
{ "defaultProvider": "openai", "providers": { "openai": { "authMode": "forward" }, "anthropic": { "authMode": "oauth", "models": ["<redacted>"] }, "opencode-go": { "baseUrl": "<redacted>" } }, "combos": {} }Checks