mirror of
https://github.com/bmad-code-org/BMAD-METHOD.git
synced 2026-08-28 19:20:41 +08:00
825099b2cb
* feat(installer): ask about shims during Quick Update Quick Update returned before the shim prompt, so anyone who only ever runs it carried their compatibility shims forward release after release without once being offered the chance to drop them. Quick Update now asks, defaulting to keeping the shims so pressing enter never removes a skill in active use. It stays quiet for an installation that already dropped its shims rather than re-asking every update. The prompt carries the recommendation to remove them and names the one case that justifies keeping them: a customized shim not yet migrated. Whenever an install retains shims, it now lists every one of them and what it forwards to. That notice is emitted where the policy is resolved rather than at the prompt, so it also reaches the paths that never prompt: --yes, --shims, and scripted quick updates. * fix(installer): never prompt for shims without a TTY, and report removal Two gaps in the Quick Update shim prompt. The prompt could be reached by a scripted run. `--action quick-update` is a documented scripting flag and is not tied to `--yes`, so a headless invocation on an install that still had shims fell through to a confirm. clack's confirm never resolves without a TTY: the process drained its event loop and exited silently, mid-install, with status 0. It now keeps the standing answer whenever stdin is not a TTY, leaving --shims and --no-shims as the way to change it from a script. Removing shims was also completely silent. Source filtering just skips the directories, and the IDE cleanup that deletes the stale skill dirs suppresses its logging on purpose, so nothing anywhere told the user that a skill they may still invoke had just gone. Any run that removes shims now lists them and says how to put them back, mirroring the retained notice. Between the two, every run that has shims either way reports which way it went, on interactive and headless paths alike. * feat(installer): carry the shim outcome into the final summary Both shim notices print before the install tasks start, so a long run buries them well above the fold. The summary box already repeats the uv warning for exactly this reason; the shim outcome now rides along the same way, as a single line next to the preserved/backed-up file counts. Retained reads "Deprecated shim skills retained: N (re-run to remove them)" in yellow, removed reads "Deprecated shim skills removed: N" in green, and an install with no shims either way adds no line at all. * fix(installer): say what an empty module selection installs The official module picker allows an empty selection on purpose: core is always installed and is not a row in the list, so selecting nothing is a valid core-only install. The prompt did not say so, and collapsed to a bare "0 items selected", which reads as though the install is about to do nothing. autocompleteMultiselect takes an optional emptyLabel, shown while selecting as "Nothing selected: installs core only" and on submit as "0 items selected (core only)". Pickers that pass no emptyLabel are unchanged. Also fixes the count to say "1 item" rather than "1 items". * refactor(installer): trim explanatory comments to what the code cannot say Cuts 35 comment lines added across this branch down to seven, keeping only the non-obvious constraints: clack's confirm hanging without a TTY, core not being a row in the module picker, and why the shim notices are emitted where they are. * fix(installer): report shims removed after they are retired from source Removal reporting was derived from the shims the incoming release ships, so a shim retired from source fell out of the report entirely: it was absent from discovery, yet the update cleanup still deleted its installed target using the previous manifest. The v7 cut is exactly that case, and it would have removed every shim in silence. Removal is now derived from what is installed, read back from skill-manifest.csv, and the retained/removed split moves into selectShimOutcome. This also covers the mixed run where one shim is retired while the rest stay enabled: both notices fire, and the summary carries both counts. The recovery line no longer offers --shims when the release cannot reinstall them. Raised by greptile and coderabbit on #2746.