Skip to content

[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

Closed

Description

@robin-bially

Client or integration

Codex App

Area

Service lifecycle

Summary

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

  1. 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'.
  2. Set codexDesktopAuthless: true in ~/.opencodex/config.json on a loopback hostname, so the injection uses the provider-table form (providerTableMode = true).
  3. On opencodex 2.60.0, run ocx sync or trigger the dashboard sync.
  4. Observe the refusal; no artifacts are written and the integration stays disabled. ocx restore also refuses on paginated history (related: ocx restore / stop / uninstall refuse to restore config.toml on paginated Codex history, leaving the CLI pointed at a dead proxy port #4812).

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.

Activity

  1. github-actions commented on Sep 20, 2026

    @github-actions
    Contributor

    Issue reopened

    The report now contains the information required by the automated check. Thanks for updating it.

  2. robin-bially commented on Sep 20, 2026

    @robin-bially
    ContributorAuthor

    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.

  3. lidge-jun commented on Sep 20, 2026

    @lidge-jun
    Owner

    THANKS sorry for inconvienence

  4. lidge-jun commented on Sep 23, 2026

    @lidge-jun
    Owner

    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.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    bugSomething isn't workingserviceService lifecycle (WinSW/launchd/scheduler)

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions