{"record":{"id":"aef05e6939857364","repo":"affaan-m/ECC","slug":"harness-label-is-an-advanced-harness-and-is-not","errorCode":null,"errorMessage":"${harness.label} is an advanced harness and is not guided-ready","messagePattern":"(.+?) is an advanced harness and is not guided-ready","errorType":"validation","errorClass":"Error","httpStatus":null,"severity":"error","filePath":"scripts/lib/harness-capabilities.js","lineNumber":341,"sourceCode":"    throw new Error('The all/* harness selection cannot be combined with other selections');\n  }\n  if (allTokens.length > 0) {\n    return GUIDED_HARNESS_IDS.slice();\n  }\n\n  const selected = new Set();\n  for (const token of tokens) {\n    const normalizedToken = normalizeLookupToken(token);\n    const menuIndex = /^\\d+$/.test(normalizedToken) ? Number(normalizedToken) - 1 : -1;\n    const harness = menuIndex >= 0\n      ? listGuidedHarnesses()[menuIndex] || null\n      : getHarnessCapability(token);\n\n    if (!harness) {\n      throw new Error(`Unknown guided harness selection: ${token}`);\n    }\n    if (!harness.guidedReady) {\n      throw new Error(`${harness.label} is an advanced harness and is not guided-ready`);\n    }\n    selected.add(harness.id);\n  }\n\n  if (selected.size === 0) {\n    throw new Error('At least one guided harness must be selected');\n  }\n\n  return GUIDED_HARNESS_IDS.filter(id => selected.has(id));\n}\n\nmodule.exports = {\n  GUIDED_HARNESS_IDS,\n  HARNESS_CAPABILITIES,\n  getHarnessCapability,\n  listGuidedHarnesses,\n  listHarnessCapabilities,\n  normalizeHarnessSelection,","sourceCodeStart":323,"sourceCodeEnd":359,"githubUrl":"https://github.com/affaan-m/ECC/blob/01e15490f04e29cfefe3896951f43db46994d8ee/scripts/lib/harness-capabilities.js#L323-L359","documentation":"Thrown by normalizeHarnessSelection() when a token resolves to a real harness capability but that harness has guidedReady === false. Guided install only accepts harnesses flagged guided-ready; advanced harnesses require a different install path.","triggerScenarios":"Token maps to a HARNESS_CAPABILITIES entry with guidedReady: false (cursor, antigravity, gemini, opencode, codebuddy, joycode, qwen, zed, hermes, openclaw) inside the normalizeHarnessSelection loop.","commonSituations":"User runs the guided installer and types 'cursor' or 'opencode'; menu shows advanced harnesses and user picks one by name; config file lists an advanced harness under the guided selection.","solutions":["Pick a guided-ready harness instead: 'claude', 'codex', or 'kimi'.","If you really want an advanced harness, use the component install path (install.sh --target <id> --profile full) rather than the guided selector.","Filter the visible menu to listGuidedHarnesses() only."],"exampleFix":"// before\nnormalizeHarnessSelection('cursor');\n\n// after (guided path)\nnormalizeHarnessSelection('claude');\n// or (advanced path, bypass guided selector)\n// install.sh --target cursor --profile full","handlingStrategy":"validation","validationCode":"const { listHarnessCapabilities } = require('./harness-capabilities');\nfunction isGuidedToken(token) {\n  const h = listHarnessCapabilities().find(h =>\n    [h.id, h.label, ...h.aliases].map(s => s.toLowerCase()).includes(token.trim().toLowerCase()));\n  return Boolean(h && h.guidedReady);\n}\nif (!isGuidedToken(token)) {\n  throw new Error(`${token} is not guided-ready; use install.sh --target ${token} --profile full`);\n}","typeGuard":"function isGuidedHarness(v) {\n  return v != null && typeof v === 'object' && v.guidedReady === true;\n}","tryCatchPattern":"try {\n  return normalizeHarnessSelection(sel);\n} catch (err) {\n  if (/not guided-ready/.test(err.message)) {\n    console.error(`${err.message}\\nUse: install.sh --target <id> --profile full`);\n  }\n  throw err;\n}","preventionTips":["Filter the interactive menu to listGuidedHarnesses() only.","Document which harnesses are guided-ready vs advanced in the install guide.","In config, validate guided-ready status before forwarding to the selector."],"tags":["validation","harness","install"],"backgroundTag":null,"analyzedSha":"01e15490f04e29cfefe3896951f43db46994d8ee","analyzedAt":"2026-08-13T00:31:08.655Z","schemaVersion":2},"datasetVersion":"2026-08-13T04:17:16.726Z"}