- Rewrite cmd/link.go with safe idempotent logic: skips correct symlinks,
backs up real files to .dotctl.bak, respects --overwrite and --no-backup
- Add cmd/apply.go: new bootstrap command that clones or pulls a dotfiles
repo then runs the idempotent link logic with a summary
- Add --overwrite and --no-backup persistent flags to root command
- Remove unstable cmd/sync.go
- Fix cmd/init.go gitignore to not exclude dotctl/config.yml (required
for apply to work on fresh machines)
- Add install.sh: detects OS/arch, downloads binary from GitHub releases,
optionally runs dotctl apply <url>
- Update README with Quick Start section covering both bootstrap methods
- Rewrite test/link_test.go with 10 real-filesystem idempotency tests
- Add test/apply_test.go with 5 tests covering dry-run, linking, and
idempotency
- Fix pre-existing TestInitCommand failure (missing MemMapFs setup)
Co-authored-by: Claude Sonnet 4.6 <noreply@anthropic.com>