{"record":{"id":"b0b070152ebe838a","repo":"openai/codex-plugin-cc","slug":"codex-review-now-maps-directly-to-the-built-in","errorCode":null,"errorMessage":"`/codex:review` now maps directly to the built-in reviewer and does not support custom focus text. Retry with `/codex:adversarial-review ${focusText.trim()}` for focused review instructions.","messagePattern":"`/codex:review` now maps directly to the built-in reviewer and does not support custom focus text\\. Retry with `/codex:adversarial-review (.+?)` for focused review instructions\\.","errorType":"validation","errorClass":"Error","httpStatus":null,"severity":"error","filePath":"plugins/codex/scripts/codex-companion.mjs","lineNumber":273,"sourceCode":"    throw new Error(\"Codex CLI is not installed or is missing required runtime support. Install it with `npm install -g @openai/codex`, then rerun `/codex:setup`.\");\n  }\n}\n\nfunction buildNativeReviewTarget(target) {\n  if (target.mode === \"working-tree\") {\n    return { type: \"uncommittedChanges\" };\n  }\n\n  if (target.mode === \"branch\") {\n    return { type: \"baseBranch\", branch: target.baseRef };\n  }\n\n  return null;\n}\n\nfunction validateNativeReviewRequest(target, focusText) {\n  if (focusText.trim()) {\n    throw new Error(\n      `\\`/codex:review\\` now maps directly to the built-in reviewer and does not support custom focus text. Retry with \\`/codex:adversarial-review ${focusText.trim()}\\` for focused review instructions.`\n    );\n  }\n\n  const nativeTarget = buildNativeReviewTarget(target);\n  if (!nativeTarget) {\n    throw new Error(\"This `/codex:review` target is not supported by the built-in reviewer. Retry with `/codex:adversarial-review` for custom targeting.\");\n  }\n\n  return nativeTarget;\n}\n\nfunction renderStatusPayload(report, asJson) {\n  return asJson ? report : renderStatusReport(report);\n}\n\nfunction isActiveJobStatus(status) {\n  return status === \"queued\" || status === \"running\";","sourceCodeStart":255,"sourceCodeEnd":291,"githubUrl":"https://github.com/openai/codex-plugin-cc/blob/db52e28f4d9ded852ab3942cea316258ae4ef346/plugins/codex/scripts/codex-companion.mjs#L255-L291","documentation":"validateNativeReviewRequest is the validator for `/codex:review` (reviewName === 'Review'), which maps to the codex built-in reviewer (runAppServerReview). The built-in reviewer takes a structured target, not free text, so any non-empty focusText positional is rejected with a redirect to adversarial-review which does accept focus.","triggerScenarios":"Running `/codex:review check error handling` where the positional words become focusText. The user expected review to accept a focus string like the older API.","commonSituations":"Migration from an older companion where /codex:review accepted focus text; muscle memory from adversarial-review syntax.","solutions":["Use /codex:adversarial-review <focus text> when you need to inject custom focus instructions.","Use /codex:review with no positional arguments for the standard built-in review.","Update slash-command wrappers to stop appending focus text to review."],"exampleFix":"// before\ncodex-companion.mjs review \"focus on error handling\"\n// after\ncodex-companion.mjs adversarial-review \"focus on error handling\"","handlingStrategy":"validation","validationCode":"if (reviewName === 'Review' && focusText.trim()) {\n  throw new Error('review does not accept focus; use adversarial-review');\n}","typeGuard":null,"tryCatchPattern":null,"preventionTips":["Route focus-bearing review requests to adversarial-review.","Strip positionals from /codex:review invocations."],"tags":["cli","usage","review","migration"],"backgroundTag":null,"analyzedSha":"db52e28f4d9ded852ab3942cea316258ae4ef346","analyzedAt":"2026-08-13T05:13:20.855Z","schemaVersion":2},"datasetVersion":"2026-08-13T09:17:06.757Z"}