{"record":{"id":"7d322cf1b42f17ae","repo":"bmad-code-org/BMAD-METHOD","slug":"bmad-not-installed-at-bmaddir-use-regular-inst","errorCode":null,"errorMessage":"BMAD not installed at ${bmadDir}. Use regular install for first-time setup.","messagePattern":"BMAD not installed at (.+?)\\. Use regular install for first-time setup\\.","errorType":"exception","errorClass":"Error","httpStatus":null,"severity":"error","filePath":"tools/installer/core/installer.js","lineNumber":1337,"sourceCode":"          placeholder: '',\n          default: '',\n        });\n      }\n    }\n  }\n\n  /**\n   * Quick update method - preserves all settings and only prompts for new config fields\n   * @param {Object} config - Configuration with directory\n   * @returns {Object} Update result\n   */\n  async quickUpdate(config) {\n    const projectDir = path.resolve(config.directory);\n    const { bmadDir } = await this.findBmadDir(projectDir);\n\n    // Check if bmad directory exists\n    if (!(await fs.pathExists(bmadDir))) {\n      throw new Error(`BMAD not installed at ${bmadDir}. Use regular install for first-time setup.`);\n    }\n\n    // Detect existing installation\n    const existingInstall = await ExistingInstall.detect(bmadDir);\n    const configuredIdes = existingInstall.ides;\n    const projectRoot = path.dirname(bmadDir);\n\n    // Resolve any legacy/aliased module codes (e.g. an install recorded as\n    // `bauto` before the registry renamed it to `bmad-loop`) to their current\n    // canonical code up front. Without this, a renamed module's old installs\n    // would fall out of `availableModuleIds` below and get silently frozen\n    // (see the `baut` → `automator` incident in CHANGELOG v6.7.1) instead of\n    // migrating forward.\n    const aliasMigrations = [];\n    const seenModuleIds = new Set();\n    const installedModules = [];\n    for (const rawId of existingInstall.moduleIds) {\n      const canonicalId = await this.externalModuleManager.resolveCanonicalCode(rawId);","sourceCodeStart":1319,"sourceCodeEnd":1355,"githubUrl":"https://github.com/bmad-code-org/BMAD-METHOD/blob/b70486b9bdcb0a404d329e2a763b57964e7f1360/tools/installer/core/installer.js#L1319-L1355","documentation":"Thrown by Installer.quickUpdate when the resolved bmad directory does not exist. quickUpdate assumes a prior install exists to preserve settings; it refuses to run a first-time setup. findBmadDir just joins projectDir with the BMAD folder name, so absence means BMAD was never installed there.","triggerScenarios":"Calling `installer.quickUpdate({ directory })` where `<directory>/_bmad/` (the BMAD folder) does not exist. Triggered by the `--quick`/update flow against a fresh project.","commonSituations":"Running `bmad update --quick` (or the quick-update command) in a project that never had BMAD installed, or after _bmad/ was deleted.","solutions":["Run a regular first-time install instead of quickUpdate in that directory.","Confirm you are pointing at the directory that already contains _bmad/.","If _bmad/ was deleted by mistake, restore from VCS or reinstall normally."],"exampleFix":"// before\nawait installer.quickUpdate({ directory: '/proj' }); // no _bmad there\n\n// after\nawait installer.install({ directory: '/proj', /* first-time config */ });","handlingStrategy":"validation","validationCode":"const { bmadDir } = await installer.findBmadDir(path.resolve(config.directory));\nif (!(await fs.pathExists(bmadDir))) {\n  // route the user to a regular first-time install instead of quickUpdate\n}","typeGuard":null,"tryCatchPattern":"try {\n  await installer.quickUpdate(config);\n} catch (error) {\n  if (error.message.includes('Use regular install for first-time setup')) {\n    await installer.install(config); // first-time path\n  } else throw error;\n}","preventionTips":["Only call quickUpdate in projects that already contain a _bmad/ folder.","Gate the quick-update command on findBmadDir + pathExists before invoking."],"tags":["installer","state-guard","precondition"],"backgroundTag":null,"analyzedSha":"b70486b9bdcb0a404d329e2a763b57964e7f1360","analyzedAt":"2026-08-13T01:21:12.247Z","schemaVersion":2},"datasetVersion":"2026-08-13T04:17:16.726Z"}