{"record":{"id":"822c553ac3cea459","repo":"affaan-m/ECC","slug":"codex-versionmatch-1-cannot-guarantee-tool-les","errorCode":null,"errorMessage":"Codex ${versionMatch[1]} cannot guarantee tool-less review; required stable feature toggles unavailable: ${unavailable.join(', ')}","messagePattern":"Codex (.+?) cannot guarantee tool-less review; required stable feature toggles unavailable: (.+?)","errorType":"exception","errorClass":"Error","httpStatus":null,"severity":"error","filePath":"skills/council-multi-model/scripts/review-with-codex.js","lineNumber":163,"sourceCode":"    throw new Error(\n      `unsupported Codex version ${versionMatch[1]}; `\n      + `tool-less review requires exactly ${SUPPORTED_CODEX_VERSION}`\n    );\n  }\n\n  const featuresText = probeCodex(spawn, ['features', 'list'], options, 'feature');\n  const stages = new Map();\n  for (const line of featuresText.split('\\n')) {\n    const match = line.trim().match(\n      /^(\\S+)\\s+(stable|under development|experimental|deprecated|removed)\\s+(true|false)$/\n    );\n    if (match) stages.set(match[1], match[2]);\n  }\n  const unavailable = REQUIRED_TOOLLESS_FEATURES.filter(\n    (feature) => stages.get(feature) !== 'stable'\n  );\n  if (unavailable.length > 0) {\n    throw new Error(\n      `Codex ${versionMatch[1]} cannot guarantee tool-less review; `\n      + `required stable feature toggles unavailable: ${unavailable.join(', ')}`\n    );\n  }\n  return versionMatch[1];\n}\n\nfunction buildEnvironment(sourceEnv = process.env) {\n  const allowed = [\n    'PATH', 'HOME', 'USERPROFILE', 'CODEX_HOME',\n    'TMPDIR', 'TMP', 'TEMP', 'SystemRoot', 'ComSpec', 'PATHEXT',\n  ];\n  return Object.fromEntries(\n    allowed.filter((name) => sourceEnv[name]).map((name) => [name, sourceEnv[name]])\n  );\n}\n\nfunction runReview(prompt, options, dependencies = {}) {","sourceCodeStart":145,"sourceCodeEnd":181,"githubUrl":"https://github.com/affaan-m/ECC/blob/8321021c54d670126ce3b2969d5deb880b4b0c2a/skills/council-multi-model/scripts/review-with-codex.js#L145-L181","documentation":"Even with the right Codex version, verifyToollessSupport() requires every feature in REQUIRED_TOOLLESS_FEATURES (apps, hooks, multi_agent, etc.) to report stage 'stable' in `codex features list`. If any feature is experimental, under development, deprecated, removed, or missing, this error is thrown listing the unavailable toggles, because tool-less (feature-disabled) review can no longer be guaranteed.","triggerScenarios":"verifyToollessSupport() runs `codex features list`; REQUIRED_TOOLLESS_FEATURES.filter() finds features whose parsed stage !== 'stable' — e.g. a feature became 'experimental' or disappeared entirely from the listing.","commonSituations":"Codex team demoted a feature stage in a patch release; a feature was renamed/removed so the Map lookup misses; running against a build with features compiled out.","solutions":["Run `codex features list` and check the stage column for each feature named in the error","Install exactly the supported codex-cli 0.146.0 where all listed toggles are stable","If a feature was renamed upstream, update REQUIRED_TOOLLESS_FEATURES in review-with-codex.js to the new name","Skip tool-less review or wait until upstream restores the features to stable"],"exampleFix":"// before (features list shows)\nhooks   experimental  true\n// after\nnpm install -g @openai/codex@0.146.0\n$ codex features list\nhooks   stable  true","handlingStrategy":"try-catch","validationCode":"const { execSync } = require('child_process');\nconst { REQUIRED_TOOLLESS_FEATURES } = require('./review-with-codex');\nfunction requiredFeaturesStable() {\n  const out = execSync('codex features list', { encoding: 'utf8' });\n  const stages = new Map();\n  for (const line of out.split('\\n')) {\n    const m = line.trim().match(/^(\\S+)\\s+(stable|under development|experimental|deprecated|removed)\\s+(true|false)$/);\n    if (m) stages.set(m[1], m[2]);\n  }\n  return REQUIRED_TOOLLESS_FEATURES.every((f) => stages.get(f) === 'stable');\n}","typeGuard":null,"tryCatchPattern":"try {\n  verifyToollessSupport();\n} catch (err) {\n  if (err.message.includes('required stable feature toggles unavailable')) {\n    console.error('Tool-less review unsupported on this Codex build:', err.message);\n    // fall back to a supervised review path\n  } else throw err;\n}","preventionTips":["Review `codex features list` after every Codex upgrade","Stay on the pinned codex-cli version where all toggles are stable","Subscribe to Codex release notes for feature stage changes","Provide a fallback review mode when toggles are not stable"],"tags":["codex","feature-flags","version-check","compatibility"],"backgroundTag":"feature-not-enabled","analyzedSha":"8321021c54d670126ce3b2969d5deb880b4b0c2a","analyzedAt":"2026-09-16T10:08:13.343Z","contentChangedAt":"2026-09-16T10:08:13.343Z","schemaVersion":2},"datasetVersion":"2026-09-23T08:17:48.524Z"}