Commit Graph

2 Commits

Author SHA1 Message Date
pbean 31d115290a fix(bmad-module): surface malformed plugin.json + fail CI custom-source resolve
- bmad-module-lib: keep the legacy-fallback null return for malformed
  .claude-plugin/plugin.json, but warn so corruption is no longer
  indistinguishable from a missing file.
- ui: in the non-interactive custom-source path, collect resolution failures and
  throw after attempting every source (and when a source yields no module), so a
  CI/--custom-source install fails instead of silently omitting the module.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-20 15:58:35 -07:00
pbean 9bc76acdcb feat(installer): recognize new module system (plugin.json#bmad)
Add Strategy 0 to PluginResolver: detect a .claude-plugin/plugin.json
carrying a bmad{} block at the module root and resolve+validate it via
the bmad-module skill's own libs (new bmad-module-lib bridge), so the
installer and runtime skill agree on what a module is. Every resolved
module now carries a format discriminator ('plugin-json' | 'legacy').

OfficialModules routes 'plugin-json' resolutions through a new
_installFromPluginJson path that reuses the skill's copy-plan/flatten/
rewrite/atomic-swap libs, producing an on-disk layout byte-identical to
a bmad-module install while leaving legacy installs untouched. Direct
mode in ui.js prefers a root plugin.json#bmad manifest over SKILL.md
scanning. Adds Test Suite 45 covering detection, legacy fall-through,
and end-to-end install.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-01 13:14:14 -07:00