fix(gitmirrors): zot-src backs up a branch that does not exist #636

Merged
binjovi-bot merged 1 commit from fix/zot-src-branch-filter into trunk 2026-09-11 12:34:54 +00:00
Owner

sean/zot-src has not been backed up since 2026-09-11T04:49:51Z. Forgejo's own push mirror row carries the reason:

error: src refspec refs/heads/seanfarm does not match any

The patch branch was created as seanfarm and later renamed to trunk, the name the rest of the fleet uses. The branchFilter never followed.

A push mirror fails atomically, so naming one absent branch did not cost that branch — it stopped main being backed up as well. Same failure that took 11 of 28 repositories on 2026-08-11, and the file's own comment states the rule it broke:

Every branch named here MUST exist in Forgejo, or the whole push fails atomically.

Measured on the source before changing it — zot-src has exactly:

main
trunk
perf/authorized-blob-mount

Nothing was lost

Worth recording, because this repository is a fork whose patches exist nowhere else. Codeberg someara/zot-src still holds the pre-rename branch:

ref commit
refs/heads/main b689b062 matches Forgejo main
refs/heads/seanfarm 97d35c01 exactly what Forgejo now calls trunk

After this lands the backup carries main, trunk, and that orphan seanfarm at the same commit as trunk. The orphan is left alone rather than deleted — it costs nothing, and removing a branch from a backup to tidy it is not a trade this repository makes.

How it was found

Every guard here reads the tree, and the tree was self-consistent: the CR said main,seanfarm and Forgejo's live mirror said main,seanfarm too. What disagreed was the source repository — which no hermetic guard can see. tests/gitmirror-fleet.sh says as much itself: "this checks declared state only; delivery proof uses exact remote refs."

This came out of measuring the whole fleet while migrating mirror ownership to binjovi: 38 mirrors, every branch of every filter resolved against its source. This is the only one that does not exist.

The same sweep found ory carrying a day-stale PushRejected for a divergence that had already resolved — both sides at 62cfd679. A no-op resync cleared it, no change needed.

Note for the reviewer

Forgejo has no PATCH for a push mirror, so forgejo-operator can only converge this by delete-and-recreate. Whether it does is worth watching after this deploys: if the live row still reads main,seanfarm, the operator cannot converge a mirror at all, which matters for the migration work in flight.

https://claude.ai/code/session_01TdW5FSvRJW8CtGnpd29Xp8

`sean/zot-src` has not been backed up since `2026-09-11T04:49:51Z`. Forgejo's own push mirror row carries the reason: ``` error: src refspec refs/heads/seanfarm does not match any ``` The patch branch was created as `seanfarm` and later renamed to `trunk`, the name the rest of the fleet uses. The `branchFilter` never followed. **A push mirror fails atomically**, so naming one absent branch did not cost that branch — it stopped `main` being backed up as well. Same failure that took 11 of 28 repositories on 2026-08-11, and the file's own comment states the rule it broke: > Every branch named here MUST exist in Forgejo, or the whole push fails atomically. Measured on the source before changing it — `zot-src` has exactly: ``` main trunk perf/authorized-blob-mount ``` ## Nothing was lost Worth recording, because this repository is a fork whose patches exist nowhere else. Codeberg `someara/zot-src` still holds the **pre-rename** branch: | ref | commit | | |---|---|---| | `refs/heads/main` | `b689b062` | matches Forgejo `main` | | `refs/heads/seanfarm` | `97d35c01` | exactly what Forgejo now calls `trunk` | After this lands the backup carries `main`, `trunk`, and that orphan `seanfarm` at the same commit as `trunk`. The orphan is **left alone** rather than deleted — it costs nothing, and removing a branch from a backup to tidy it is not a trade this repository makes. ## How it was found Every guard here reads the tree, and **the tree was self-consistent**: the CR said `main,seanfarm` and Forgejo's live mirror said `main,seanfarm` too. What disagreed was the source repository — which no hermetic guard can see. `tests/gitmirror-fleet.sh` says as much itself: *"this checks declared state only; delivery proof uses exact remote refs."* This came out of measuring the whole fleet while migrating mirror ownership to binjovi: 38 mirrors, every branch of every filter resolved against its source. **This is the only one that does not exist.** The same sweep found `ory` carrying a day-stale `PushRejected` for a divergence that had already resolved — both sides at `62cfd679`. A no-op resync cleared it, no change needed. ## Note for the reviewer Forgejo has no PATCH for a push mirror, so forgejo-operator can only converge this by delete-and-recreate. Whether it does is worth watching after this deploys: if the live row still reads `main,seanfarm`, the operator cannot converge a mirror at all, which matters for the migration work in flight. https://claude.ai/code/session_01TdW5FSvRJW8CtGnpd29Xp8
fix(gitmirrors): zot-src backs up a branch that does not exist
All checks were successful
binjovi/ci Binjovi completed the frozen plan
2fc3c57791
`sean/zot-src` has not been backed up since 2026-09-11T04:49:51Z. Forgejo's own
push mirror row carries the reason:

  error: src refspec refs/heads/seanfarm does not match any

The patch branch was created as `seanfarm` and later renamed to `trunk`, the name
the rest of the fleet uses. The branchFilter never followed. A push mirror fails
ATOMICALLY, so naming one absent branch did not cost that branch -- it stopped
`main` being backed up as well. This is the same failure that took 11 of 28
repositories on 2026-08-11, and the file's own comment states the rule it broke:
"Every branch named here MUST exist in Forgejo, or the whole push fails
atomically."

The declaration now names main,trunk. Measured on the source before changing it:
zot-src has exactly `main`, `trunk` and `perf/authorized-blob-mount`.

NOTHING WAS LOST, which is worth recording because the repository is a fork whose
patches exist nowhere else. codeberg someara/zot-src still holds the pre-rename
branch: `seanfarm` sits at 97d35c01, which is exactly what Forgejo now calls
`trunk`. After this lands the backup carries main, trunk, and that orphan
seanfarm at the same commit as trunk. The orphan is left alone rather than
deleted -- it costs nothing and removing a branch from a backup to tidy it is not
a trade this repository makes.

FOUND BY MEASURING DELIVERY, NOT DECLARATION. Every guard here reads the tree,
and the tree was self-consistent: the CR said main,seanfarm and Forgejo's live
mirror said main,seanfarm too. What disagreed was the source repository. The
whole fleet was checked the same way while migrating mirror ownership to binjovi:
38 mirrors, every branch of every filter resolved against its source, and this is
the only one that does not exist.

Claude-Session: https://claude.ai/code/session_01TdW5FSvRJW8CtGnpd29Xp8
binjovi-bot deleted branch fix/zot-src-branch-filter 2026-09-11 12:34:54 +00:00
Sign in to join this conversation.
No reviewers
No labels
No milestone
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set

Reference
sean/seanfarm!636
No description provided.