Commit Graph

3 Commits

Author SHA1 Message Date
Adam Biggs bce48d8139 fix(installer): include file path in JSON parse errors 2026-03-12 12:14:23 -07:00
Adam Biggs 2771dd76b8 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-03-12 12:14:23 -07:00
Adam Biggs a12d5d03b5 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-03-12 12:14:23 -07:00