- Add `default_dotfiles_dir()` (~/.notfiles) and `default_config_path()`
(~/.config/notfiles/notfiles.toml) to notcore::config
- Add `Config::load_from(path)` for explicit config path; keep `Config::load(dir)`
as the legacy/library variant (config inside dotfiles dir)
- CLI resolves config via XDG default or --config override; library functions
stay legacy so the public API is unaffected
- `notfiles init` creates ~/.notfiles and ~/.config/notfiles/notfiles.toml
- Add --config global flag to override the config path
- Update integration tests to pass --config explicitly so they are isolated
from any real ~/.config/notfiles/notfiles.toml on the test machine
- Extract FileStore port and InMemoryFileStore/FileStoreImpl/Reporter adapters
- Add Reporter trait to notcore with TerminalReporter and JsonReporter
- Refactor linker, package, status modules to use FileStore port
- Add integration test suite with dotfiles fixtures
- Add cross-crate integration tests
- Remove ssh_rsa identity/recipient (unsupported)
- Add rustqual.toml, .sccignore, notfiles.toml config files
- Update CLAUDE.md, README.md, AGENTS.md with current architecture
Remove hardcoded nu interpreter. HookSpec gains an optional interpreter
field; runner infers from file extension (.sh, .nu, .py, .rb, .zsh,
.bash) when not set. Integration tests now use sh — no nu runtime dep
on CI.
Prevents state files from being accidentally linked into the target
directory when a user initializes a fresh notfiles.toml from the
starter template.
Closes#2 (post-merge audit)
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>