{"record":{"id":"66f974ca48f5b117","repo":"coleam00/Archon","slug":"workflow-run-has-invalid-model-bindings-path-1","errorCode":null,"errorMessage":"Workflow run has invalid model_bindings ${path[1]} metadata.","messagePattern":"Workflow run has invalid model_bindings (.+?) metadata\\.","errorType":"validation","errorClass":"Error","httpStatus":null,"severity":"error","filePath":"packages/workflows/src/model-validation.ts","lineNumber":507,"sourceCode":"\n/** Read metadata written by this module; malformed external JSON fails explicitly. */\nexport function readRunModelBindingsMetadata(\n  metadata: Record<string, unknown> | undefined\n): RunModelBindingsMetadata | undefined {\n  const value = metadata?.[RUN_MODEL_BINDINGS_METADATA_KEY];\n  if (value === undefined) return undefined;\n  const parsed = runModelBindingsMetadataSchema.safeParse(value);\n  if (!parsed.success) {\n    const path = parsed.error.issues[0]?.path ?? [];\n    const bindingName = typeof path[2] === 'string' ? path[2] : 'unknown';\n    if (path.includes('thinking')) {\n      throw new Error(`Model binding '${bindingName}' has invalid thinking options.`);\n    }\n    if (path.includes('effort')) {\n      throw new Error(`Model binding '${bindingName}' has an invalid effort.`);\n    }\n    if (path[0] === 'overrides' && (path[1] === 'tiers' || path[1] === 'aliases')) {\n      throw new Error(`Workflow run has invalid model_bindings ${path[1]} metadata.`);\n    }\n    if (path[0] === 'effective') {\n      throw new Error('Workflow run has invalid effective model bindings.');\n    }\n    throw new Error('Workflow run has invalid model_bindings metadata.');\n  }\n\n  const tiers = Object.fromEntries(\n    Object.entries(parsed.data.overrides.tiers ?? {}).map(([name, preset]) => [\n      name,\n      normalizePersistedOverridePreset(name, preset),\n    ])\n  );\n  const aliases = Object.fromEntries(\n    Object.entries(parsed.data.overrides.aliases ?? {}).map(([name, preset]) => [\n      name,\n      normalizePersistedOverridePreset(name, preset),\n    ])","sourceCodeStart":489,"sourceCodeEnd":525,"githubUrl":"https://github.com/coleam00/Archon/blob/0773b9745896ef0612e709c80845a0f7db315b19/packages/workflows/src/model-validation.ts#L489-L525","documentation":"When a run's model_bindings metadata fails schema validation and the failure sits under overrides.tiers or overrides.aliases, readRunModelBindingsMetadata throws that the run has invalid model_bindings tiers/aliases metadata. The dynamic path[1] segment reports which override map is corrupt. This guards execution against unusable tier/alias override maps.","triggerScenarios":"executeWorkflow loads a run whose overrides.tiers or overrides.aliases object inside model_bindings fails safeParse — wrong value shapes, non-string model specs, or unexpected types in the persisted metadata.","commonSituations":"Direct database edits or backfills of run metadata; a writer bug or version drift producing override maps the current schema rejects; copying runs between installs with different metadata writers.","solutions":["Fix the overrides.tiers/overrides.aliases entries in the run's model_bindings metadata so they conform to runModelBindingsMetadataSchema","Re-create the run with valid model_bindings metadata","Audit the writer that persisted the overrides to emit schema-conformant shapes"],"exampleFix":"// before\n\"overrides\": { \"tiers\": { \"small\": 42 } }\n// after\n\"overrides\": { \"tiers\": { \"small\": \"gpt-4o-mini\" } }","handlingStrategy":"validation","validationCode":"const parsed = runModelBindingsMetadataSchema.safeParse(metadata);\nif (!parsed.success) {\n  const bad = parsed.error.issues.find(i => i.path[0] === 'overrides' && (i.path[1] === 'tiers' || i.path[1] === 'aliases'));\n  if (bad) throw new Error(`Invalid overrides.${String(bad.path[1])} metadata: ${bad.message} at ${bad.path.join('.')}`);\n}","typeGuard":"function hasValidOverrides(m: { overrides?: unknown }): boolean {\n  return runModelBindingsMetadataSchema.pick({ overrides: true }).safeParse({ overrides: m.overrides }).success;\n}","tryCatchPattern":"try {\n  await executeWorkflow(runId);\n} catch (err) {\n  if (err instanceof Error && /invalid model_bindings (tiers|aliases) metadata/.test(err.message)) {\n    console.error(`${err.message} — repair overrides in model_bindings or start a new run.`);\n  } else throw err;\n}","preventionTips":["Persist tier/alias overrides as schema-conformant string maps only","Round-trip test custom writers: write then safeParse with runModelBindingsMetadataSchema","Avoid direct SQL edits to run metadata; use engine APIs that validate on write"],"tags":["validation","metadata","model-overrides"],"backgroundTag":"schema-validation-failed","analyzedSha":"0773b9745896ef0612e709c80845a0f7db315b19","analyzedAt":"2026-09-01T02:28:07.064Z","contentChangedAt":null,"schemaVersion":2},"datasetVersion":"2026-09-08T05:18:18.240Z"}