Thread inbox-check line and canonical .gitignore into the retrofit flow; scope relative-symlink rule to in-repo links
Retrofit playbook Step 0/Step 1 and the /retrofit guide now seed every new repo with the canonical .gitignore block and the inbox-check line, and Part 5 documents /capture, /triage, /roundup. portability.md and the portability-checker guide now scope the relative-symlink mandate to in-repo (committed) symlinks, so global ~/.claude/* links are no longer flagged. ROADMAP adds a high-priority cross-repo git-hygiene audit.
This commit is contained in:
@@ -26,6 +26,9 @@ A path to the repo to audit (default: the current working directory).
|
||||
3. **Resolve every symlink concretely.** Use `ls -l` / `readlink` (not assumptions): confirm
|
||||
it exists, points the correct *direction*, its target exists (not dangling), and the link
|
||||
is **relative**, never absolute — an absolute link breaks if the repo is cloned or moved.
|
||||
Scope this to symlinks *inside the repo* (the ones git commits). Symlinks outside the repo
|
||||
— notably the global `~/.claude/*` links — are never committed and are recreated per
|
||||
machine, so they may be absolute without harm; do not flag them in a repo audit.
|
||||
4. **Check each layer against the checklist below**, citing file paths and `readlink` output.
|
||||
5. **Reconcile with the live spec.** If `portability.md` states a rule the checklist doesn't
|
||||
cover, check it too and flag the gap.
|
||||
@@ -60,7 +63,8 @@ A path to the repo to audit (default: the current working directory).
|
||||
**Self-containment and swap-readiness**
|
||||
- Everything required to work on the repo lives in the repo. A hard dependency on a global
|
||||
or user-level file for a *requirement* (not a preference) is a blocker.
|
||||
- All vendor symlinks are relative, so the repo stays portable.
|
||||
- All vendor symlinks **inside the repo** are relative, so the repo stays portable. (The
|
||||
global `~/.claude/*` links are out of scope — not part of the repo and never committed.)
|
||||
- `.gitignore` covers `.env`; no secrets, large binaries, or generated artifacts committed.
|
||||
|
||||
## Hard rules
|
||||
@@ -68,8 +72,9 @@ A path to the repo to audit (default: the current working directory).
|
||||
user can run (the `git mv` / `ln -s` to run), never apply them.
|
||||
- Every PASS/FAIL cites concrete evidence: a file path, a `readlink` result, a line number.
|
||||
Anything you did not actually inspect is UNVERIFIED, never assumed.
|
||||
- Verify both **direction** and **relativeness** of every symlink — a link that resolves but
|
||||
points the wrong way, or is absolute, fails.
|
||||
- Verify both **direction** and **relativeness** of every **in-repo** symlink — a link that
|
||||
resolves but points the wrong way, or is absolute, fails. (Global `~/.claude/*` links are
|
||||
out of scope.)
|
||||
- Distinguish **blockers** (break vendor-neutrality or hot-swap) from **warnings** (friction
|
||||
or style). The absence of an optional layer (no subagents, no scoped guides) is neither —
|
||||
list it as Not applicable. Only present-but-wrong is a finding.
|
||||
|
||||
Reference in New Issue
Block a user