{"record":{"id":"948fb68216f17eb6","repo":"Fission-AI/OpenSpec","slug":"at-least-one-tool-must-be-selected","errorCode":null,"errorMessage":"At least one tool must be selected","messagePattern":"At least one tool must be selected","errorType":"exception","errorClass":null,"httpStatus":null,"severity":"error","filePath":"src/core/init.ts","lineNumber":694,"sourceCode":"      .filter((tool) => !configuredToolIds.has(tool.value))\n      .map((tool) => tool.name);\n\n    if (detectedOnlyNames.length > 0) {\n      const detectionLabel = shouldPreselectDetected\n        ? 'pre-selected for first-time setup'\n        : 'not pre-selected';\n      console.log(`Detected tool directories: ${detectedOnlyNames.join(', ')} (${detectionLabel})`);\n    }\n\n    const selectedTools = await searchableMultiSelect({\n      message: `Select tools to set up (${validTools.length} available)`,\n      pageSize: 15,\n      choices: sortedChoices,\n      validate: (selected: string[]) => selected.length > 0 || 'Select at least one tool',\n    });\n\n    if (selectedTools.length === 0) {\n      throw new Error('At least one tool must be selected');\n    }\n\n    return selectedTools;\n  }\n\n  private resolveToolsArg(): string[] | null {\n    if (typeof this.toolsArg === 'undefined') {\n      return null;\n    }\n\n    const raw = this.toolsArg.trim();\n    if (raw.length === 0) {\n      throw new Error(\n        'The --tools option requires a value. Use \"all\", \"none\", or a comma-separated list of tool IDs.'\n      );\n    }\n\n    const availableTools = getToolsWithSkillsDir();","sourceCodeStart":676,"sourceCodeEnd":712,"githubUrl":"https://github.com/Fission-AI/OpenSpec/blob/6926ccb18afa4ff621112813e9968334576ee11a/src/core/init.ts#L676-L712","documentation":"Error \"At least one tool must be selected\" thrown in Fission-AI/OpenSpec.","triggerScenarios":"Thrown at src/core/init.ts:694 when the library encounters an invalid state.","commonSituations":"See trigger scenarios.","solutions":[],"exampleFix":null,"handlingStrategy":null,"validationCode":null,"typeGuard":null,"tryCatchPattern":null,"preventionTips":[],"tags":[],"backgroundTag":null,"analyzedSha":"6926ccb18afa4ff621112813e9968334576ee11a","analyzedAt":"2026-08-25T12:29:45.729Z","schemaVersion":2},"datasetVersion":"2026-08-25T16:17:27.014Z"}