{"record":{"id":"92a804fa9a25a676","repo":"bmad-code-org/BMAD-METHOD","slug":"all-selected-tool-s-are-suspended-suspendedide","errorCode":null,"errorMessage":"All selected tool(s) are suspended: ${suspendedIdes.join(', ')}. Installation aborted to prevent upgrading _bmad/ without a working IDE configuration.","messagePattern":"All selected tool\\(s\\) are suspended: (.+?)\\. Installation aborted to prevent upgrading _bmad/ without a working IDE configuration\\.","errorType":"exception","errorClass":"Error","httpStatus":null,"severity":"error","filePath":"tools/installer/core/installer.js","lineNumber":185,"sourceCode":"\n  /**\n   * Fail fast if all selected IDEs are suspended.\n   */\n  async _validateIdeSelection(config) {\n    if (!config.ides || config.ides.length === 0) return;\n\n    await this.ideManager.ensureInitialized();\n    const suspendedIdes = config.ides.filter((ide) => {\n      const handler = this.ideManager.handlers.get(ide);\n      return handler?.platformConfig?.suspended;\n    });\n\n    if (suspendedIdes.length > 0 && suspendedIdes.length === config.ides.length) {\n      for (const ide of suspendedIdes) {\n        const handler = this.ideManager.handlers.get(ide);\n        await prompts.log.error(`${handler.displayName || ide}: ${handler.platformConfig.suspended}`);\n      }\n      throw new Error(\n        `All selected tool(s) are suspended: ${suspendedIdes.join(', ')}. Installation aborted to prevent upgrading _bmad/ without a working IDE configuration.`,\n      );\n    }\n  }\n\n  /**\n   * Remove IDEs that were previously installed but are no longer selected.\n   * No confirmation — the user's IDE selection is the decision.\n   */\n  async _removeDeselectedIdes(existingInstall, config, paths) {\n    const previouslyInstalled = new Set(existingInstall.ides);\n    const newlySelected = new Set(config.ides || []);\n    const toRemove = [...previouslyInstalled].filter((ide) => !newlySelected.has(ide));\n\n    if (toRemove.length === 0) return;\n\n    // Pass the newly-selected list as remainingIdes so cleanupByList skips\n    // target_dir wipes for IDEs whose directory is still owned by a peer","sourceCodeStart":167,"sourceCodeEnd":203,"githubUrl":"https://github.com/bmad-code-org/BMAD-METHOD/blob/b70486b9bdcb0a404d329e2a763b57964e7f1360/tools/installer/core/installer.js#L167-L203","documentation":"Thrown by Installer._validateIdeSelection when every IDE the user selected is marked suspended in platform-codes.yaml. 'suspended' is a per-platform block (with a human-readable message) that disables install because the tool does not currently support the required layout. Aborting prevents a useless _bmad/ upgrade with no working IDE target.","triggerScenarios":"config.ides is non-empty and, after filtering against IdeManager handlers, every selected IDE has `handler.platformConfig.suspended` set to a truthy value (the suspension message).","commonSituations":"A tool was temporarily suspended (e.g. its skills support regressed), and the user selected only that tool via `--tools`. Or a config file pins a set of IDEs all of which are now suspended.","solutions":["Add at least one non-suspended tool: pass `--tools <working-ide>` alongside or instead of the suspended one.","Review platform-codes.yaml (or run `bmad install --list-tools`) to see which platforms are currently suspended and why.","If you believe the suspension is stale, update the installer package so platform-codes.yaml reflects current tool support."],"exampleFix":"// before\nbmad install --tools someide\n// after (pick a supported tool)\nbmad install --tools claude-code","handlingStrategy":"validation","validationCode":"const suspended = config.ides.filter((ide) => {\n  const h = ideManager.handlers.get(ide);\n  return h?.platformConfig?.suspended;\n});\nif (config.ides.length > 0 && suspended.length === config.ides.length) {\n  // ask the user to pick at least one non-suspended tool\n}","typeGuard":null,"tryCatchPattern":"try {\n  await installer._validateIdeSelection(config);\n} catch (error) {\n  if (error.message.startsWith('All selected tool(s) are suspended')) { /* reprompt for tools */ }\n  throw error;\n}","preventionTips":["Always include at least one currently-supported tool in --tools.","Run `bmad install --list-tools` to see suspension status before selecting."],"tags":["ide","installer","config","suspended"],"backgroundTag":null,"analyzedSha":"b70486b9bdcb0a404d329e2a763b57964e7f1360","analyzedAt":"2026-08-13T01:21:12.247Z","schemaVersion":2},"datasetVersion":"2026-08-13T04:17:16.726Z"}