Breaking change for v0.3.0. Settled in a grilling session.
Discovery
- A Project is any directory holding a
.git entry (dir or file), identified by its absolute path.
- Only
cdd scan [dir...] walks the disk. No args walks $HOME. Directories are not remembered.
- The walk goes to any depth and stops descending at a repo — except a scan argument, which is always descended into (and recorded as a Project if it is a repo).
- No symlink following (except scan arguments). Unreadable dirs are skipped silently.
include_hidden (default false) skips hidden dirs during the walk; .git detection is unaffected.
exclude is gitignore-style: a pattern containing / matches the absolute path (~ expanded), otherwise the basename. Default [].
- Scan prints only its final summary.
History & Picker
- History stores absolute paths. Relative (pre-v0.3.0) lines are skipped as malformed; re-run
cdd scan.
- The Picker lists History only and never walks. A Visit whose
<path>/.git is gone is Stale and gives no row. The "never-visited last" rule disappears.
- Row: muted
~/…/parent/ + bold basename; the filter matches the full path. The preview header uses the same form.
- Exact-match:
cdd <query> jumps directly when exactly one Project matches by basename or trailing path suffix.
git.Status states stay; only "not a git repository" copy goes.
Config
- config.toml becomes optional.
root is removed; a stale root is a hard error explaining the change.
picker.layout stays, accepts only "list" (the new default); "grouped" is a hard error explaining the change.
Docs
- CONTEXT.md: drop Root and Kind; redefine Project, Scan, Stale Visit, Layout.
- ADR
docs/adr/0001-projects-are-git-repos-found-by-scan.md.
- README and demo updated (VHS 0.11.0).
Breaking change for v0.3.0. Settled in a grilling session.
Discovery
.gitentry (dir or file), identified by its absolute path.cdd scan [dir...]walks the disk. No args walks$HOME. Directories are not remembered.include_hidden(default false) skips hidden dirs during the walk;.gitdetection is unaffected.excludeis gitignore-style: a pattern containing/matches the absolute path (~expanded), otherwise the basename. Default[].History & Picker
cdd scan.<path>/.gitis gone is Stale and gives no row. The "never-visited last" rule disappears.~/…/parent/+ bold basename; the filter matches the full path. The preview header uses the same form.cdd <query>jumps directly when exactly one Project matches by basename or trailing path suffix.git.Statusstates stay; only "not a git repository" copy goes.Config
rootis removed; a stalerootis a hard error explaining the change.picker.layoutstays, accepts only"list"(the new default);"grouped"is a hard error explaining the change.Docs
docs/adr/0001-projects-are-git-repos-found-by-scan.md.