{"record":{"id":"c15f2ffada608d40","repo":"coleam00/Archon","slug":"unknown-provider-provider-preset-provider-is","errorCode":null,"errorMessage":"unknown-provider: provider '${preset.provider}' is not a registered provider (RunModelPresetValidationError, field 'provider')","messagePattern":"unknown-provider: provider '(.+?)' is not a registered provider \\(RunModelPresetValidationError, field 'provider'\\)","errorType":"validation","errorClass":"RunModelPresetValidationError","httpStatus":null,"severity":"error","filePath":"packages/workflows/src/model-validation.ts","lineNumber":160,"sourceCode":"  }\n}\n\n/** A strict execution-input preset failed a provider-owned semantic invariant. */\nexport class RunModelPresetValidationError extends Error {\n  constructor(readonly issue: RunModelPresetValidationIssue) {\n    super(runModelPresetValidationMessage(issue));\n    this.name = 'RunModelPresetValidationError';\n  }\n}\n\n/**\n * Validate and canonicalize a model preset that will directly affect one run.\n * Ordinary layered config remains tolerant; every strict execution-input path\n * (fresh config, explicit overrides, and persisted overrides) shares this gate.\n */\nexport function normalizeStrictRunModelPreset(preset: ModelAliasPreset): ModelAliasPreset {\n  if (!isRegisteredProvider(preset.provider)) {\n    throw new RunModelPresetValidationError({\n      kind: 'unknown-provider',\n      provider: preset.provider,\n      field: 'provider',\n    });\n  }\n\n  let model: string;\n  try {\n    model = parseProviderRunModel(preset.provider, preset.model);\n  } catch (error) {\n    throw new RunModelPresetValidationError({\n      kind: 'invalid-model',\n      provider: preset.provider,\n      model: preset.model,\n      reason: error instanceof Error ? error.message : String(error),\n      field: 'model',\n    });\n  }","sourceCodeStart":142,"sourceCodeEnd":178,"githubUrl":"https://github.com/coleam00/Archon/blob/0773b9745896ef0612e709c80845a0f7db315b19/packages/workflows/src/model-validation.ts#L142-L178","documentation":"`normalizeStrictRunModelPreset` is the strict gate every execution-input model preset must pass (fresh config, explicit run overrides, and persisted overrides). It throws a typed `RunModelPresetValidationError` with issue kind `unknown-provider` when the preset's provider is not in the registered provider registry, field `provider`. Unlike layered config (tolerant), execution inputs fail hard.","triggerScenarios":"Starting or overriding a run with a model preset whose provider string is not registered — typo in provider name, provider added by a plugin that is not loaded, or a preset persisted by an install that had a provider this install lacks.","commonSituations":"Typos like `anthropicc`, using a community/provider-alias name not registered in this install, copying a preset from another machine with different provider plugins.","solutions":["Correct the provider name to a registered one (check the provider registry list)","Load/register the provider plugin that defines the missing provider, if one exists","Remove or regenerate the persisted override preset on this install","Catch `RunModelPresetValidationError` and inspect `error.issue.kind === 'unknown-provider'` to surface the bad provider to the user"],"exampleFix":"// before\nnormalizeStrictRunModelPreset({ provider: 'anthropicc', model: 'claude-sonnet-4' })\n// after\nnormalizeStrictRunModelPreset({ provider: 'anthropic', model: 'claude-sonnet-4' })","handlingStrategy":"type-guard","validationCode":"import { isRegisteredProvider } from '@archon/providers';\n// Check before calling any strict normalization path.\nif (!isRegisteredProvider(preset.provider)) {\n  throw new Error(`Provider '${preset.provider}' is not registered; pick a registered provider`);\n}","typeGuard":"import { isRegisteredProvider } from '@archon/providers';\nfunction hasKnownProvider(p: { provider: string; model: string }): boolean {\n  return isRegisteredProvider(p.provider);\n}","tryCatchPattern":"import { RunModelPresetValidationError } from '@archon/workflows/model-validation';\ntry {\n  const canonical = normalizeStrictRunModelPreset(preset);\n} catch (err) {\n  if (err instanceof RunModelPresetValidationError && err.issue.kind === 'unknown-provider') {\n    throw new Error(`Run rejected: '${err.issue.provider}' is not a registered provider`, { cause: err });\n  }\n  throw err;\n}","preventionTips":["Pick provider names from the registered provider list, not memory","Check that any provider plugin defining a custom provider is loaded in this install","Regenerate persisted overrides when moving presets between installs","Validate preset.provider with isRegisteredProvider before launching or overriding a run"],"tags":["config","provider","model-binding","validation","typed-error"],"backgroundTag":"unknown-provider","analyzedSha":"0773b9745896ef0612e709c80845a0f7db315b19","analyzedAt":"2026-09-01T02:28:07.064Z","contentChangedAt":null,"schemaVersion":2},"datasetVersion":"2026-09-08T05:18:18.240Z"}