{"record":{"id":"f31ad9a1a7a042f2","repo":"affaan-m/ECC","slug":"host-provider-must-be-anthropic-openai-or-unkn","errorCode":null,"errorMessage":"--host-provider must be anthropic, openai, or unknown","messagePattern":"--host-provider must be anthropic, openai, or unknown","errorType":"exception","errorClass":"Error","httpStatus":null,"severity":"error","filePath":"skills/council-multi-model/scripts/review-with-codex.js","lineNumber":83,"sourceCode":"      const seconds = Number(argv[index + 1]);\n      if (!Number.isInteger(seconds) || seconds < 10 || seconds > 120) {\n        throw new Error('--timeout-seconds must be an integer from 10 to 120');\n      }\n      options.timeoutMs = seconds * 1000;\n      index += 1;\n    } else if (arg === '--help' || arg === '-h') {\n      options.help = true;\n    } else {\n      throw new Error(`unknown argument: ${arg}`);\n    }\n  }\n\n  if (options.help) return options;\n  if (!options.consent) {\n    throw new Error('explicit --consent-to-openai is required');\n  }\n  if (!HOST_PROVIDERS.has(options.hostProvider)) {\n    throw new Error('--host-provider must be anthropic, openai, or unknown');\n  }\n  return options;\n}\n\nfunction providerLabel(hostProvider) {\n  if (hostProvider === 'anthropic') return 'cross-provider external critique';\n  if (hostProvider === 'openai') return 'same-provider external critique';\n  return 'provider relationship unverified';\n}\n\nfunction buildCodexArgs(tempDir, outputFile) {\n  return [\n    '--ask-for-approval', 'never',\n    ...REQUIRED_TOOLLESS_FEATURES.flatMap((feature) => ['--disable', feature]),\n    'exec',\n    '--ephemeral',\n    '--ignore-user-config',\n    '--ignore-rules',","sourceCodeStart":65,"sourceCodeEnd":101,"githubUrl":"https://github.com/affaan-m/ECC/blob/01e15490f04e29cfefe3896951f43db46994d8ee/skills/council-multi-model/scripts/review-with-codex.js#L65-L101","documentation":"Thrown by parseArgs() after the loop when options.hostProvider is null or not in the HOST_PROVIDERS set (anthropic, openai, unknown). The host provider labels the provider-relationship of the critique (cross-provider vs same-provider vs unverified), which is prepended to the review output. It is mandatory because the label is load-bearing for how the critique is interpreted.","triggerScenarios":"Omitting --host-provider entirely (it defaults to null); passing an unsupported value like --host-provider google or --host-provider azure. Note --host-provider must be followed by the value token; the parser consumes argv[index+1].","commonSituations":"Forgetting the flag; passing a provider name that is not in the allowed set; typo (e.g. --host-providers); leaving the value off so the next flag is consumed as the provider string.","solutions":["Pass one of anthropic, openai, or unknown: `--host-provider anthropic`.","Use 'unknown' when you cannot verify the hosting relationship; the output will say 'provider relationship unverified'.","Ensure the value is a separate argv token (no = form, no missing value)."],"exampleFix":"// before\nnode skills/council-multi-model/scripts/review-with-codex.js --consent-to-openai\n\n// after\nnode skills/council-multi-model/scripts/review-with-codex.js --consent-to-openai --host-provider anthropic","handlingStrategy":"validation","validationCode":"const HOST_PROVIDERS = new Set(['anthropic', 'openai', 'unknown']);\nfunction ensureHostProvider(value) {\n  if (!HOST_PROVIDERS.has(value)) {\n    throw new Error('--host-provider must be anthropic, openai, or unknown');\n  }\n  return value;\n}","typeGuard":"function isHostProvider(value) {\n  return value === 'anthropic' || value === 'openai' || value === 'unknown';\n}","tryCatchPattern":null,"preventionTips":["Always pass --host-provider with one of the three allowed values.","Use 'unknown' when the provider relationship cannot be verified.","Pass the value as the next argv token, not glued with '='."],"tags":["cli","validation","missing-argument","host-provider","invalid-value"],"backgroundTag":null,"analyzedSha":"01e15490f04e29cfefe3896951f43db46994d8ee","analyzedAt":"2026-08-13T00:31:08.655Z","schemaVersion":2},"datasetVersion":"2026-08-13T04:17:16.726Z"}