Compare commits

..

5 Commits

Author SHA1 Message Date
Adam Biggs 38d98565ac
Merge fdfa3343d3 into 259e8a11ba 2026-03-06 01:41:23 +07:00
Brian fdfa3343d3
Merge branch 'main' into fix/installer-nondeterministic-file-loss 2026-03-01 10:46:45 -06:00
Adam Biggs a32fc19d4a ci: add fs wrapper tests to quality workflow 2026-02-26 13:35:40 -08:00
Adam Biggs c356aae5b4 fix(installer): narrow error handling in copy() and fix test interdependency
- copy() overwrite:false catch now only ignores ENOENT/ENOTDIR,
  consistent with pathExists(); permission errors propagate correctly
- 'copy creates parent directories' test creates its own fixture
  instead of depending on state from a previous test
2026-02-26 13:29:42 -08:00
Adam Biggs 373c06b68f fix(installer): replace fs-extra with native fs to prevent non-deterministic file loss
fs-extra routes all async operations through graceful-fs, whose EMFILE
retry queue causes non-deterministic file loss on macOS APFS during bulk
copy operations (~500+ files). Approximately 50% of install runs lose
26+ files from _bmad/.

Replace fs-extra entirely with a thin native wrapper (tools/cli/lib/fs.js)
that provides the same API surface backed by node:fs and node:fs/promises.
Copy and remove operations use synchronous native calls to eliminate the
race condition. Verified across 8+ consecutive runs with zero file loss.

- Add tools/cli/lib/fs.js native wrapper with full fs-extra API compat
- Update all 40 files to require the wrapper instead of fs-extra
- Remove fs-extra from package.json dependencies
- Add 37-test suite including 250-file bulk copy determinism test
2026-02-26 13:04:08 -08:00
1 changed files with 10 additions and 0 deletions

View File

@ -23,3 +23,13 @@ output_folder:
prompt: "Where should output files be saved?" prompt: "Where should output files be saved?"
default: "_bmad-output" default: "_bmad-output"
result: "{project-root}/{value}" result: "{project-root}/{value}"
tool_supports_subagents:
prompt: "Subagents are supported by the LLM or Tool I will be using?"
default: true
result: "{value}"
tool_supports_agent_teams:
prompt: "Agent Teams are supported by the LLM or Tool I will be using?"
default: false
result: "{value}"