openai / openai/codex

New models cache breaks older clients sharing CODEX_HOME

Open Beginner friendly
#39,291 1 comment 0 reactions 0 assignees View on GitHub

Nobody has claimed this yet.

bug CLI config
Dominant language
Rust
Stars
125k
Forks
19.4k
PR merge metrics
PR metrics pending

Description

What happens

Codex 0.148 writes models_cache.json entries with canonical model_messages.instructions_template but without the deprecated top-level base_instructions. An older Codex 0.146 process sharing the same CODEX_HOME deserializes the complete model array before checking client_version, so it logs:

failed to load models cache: missing field `base_instructions`

It then falls back to a remote fetch, so functionality continues, but the warning recurs whenever the newer process refreshes the shared cache.

Source gap

ModelsResponse already uses both serialize_model_infos_with_legacy_base and deserialize_model_infos_with_legacy_base. ModelsCacheEntry.models uses only the deserializer, so the compatibility guarantee is lost specifically when persisting the file cache.

Proposed fix

Commit https://github.com/joshmouch/codex/commit/59449eb735 adds the existing legacy serializer to ModelsCacheEntry.models and a raw persisted-JSON regression.

Verification:

  • cargo fmt -- --check
  • cargo test -p codex-models-manager (49 passed)
  • cargo clippy -p codex-models-manager --all-targets --all-features -- -D warnings

I can open the PR if a maintainer invites it under the repository contribution policy.

Contributor guide

Open the contributing guide

First steps

  1. Read the whole issue, then the project's contributing guide.
  2. Comment on the issue to say you are picking it up — it saves two people doing the same work.
  3. Fork the repository and make your change on a branch.
  4. Open a pull request that references the issue number.

Research direction

Start in the codex-models-manager code at ModelsCacheEntry.models and compare its deserialization with ModelsResponse's legacy serializer. Add the persisted-JSON regression described in the issue so older clients can read refreshed cache entries, then run cargo fmt -- --check, the package tests, and clippy with warnings denied.

Written by the indexing model from the issue text.

Assessment

Tech stack
rust
Domain
cli
Issue type
Bug
Difficulty
2/5
Estimated time
1-3 hours
Activity status
Quiet
Clarity
Mostly clear
Newbie friendliness
72/100

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.