fix(ui): show only Standard and Fast for OpenAI speed#100190
Conversation
|
Codex review: needs real behavior proof before merge. Reviewed July 5, 2026, 4:16 AM ET / 08:16 UTC. Summary PR surface: Source +16, Tests +62, Docs +1. Total +79 across 3 files. Reproducibility: yes. Current main source shows OpenAI receives the generic four-option speed picker, and PR-head source shows the inherited/default-state regressions without needing a live UI run. Review metrics: 1 noteworthy metric.
Merge readiness Overall follows the weaker of proof and patch quality, so missing proof can cap an otherwise strong patch. Rank-up moves:
Proof guidance:
Mantis proof suggestion Risk before merge
Maintainer options:
Next step before merge
Security Review findings
Review detailsBest possible solution: Keep the OpenAI Standard/Fast simplification, but preserve an inherit/clear state for stored overrides and make selected inherited choices no-op, then add real Control UI proof. Do we have a high-confidence way to reproduce the issue? Yes. Current main source shows OpenAI receives the generic four-option speed picker, and PR-head source shows the inherited/default-state regressions without needing a live UI run. Is this the best way to solve the issue? No. Narrowing OpenAI to Standard/Fast matches the Codex service-tier contract, but this patch is not the best final fix until it preserves clearing and inherited selected-state behavior. Full review comments:
Overall correctness: patch is incorrect AGENTS.md: found and applied where relevant. Codex review notes: model internal, reasoning high; reviewed against 07bf384a8b3f. Label changesLabel justifications:
Evidence reviewedPR surface: Source +16, Tests +62, Docs +1. Total +79 across 3 files. View PR surface stats
What I checked:
Likely related people:
What the crustacean ranks mean
Shiny media proof means a screenshot, video, or linked artifact directly shows the changed behavior. Runtime, network, CSP, and security claims still need visible diagnostics. How this review workflow works
Review history (7 earlier review cycles)
|
There was a problem hiding this comment.
💡 Codex Review
Here are some automated review suggestions for this pull request.
Reviewed commit: e4c69c8a40
ℹ️ About Codex in GitHub
Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you
- Open a pull request for review
- Mark a draft as ready
- Comment "@codex review".
If Codex has suggestions, it will comment; otherwise it will react with 👍.
Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".
| ? "off" | ||
| : ""; | ||
| const isOpenAI = effectiveProvider === "openai"; | ||
| const effectiveOpenAIMode = activeRow?.effectiveFastMode ?? activeRow?.fastMode; |
There was a problem hiding this comment.
Preserve inherited speed state on selected clicks
When an OpenAI row inherits speed from config/agent/default (fastMode is undefined but effectiveFastMode is true/false, which sessions.list emits), this makes Fast/Standard render as the selected option. The click path still no-ops only when previousFastMode === next in switchChatFastMode, so clicking the already-selected choice sends sessions.patch with a session-level fastMode override and breaks future inheritance. Either keep inherited state distinct or make the handler compare against the effective mode before patching.
Useful? React with 👍 / 👎.
|
Land-ready on exact head Proof:
OpenAI now exposes only Standard and Fast in the picker. Other providers retain their existing choices; inherited Fast and legacy Auto normalization are covered. |
There was a problem hiding this comment.
💡 Codex Review
Here are some automated review suggestions for this pull request.
Reviewed commit: d184bf5d41
ℹ️ About Codex in GitHub
Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you
- Open a pull request for review
- Mark a draft as ready
- Comment "@codex review".
If Codex has suggestions, it will comment; otherwise it will react with 👍.
Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".
| const COMMAND_ALIASES: Record<string, string> = { | ||
| elev: "elevated", | ||
| gwstatus: "gateway-status", | ||
| }; |
There was a problem hiding this comment.
Restore the /elev alias mapping
When a TUI user enters the still-advertised /elev full shortcut, parseCommand now falls through to COMMAND_ALIASES after resolveTextCommand finds no registry alias for /elev, but this map no longer rewrites elev to elevated. The command handler only has a case for elevated, so /elev ... is treated as an arbitrary slash message and sent to the model instead of patching the elevated mode.
Useful? React with 👍 / 👎.
63576ba to
687db25
Compare
687db25 to
58d32da
Compare
There was a problem hiding this comment.
💡 Codex Review
Here are some automated review suggestions for this pull request.
Reviewed commit: 58d32da27b
ℹ️ About Codex in GitHub
Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you
- Open a pull request for review
- Mark a draft as ready
- Comment "@codex review".
If Codex has suggestions, it will comment; otherwise it will react with 👍.
Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".
| ? [ | ||
| { value: "off", label: "Standard" }, | ||
| { value: "on", label: "Fast" }, | ||
| ] |
There was a problem hiding this comment.
Preserve a way to clear OpenAI speed overrides
When an OpenAI session already has a session-level speed override, this OpenAI-only option list no longer includes the empty Default value. The picker’s handler only clears an override when switchChatFastMode receives ""; choosing Standard sends fastMode: false, so users cannot return an OpenAI chat to model/agent/config inheritance from the picker after choosing Fast or Standard. Keep a clear/default affordance or otherwise route the intended inherited state to the empty value.
Useful? React with 👍 / 👎.
58d32da to
59a1b36
Compare
59a1b36 to
217521a
Compare
|
Merged via squash.
|
What Problem This Solves
Fixes an issue where OpenAI users opening the Control UI model picker would see four speed choices—Default, Fast, Standard, and Auto—even though OpenAI exposes only the standard and priority service tiers.
Why This Change Was Made
The OpenAI picker now presents only Standard and Fast, ordered Standard first. Selection follows the effective session state so inherited Fast remains visible; legacy Auto remains unselected until the user explicitly chooses one of the supported binary modes. Other providers retain their existing choices.
User Impact
OpenAI users now get an unambiguous two-choice speed control matching the provider contract.
Evidence
OPENCLAW_HEAVY_CHECK_LOCK_SCOPE=worktree OPENCLAW_VITEST_FS_MODULE_CACHE_PATH=/tmp/openclaw-speed-picker-vitest node scripts/run-vitest.mjs ui/src/lib/chat/model-select-state.test.ts— 11 tests passed.OPENCLAW_HEAVY_CHECK_LOCK_SCOPE=worktree node scripts/run-tsgo.mjs -p tsconfig.core.json— passed..agents/skills/autoreview/scripts/autoreview --mode local --stream-engine-output— clean after addressing effective/inherited mode selection.codex-rs/protocol/src/config_types.rs,codex-rs/protocol/src/openai_models.rs,codex-rs/core/src/session/mod.rs, and their service-tier tests. Codex maps Standard to the default tier and Fast to priority.AI-assisted: implemented and reviewed with Codex; maintainer-directed change.