Skip to content

fix(server): Sol Ultrafast stops vanishing from the Codex model picker - #18200

Merged
t3dotgg merged 2 commits into
mainfrom
fix/sol-ultrafast-discovery
Oct 11, 2026
Merged

t3dotgg merged 2 commits into
mainfrom
fix/sol-ultrafast-discovery

Conversation

@t3dotgg

@t3dotgg t3dotgg commented Oct 11, 2026

Copy link
Copy Markdown
Member

GPT-6.1 Sol's Ultrafast tier kept disappearing from the Codex model picker, and threads set to Ultrafast got knocked down to Standard or Fast. Refreshing providers brought it back for a few minutes, then it vanished again.

Why it recurs. The ChatGPT backend tailors the model catalog to the client's originator. Ultrafast is in the catalog for T3 Code, not for the plain CLI (codex_cli_rs). Codex 0.162 has two traits that combine badly:

  • codex app-server starts its catalog refresh before initialize names the client, so that first fetch goes out as codex_cli_rs.
  • The result lands in the shared CODEX_HOME/models_cache.json. The cache key ignores originator, and model/list serves any cache under 5 minutes old.

So every app-server start (T3's provider probes and sessions, the Codex daemon, the CLI) can write a catalog without Ultrafast, and T3's probe, which lists models right after spawn, publishes whatever is on disk.

Fix.

  • Every codex app-server T3 spawns sets CODEX_INTERNAL_ORIGINATOR_OVERRIDE=T3 Code, so its startup fetch asks for T3's catalog. A value the user already set wins.
  • For ChatGPT accounts, the provider probe waits (up to 3s, alongside the usage read) for its own startup refresh to land in the cache, then lists again. If none lands, it keeps the first answer.

Real entitlement changes still remove tiers: the probe uses the fresh backend answer and pins nothing.

Proof.

  • New CodexProvider.catalog.test.ts runs the real probe against a fake app-server with the same race. It fails without either half of the fix. A second case checks that Ultrafast is dropped when the account loses it.
  • Against real Codex 0.162.0 on a Pro Max account, with the cache first overwritten by a plain app-server: main returned [default, priority] 2/2; this branch returned [default, priority, ultrafast] 3/3.

Known limit: if another Codex client writes the cache in the same few hundred milliseconds as the probe's refresh, that probe can still get its catalog. The next probe corrects it. The real fix belongs upstream in Codex (start the refresh after initialize, or include originator in the cache key).

Reviewed with sol-loop: 2 rounds with GPT-6.1 Sol on high.

Created with Claude Opus 5.5 in Claude Code.

🤖 Generated with Claude Code

t3dotgg and others added 2 commits October 11, 2026 05:02
Codex app-server starts its catalog refresh before `initialize` names the
client, so that fetch goes out as the plain CLI and the backend omits Sol
Ultrafast. It writes that catalog to the shared models_cache.json, which
model/list then serves to every Codex client on the machine for five
minutes.

Spawn app-server with the T3 Code originator set, and have the provider
probe wait for its own startup refresh before trusting model/list.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
@github-actions github-actions Bot added vouch:trusted PR author is trusted by repo permissions or the VOUCHED list. size:L 100-499 changed lines (additions + deletions). labels Oct 11, 2026
@juliusmarminge juliusmarminge added the macroscope-review Opt PRs made by unvouched contributors in for Macroscope review. Vouched contributors auto-reviews label Oct 11, 2026
@macroscopeapp

macroscopeapp Bot commented Oct 11, 2026

Copy link
Copy Markdown
Contributor

Approvability

Verdict: Not approved

Macroscope's review found this PR not approvable — This PR changes all T3 Codex app-server launches to advertise a different originator and adds cache polling/re-fetch behavior that changes existing provider discovery and model availability. Because the propagated environment value controls non-trivial downstream catalog filtering, the runtime impact should receive human review.

You can add or adjust custom eligibility rules. Learn more.

@github-actions

Copy link
Copy Markdown
Contributor

Thread transfer impact

✅ Thread transfer remains within every enforced ceiling.

Provider Metric Main baseline This PR Impact PR ceiling
Codex Total thread wire 5.0 KiB 4.9 KiB −23 B (−0.5%) 6.8 KiB ✅
Codex Thread snapshot wire 3.8 KiB 3.8 KiB 0 B (0.0%) 4.9 KiB ✅
Codex Live turn WebSocket wire 1.2 KiB 1.2 KiB −23 B (−1.9%) 2.0 KiB ✅
Codex Live turn WebSocket decoded 20.9 KiB 20.8 KiB −41 B (−0.2%) 29.3 KiB ✅
Codex Live turn messages 2 1 −1 (−50.0%) 8 ✅
Claude Total thread wire 5.0 KiB 5.0 KiB 0 B (0.0%) 6.8 KiB ✅
Claude Thread snapshot wire 3.8 KiB 3.8 KiB 0 B (0.0%) 4.9 KiB ✅
Claude Live turn WebSocket wire 1.2 KiB 1.2 KiB 0 B (0.0%) 2.0 KiB ✅
Claude Live turn WebSocket decoded 21.2 KiB 21.2 KiB 0 B (0.0%) 29.3 KiB ✅
Claude Live turn messages 2 2 0 (0.0%) 8 ✅

Baseline: 18656a3 · PR result: a90375e · Source CI: success

Scenario and decoded snapshot size

10 historical turns, 5 command tools per turn, 878.9 KiB retained MCP result per historical turn, and a 1.05 MiB retained result in the measured turn.

  • Codex decoded thread snapshot: 108.5 KiB
  • Claude decoded thread snapshot: 108.8 KiB

Updated in place by a trusted workflow. PR artifacts are strictly validated and never executed.

@coderabbitai

coderabbitai Bot commented Oct 11, 2026

Copy link
Copy Markdown

Review in Change Stack →

No actionable comments were generated in the recent review. 🎉

ℹ️ Recent review info
⚙️ Run configuration
  • Configuration used: Path: .coderabbit.config.ts
  • Review profile: CHILL
  • Plan: Team
  • Run ID: 1380e80a-bb8f-4a90-9e4c-ee2c8c21f2e2

📥 Commits

Reviewing files that changed from the base of the PR and between 18656a3 and a90375e.


📒 Files selected for processing (5)
  • apps/server/src/orchestration-v2/Adapters/CodexAdapterV2.ts
  • apps/server/src/provider/CodexProvider.catalog.test.ts
  • apps/server/src/provider/CodexProvider.ts
  • apps/server/src/provider/Drivers/CodexDriver.ts
  • apps/server/src/provider/Drivers/CodexManagedProvider.ts

Included review availability: This review used your included allowance. Your plan provides up to 10 included reviews per hour; 9 remain after this review.



📝 Walkthrough

Walkthrough

Codex app-server launches now use a shared environment helper. ChatGPT model discovery checks for a catalog refresh before requesting models again. Provider status checks now receive file system and path services, and catalog tests cover service-tier options for entitled and non-entitled accounts.

Changes

Codex app-server discovery

Layer / File(s) Summary
Shared app-server environment
apps/server/src/provider/CodexProvider.ts, apps/server/src/orchestration-v2/Adapters/CodexAdapterV2.ts
The provider and orchestration adapter use a shared environment helper. It sets CODEX_INTERNAL_ORIGINATOR_OVERRIDE to T3 Code unless the caller provides a value.
ChatGPT catalog refresh and discovery
apps/server/src/provider/CodexProvider.ts, apps/server/src/provider/Drivers/CodexDriver.ts, apps/server/src/provider/Drivers/CodexManagedProvider.ts, apps/server/src/provider/CodexProvider.catalog.test.ts
For ChatGPT accounts, the provider polls the model cache for a timestamp at or after process spawn time. It requests the catalog again if the cache refreshes within three seconds; otherwise, it logs a warning and keeps the initial catalog. Status checks receive file system and path services. Tests check service-tier options for entitled and non-entitled accounts.

Priority: ➖ Normal

Estimated code review effort: 3 (Moderate) | ~20 minutes

Change: Bug fix

Sequence Diagram(s)

sequenceDiagram
  participant CodexProvider
  participant CodexAppServer
  participant ModelsCache
  CodexProvider->>CodexAppServer: Request initial model catalog
  CodexAppServer->>ModelsCache: Write model catalog and fetched_at
  CodexProvider->>ModelsCache: Poll fetched_at after process spawn
  CodexProvider->>CodexAppServer: Request catalog again after refresh
Loading

Suggested reviewers: juliusmarminge


Merge Risk: ⚪ Minimal · up to a9037

No merge-blocking issue was established; the change is ready for normal checks.

Pre-merge checks | Passed 3 | Failed 1

❌ Failed checks (1 warning)

Check name Status Explanation Resolution
Description check Warning The description follows the template well. The Problem section explains the recurring disappearance of the Ultrafast tier and the cache race. The Change section describes the originator override and t… Add a link to the triaged bug issue or to the maintainer-approved discussion, with the approval comment. If no issue exists, explain why this fix qualifies as a very small, focused fix of an obvious bug. Also confirm that the verification s…
✅ Passed checks (3 passed)
Check name Status Explanation
Title check Passed The title names the fix and the affected area: the Sol Ultrafast tier disappearing from the Codex model picker. It follows the conventional commit format and matches the main change in the changeset, …
Linked Issues check Passed Check skipped because no linked issues were found for this pull request.
Out of Scope Changes check Passed Check skipped because no linked issues were found for this pull request.

Full details: Description check

Explanation

The description follows the template well. The Problem section explains the recurring disappearance of the Ultrafast tier and the cache race. The Change section describes the originator override and the bounded refresh wait. The Verification section gives a new test file and real before/after runs against Codex 0.162.0 with counts. It also states a known limit. The Scope and approval section has no linked issue or maintainer approval, and the author does not explain why a prior issue is not needed. The description also says the work was reviewed with sol-loop and produced with Claude Code, which fits the agent-disclosure line in the template.

Resolution

Add a link to the triaged bug issue or to the maintainer-approved discussion, with the approval comment. If no issue exists, explain why this fix qualifies as a very small, focused fix of an obvious bug. Also confirm that the verification steps match the template, with the model and harness named at the end.


  • Fix all pre-merge checks with AI
✨ Finishing Touches
📝 Generate docstrings
  • Commit to this branch
  • Create a new PR

🧪 Generate unit tests (beta)
  • Commit to this branch
  • Create a new PR

  • Autofix · Keep fixing CodeRabbit findings and required CI, and resolving merge conflicts

Comment @coderabbitai help to get the list of available commands.

@t3dotgg
t3dotgg merged commit ed0f7b9 into main Oct 11, 2026
33 checks passed
@t3dotgg
t3dotgg deleted the fix/sol-ultrafast-discovery branch October 11, 2026 12:30
github-actions Bot added a commit to omarcresp/t3code-flake that referenced this pull request Oct 11, 2026
## What's Changed
* feat(pull-requests): guided reviews, a beta tour of a pull request by @juliusmarminge in pingdotgg/t3code#18124
* feat(mcp): agents can write and read pull request review guides by @juliusmarminge in pingdotgg/t3code#18143
* fix(server): Sol Ultrafast stops vanishing from the Codex model picker by @t3dotgg in pingdotgg/t3code#18200


**Full Changelog**: pingdotgg/t3code@v0.0.46-nightly.20261011.2967...v0.0.46-nightly.20261011.2980

Upstream release: https://github.com/pingdotgg/t3code/releases/tag/v0.0.46-nightly.20261011.2980
github-actions Bot added a commit to davidvanderklay/t3code-flake that referenced this pull request Oct 11, 2026
## What's Changed
* feat(pull-requests): guided reviews, a beta tour of a pull request by @juliusmarminge in pingdotgg/t3code#18124
* feat(mcp): agents can write and read pull request review guides by @juliusmarminge in pingdotgg/t3code#18143
* fix(server): Sol Ultrafast stops vanishing from the Codex model picker by @t3dotgg in pingdotgg/t3code#18200


**Full Changelog**: pingdotgg/t3code@v0.0.46-nightly.20261011.2967...v0.0.46-nightly.20261011.2980

Upstream release: https://github.com/pingdotgg/t3code/releases/tag/v0.0.46-nightly.20261011.2980
sandscooling pushed a commit to sandscooling/t3code that referenced this pull request Oct 11, 2026
Sync 1011c: pingdotgg#18200 (Codex Ultrafast tier), pingdotgg#18143 (agent PR review guides).
Conflict in t3ToolSummary.test.ts: both sides added a test at the same spot; kept both.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

macroscope-review Opt PRs made by unvouched contributors in for Macroscope review. Vouched contributors auto-reviews size:L 100-499 changed lines (additions + deletions). vouch:trusted PR author is trusted by repo permissions or the VOUCHED list.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants