chore: prune 24 stale remote feature branches #167

Closed
opened 2026-08-09 03:48:20 +02:00 by clawbot · 5 comments
Collaborator

Problem

origin carries 26 branches. Excluding main, 24 are stale feature branches
from already-landed work:

chore/token-list-enrichment
feat/issue-131-transaction-view-layout
feat/message-signing
feature/82-warn-new-address
feature/82-zero-history-warning
feature/copy-flash-feedback
feature/expanded-warnings
feature/issue-82-new-address-warning
feature/show-private-key
fix/116-timestamps-include-timezone
fix/55-swap-show-own-address
fix/59-transaction-view-ui-policies
fix/70-confirm-tx-contract-display
fix/77-confirm-tx-persist
fix/87-consistent-error-display
fix/87-consistent-error-display-v2
fix/99-block-number-clickable
fix/consistent-error-display
fix/cross-wallet-duplicate-detection
fix/issue-58-receive-address-consistency
fix/issue-72-address-token-tx-history
fix/issue-99-block-number-link-copy
issue-99-block-number-external-link
issue-99-block-number-styling

TODO.md:51-52 already carries this as a Future Step.

The catch — do not use --merged

git branch -r --merged origin/main reports zero merged branches, because
PRs in this repo are squash-merged: the branch tip is never an ancestor of
main. A naive --merged sweep would delete nothing, and a naive
"delete everything that isn't main" would risk destroying unlanded work.

Several of these names also look like superseded duplicates of one another
(three variants for issue 99, two for issue 87, three for issue 82), which
suggests abandoned attempts alongside the one that actually landed. Those still
need checking rather than assuming.

Implementation requirements

  • For each branch, determine whether its content actually landed on main.
    Squash-merges mean you must compare content, not ancestry. Workable
    approaches: git cherry -v origin/main <branch>, or diffing the branch
    against its merge-base with main
    (git diff $(git merge-base main <branch>) <branch>) and checking whether
    that diff is already present in main, or matching the branch to its closed
    PR via the tracker.
  • Cross-reference the tracker: most of these map to a numbered issue/PR that is
    closed and merged. A branch whose PR was closed without merging is not
    safe to delete on that basis alone.
  • Produce a written classification of all 24 before deleting anything: landed
    (safe), superseded duplicate (safe, name the branch that won), or
    unlanded (do not delete).
  • Anything unlanded or ambiguous stays, and gets listed in the PR/issue comment
    so it can be triaged separately. Do not guess.
  • Delete only on origin, and only after the classification is posted here.
    Local branches in the shared clone are already down to main alone.
  • Do not touch main, and do not force-push anything.

Definition of done

  • A comment on this issue classifies all 24 branches as landed, superseded,
    or unlanded, with the evidence used for each.
  • Every branch classified landed or superseded is deleted from origin.
  • Every branch classified unlanded still exists and is listed for triage.
  • git ls-remote --heads origin afterwards shows only main plus any
    deliberately retained branches.
  • TODO.md Future Step for branch pruning is removed in the same commit as
    whatever documentation change accompanies this.
## Problem `origin` carries 26 branches. Excluding `main`, 24 are stale feature branches from already-landed work: ``` chore/token-list-enrichment feat/issue-131-transaction-view-layout feat/message-signing feature/82-warn-new-address feature/82-zero-history-warning feature/copy-flash-feedback feature/expanded-warnings feature/issue-82-new-address-warning feature/show-private-key fix/116-timestamps-include-timezone fix/55-swap-show-own-address fix/59-transaction-view-ui-policies fix/70-confirm-tx-contract-display fix/77-confirm-tx-persist fix/87-consistent-error-display fix/87-consistent-error-display-v2 fix/99-block-number-clickable fix/consistent-error-display fix/cross-wallet-duplicate-detection fix/issue-58-receive-address-consistency fix/issue-72-address-token-tx-history fix/issue-99-block-number-link-copy issue-99-block-number-external-link issue-99-block-number-styling ``` `TODO.md:51-52` already carries this as a Future Step. ## The catch — do not use `--merged` `git branch -r --merged origin/main` reports **zero** merged branches, because PRs in this repo are squash-merged: the branch tip is never an ancestor of `main`. A naive `--merged` sweep would delete nothing, and a naive "delete everything that isn't main" would risk destroying unlanded work. Several of these names also look like superseded duplicates of one another (three variants for issue 99, two for issue 87, three for issue 82), which suggests abandoned attempts alongside the one that actually landed. Those still need checking rather than assuming. ## Implementation requirements - For **each** branch, determine whether its content actually landed on `main`. Squash-merges mean you must compare content, not ancestry. Workable approaches: `git cherry -v origin/main <branch>`, or diffing the branch against its merge-base with `main` (`git diff $(git merge-base main <branch>) <branch>`) and checking whether that diff is already present in `main`, or matching the branch to its closed PR via the tracker. - Cross-reference the tracker: most of these map to a numbered issue/PR that is closed and merged. A branch whose PR was closed **without** merging is not safe to delete on that basis alone. - Produce a written classification of all 24 before deleting anything: landed (safe), superseded duplicate (safe, name the branch that won), or **unlanded** (do not delete). - Anything unlanded or ambiguous stays, and gets listed in the PR/issue comment so it can be triaged separately. Do not guess. - Delete only on `origin`, and only after the classification is posted here. Local branches in the shared clone are already down to `main` alone. - Do not touch `main`, and do not force-push anything. ## Definition of done - [ ] A comment on this issue classifies all 24 branches as landed, superseded, or unlanded, with the evidence used for each. - [ ] Every branch classified landed or superseded is deleted from `origin`. - [ ] Every branch classified unlanded still exists and is listed for triage. - [ ] `git ls-remote --heads origin` afterwards shows only `main` plus any deliberately retained branches. - [ ] `TODO.md` Future Step for branch pruning is removed in the same commit as whatever documentation change accompanies this.
Author
Collaborator

Plan: classify every remote branch except main, next, prod and open-PR branches (the 24 above plus the head branches of squash-merged PRs since), from the tracker and from content where there is no merged PR; post the classification here first; delete only landed or superseded ones; list anything unlanded for triage. A small PR then updates TODO.md.

Model: opus-5-5

Plan: classify every remote branch except `main`, `next`, `prod` and open-PR branches (the 24 above plus the head branches of squash-merged PRs since), from the tracker and from content where there is no merged PR; post the classification here first; delete only landed or superseded ones; list anything unlanded for triage. A small PR then updates `TODO.md`. Model: opus-5-5
Author
Collaborator

Classification of every branch on origin except main, next and issue-487-firefox-allowed-error (head of the open #490). There is no prod. Every pull request from these branches is marked closed without merging, so each branch was checked by content against origin/next. Three branches on the issue's list, chore/token-list-enrichment, feat/message-signing and fix/59-transaction-view-ui-policies, were already gone from origin.

Branch Class Evidence
fix/99-block-number-clickable landed same patch as 5565e76, merged by #102
issue-99-block-number-external-link landed same patch as 5565e76, merged by #102
fix/issue-99-block-number-link-copy superseded by issue-99-block-number-link #104 closed as duplicate of the merged #102
issue-99-block-number-styling superseded by issue-99-block-number-link #106 closed as duplicate of #102
feature/82-warn-new-address superseded by issue-82-zero-tx-warning #108 closed as duplicate of the merged #98
feature/82-zero-history-warning superseded by issue-82-zero-tx-warning #105 closed as duplicate of #98
feature/issue-82-new-address-warning superseded by issue-82-zero-tx-warning #109 closed as duplicate of #98
feature/copy-flash-feedback superseded by fix/issue-100-copy-flash-feedback #112 closed as duplicate of the merged #113
feature/expanded-warnings superseded by fix/issue-114-expanded-warnings #119 closed; #118 merged for the same issue, and its scam, burn and contract warnings are in next
fix/116-timestamps-include-timezone superseded by fix/issue-116-timestamp-timezone #122 closed as duplicate of the merged #120
fix/55-swap-show-own-address superseded by fix/55-swap-tx-address #56 closed as duplicate of the merged #57
fix/70-confirm-tx-contract-display superseded by fix/confirm-tx-contract-display #74 closed as duplicate of the merged #73
fix/77-confirm-tx-persist superseded by fix/issue-77-confirm-tx-persist #81 closed as duplicate of the merged #79
fix/cross-wallet-duplicate-detection superseded by fix/issue-111-cross-wallet-dedup #117 closed as duplicate of the merged #115
fix/issue-72-address-token-tx-history superseded by fix/72-address-token-tx-history #75 closed as duplicate of the merged #76
fix/issue-58-receive-address-consistency superseded by its own earlier commit that commit merged as #69; the tip is the rival layout from #71, closed as duplicate
feat/issue-131-transaction-view-layout superseded by fix/issue-131-transaction-view-reorder #132 closed as duplicate of the merged #133
feature/show-private-key unlanded, kept viewing the key landed through #31, but this branch's README clipboard policy section, which the owner asked for on #19, is not in next
fix/consistent-error-display unlanded, kept #88 was closed because #87 was said to be covered by #92, which changed only the approve-tx and approve-sign errors; next still uses export-privkey-flash, delete-wallet-flash and showFlash() for these validation errors
fix/87-consistent-error-display unlanded, kept #90, nearly the same change as #88
fix/87-consistent-error-display-v2 unlanded, kept #96, the same change without the approve-tx part

Deleting the 17 landed and superseded branches from origin now.

For triage: #87 is closed, but its change never landed; the three error-display branches are versions of that one change, written against February's code. The clipboard policy section is the only part of feature/show-private-key missing from next.

Model: opus-5-5

Classification of every branch on `origin` except `main`, `next` and `issue-487-firefox-allowed-error` (head of the open https://git.eeqj.de/sneak/AutistMask/pulls/490). There is no `prod`. Every pull request from these branches is marked closed without merging, so each branch was checked by content against `origin/next`. Three branches on the issue's list, `chore/token-list-enrichment`, `feat/message-signing` and `fix/59-transaction-view-ui-policies`, were already gone from `origin`. | Branch | Class | Evidence | | --- | --- | --- | | `fix/99-block-number-clickable` | landed | same patch as `5565e76`, merged by https://git.eeqj.de/sneak/AutistMask/pulls/102 | | `issue-99-block-number-external-link` | landed | same patch as `5565e76`, merged by https://git.eeqj.de/sneak/AutistMask/pulls/102 | | `fix/issue-99-block-number-link-copy` | superseded by `issue-99-block-number-link` | https://git.eeqj.de/sneak/AutistMask/pulls/104 closed as duplicate of the merged https://git.eeqj.de/sneak/AutistMask/pulls/102 | | `issue-99-block-number-styling` | superseded by `issue-99-block-number-link` | https://git.eeqj.de/sneak/AutistMask/pulls/106 closed as duplicate of https://git.eeqj.de/sneak/AutistMask/pulls/102 | | `feature/82-warn-new-address` | superseded by `issue-82-zero-tx-warning` | https://git.eeqj.de/sneak/AutistMask/pulls/108 closed as duplicate of the merged https://git.eeqj.de/sneak/AutistMask/pulls/98 | | `feature/82-zero-history-warning` | superseded by `issue-82-zero-tx-warning` | https://git.eeqj.de/sneak/AutistMask/pulls/105 closed as duplicate of https://git.eeqj.de/sneak/AutistMask/pulls/98 | | `feature/issue-82-new-address-warning` | superseded by `issue-82-zero-tx-warning` | https://git.eeqj.de/sneak/AutistMask/pulls/109 closed as duplicate of https://git.eeqj.de/sneak/AutistMask/pulls/98 | | `feature/copy-flash-feedback` | superseded by `fix/issue-100-copy-flash-feedback` | https://git.eeqj.de/sneak/AutistMask/pulls/112 closed as duplicate of the merged https://git.eeqj.de/sneak/AutistMask/pulls/113 | | `feature/expanded-warnings` | superseded by `fix/issue-114-expanded-warnings` | https://git.eeqj.de/sneak/AutistMask/pulls/119 closed; https://git.eeqj.de/sneak/AutistMask/pulls/118 merged for the same issue, and its scam, burn and contract warnings are in `next` | | `fix/116-timestamps-include-timezone` | superseded by `fix/issue-116-timestamp-timezone` | https://git.eeqj.de/sneak/AutistMask/pulls/122 closed as duplicate of the merged https://git.eeqj.de/sneak/AutistMask/pulls/120 | | `fix/55-swap-show-own-address` | superseded by `fix/55-swap-tx-address` | https://git.eeqj.de/sneak/AutistMask/pulls/56 closed as duplicate of the merged https://git.eeqj.de/sneak/AutistMask/pulls/57 | | `fix/70-confirm-tx-contract-display` | superseded by `fix/confirm-tx-contract-display` | https://git.eeqj.de/sneak/AutistMask/pulls/74 closed as duplicate of the merged https://git.eeqj.de/sneak/AutistMask/pulls/73 | | `fix/77-confirm-tx-persist` | superseded by `fix/issue-77-confirm-tx-persist` | https://git.eeqj.de/sneak/AutistMask/pulls/81 closed as duplicate of the merged https://git.eeqj.de/sneak/AutistMask/pulls/79 | | `fix/cross-wallet-duplicate-detection` | superseded by `fix/issue-111-cross-wallet-dedup` | https://git.eeqj.de/sneak/AutistMask/pulls/117 closed as duplicate of the merged https://git.eeqj.de/sneak/AutistMask/pulls/115 | | `fix/issue-72-address-token-tx-history` | superseded by `fix/72-address-token-tx-history` | https://git.eeqj.de/sneak/AutistMask/pulls/75 closed as duplicate of the merged https://git.eeqj.de/sneak/AutistMask/pulls/76 | | `fix/issue-58-receive-address-consistency` | superseded by its own earlier commit | that commit merged as https://git.eeqj.de/sneak/AutistMask/pulls/69; the tip is the rival layout from https://git.eeqj.de/sneak/AutistMask/pulls/71, closed as duplicate | | `feat/issue-131-transaction-view-layout` | superseded by `fix/issue-131-transaction-view-reorder` | https://git.eeqj.de/sneak/AutistMask/pulls/132 closed as duplicate of the merged https://git.eeqj.de/sneak/AutistMask/pulls/133 | | `feature/show-private-key` | unlanded, kept | viewing the key landed through https://git.eeqj.de/sneak/AutistMask/pulls/31, but this branch's README clipboard policy section, which the owner asked for on https://git.eeqj.de/sneak/AutistMask/issues/19, is not in `next` | | `fix/consistent-error-display` | unlanded, kept | https://git.eeqj.de/sneak/AutistMask/pulls/88 was closed because https://git.eeqj.de/sneak/AutistMask/issues/87 was said to be covered by https://git.eeqj.de/sneak/AutistMask/pulls/92, which changed only the approve-tx and approve-sign errors; `next` still uses `export-privkey-flash`, `delete-wallet-flash` and `showFlash()` for these validation errors | | `fix/87-consistent-error-display` | unlanded, kept | https://git.eeqj.de/sneak/AutistMask/pulls/90, nearly the same change as https://git.eeqj.de/sneak/AutistMask/pulls/88 | | `fix/87-consistent-error-display-v2` | unlanded, kept | https://git.eeqj.de/sneak/AutistMask/pulls/96, the same change without the approve-tx part | Deleting the 17 landed and superseded branches from `origin` now. For triage: https://git.eeqj.de/sneak/AutistMask/issues/87 is closed, but its change never landed; the three error-display branches are versions of that one change, written against February's code. The clipboard policy section is the only part of `feature/show-private-key` missing from `next`. Model: opus-5-5
Author
Collaborator

The 17 landed and superseded branches above are deleted from origin. The four unlanded ones stay for triage, along with main, next, the head of the open #490, and issue-167-prune-branches for #491, which adds the TODO.md Completed Steps entry.

Model: opus-5-5

The 17 landed and superseded branches above are deleted from `origin`. The four unlanded ones stay for triage, along with `main`, `next`, the head of the open https://git.eeqj.de/sneak/AutistMask/pulls/490, and `issue-167-prune-branches` for https://git.eeqj.de/sneak/AutistMask/pulls/491, which adds the `TODO.md` Completed Steps entry. Model: opus-5-5
Author
Collaborator

Classification of the three branches on this issue's list that were deleted from origin on 2026-09-09, from their last commits, fetched by hash:

Branch Class Evidence
feat/message-signing (71f1d11) landed 9e45c75 in next is a later version of this commit (same author, author date, message and parent) and has every line 71f1d11 adds, except that next keeps transaction approvals, not only sign approvals, pending when the popup closes
fix/59-transaction-view-ui-policies (1df770d) landed #62 merged its first commit, 607d234; the tip 1df770d, not part of that merge, adds a plain-number rawValue to the swap Amount line and takes the token from the Token In line, the same fix 2fbed34 landed through #94
chore/token-list-enrichment (f7a2437) unlanded the owner's commit adding scripts/apply-enrichment.mjs, scripts/enrich-tokens.mjs and scripts/token-enrichment.json; none of the three is in next, only the token names and URLs they produced are in src/shared/tokenList.js (since aca8c4b); no pull request was opened from it

Restored: chore/token-list-enrichment is re-created on origin at f7a2437, so its work is kept. The two landed branches stay deleted.

For triage: chore/token-list-enrichment; whether to bring its tooling into the repo is the open question #495.

Model: opus-5-5

Classification of the three branches on this issue's list that were deleted from `origin` on 2026-09-09, from their last commits, fetched by hash: | Branch | Class | Evidence | | --- | --- | --- | | `feat/message-signing` (`71f1d11`) | landed | `9e45c75` in `next` is a later version of this commit (same author, author date, message and parent) and has every line `71f1d11` adds, except that `next` keeps transaction approvals, not only sign approvals, pending when the popup closes | | `fix/59-transaction-view-ui-policies` (`1df770d`) | landed | https://git.eeqj.de/sneak/AutistMask/pulls/62 merged its first commit, `607d234`; the tip `1df770d`, not part of that merge, adds a plain-number `rawValue` to the swap Amount line and takes the token from the Token In line, the same fix `2fbed34` landed through https://git.eeqj.de/sneak/AutistMask/pulls/94 | | `chore/token-list-enrichment` (`f7a2437`) | unlanded | the owner's commit adding `scripts/apply-enrichment.mjs`, `scripts/enrich-tokens.mjs` and `scripts/token-enrichment.json`; none of the three is in `next`, only the token names and URLs they produced are in `src/shared/tokenList.js` (since `aca8c4b`); no pull request was opened from it | Restored: `chore/token-list-enrichment` is re-created on `origin` at `f7a2437`, so its work is kept. The two landed branches stay deleted. For triage: `chore/token-list-enrichment`; whether to bring its tooling into the repo is the open question https://git.eeqj.de/sneak/AutistMask/issues/495. Model: opus-5-5
Author
Collaborator

feature/show-private-key (78c050e) is now superseded, not unlanded: viewing the key landed through #31 (the ExportPrivKey screen), and its README clipboard policy section, the only part missing, landed through #494 (the Clipboard paragraph under ExportPrivKey). Deleting it from origin now.

Model: opus-5-5

`feature/show-private-key` (`78c050e`) is now superseded, not unlanded: viewing the key landed through https://git.eeqj.de/sneak/AutistMask/pulls/31 (the ExportPrivKey screen), and its README clipboard policy section, the only part missing, landed through https://git.eeqj.de/sneak/AutistMask/pulls/494 (the Clipboard paragraph under ExportPrivKey). Deleting it from `origin` now. Model: opus-5-5
Sign in to join this conversation.
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: sneak/AutistMask#167