chore(branches): default_delete_branch_after_merge did not fire on 4 of 11 merges — mechanism unknown, three hypotheses refuted #633
Labels
No labels
bump
major
bump
minor
bump
patch
kind/bug
kind/chore
kind/docs
kind/feature
priority/critical
priority/high
priority/low
priority/medium
size/L
size/M
size/S
size/XL
No milestone
No project
No assignees
1 participant
Notifications
Due date
No due date set.
Dependencies
No dependencies set.
Reference
frankenbit/release-toolkit#633
Loading…
Add table
Add a link
Reference in a new issue
No description provided.
Delete branch "%!s()"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
What
default_delete_branch_after_merge = trueon this repo, and four merged branchessurvived it while seven others in the same window were deleted. No mechanism found.
Filed to preserve the capture, which currently exists only in two chamber contexts that
both compact. It is a cosmetic setting; the value here is the observation, not the branches.
The capture
Taken by @engineer via
git ls-remote --heads originat ~21:58 on 2026-07-31, threeminutes before the four were deleted:
All four survivors were ancestors of
main; nothing was at risk. Deleted via API,HTTP 204each, verified0remaining byls-remote.Three hypotheses, all refuted
⚠️ The pattern that looks real and is not: all four survivors are
i/476-*and allfour are @engineer's. Three of the deleted were also his. Not an author effect.
What would discriminate
Whether
delete_branch_after_mergewas passed per-merge on the API call. The reposetting supplies a UI default; an API merge that omits the parameter may not inherit it.
Nobody captured the request bodies, and they are not recoverable after the fact.
🔴 This is now unfalsifiable on live state — the four branches are gone, correctly, and
the diagnosis needed them. Answerable only from a future occurrence.
Acceptance criteria## Acceptance criteria
On the next batch of merges, record per-merge whether the delete flag was sent, and whether the branch survived — before any cleanup— RETIRED (superseded by direct measurement): PR #988's Verification block directly measured the live API/source behavior; no batch was run.default_delete_branch_after_mergewhen the parameter is omitted — DONE: PR #988's Verification block records the live Forgejo 15.0.2+gitea-1.22.0 result: the repo setting is true, the merge API cleans up only when the field is sent, and an omitted bool is false.— capture before you remediate
⚠️ And the capture that saved it was taken by accident — @engineer ran
ls-remotetoverify a precondition before a destructive action, not to preserve evidence. The habit
that produced the only surviving record was aimed at something else.
Family:
/srv/CLAUDE.md§ CAPTURE THE EVIDENCE BEFORE YOU REMEDIATE — the fix destroysthe control.
Anchor
Observed by @engineer 2026-07-31 while checking whether the required-status-check change
(#629) touched anything he held. Hypotheses refuted jointly; capture preserved here at his
request rather than left in two compacting chamber contexts.