openai / openai/codex-plugin-cc
/codex:review rejects focus text — breaks interface parity with /codex:adversarial-review and blocks non-English model/effort entry
Nobody has claimed this yet.
- Dominant language
- JavaScript
- Stars
- 33.3k
- Forks
- 2.3k
- PR merge metrics
- No merged PRs in 30d
Description
Describe the bug
/codex:review throws on any positional argument because validateNativeReviewRequest rejects non-empty focus text unconditionally (codex-companion.mjs:271-274): "does not support custom focus text. Retry with /codex:adversarial-review ...".
1. It breaks interface parity. /codex:adversarial-review accepts focus text after the flags; /codex:review rejects it wholesale. Two sibling review commands that should behave as mirrors differ in a way the user only discovers by hitting the error. The suggested escape hatch (adversarial-review) is not a substitute — it changes the review semantics (adversarial framing), so the user is forced to pick between "type a sentence" and "get the review I actually want."
2. It makes non-English model/effort entry unusable. The short aliases (spark, sol, terra, luna) and the latin-only --flag value grammar assume the user types in English/Latin script. A user who writes the model/effort value as a natural phrase in their own language has no accepted input path. They must know the exact flag syntax and the exact latin model id.
To reproduce
A Japanese-speaking user requesting a high-effort review on the sol model, typed the natural way (model → モデル, sol → ソル, effort → エフォート, xhigh → エックスハイ — Japanese phonetically transcribes everything into kana):
$ /codex:review モデル ソル エフォート エックスハイ
Error: `/codex:review` now maps directly to the built-in reviewer and does not support custom focus text.
Retry with `/codex:adversarial-review ...`
The intent ("use model sol, effort xhigh") is unambiguous to a human, but the parser treats the non-Latin prose as forbidden focus text — and even if it didn't, there is no ソル alias to map back to sol.
Expected behavior
Not mutually exclusive:
- Lenient positional parsing: if a positional argument can be interpreted as model/effort intent, accept it as such instead of rejecting the whole invocation.
- Recognize model/effort intent regardless of position/script: scan raw arguments for model/effort intent in any language before the strict rejection, so
/codex:review モデル ソルresolves to--model sol. - Parity: accept the same argument surface in both review commands, so the interface is uniform.
Environment
Plugin v1.0.6, codex-cli 0.144.4, macOS.
Related
- #333, #512 — focus-text re-tokenization (inverse problem: flags leaking into focus text; this issue is benign focus text rejected wholesale).
Contributor guide
No contributing guide indexed for this repository
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 codex-companion.mjs:271-274 and trace validateNativeReviewRequest, then compare its argument handling with /codex:adversarial-review. Reproduce the Japanese positional invocation from the issue and determine how model/effort intent is currently parsed. Done means the agreed positional or multilingual model/effort inputs no longer fail wholesale and the sibling commands expose the intended matching argument surface.
Written by the indexing model from the issue text.
Assessment
- Tech stack
- javascript
- Domain
- cli, internationalization
- Issue type
- Bug
- Difficulty
- 4/5
- Estimated time
- 3-5 days
- Activity status
- Quiet
- Clarity
- Mostly clear
- Newbie friendliness
- 48/100