diff --git a/devlog/_fin/260904_repo_hygiene_campaign/000_plan.md b/devlog/_fin/260904_repo_hygiene_campaign/000_plan.md index f7f030084a9..338920eed06 100644 --- a/devlog/_fin/260904_repo_hygiene_campaign/000_plan.md +++ b/devlog/_fin/260904_repo_hygiene_campaign/000_plan.md @@ -22,10 +22,10 @@ Every branch was scored on four independent axes rather than by name: 1. `git merge-base --is-ancestor
origin/dev` — plain ancestry. 2. `git cherry origin/dev
` — patch-equivalence, which catches rebases. 3. Content landing — the files the branch touches - (`git diff --name-only origin/dev...
`) are compared two-dot against - `origin/dev` restricted to exactly those paths. Zero remaining difference - means the branch's content is already on `dev` even though a squash merge - destroyed its commit identity. + (`git diff --no-renames --name-only origin/dev...
`) are compared two-dot + against `origin/dev` restricted to exactly those paths. Zero remaining + difference means the branch's content is already on `dev` even though a + squash merge destroyed its commit identity. 4. Exact reference matching against live GitHub state: open-PR head refs, worktree-backing refs, and the PR number a scratch branch was cut for. diff --git a/devlog/_fin/260904_repo_hygiene_campaign/010_method.md b/devlog/_fin/260904_repo_hygiene_campaign/010_method.md index 773b6db6494..c8e98858bc5 100644 --- a/devlog/_fin/260904_repo_hygiene_campaign/010_method.md +++ b/devlog/_fin/260904_repo_hygiene_campaign/010_method.md @@ -7,8 +7,8 @@ A local branch is deletable when at least one holds, and no guard fires. ``` T1 ancestry git merge-base --is-ancestor
origin/dev T2 patch-equiv git cherry origin/dev
-> no '+' lines -T3 content paths = git diff --name-only origin/dev...
- git diff --name-only origin/dev
-- -> empty +T3 content paths = git diff --no-renames --name-only origin/dev...
+ git diff --no-renames --name-only origin/dev
-- -> empty T4 scratch branch name encodes a PR number whose state is MERGED or CLOSED AND the name matches the scratch prefix set AND the number is a WHOLE numeric token of the branch name @@ -22,6 +22,17 @@ report "unmerged" for work that is fully shipped. T3 asks the only question that is actually load-bearing — is there any difference left in the files this branch claims to change. +Correction, 2026-09-21: the 71 deletions recorded below ran the listing command +without `--no-renames`. Rename detection must be disabled while collecting that +path set, and any rerun after this date should use the form shown above. +Otherwise a rename contributes only its destination: if `dev` independently +contains the same destination but retains the source, the restricted second +diff is empty even though the complete tip trees differ. `--no-renames` emits +both the deleted source and added destination, so the source-side difference +prevents a false LANDED verdict. No wrongly-LANDED branch has been identified +from the earlier run; this is a preventive correction for the next sweep, not a +measured incident. + T4 is deliberately narrow. It fires only for throwaway prefixes (`pr*`, `rb-`, `jrb-`, `mtp/`, `big-`, `cf-`, `ocx-`, `wip/`, `backup/`, `candidate`, `cursor-`, `midstream`) created by earlier review and rebase runs, diff --git a/devlog/_fin/260904_repo_hygiene_campaign/100_pr_verdicts.md b/devlog/_fin/260904_repo_hygiene_campaign/100_pr_verdicts.md index bf8e5d701c0..8990abe5a3e 100644 --- a/devlog/_fin/260904_repo_hygiene_campaign/100_pr_verdicts.md +++ b/devlog/_fin/260904_repo_hygiene_campaign/100_pr_verdicts.md @@ -2,9 +2,10 @@ Full classification of the 53 pull requests open when the campaign started. Method: fetch each PR head, take the files it touches -(`git diff --name-only origin/dev...`), then compare those exact paths -two-dot against `origin/dev`. Remaining differences mean the work has not -landed. +(`git diff --no-renames --name-only origin/dev...`), then compare those +exact paths two-dot against `origin/dev`. Remaining differences mean the work +has not landed. (2026-09-21: `--no-renames` added so a rename cannot hide the +deleted source side from the path set; see 010_method.md.) ## Closed