Commit Graph

1722 Commits

Author SHA1 Message Date
Alex Verkhovsky e41cc1f822 refactor(installer): extract _buildConfig method with hasCoreConfig()
Move config normalization into _buildConfig(originalConfig) so the gate
logic is a named, testable method. Add hasCoreConfig() on the returned
config object to replace the repeated coreConfig && Object.keys pattern.
2026-03-21 05:24:54 -06:00
Alex Verkhovsky 68f723d427 refactor(installer): normalize config gate and flatten core into module list
Split install() input into config (clean official fields) and customConfig
(full originalConfig copy for custom module concerns). Core is no longer
special-cased — it's just another module in config.modules that goes through
OfficialModules.install(). Deletes installCore(), copyCoreFiles(), copyFile(),
getFileList() dead code. Updates ui.js and quickUpdate() callers to keep core
in the modules list instead of setting installCore: true.
2026-03-21 05:23:02 -06:00
Alex Verkhovsky aa406419e7 refactor(installer): remove customModulePaths local variable
install() no longer stores the return value of discoverPaths —
this.customModules.paths is accessed directly throughout.
Remove customModulePaths parameter from _installCustomModules.
2026-03-21 04:53:29 -06:00
Alex Verkhovsky 4a76289b35 refactor(installer): make discoverPaths populate this.paths directly
discoverPaths now sets this.paths internally instead of returning
a Map that the caller feeds back via setPaths. Remove setPaths
and all 5 no-op setPaths calls in installer.js.
2026-03-21 04:47:46 -06:00
Alex Verkhovsky a7beab59b9 refactor(installer): move discoverCustomModulePaths into CustomModules
Rename to CustomModules.discoverPaths() and move from installer.js
into custom-modules.js where it belongs.
2026-03-21 04:43:58 -06:00
Alex Verkhovsky ea8c076e29 refactor(installer): split ModuleManager into OfficialModules and CustomModules
OfficialModules handles source resolution (core, bmm, external),
module install/update/remove, directory creation, and file copying.
CustomModules holds the custom module paths Map. findModuleSource
now knows core explicitly. install() accepts optional sourcePath
for custom modules that already know their source.
2026-03-21 04:35:47 -06:00
Alex Verkhovsky 2a9df6377e style(installer): replace lazy singletons with normal requires
Use top-level require and constructor instantiation for
ExternalModuleManager instead of module-scoped lazy singletons.
2026-03-21 04:15:51 -06:00
Alex Verkhovsky ad2833caf6 refactor(installer): move external module ops into ExternalModuleManager
Move cloneExternalModule, findExternalModuleSource, and
getExternalCacheDir from ModuleManager into ExternalModuleManager
where they belong. Replace this.moduleManager.isExternalModule()
calls with direct ExternalModuleManager.hasModule(). Remove
externalModuleManager instance from ModuleManager constructor.
2026-03-21 04:09:35 -06:00
Alex Verkhovsky 89812ec846 refactor(installer): remove dead state from ModuleManager
Remove setBmadFolderName (set to constant, never read),
setCoreConfig (set, never read), dead listAvailable branch
guarded by never-assigned this.bmadDir, and unused
BMAD_FOLDER_NAME import.
2026-03-21 04:01:22 -06:00
Alex Verkhovsky fba77e3e89 refactor(installer): split module install loop into official and custom passes
Extract _installOfficialModules and _installCustomModules from the
interleaved module installation loop. Each method works from its own
source list, eliminating the allModules merge-then-re-split pattern.
Remove unused destructuring of paths into local variables.
2026-03-21 03:59:23 -06:00
Alex Verkhovsky eade619d17 refactor(installer): remove dead dependency resolver
No skills declare cross-module dependencies. The resolver ran four
resolution passes on every install, but both consumers
(installCoreWithDependencies, installModuleWithDependencies) ignored
the resolution data and copied entire module directories anyway.
The sole non-dead consumer (installPartialModule) never fired.

Delete dependency-resolver.js (743 lines), three dead wrapper methods,
and all feeding/filtering logic in install(). Official modules now
call installCore/moduleManager.install directly.
2026-03-21 03:12:00 -06:00
Alex Verkhovsky 9f7ec48a89 refactor(installer): flatten custom/ directory into custom-handler.js
Single file doesn't need its own directory.
2026-03-21 02:45:20 -06:00
Alex Verkhovsky 472c1c9c22 refactor(installer): extract _collectConfigs and _discoverCustomModulePaths
Split the monolithic config collection block in install() into two
methods: _collectConfigs for official modules only, and
_discoverCustomModulePaths for custom module source discovery.
2026-03-21 02:36:51 -06:00
Alex Verkhovsky e8d041a51c refactor(installer): replace copyFileWithPlaceholderReplacement with copyFile
The placeholder replacement logic was removed long ago but the method
still did a pointless read-as-UTF8-then-write-unchanged dance with a
binary fallback. Just use fs.copy.
2026-03-21 02:22:34 -06:00
Alex Verkhovsky c92d84d74a style(installer): reorder methods to callers-above-callees convention 2026-03-21 02:21:40 -06:00
Alex Verkhovsky c31cea8c30 refactor(cli): remove dead _clearScreen param from displayLogo 2026-03-21 01:48:10 -06:00
Alex Verkhovsky 1a1909a7f9 refactor(installer): extract InstallPaths class for path init and validation
Replace inline path construction in install() with a dedicated class
that ensures all structural directories exist, validates permissions,
and provides derived-path methods for manifests and modules.
2026-03-21 01:47:20 -06:00
Alex Verkhovsky efca29485e docs: add JavaScript conventions guide
Establishes callers-above-callees function ordering rule
and references it from AGENTS.md.
2026-03-21 01:42:23 -06:00
Alex Verkhovsky 93a1e1dc46
refactor(installer): remove dead task/tool/workflow manifest code (#2083)
* refactor(installer): discover skills by SKILL.md instead of manifest YAML

Switch skill discovery gate from requiring bmad-skill-manifest.yaml with
type: skill to detecting any directory with a valid SKILL.md (frontmatter
name + description, name matches directory name). Delete 34 stub manifests
that carried no data beyond type: skill. Agent manifests (9) are retained
for persona metadata consumed by agent-manifest.csv.

* refactor(installer): remove dead task/tool/workflow manifest code

The remove-skill-manifest-yaml branch deleted the scanners that
discover tasks, tools, and workflows but left behind the code that
writes their manifest CSVs. Remove collectTasks/Tools/Workflows,
writeTaskManifest/ToolManifest/WorkflowManifest, their helpers, and
the now-unreachable getPreservedCsvRows/upgradeRowToSchema methods.
Update installer pre-registration and test assertions accordingly.
2026-03-21 00:12:40 -06:00
Alex Verkhovsky 31ae226bb4
refactor(installer): discover skills by SKILL.md instead of manifest YAML (#2082)
Switch skill discovery gate from requiring bmad-skill-manifest.yaml with
type: skill to detecting any directory with a valid SKILL.md (frontmatter
name + description, name matches directory name). Delete 34 stub manifests
that carried no data beyond type: skill. Agent manifests (9) are retained
for persona metadata consumed by agent-manifest.csv.
2026-03-21 00:11:23 -06:00
Alex Verkhovsky c28206dca4
refactor(installer): remove dead agent compilation pipeline (#2080)
* refactor(installer): remove dead agent compilation pipeline

Delete 9 files (~2,600 lines) that compiled .agent.yaml to .md.
No .agent.yaml files exist in the source tree — agents now ship
as pre-built SKILL.md. Clean up all references in installer,
module manager, custom handler, base IDE, UI, and tests.

* refactor(custom-handler): remove dead install/copy/find methods

CustomHandler.install(), copyDirectory(), and findFilesRecursively()
are never called — custom modules are installed via moduleManager.install()
since Dec 2025. Also removes unused FileOps import and constructor.

Verified with before/after clean-installer comparison (codex + custom
modules with custom.yaml): output is identical.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>

* fix(installer): remove dead compilation refs from docs and module manager

Address review findings from PR #2080 triage:
- Remove compile-agents from CLI action docs (en, fr, zh-cn)
- Remove dead vendorCrossModuleWorkflows() and .agent.yaml skip logic
- Clean stale compilation-era comments in manifest-generator

---------

Co-authored-by: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-20 22:52:02 -06:00
Emmanuel Atsé 1a6f8d52bc
docs: i18n: Add complete French translation (#2073)
* docs: i18n(fr): add complete French translation

Add comprehensive French (fr-FR) translation covering all documentation
sections and website configuration:

- Core docs, How-to guides, Explanations, References
- Website config: astro.config.mjs locale setup, fr-FR.json i18n strings
- Assets: French workflow map diagram and quick-dev diagram

Terminology standardized on "Quick Dev" (replacing legacy "Quick Flow").

* docs(fr): remove references to deleted phase-4 agent personas

Remove all references to deleted phase-4 agent personas from French
documentation, matching upcoming PR #2020 changes:

- Remove agent personas: dev/Amelia, pm/John, qa/Quinn, sm/Bob,
  quick-flow-solo-dev/Barry, bmad-master
- Replace deleted agent skill invocations with equivalent workflow skills
  (bmad-dev-story, bmad-qa-generate-e2e-tests, bmad-quick-dev, etc.)
- Depersonalize QA references ("Quinn" → "QA Intégré" / "Workflow QA")
- Simplify workflow invocation instructions (remove "invoke agent" pattern)
- Fix upgrade-to-v6.md SM/Scrum Master references

* docs(fr): fix typos

---------

Co-authored-by: Alex Verkhovsky <alexey.verkhovsky@gmail.com>
2026-03-20 17:10:49 -06:00
Alex Verkhovsky 1cb913523e
refactor(installer): remove legacy workflow, task, and agent IDE generators (#2078)
* refactor(installer): remove legacy workflow, task, and agent IDE generators

All platforms now use skill_format exclusively. The old
WorkflowCommandGenerator, TaskToolCommandGenerator, and
AgentCommandGenerator code paths in _config-driven.js were
no-ops — collectSkills claims every directory before the
legacy collectors run, making their manifests empty.

Removed:
- workflow-command-generator.js (deleted)
- task-tool-command-generator.js (deleted)
- writeAgentArtifacts, writeWorkflowArtifacts, writeTaskToolArtifacts
- AgentCommandGenerator import from _config-driven.js
- Legacy artifact_types/agents/workflows/tasks result fields

Simplified installToTarget, installToMultipleTargets, printSummary,
and IDE manager detail builder to skills-only.

Updated test fixture to use SKILL.md format instead of old agent format.

* fix(installer): address PR review findings from #2078

- Fix temp dir leak in test fixture cleanup (use path.dirname)
- Fail loudly when skill_format missing instead of silent success
- Add workflow.md to test fixture for verbatim-copy coverage

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>

---------

Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-20 15:18:47 -06:00
Emmanuel Atsé a2839cbee0
docs: fix duplicate sidebar order number (#2071)
how-to/ customize-bmad.md and project-context.md had the same order
number

Co-authored-by: Alex Verkhovsky <alexey.verkhovsky@gmail.com>
2026-03-20 11:38:35 -06:00
Alex Verkhovsky 6a73623f33
refactor(core-skills): flatten 7 skills by inlining workflow.md into SKILL.md (#2077)
Inline workflow.md content directly into SKILL.md for: editorial-review-prose,
editorial-review-structure, help, index-docs, review-adversarial-general,
review-edge-case-hunter, and shard-doc. Deletes the now-redundant workflow.md
files. No behavioral change — same pattern as advanced-elicitation in PR #2076.

Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-20 11:29:19 -06:00
Emmanuel Atsé 3ca957e229
docs(zh-cn): correct anchor links to match Chinese headings (#2072)
Co-authored-by: Alex Verkhovsky <alexey.verkhovsky@gmail.com>
2026-03-20 11:20:02 -06:00
Alex Verkhovsky 9725b0ae90
refactor(skill): flatten advanced-elicitation by inlining workflow into SKILL.md (#2076)
Merge workflow.md content directly into SKILL.md and delete the
now-redundant workflow file.  The frontmatter `agent_party` variable
moves into SKILL.md; all relative file references (`./methods.csv`)
remain valid.

Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-20 11:08:53 -06:00
Alex Verkhovsky 182550407c
fix(code-review): update sprint-status to done after review completes (#2074)
* fix(code-review): update sprint-status to done after review completes

The code-review workflow ended without updating sprint-status.yaml from
"review" to "done", leaving stories stuck in review status. The dev-story
workflow implies code-review handles this transition but it was dropped
during the v6.2.0 step-file architecture refactor.

- Add sprint_status path to workflow initialization
- Track story_key in step-01 when discovered from sprint status
- Add step-04 section 6 to update sprint-status.yaml and story file
- Add step-04 section 7 with next-step options

Closes #2043

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>

* fix(code-review): address PR review findings — split gating, story_key guard, HALT

- Split section 6 guard: story file status gated on spec_file only,
  sprint-status sync sub-gated on story_key separately
- Add conditional branch for manual choice in multi-story path so
  story_key is cleared when user declines a story selection
- Add HALT directive after Next steps menu to prevent LLM runaway

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>

---------

Co-authored-by: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-20 10:56:08 -06:00
dependabot[bot] 4b2389231f
chore(deps): bump h3 from 1.15.5 to 1.15.8 (#2064)
Bumps [h3](https://github.com/h3js/h3) from 1.15.5 to 1.15.8.
- [Release notes](https://github.com/h3js/h3/releases)
- [Changelog](https://github.com/h3js/h3/blob/main/CHANGELOG.md)
- [Commits](https://github.com/h3js/h3/compare/v1.15.5...v1.15.8)

---
updated-dependencies:
- dependency-name: h3
  dependency-version: 1.15.8
  dependency-type: indirect
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Co-authored-by: Alex Verkhovsky <alexey.verkhovsky@gmail.com>
2026-03-20 01:13:25 -06:00
Alex Verkhovsky 9088d4958b
fix(code-review): restore actionable review output with interactive choices (#2055)
* fix(code-review): restore actionable review output with interactive choices

The March 15 rewrite (PR #2007) removed the ability to auto-fix patches,
create action items in story files, and handle deferred/spec findings.
This restores interactive post-review actions:

- Deferred findings: auto-written to deferred-work.md and checked off in story
- Intent gap/bad spec: conversation with downgrade-to-patch, patch-spec,
  reset-to-ready-for-dev, or dismiss options
- Patch findings: fix automatically, create action items, or show details

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>

* refactor(code-review): simplify triage to decision-needed/patch/defer/dismiss

Replace 5-bucket classification (intent_gap, bad_spec, patch, defer, reject)
with 4 pragmatic buckets. Findings always written to story file first.
Decision-needed findings gate patch handling — resolve ambiguity before fixing.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>

* fix(code-review): address PR review findings in step-04-present

Replace undefined curly-brace placeholders with angle-bracket syntax,
add HALT guard before patch menu, guard spec_file references for
no-spec mode, and backtick category names for consistency.

* feat(code-review): add HALT guards, batch option, defer reason, final summary

Add strong HALT guards after decision-needed and patch menus to prevent
auto-progression. Add batch-apply option 0 for >3 patch findings. Prompt
for defer reason and append to story file and deferred-work.md. Show
boxed final summary with counts. Polish clean-review shortcut in triage.

---------

Co-authored-by: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-20 01:07:04 -06:00
Alex Verkhovsky 0d2863f77f
fix: separate subagent launch from skill invocation in code review (#2069)
* fix: separate subagent launch from skill invocation in code review

The step-02-review prompt fused "invoke skill X" with "in a subagent"
into one instruction, causing LLMs to search for a named agent instead
of launching a generic subagent that uses the skill. Aligns with the
working pattern in quick-dev step-04: upfront gate with inline fallback,
and "Invoke via the skill" as a separate concern from subagent setup.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>

* fix(code-review): address PR review findings on subagent fallback wording

Capitalize "Markdown" (proper noun) in Acceptance Auditor prompt and
simplify fallback trigger from "context-free subagents" to "subagents"
to eliminate ambiguity about when the fallback activates.

---------

Co-authored-by: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-20 01:04:51 -06:00
Brian a092209267
refactor(analysis): consolidate product brief skills and clean up research (#2070)
Replace bmad-create-product-brief (step-based wizard) and
bmad-product-brief-preview (multi-agent) with a single unified
bmad-product-brief skill. Remove accidentally duplicated market
research step files and template. Update research skill
descriptions to use more natural trigger language.
2026-03-19 20:48:47 -05:00
Murat K Ozcan 1786d1debc
fix: tea agent start (#2067)
* fix: tea agent start

* fix: addressed PR comment
2026-03-19 11:40:43 -05:00
Alex Verkhovsky 4cb58ba9f3
Merge pull request #2065 from bmad-code-org/fix-quick-fixes-doc
docs: rewrite quick-fixes how-to around Quick Dev
2026-03-19 00:14:43 -06:00
Alex Verkhovsky 871d921072 docs: fix stale Quick Flow reference in quick-dev explainer opening
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-19 00:07:17 -06:00
Alex Verkhovsky 3fad46849f docs: rewrite quick-fixes how-to around Quick Dev workflow
Remove DEV agent references and simplify to Quick Dev as the single
entry point. Show free-form intent examples, add deferred work section,
clarify that Quick Dev commits for you.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-19 00:05:30 -06:00
Alex Verkhovsky 3bb953f18b
Merge pull request #2063 from bmad-code-org/fix-quick-dev-explainer
docs: restore design philosophy to quick-flow explainer
2026-03-18 23:51:35 -06:00
Alex Verkhovsky 43c59f0cff docs: replace quick-flow explainer with quick-dev, remove stale Quick Spec refs
Quick Flow was an umbrella for quick-spec + quick-dev. Quick Spec is
gone and the new preview was promoted to bmad-quick-dev, so the explainer
should be about quick-dev directly. Replaces quick-flow.md with the
original quick-dev-new-preview.md content (renamed), including the
diagram reference. zh-cn uses the original hand-written Chinese
translation. Also removes stale Quick Spec references from agents.md.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-18 23:47:49 -06:00
Frank 3c8d865457
fix: update src/core and src/bmm path references to match renamed directories (#2053)
The v6.2.0 release renamed src/core to src/core-skills and src/bmm to
src/bmm-skills, but the installer CLI code still referenced the old
directory names, causing ENOENT crashes during installation.

Updated all path references across 7 files in tools/cli/ including
path.join() calls, string comparisons, regex patterns, and comments.

Fixes #2052

Co-authored-by: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Co-authored-by: Brian <bmadcode@gmail.com>
2026-03-18 19:29:16 -05:00
Alex Verkhovsky 1b8424cf6d
Merge pull request #2058 from bmad-code-org/fix-elicitation-trigger
fix: add Use when trigger to advanced-elicitation description
2026-03-18 17:21:40 -06:00
Alex Verkhovsky 9973b3c35a
Merge branch 'main' into fix-elicitation-trigger 2026-03-18 17:20:52 -06:00
Alex Verkhovsky 1a0da0278f
Merge pull request #2051 from bmad-code-org/feat-deterministic-skill-validator
feat(tools): add deterministic skill validator for CI
2026-03-18 17:20:30 -06:00
Alex Verkhovsky 52ebc3330d
Merge branch 'main' into fix-elicitation-trigger 2026-03-18 17:18:11 -06:00
Alex Verkhovsky 8b13628496 fix: add Use if trigger to advanced-elicitation description
Clears the SKILL-06 validator finding for missing trigger phrase.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-18 16:46:43 -06:00
Alex Verkhovsky 642b6a0cf4 ci: add validate:skills to GitHub quality workflow
The deterministic skill validator was in the npm quality chain but
missing from the GitHub Actions workflow.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-18 14:38:09 -06:00
Alex Verkhovsky fd1e24c5c2 fix: address PR review findings in skill validator
- Guard against YAML comment lines in parseFrontmatterMultiline
- Broaden PATH-02 to detect any installed_path mention, not just variable refs

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-18 14:35:52 -06:00
Alex Verkhovsky 84bade9a95
Merge branch 'main' into feat-deterministic-skill-validator 2026-03-18 10:13:59 -06:00
Alex Verkhovsky 4f1894908c refactor: tighten SKILL-04 regex, broaden WF-01/WF-02, remove forbidden names
- SKILL-04: require bmad- prefix, enforce single dashes via regex
  ^bmad-[a-z0-9]+(-[a-z0-9]+)*$, drop FORBIDDEN_NAME_SUBSTRINGS
- WF-01/WF-02: check all .md files (not just workflow.md) for stray
  name/description frontmatter, with tech-writer exception
- Update skill-validator.md prompt to match all rule changes

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-18 08:02:01 -06:00
Alex Verkhovsky 7a214cc7d8 fix: tighten frontmatter parsing and add SKILL-07 body content check
- Require \n---\n (not just \n---) for closing frontmatter delimiter
  in both parseFrontmatter and parseFrontmatterMultiline, with fallback
  for files ending in \n---
- Add SKILL-07: SKILL.md must have non-empty body content after
  frontmatter (L2 instructions are required)
- Update rule count to 14

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-18 08:02:01 -06:00
Alex Verkhovsky ac5cb552c0 refactor: discover skills by walking src instead of hardcoded paths
Replace SKILL_LOCATIONS array and AGENT_LOCATION constant with a single
walk from SRC_DIR. Any directory under src/ containing SKILL.md is a
skill — no need to enumerate locations.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-18 08:02:00 -06:00