diff --git a/.markdownlint-cli2.yaml b/.markdownlint-cli2.yaml index d9a85fe56..bee2cdb89 100644 --- a/.markdownlint-cli2.yaml +++ b/.markdownlint-cli2.yaml @@ -9,6 +9,9 @@ ignores: - _bmad*/** - .*/** - z*/** + - docs/examples/** + - "**/templates/**" + - "**/steps-c/**" # Rule configuration config: diff --git a/docs/method/phase-6-prd-finalization-guide.md b/docs/method/phase-6-prd-finalization-guide.md index 77399f2a8..5f8788ada 100644 --- a/docs/method/phase-6-prd-finalization-guide.md +++ b/docs/method/phase-6-prd-finalization-guide.md @@ -318,7 +318,7 @@ Complete list for test automation: --- -## How It Works +## How the Handoff Works ### Review Completeness @@ -398,7 +398,7 @@ Organize everything into the UI Roadmap folder: --- -## When to Use This Phase +## When to Use This Phase (Summary) **First handoff when:** diff --git a/package.json b/package.json index e3d233b85..f85ff24bb 100644 --- a/package.json +++ b/package.json @@ -19,8 +19,8 @@ "author": "Whiteport Collective", "main": "tools/cli/wds-cli.js", "bin": { - "whiteport-design-studio": "tools/wds-npx-wrapper.js", - "wds-studio": "tools/wds-npx-wrapper.js" + "wds-studio": "tools/wds-npx-wrapper.js", + "whiteport-design-studio": "tools/wds-npx-wrapper.js" }, "files": [ "tools/", diff --git a/src/module.yaml b/src/module.yaml index 3d2338c4f..5a341f896 100644 --- a/src/module.yaml +++ b/src/module.yaml @@ -146,4 +146,3 @@ post-install-notes: | Github Issues, PRs: https://github.com/bmad-code-org/bmad-method-wds-expansion/issues License: MIT - diff --git a/tools/cli/lib/compiler.js b/tools/cli/lib/compiler.js index f74737bb9..45e96ed7c 100644 --- a/tools/cli/lib/compiler.js +++ b/tools/cli/lib/compiler.js @@ -171,7 +171,7 @@ function buildMenuXml(menuItems, wdsFolder) { // Rebuild multi description without party-mode reference let multiDesc = item.multi; - multiDesc = multiDesc.replace(/\[SPM\] Start Party Mode \(optionally suggest attendees and topic\),?\s*/g, '').trim(); + multiDesc = multiDesc.replaceAll(/\[SPM\] Start Party Mode \(optionally suggest attendees and topic\),?\s*/g, '').trim(); if (!multiDesc) multiDesc = '[CH] Chat'; xml += ` ${escapeXml(multiDesc)}\n`; @@ -360,12 +360,7 @@ function compileAgentFile(yamlPath, options = {}) { // Agent opening tag const agentId = `${wdsFolder}/agents/${basename}.md`; - const agentAttrs = [ - `id="${agentId}"`, - `name="${meta.name || ''}"`, - `title="${meta.title || ''}"`, - `icon="${meta.icon || ''}"`, - ]; + const agentAttrs = [`id="${agentId}"`, `name="${meta.name || ''}"`, `title="${meta.title || ''}"`, `icon="${meta.icon || ''}"`]; output += `\n`; // Activation block (inlined) diff --git a/tools/cli/lib/ide-configs.js b/tools/cli/lib/ide-configs.js index 204e37d8f..ca6f9f30b 100644 --- a/tools/cli/lib/ide-configs.js +++ b/tools/cli/lib/ide-configs.js @@ -84,7 +84,7 @@ async function writeIdeConfig(projectDir, ide, wdsFolder) { await fs.ensureDir(path.dirname(filePath)); // If append mode and file exists, append with separator - if (config.append && await fs.pathExists(filePath)) { + if (config.append && (await fs.pathExists(filePath))) { const existing = await fs.readFile(filePath, 'utf8'); if (!existing.includes('Whiteport Design Studio')) { await fs.writeFile(filePath, existing + '\n\n' + content + '\n', 'utf8'); diff --git a/tools/cli/lib/installer.js b/tools/cli/lib/installer.js index 5fbfd5931..70a921e7f 100644 --- a/tools/cli/lib/installer.js +++ b/tools/cli/lib/installer.js @@ -76,9 +76,9 @@ class Installer { try { await this.copySrcFiles(wdsDir); spinner.succeed('WDS files copied'); - } catch (err) { + } catch (error) { spinner.fail('Failed to copy WDS files'); - throw err; + throw error; } // Step 2: Write config.yaml @@ -86,9 +86,9 @@ class Installer { try { await this.writeConfig(wdsDir, config); configSpinner.succeed('Configuration saved'); - } catch (err) { + } catch (error) { configSpinner.fail('Failed to write configuration'); - throw err; + throw error; } // Step 3: Compile agents @@ -96,9 +96,9 @@ class Installer { try { const agents = await this.compileAgents(wdsDir, wdsFolder); agentSpinner.succeed(`Compiled ${agents.length} agents`); - } catch (err) { + } catch (error) { agentSpinner.fail('Failed to compile agents'); - throw err; + throw error; } // Step 4: Create docs folder structure @@ -106,9 +106,9 @@ class Installer { try { await this.createDocsFolders(projectDir); docsSpinner.succeed('Project folders created'); - } catch (err) { + } catch (error) { docsSpinner.fail('Failed to create project folders'); - throw err; + throw error; } // Step 5: Set up IDEs @@ -121,9 +121,9 @@ class Installer { labels.push(result.label); } ideSpinner.succeed(`Configured: ${labels.join(', ')}`); - } catch (err) { + } catch (error) { ideSpinner.fail('Failed to set up IDEs'); - throw err; + throw error; } // Step 6: Copy learning & reference material (optional) @@ -132,9 +132,9 @@ class Installer { try { await this.copyLearningMaterial(projectDir); learnSpinner.succeed('Learning material added to _wds-learn/ (safe to remove when no longer needed)'); - } catch (err) { + } catch (error) { learnSpinner.fail('Failed to copy learning material'); - throw err; + throw error; } } @@ -215,7 +215,7 @@ class Installer { async copyLearningMaterial(projectDir) { const learnDir = path.join(projectDir, '_wds-learn'); const learningDirs = ['getting-started', 'learn-wds', 'method', 'models', 'tools']; - const excludeDirs = ['course-explainers', 'Webinars']; + const excludeDirs = new Set(['course-explainers', 'Webinars']); for (const dir of learningDirs) { const src = path.join(this.docsDir, dir); @@ -225,7 +225,7 @@ class Installer { filter: (srcPath) => { const relative = path.relative(src, srcPath); const topDir = relative.split(path.sep)[0]; - return !excludeDirs.includes(topDir); + return !excludeDirs.has(topDir); }, }); } diff --git a/tools/cli/lib/ui.js b/tools/cli/lib/ui.js index 7ea6418cb..3d4ef77a7 100644 --- a/tools/cli/lib/ui.js +++ b/tools/cli/lib/ui.js @@ -89,7 +89,7 @@ class UI { name: 'ides', message: 'Which AI IDE/tools are you using? (Space to select, Enter to confirm)', choices: getIdeChoices(), - validate: (answer) => answer.length > 0 ? true : 'Select at least one IDE.', + validate: (answer) => (answer.length > 0 ? true : 'Select at least one IDE.'), }, ]); diff --git a/tools/cli/wds-cli.js b/tools/cli/wds-cli.js index 3d4236ed3..69bde4e88 100644 --- a/tools/cli/wds-cli.js +++ b/tools/cli/wds-cli.js @@ -23,9 +23,7 @@ const packageJson = require('../../package.json'); const installCommand = require('./commands/install'); // Set up program -program - .version(packageJson.version) - .description('Whiteport Design Studio - Strategic design methodology for AI-powered workflows'); +program.version(packageJson.version).description('Whiteport Design Studio - Strategic design methodology for AI-powered workflows'); // Register install command const cmd = program.command(installCommand.command).description(installCommand.description);