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