{"record":{"id":"b3e2e552338c8fc8","repo":"coleam00/Archon","slug":"unknown-provider-setting","errorCode":null,"errorMessage":"unknown provider setting","messagePattern":"unknown provider setting","errorType":"validation","errorClass":"InvalidProviderRunConfigError","httpStatus":null,"severity":"error","filePath":"packages/providers/src/shared/run-config.ts","lineNumber":9,"sourceCode":"import { InvalidProviderRunConfigError } from '../errors';\n\nexport function assertKnownRunConfigKeys(\n  raw: Record<string, unknown>,\n  allowed: readonly string[]\n): void {\n  const unknown = Object.keys(raw).find(key => !allowed.includes(key));\n  if (unknown !== undefined) {\n    throw new InvalidProviderRunConfigError(unknown, 'unknown provider setting');\n  }\n}\n\nexport function invalidRunConfigValue(fieldPath: string, expected: string): never {\n  throw new InvalidProviderRunConfigError(fieldPath, `expected ${expected}`);\n}\n\nexport function normalizeRunConfigString(value: unknown, fieldPath: string): string | undefined {\n  if (value === undefined) return undefined;\n  if (typeof value !== 'string' || value.trim().length === 0) {\n    invalidRunConfigValue(fieldPath, 'a non-blank string');\n  }\n  return value.trim();\n}\n\nexport function isConfigRecord(value: unknown): value is Record<string, unknown> {\n  return value !== null && typeof value === 'object' && !Array.isArray(value);\n}","sourceCodeStart":1,"sourceCodeEnd":27,"githubUrl":"https://github.com/coleam00/Archon/blob/0773b9745896ef0612e709c80845a0f7db315b19/packages/providers/src/shared/run-config.ts#L1-L27","documentation":"assertKnownRunConfigKeys rejects provider run-config objects containing any key outside the provider's allowed set. Each provider parser (Claude, Codex, Copilot, Opencode, Pi) declares the settings it understands; anything else throws InvalidProviderRunConfigError naming the offending key, because unknown settings would otherwise be silently ignored and mask config mistakes.","triggerScenarios":"Passing a run config with a key not in the provider's allowed list — e.g. 'temperature' to a provider that doesn't support it, a typo like 'modle', or an option renamed between versions.","commonSituations":"Sharing one run-config object across different providers; typos in YAML/JSON run settings; upgrading Archon and using removed/renamed provider options; copying config examples for a different provider.","solutions":["Remove the offending key (named in the error) from the run config","Check the target provider's allowed keys and use the correct option name","Move provider-specific settings to the config of the provider that supports them","Update renamed options after an Archon upgrade"],"exampleFix":"// before\nparseClaudeRunConfig({ model: 'claude-sonnet-4', temperature: 0.5 });\n// after (temperature not supported by Claude run config)\nparseClaudeRunConfig({ model: 'claude-sonnet-4' });","handlingStrategy":"validation","validationCode":"const allowedClaudeKeys = ['model']; // see the provider parser's allowed list\nconst unknown = Object.keys(rawRunConfig).filter(k => !allowedClaudeKeys.includes(k));\nif (unknown.length) console.error(`Unknown settings for provider: ${unknown.join(', ')}`);","typeGuard":"function hasOnlyKeys<T extends object>(raw: object, allowed: readonly (keyof T)[]):\n  raw is Pick<T, keyof T & string> {\n  return Object.keys(raw).every(k => (allowed as readonly string[]).includes(k));\n}","tryCatchPattern":"import { InvalidProviderRunConfigError } from '@archon/providers';\ntry {\n  cfg = parseClaudeRunConfig(raw);\n} catch (err) {\n  if (err instanceof InvalidProviderRunConfigError) {\n    console.error(`Remove or rename setting '${err.fieldPath}' for this provider`);\n  }\n  throw err;\n}","preventionTips":["Keep per-provider config objects separate; never share one object across providers","Check the provider's documented allowed keys before adding a setting","Re-validate configs after Archon upgrades that rename options"],"tags":["run-config","validation","strict-parsing","configuration"],"backgroundTag":"unknown-config-key","analyzedSha":"0773b9745896ef0612e709c80845a0f7db315b19","analyzedAt":"2026-09-01T02:28:07.064Z","contentChangedAt":null,"schemaVersion":2},"datasetVersion":"2026-09-08T05:18:18.240Z"}