[Bug]: Codex Priority inherited from config is hidden as Standard
Nobody has claimed this yet.
- Dominant language
- TypeScript
- Stars
- 23k
- Forks
- 5.9k
- Avg merge
- 11h 14m
- Merged PRs (30d)
- 357
Description
Before submitting
- I searched existing issues and did not find an exact duplicate.
- I included enough detail to reproduce or investigate the problem.
Area
apps/server
Steps to reproduce
-
Set Codex's effective configuration to Fast/Priority, so
config/readreportsservice_tier = "priority". -
In T3 Code, use an All projects, project, or existing thread model selection with no explicit
serviceTier, for example:{ "instanceId": "codex", "model": "gpt-6-astra" } -
Open or resume that thread in T3 Code.
-
Observe that the composer shows Standard/no Fast lightning-bolt indicator.
-
Send a turn.
-
Inspect the T3 provider event and the Codex rollout's
thread_settings_appliedevent.
This was reproduced from normal persisted state after the All projects selection omitted serviceTier; no database editing was required.
Expected behavior
If the effective Codex tier is Priority/Fast, T3 must visibly show Fast before a turn runs. If T3 displays Standard, it must explicitly dispatch serviceTier: "default" so the displayed and effective values cannot diverge.
An unset T3 selection may inherit provider configuration, but T3 must display that inherited effective value rather than a separate catalog default.
Actual behavior
T3 displays Standard/no Fast indicator while omitting serviceTier from session and turn dispatch. Codex then inherits the top-level service_tier = "priority" and applies Fast mode.
The Codex service tier is global and independent of the selected model, so a Priority setting present while Luna was selected also affected Astra threads when T3 supplied no explicit tier.
Sanitized evidence from the affected installation:
- No T3 project default was explicitly configured as Fast/Priority.
- The machine-wide All projects selection specified Codex/Astra but omitted
serviceTier; most projects inherited it. - Five persisted Codex threads also had no
serviceTierselection. - The pre-workaround Codex configuration explicitly contained
service_tier = "priority". - One affected rollout recorded 40
thread_settings_appliedevents withservice_tier = "priority". - T3's provider log reported
thread/settings/updated ... serviceTier=priorityfor the same effective session. - T3 still showed no Fast state.
- After changing Fast to Standard in Codex CLI, the config became
service_tier = "default"; a new T3 session and Codex rollout both recordeddefault.
The upstream path appears to be the gap between:
- #9164, which intentionally changed T3 to dispatch only explicit selections so unset options can inherit provider configuration; and
- still-open #8913, which reads Codex
config/readvalues, includingservice_tier, back into T3's displayed provider defaults.
The installed build contains #9164 but not #8913. Closest issue #9804 was closed after restoring machine-wide controls, but it did not establish this effective-tier mismatch or measured accelerated usage. #6306 is adjacent but only covers T3's local cost estimate underpricing already-visible Fast turns.
Suggested regression coverage:
- Codex
config/readreturnspriorityand T3 has no explicit tier: the composer visibly shows Fast before the first turn. - T3 explicitly selects Standard while Codex config is Priority: T3 dispatches
defaultand Codex applies Standard. - Verify both the displayed descriptor and effective/dispatched tier at an integration seam.
- If effective configuration cannot be read, show the tier as unknown rather than confidently presenting Standard.
- Cover existing threads and machine/project defaults whose stored selection omits
serviceTier.
Impact
Major degradation or frequent failure
This is a usage-safety issue. The UI can confidently indicate Standard while the provider uses an accelerated tier with increased usage. In this incident, affected T3 Codex sessions exhausted usage far faster than expected and the mismatch took approximately eight hours to diagnose.
Version or commit
T3 Code 0.0.40-nightly.20260907.1359 (357b8d5217cd)
Environment
Fedora Linux 44, T3 server/shared web UI, Node 22.22.2, Bun 1.4.2, Codex CLI/app-server 0.153.4, Codex GPT-6 Astra
Logs or stack traces
T3 All projects model selection:
{"instanceId":"codex","model":"gpt-6-astra"}
# serviceTier is absent
Codex configuration before workaround:
service_tier = "priority"
Effective T3/Codex session:
thread/settings/updated ... serviceTier=priority
thread_settings_applied ... service_tier=priority
After selecting Standard in Codex CLI:
service_tier = "default"
thread/settings/updated ... serviceTier=default
thread_settings_applied ... service_tier=default
Thread IDs, project paths, prompts, credentials, and unrelated configuration have been omitted.
Workaround
Set Codex CLI to Standard/Default, or explicitly configure serviceTier: "default" in every applicable T3 All projects, project, and thread selection. Existing omitted selections remain vulnerable to future Codex configuration changes until T3 displays the inherited effective tier.
Contributor guide
First steps
- Read the whole issue, then the project's contributing guide.
- Comment on the issue to say you are picking it up — it saves two people doing the same work.
- Fork the repository and make your change on a branch.
- Open a pull request that references the issue number.
Research direction
Start in apps/server and trace the Codex config/read path through session and turn dispatch, then inspect how the composer derives the displayed service tier. Use the suggested regression cases for inherited Priority, explicit Standard, existing threads, and unavailable configuration. Done means the displayed and dispatched effective tier cannot diverge, with coverage at the integration seam.
Written by the indexing model from the issue text.
Assessment
- Tech stack
- typescript
- Domain
- backend, frontend, full-stack
- Issue type
- Bug
- Difficulty
- 4/5
- Estimated time
- 3-5 days
- Activity status
- Active
- Clarity
- Mostly clear
- Newbie friendliness
- 55/100