From 33111c01565a4550052e751300adf9f2f0e9bb9f Mon Sep 17 00:00:00 2001 From: luvs01 <27862058+luvs01@users.noreply.github.com> Date: Mon, 21 Sep 2026 20:50:57 +0900 Subject: [PATCH 1/2] docs: harden branch content classification against renames --- devlog/_fin/260904_repo_hygiene_campaign/010_method.md | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/devlog/_fin/260904_repo_hygiene_campaign/010_method.md b/devlog/_fin/260904_repo_hygiene_campaign/010_method.md index 773b6db6494..de498d0c0fb 100644 --- a/devlog/_fin/260904_repo_hygiene_campaign/010_method.md +++ b/devlog/_fin/260904_repo_hygiene_campaign/010_method.md @@ -7,7 +7,7 @@ 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...
+T3 content paths = git diff --no-renames --name-only origin/dev...
git diff --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 @@ -22,6 +22,13 @@ 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. +Rename detection must be disabled while collecting that path set. 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. + 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, From d31674497df0e6cfdf3ceadc1e8b0c48f677018a Mon Sep 17 00:00:00 2001 From: luvs01 <27862058+luvs01@users.noreply.github.com> Date: Tue, 22 Sep 2026 06:25:49 +0900 Subject: [PATCH 2/2] docs: date the no-renames correction and align sibling commands --- .../260904_repo_hygiene_campaign/000_plan.md | 8 ++++---- .../260904_repo_hygiene_campaign/010_method.md | 18 +++++++++++------- .../100_pr_verdicts.md | 7 ++++--- 3 files changed, 19 insertions(+), 14 deletions(-) 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 de498d0c0fb..c8e98858bc5 100644 --- a/devlog/_fin/260904_repo_hygiene_campaign/010_method.md +++ b/devlog/_fin/260904_repo_hygiene_campaign/010_method.md @@ -8,7 +8,7 @@ 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 --no-renames --name-only origin/dev...
- git diff --name-only origin/dev
-- -> empty + 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,12 +22,16 @@ 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. -Rename detection must be disabled while collecting that path set. 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. +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/`, 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