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
{{ message }}
Repository navigation
[Bug]: 2.60.0 hard-refuses the authless provider-table transition on a home with paginated openai threads and offers no supported way forward #5321
After upgrading to 2.60.0, enabling the Codex integration in its authless provider-table form is hard-refused on a Codex home with paginated history. ocx sync (and the dashboard sync) abort with Codex config injection refused: history_paginated_openai_requires_native_writer. ..., nothing is written, and the integration stays disabled. Before 2.60.0 the same transition completed: the history relabel stood down (existing opencodex-tagged threads keep their provider) and the routing/catalog half was still written. Expected: a supported way to complete the transition on such a home, or a named remediation command in the refusal message instead of "do not retry".
Reproduction
Use a Codex home whose history Codex CLI 0.155.1 has migrated to paginated history: the threads table in ~/.codex/state_5.sqlite has the history_mode column and the rows read paginated, including at least one row with model_provider = 'openai'.
Set codexDesktopAuthless: true in ~/.opencodex/config.json on a loopback hostname, so the injection uses the provider-table form (providerTableMode = true).
On opencodex 2.60.0, run ocx sync or trigger the dashboard sync.
The only ways out found on this home: delete the affected sessions (codex delete --force <session-id>, after backing up rollouts and the state DB), which makes the transition complete normally, or downgrade to 2.59.0. Both are only discoverable by reading the preflight code; naming one in the refusal message or the codex-integration docs would help.
Version
2.60.0
Operating system
macOS 27.0 (build 26A428), arm64
Logs or error output
Codex config injection refused: history_paginated_openai_requires_native_writer.
Existing provider definitions and conversation files were preserved.
Paginated history requires native-writer coordination;do not run legacy recovery or retry this transition blindly.
Redacted configuration
{ "codexDesktopAuthless": true, "port": 10100 }
Checks
I searched existing issues and documentation.
I removed secrets, tokens, account details, request credentials, and personal data.
Update from the reporter: there is a working path on such a home, in case it is useful for the docs or the refusal message.
codex delete --force <session-id> (Codex CLI 0.155.1) permanently removes the affected sessions. After the paginated openai rows are gone, the authless provider-table transition completes normally — ocx sync installs routing + catalog and only the relabel stands down (history_paginated_requires_native_writer, expected). I backed up the rollouts and the state DB first, then deleted the 173 affected sessions, and the activation now succeeds on 2.59.0 (by the preflight logic it would on 2.60.0 too, since no paginated openai row remains).
This unblocks the enable path, but it is still not a fix for the guard itself: the supported options remain 'delete those conversations' or 'downgrade', and both are only discoverable by reading the preflight code. Naming the option in the refusal message or the codex-integration docs would help.
Closing as completed. Fixed by #5331, merged as 6558490 and included in the stable v2.61.0 and v2.63.0 releases.
With #5331, when the provider-table transition hits the history_paginated_openai_requires_native_writer case and the target can own the root key, opencodex keeps its marker-owned root openai_base_url next to the provider table. The relabel steps aside and the routing/catalog transition completes. Paginated openai rows are neither read nor rewritten, and they keep resolving to the proxy. This does not rewrite or relabel paginated history in general. The admission-token form still refuses and now names unauthenticatedLoopbackListener and syncResumeHistory as remediation choices. A user-owned root openai_base_url is left unchanged; those conversations keep the destination the user selected rather than opencodex claiming that line. #5331 also documents ocx restore --remove-codex-provider-table and corrects the guides. Other recovery-path refusals, such as a missing state database or an invalid backup manifest, remain a separate failure family. Thanks @RobinBially for the report and the workaround details.
Activity
github-actions commentedon Sep 20, 2026
Issue reopened
The report now contains the information required by the automated check. Thanks for updating it.
robin-bially commentedon Sep 20, 2026
Update from the reporter: there is a working path on such a home, in case it is useful for the docs or the refusal message.
codex delete --force <session-id>(Codex CLI 0.155.1) permanently removes the affected sessions. After the paginatedopenairows are gone, the authless provider-table transition completes normally —ocx syncinstalls routing + catalog and only the relabel stands down (history_paginated_requires_native_writer, expected). I backed up the rollouts and the state DB first, then deleted the 173 affected sessions, and the activation now succeeds on 2.59.0 (by the preflight logic it would on 2.60.0 too, since no paginated openai row remains).This unblocks the enable path, but it is still not a fix for the guard itself: the supported options remain 'delete those conversations' or 'downgrade', and both are only discoverable by reading the preflight code. Naming the option in the refusal message or the codex-integration docs would help.
lidge-jun commentedon Sep 20, 2026
THANKS sorry for inconvienence
fix(codex): complete the provider-table transition on a paginated ope…
test(codex): pin the paginated openai transition and its recovery
fix(codex): complete the provider-table transition on a paginated ope…
test(codex): pin the paginated openai transition and its recovery
fix(codex): complete the provider-table transition on a paginated ope…
test(codex): pin the paginated openai transition and its recovery
fix(codex): complete the provider-table transition on a paginated ope…
test(codex): pin the paginated openai transition and its recovery
fix(codex): complete the provider-table transition on a paginated ope…
lidge-jun commentedon Sep 23, 2026
Closing as completed. Fixed by #5331, merged as 6558490 and included in the stable v2.61.0 and v2.63.0 releases.
With #5331, when the provider-table transition hits the
history_paginated_openai_requires_native_writercase and the target can own the root key, opencodex keeps its marker-owned rootopenai_base_urlnext to the provider table. The relabel steps aside and the routing/catalog transition completes. Paginatedopenairows are neither read nor rewritten, and they keep resolving to the proxy. This does not rewrite or relabel paginated history in general. The admission-token form still refuses and now namesunauthenticatedLoopbackListenerandsyncResumeHistoryas remediation choices. A user-owned rootopenai_base_urlis left unchanged; those conversations keep the destination the user selected rather than opencodex claiming that line. #5331 also documentsocx restore --remove-codex-provider-tableand corrects the guides. Other recovery-path refusals, such as a missing state database or an invalid backup manifest, remain a separate failure family. Thanks @RobinBially for the report and the workaround details.