Repository navigation
Description
Goal: every command an add refusal prints can be typed as printed, with the arguments it needs, in the state it describes, on the git the estate supports.
Filed by lane openRepoShape-5 on Brett Heap's word of 2026-10-16T12:17:02Z ("#459's family lines (~38)"), from lane 5's #574 lines on #459 (comment 6192725913). L2-70 (comment 6206387194), the remedies that name bump without --family-root, is a known limit by Brett Heap's word of 2026-10-16T12:14:51Z on lane 2's triage (#473 comment), so it is not here.
Lands after: lane 5's #646 (fix/646-…), which rewrites _spellings_refusal (scripts/family.py:2917) and the REMEDY_ORDER rules for the case where a variant is another member's own gitlink. The three #574 lines below are in the same function.
Lines (line numbers at d4a7fab)
- family.py:
addrefuses, before the member is read and on every disk, any path under another spelling ofmembers/, in its index, in HEAD or on disk, and names a remedy per entry that never moves the members' checkouts (#362, #363, #364) #574: aftergit mv members Members, staged or committed,addnames the member's gitlinkMembers/<M>with the genericgit mv -- Members/<M> <new name>. Probed on main:git mv members Members, thenadd --dry-rungivesgit mv -- Members/IRRS <new name>andgit mv -- Members/IRSS <new name>, and the right target,members/<M>, fails as typed untilmkdir members. The holder's validator already refuses that state. Direction: where every variant sits under a spelling ofmembers/that nomembers/entry holds, print the rename of the directory itself back (git mv -- Members members), or say the target ismembers/<M>andmkdir memberscomes first. Decide with family.pyadd: where another member's own gitlink sits at a case variant (Members/<P>for its rowmembers/<P>), the refusal's remedy printsgit rm -r --cachedorgit mv, which takes that member's gitlink away from its row #646's treatment of the same function. - family.py:
addrefuses, before the member is read and on every disk, any path under another spelling ofmembers/, in its index, in HEAD or on disk, and names a remedy per entry that never moves the members' checkouts (#362, #363, #364) #574: a macOS or Windows holder that pulled a commit addingMembers/READMEis toldgit rm -r --cached, not a committedgit mv. On such a disk the file is on disk asmembers/README, the other spelling's own directory, but_spellings_refusaloffersUNSTAGEfor "what has nothing on disk in that spelling" (scripts/family.py:2569-2571,:2976-2978); the file stays untracked atmembers/README. Benign (committing it afterwards still givesfamily ok). Reasoned, not run: this host is case-sensitive. Direction: word the remedy for the case-folding disk, or verify on one and close. - family.py:
addrefuses, before the member is read and on every disk, any path under another spelling ofmembers/, in its index, in HEAD or on disk, and names a remedy per entry that never moves the members' checkouts (#362, #363, #364) #574:git mv --sparse, the remedy for a skip-worktree entry, needs git 2.34 or later.RENAME_SPARSE = "git mv --sparse"(scripts/family.py:2567, the sentence at:2970-2974). The estate states no minimum git (nogit 2.in README.md, AGENTS.md, install.sh or pyproject.toml), andscripts/shape_materialize.pysupports git older than 2.32 (commit --trailer,:1951). On such a git the printed line failsunknown optionand nothing is damaged. Direction: say "git 2.34 or later" in the sentence, or name the older way (clear the skip-worktree bit,git update-index --no-skip-worktree, thengit mv) after probing it.
Overlaps: lane 5's #646 (_spellings_refusal, which holds all three lines, so this lands after it) and #639 (family.py remove functions only). No open PR edits _checked_add_target or _checked_member_id.
Mark the three lines → this issue on #459, and tick them there when this closes.
🤖 Generated with Claude Code
Activity
brettheap commentedon Oct 16, 2026
CLAIMED — lane openRepoShape-5, session 50cede29-ab82-4ca3-9f67-d98e1a58c8d2@Eagle, 2026-10-16T14:06:25Z, for #685
Logged in
lanes/log/openRepoShape-5.mdat3b4fe9b53b49b3a92071a34da4946db73896e3c9.The three reads (lane-collision-protocol Rule 1):
family.py add: the rename back of a `members/` renamed with `git mv` …
family.py add: what a spelling remedy says of `.gitmodules` first is …
Merge origin/main (40e678e) into l3-563-docs
README.md, the handbook and the v1.1.0 notes: RV630's four nits, and …
family.py add: the move back of a member's gitlink points its section…
family.py add: a section astray beside its gitlink, a variant of a ro…