From f80de209d9b0a569811c4ce9f3903589ffb3c40b Mon Sep 17 00:00:00 2001 From: Pablo LION Date: Wed, 18 Mar 2026 20:57:23 +0100 Subject: [PATCH 1/2] fix: resolve all validation warnings (plugin-only agents + path checker) Register quinn, agent-builder, workflow-builder, module-builder as plugin-only agents. Fix agent checker to collect pluginOnlyAgents from sources without agentsRoot. Add expected path patterns for runtime _bmad paths and skip test fixtures in path checker. Co-Authored-By: Claude Opus 4.6 (1M context) --- scripts/lib/checks/agents.ts | 9 +++++---- scripts/lib/checks/paths.ts | 10 +++++++++- scripts/lib/upstream-sources.ts | 8 ++++++-- 3 files changed, 20 insertions(+), 7 deletions(-) diff --git a/scripts/lib/checks/agents.ts b/scripts/lib/checks/agents.ts index 12876b5..fccd4f8 100644 --- a/scripts/lib/checks/agents.ts +++ b/scripts/lib/checks/agents.ts @@ -53,6 +53,11 @@ export async function checkAgents(): Promise { const allPluginOnly = new Set(); for (const source of getEnabledSources()) { + // Collect plugin-only agents from ALL sources (even those without agentsRoot) + for (const name of source.pluginOnlyAgents ?? []) { + allPluginOnly.add(name); + } + if (!source.agentsRoot) continue; const upstreamRoot = join(ROOT, '.upstream', source.localPath); const agentsDir = join(upstreamRoot, source.agentsRoot); @@ -74,10 +79,6 @@ export async function checkAgents(): Promise { } coveredNames.add(upstream); } - - for (const name of source.pluginOnlyAgents ?? []) { - allPluginOnly.add(name); - } } await checkPluginOnlyAgents(coveredNames, allPluginOnly); diff --git a/scripts/lib/checks/paths.ts b/scripts/lib/checks/paths.ts index f9ca635..e7716b1 100644 --- a/scripts/lib/checks/paths.ts +++ b/scripts/lib/checks/paths.ts @@ -11,7 +11,9 @@ import { join } from 'node:path'; import { PLUGIN } from '../config.ts'; import { pass, section, warn } from '../output.ts'; -/** Patterns that are expected to remain unrewritten. */ +/** Patterns that are expected to remain unrewritten. + * These are valid runtime paths in the user's {project-root}/_bmad/ directory, + * not paths that the sync pipeline should have transformed. */ const EXPECTED_PATTERNS = [ /_bmad\/_memory\//, /_bmad\/_config\//, @@ -19,6 +21,9 @@ const EXPECTED_PATTERNS = [ /_bmad\/\[/, // bracket templates like [module-path] /_bmad\/foo\//, // example placeholder /_bmad\/\.\.\./, // documentation ellipsis + /_bmad\/bmm\//, // core BMM module runtime paths + /_bmad\/gds\//, // GDS module runtime paths + /_bmad\/planning\//, // project planning artifacts ]; async function listAllFiles(dir: string): Promise { @@ -50,6 +55,9 @@ export async function checkPaths(): Promise { const ext = filePath.slice(filePath.lastIndexOf('.')); if (!textExts.has(ext)) continue; + // Skip test fixtures — intentionally contain old-format paths + if (filePath.includes('/tests/')) continue; + const content = await Bun.file(filePath).text(); const matches = content.match(/\{project-root\}\/_bmad\/[^\s'"<>{}()`]+/g); if (!matches) continue; diff --git a/scripts/lib/upstream-sources.ts b/scripts/lib/upstream-sources.ts index fa11edd..3cb4793 100644 --- a/scripts/lib/upstream-sources.ts +++ b/scripts/lib/upstream-sources.ts @@ -69,7 +69,7 @@ export const UPSTREAM_SOURCES: UpstreamSource[] = [ skipContentFiles: new Set(['workflow.md', 'workflow.yaml']), agentRefMappings: {}, pluginOnlySkills: new Set(['help', 'init', 'status', 'brainstorming']), - pluginOnlyAgents: new Set(['bmad-master', 'tech-writer']), + pluginOnlyAgents: new Set(['bmad-master', 'tech-writer', 'quinn']), sharedFileTargets: {}, pluginOnlyData: new Set(['quick-dev/data/project-levels.yaml']), }, @@ -117,7 +117,11 @@ export const UPSTREAM_SOURCES: UpstreamSource[] = [ skipContentFiles: new Set(['workflow.md', 'workflow.yaml']), agentRefMappings: {}, pluginOnlySkills: new Set(), - pluginOnlyAgents: new Set(), + pluginOnlyAgents: new Set([ + 'agent-builder', + 'workflow-builder', + 'module-builder', + ]), sharedFileTargets: {}, pluginOnlyData: new Set(), }, From 2dd4cf655e0f53961a22f73f961e1b293c470c6d Mon Sep 17 00:00:00 2001 From: Pablo LION Date: Wed, 18 Mar 2026 20:57:47 +0100 Subject: [PATCH 2/2] chore: bump version to 6.2.0.3 --- .claude-plugin/marketplace.json | 2 +- .plugin-version | 2 +- README.md | 2 +- package.json | 2 +- plugins/bmad/.claude-plugin/plugin.json | 2 +- 5 files changed, 5 insertions(+), 5 deletions(-) diff --git a/.claude-plugin/marketplace.json b/.claude-plugin/marketplace.json index 53bcfc8..a1a4870 100644 --- a/.claude-plugin/marketplace.json +++ b/.claude-plugin/marketplace.json @@ -11,7 +11,7 @@ "name": "bmad", "source": "./plugins/bmad", "description": "BMAD Method - Breakthrough Method for Agile AI-Driven Development", - "version": "6.2.0.2" + "version": "6.2.0.3" } ] } diff --git a/.plugin-version b/.plugin-version index caa67e7..ad0e209 100644 --- a/.plugin-version +++ b/.plugin-version @@ -1 +1 @@ -v6.2.0.2 +v6.2.0.3 diff --git a/README.md b/README.md index e8c63e9..244135f 100644 --- a/README.md +++ b/README.md @@ -13,7 +13,7 @@ -**Plugin version:** v6.2.0.2 +**Plugin version:** v6.2.0.3 | Module | Version | Released | Last Synced | |---|---|---|---| diff --git a/package.json b/package.json index 10be607..df936e4 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "bmad-plugin", - "version": "6.2.0.2", + "version": "6.2.0.3", "type": "module", "scripts": { "prepare": "husky", diff --git a/plugins/bmad/.claude-plugin/plugin.json b/plugins/bmad/.claude-plugin/plugin.json index ff4af28..e9a7cf2 100644 --- a/plugins/bmad/.claude-plugin/plugin.json +++ b/plugins/bmad/.claude-plugin/plugin.json @@ -1,6 +1,6 @@ { "name": "bmad", - "version": "6.2.0.2", + "version": "6.2.0.3", "description": "BMAD Method - Breakthrough Method for Agile AI-Driven Development", "author": { "name": "PabloLION",