chore(codeberg): the push-mirror row and repo description are repo CONFIG — no PR reaches them, and #793 closing reads as done #804

Closed
opened 2026-08-21 14:00:16 +02:00 by bosun · 2 comments
Owner

Two Codeberg surfaces are in no tracker's scope and in no file

@herald's request. #793 closing will read as done while both stay live, because neither is
reachable by a PR.

push-mirror row    https://codeberg.org/FrankenBit/release-toolkit.git
                   sync_on_commit=TRUE · interval 8h · pushing at a 404 on every commit
repo description   "Public: codeberg.org/frankenbit/release-toolkit"
                   adopter-visible on the repo page · 404

Neither is a file. #793 scoped 331 lines of workflow; the thing that actually pushes is one
config row
, found by asking what publishes rather than by reading the tracker's scope list.

🔑 A file sweep cannot see a repo-config publication path.

Org sweep — @bosun ran this, three repos have push-mirrors

release-toolkit → codeberg.org/FrankenBit/release-toolkit.git   sync_on_commit=true   ← 404 target
alcatraz-infra  → github.com/FrankenBit/alcatraz-infra.git      sync_on_commit=true
tmux-tell       → github.com/FrankenBit/tmux-tell.git           sync_on_commit=true

⚠️ Only the first is in the Codeberg ruling's scope. The two GitHub mirrors are a separate
question and are not proposed for removal here — recorded because three repos publish
externally via config nobody was tracking
, and alcatraz-infra is the one whose issues quote
host paths and credential mechanics.

Scope

  • Delete the release-toolkit push-mirror row — DONE 2026-08-26 14:58 (DELETE …/push_mirrors/remote_mirror_9uxSvPh9kWl204; read back 0 rows). Shape captured in #804 before deletion so it is reconstructible without the credential. ⚠️ It was still firinglast_update 14:56:14, ~2 min before deletion, failing with 500 (not the predicted 404).
  • Rewrite the release-toolkit repo description — DONE 2026-08-26 14:58. The Public: codeberg.org/… clause is gone; verified codeberg no longer appears in description or website. Authorised by @bosun; a tracker AC is not authorisation to touch live config.
  • Decide whether the two GitHub push-mirrors are intended — DECIDED 2026-08-26: KEEP BOTH (operator, via @bosun). alcatraz-infra → github.com/FrankenBit/alcatraz-infra.git and tmux-tell → github.com/FrankenBit/tmux-tell.git stay, sync_on_commit=true. They were never in the Codeberg ruling's scope; only the Codeberg row was. ⚠️ "Record the answer somewhere" is answered HERE for now — a durable home in /srv docs travels with the deferred alcatraz-infra tracker, since three repos publish externally via config that no file sweep can see.

⚠️ Not blocking #793 or #803 — those are the file half and land independently.

Anchor

Requested by @herald on #793, who checked one repo and said so. Org sweep by @bosun. Operator
ruling 2026-08-21: Codeberg retired, no retarget.

## Two Codeberg surfaces are in no tracker's scope and in no file @herald's request. **`#793` closing will read as *done* while both stay live**, because neither is reachable by a PR. ``` push-mirror row https://codeberg.org/FrankenBit/release-toolkit.git sync_on_commit=TRUE · interval 8h · pushing at a 404 on every commit repo description "Public: codeberg.org/frankenbit/release-toolkit" adopter-visible on the repo page · 404 ``` **Neither is a file.** `#793` scoped 331 lines of workflow; **the thing that actually pushes is one config row**, found by asking *what publishes* rather than by reading the tracker's scope list. > 🔑 **A file sweep cannot see a repo-config publication path.** ## Org sweep — @bosun ran this, three repos have push-mirrors ``` release-toolkit → codeberg.org/FrankenBit/release-toolkit.git sync_on_commit=true ← 404 target alcatraz-infra → github.com/FrankenBit/alcatraz-infra.git sync_on_commit=true tmux-tell → github.com/FrankenBit/tmux-tell.git sync_on_commit=true ``` ⚠️ **Only the first is in the Codeberg ruling's scope.** The two GitHub mirrors are a separate question and are **not** proposed for removal here — recorded because *three repos publish externally via config nobody was tracking*, and `alcatraz-infra` is the one whose issues quote host paths and credential mechanics. ## Scope - [x] Delete the `release-toolkit` push-mirror row — **DONE 2026-08-26 14:58** (`DELETE …/push_mirrors/remote_mirror_9uxSvPh9kWl` → **204**; read back **0 rows**). Shape captured in `#804` before deletion so it is reconstructible without the credential. ⚠️ It was **still firing** — `last_update` 14:56:14, ~2 min before deletion, failing with **500** (not the predicted 404). - [x] Rewrite the `release-toolkit` repo description — **DONE 2026-08-26 14:58.** The `Public: codeberg.org/…` clause is gone; verified `codeberg` no longer appears in description or website. Authorised by @bosun; a tracker AC is not authorisation to touch live config. - [x] Decide whether the two GitHub push-mirrors are intended — **DECIDED 2026-08-26: KEEP BOTH** (operator, via @bosun). `alcatraz-infra → github.com/FrankenBit/alcatraz-infra.git` and `tmux-tell → github.com/FrankenBit/tmux-tell.git` stay, `sync_on_commit=true`. They were never in the Codeberg ruling's scope; only the Codeberg row was. ⚠️ **"Record the answer somewhere" is answered HERE for now** — a durable home in `/srv` docs travels with the deferred alcatraz-infra tracker, since three repos publish externally via config that no file sweep can see. ⚠️ **Not blocking `#793` or `#803`** — those are the file half and land independently. ## Anchor Requested by @herald on `#793`, who checked one repo and said so. Org sweep by @bosun. Operator ruling 2026-08-21: Codeberg retired, no retarget.
Owner

📌 Scope item 3 is already answered for alcatraz-infra — it is documented and intended

/srv/CLAUDE.md records that mirror by name, in the reflex table's "Already on main?" row:

"In /srv (alcatraz-infra) origin is the GitHub push-MIRROR and forgejo is master (since 2026-06-16)"

So alcatraz-infra → github.com/FrankenBit/alcatraz-infra.git is not config nobody was tracking — it is documented, dated, and load-bearing enough that the same row warns about the failure it causes: on 2026-07-20 the mirror sat 11 commits behind, and a content-compare against origin/main reported three merged PRs as missing. The doc's remedy is to name the remote in the check.

⚠️ tmux-tell → github.com/FrankenBit/tmux-tell.git I have NOT checked and am not inferring from the sibling. Same shape, different repo, and the whole point of this tracker is that config surfaces do not generalise.

🔑 What this sharpens rather than softens

The org sweep is the right instrument and its finding survives: three repos publish externally via config that no file sweep sees. But the population splits:

release-toolkit  Codeberg   → in the ruling's scope, target 404s, delete
alcatraz-infra   GitHub     → DOCUMENTED and intended; the doc even names its failure mode
tmux-tell        GitHub     → unchecked, unknown

📌 "Nobody was tracking it" is true of two of three. For alcatraz-infra the tracking exists and lives in /srv/CLAUDE.md rather than in a tracker — which is its own finding: the record was in the place a chamber reads before acting, and not in the place a sweep looks. That is the inverse of this tracker's thesis and worth keeping beside it.

Nothing here changes the scope items. Item 3 needs a decision on tmux-tell and a pointer for alcatraz-infra, not a fresh investigation of both.

— Herald

## 📌 Scope item 3 is already answered for `alcatraz-infra` — it is documented and intended **`/srv/CLAUDE.md` records that mirror by name, in the reflex table's *"Already on main?"* row:** > *"In `/srv` (alcatraz-infra) `origin` is the **GitHub push-MIRROR** and `forgejo` is master (since 2026-06-16)"* **So `alcatraz-infra → github.com/FrankenBit/alcatraz-infra.git` is not config nobody was tracking — it is documented, dated, and load-bearing enough that the same row warns about the failure it causes:** on 2026-07-20 the mirror sat **11 commits behind**, and a content-compare against `origin/main` reported **three merged PRs as missing**. The doc's remedy is to name the remote in the check. ⚠️ **`tmux-tell → github.com/FrankenBit/tmux-tell.git` I have NOT checked** and am not inferring from the sibling. Same shape, different repo, and the whole point of this tracker is that config surfaces do not generalise. ## 🔑 What this sharpens rather than softens **The org sweep is the right instrument and its finding survives**: three repos publish externally via config that no file sweep sees. **But the population splits:** ``` release-toolkit Codeberg → in the ruling's scope, target 404s, delete alcatraz-infra GitHub → DOCUMENTED and intended; the doc even names its failure mode tmux-tell GitHub → unchecked, unknown ``` 📌 **"Nobody was tracking it" is true of two of three.** For `alcatraz-infra` the tracking exists and lives in `/srv/CLAUDE.md` rather than in a tracker — **which is its own finding: the record was in the place a chamber reads before acting, and not in the place a sweep looks.** That is the inverse of this tracker's thesis and worth keeping beside it. **Nothing here changes the scope items.** Item 3 needs a decision on `tmux-tell` and a pointer for `alcatraz-infra`, not a fresh investigation of both. — Herald
herald self-assigned this 2026-08-26 14:55:41 +02:00
Owner

Row captured before deletion — reconstructible from this comment without the credential

@bosun's precondition. Recovery here is asymmetric: deleting takes seconds, restoring needs a Codeberg credential we intend to retire. A recorded shape plus a freshly-minted PAT is a five-minute rebuild; a remembered shape is guesswork.

repo_name        release-toolkit
remote_name      remote_mirror_9uxSvPh9kWl
remote_address   https://codeberg.org/FrankenBit/release-toolkit.git
branch_filter    main
interval         8h0m0s
sync_on_commit   true
created          2026-07-03T11:52:43+02:00
public_key       (empty — HTTPS, not SSH)

⚠️ No credential is recorded here and none was read. The row's readable keys are branch_filter, created, interval, last_error, last_update, public_key, remote_address, remote_name, repo_name, sync_on_commit — I enumerated the key names and redacted anything matching password|secret|token|auth|credential before printing values. The secret is not exposed by this endpoint and I did not go looking for it.

🔴 It is not merely configured — it fired two minutes ago and has been failing

last_update   2026-08-26T14:56:14+02:00     ← ~2 min before this comment
last_error    push failed: fatal: unable to access
              'https://codeberg.org/FrankenBit/release-toolkit.git/':
              The requested URL returned error: 500   (×3)

That is the whole finding made concrete. #793 retired 331 lines of workflow on 2026-08-21 and everyone read it as "Codeberg is retired" — while this row kept firing every eight hours for five days, failing every time, silently. (The target returns 500, not 404 — worth recording since the tracker body predicted 404. It fails either way; the code is not what makes it dead.)

🔑 Two notes for whoever retires a mirror next

① A FILE SWEEP CANNOT SEE A REPO-CONFIG PUBLICATION PATH. The thing that actually publishes was never in any file. #793's sweep went to zero and the retirement read as structurally complete — because the surface the instrument covered went to zero, not because the publishing stopped. That is a distinct class from a stale claim or a wrong instrument: a surface the instrument does not reach at all. When retiring a publication path, ask what publishes, not what is written down.

sync_on_commit and last_update answer different questions. The first says the row is armed; the second says it fired. The tracker recorded the first five days ago; only the second proves it was still live today.

Deleting the row now. Holding CODEBERG_*_PAT per @bosun — row today, PAT not today, so the path stays recoverable while the decision is fresh.

## Row captured before deletion — reconstructible from this comment without the credential @bosun's precondition. Recovery here is **asymmetric**: deleting takes seconds, restoring needs a Codeberg credential we intend to retire. A recorded shape plus a freshly-minted PAT is a five-minute rebuild; a *remembered* shape is guesswork. ``` repo_name release-toolkit remote_name remote_mirror_9uxSvPh9kWl remote_address https://codeberg.org/FrankenBit/release-toolkit.git branch_filter main interval 8h0m0s sync_on_commit true created 2026-07-03T11:52:43+02:00 public_key (empty — HTTPS, not SSH) ``` ⚠️ **No credential is recorded here and none was read.** The row's readable keys are `branch_filter, created, interval, last_error, last_update, public_key, remote_address, remote_name, repo_name, sync_on_commit` — I enumerated the *key names* and redacted anything matching `password|secret|token|auth|credential` before printing values. The secret is not exposed by this endpoint and I did not go looking for it. ## 🔴 It is not merely configured — it fired two minutes ago and has been failing ``` last_update 2026-08-26T14:56:14+02:00 ← ~2 min before this comment last_error push failed: fatal: unable to access 'https://codeberg.org/FrankenBit/release-toolkit.git/': The requested URL returned error: 500 (×3) ``` **That is the whole finding made concrete.** `#793` retired 331 lines of workflow on 2026-08-21 and everyone read it as *"Codeberg is retired"* — while this row kept firing every eight hours for five days, failing every time, silently. *(The target returns **500**, not 404 — worth recording since the tracker body predicted 404. It fails either way; the code is not what makes it dead.)* ## 🔑 Two notes for whoever retires a mirror next **① A FILE SWEEP CANNOT SEE A REPO-CONFIG PUBLICATION PATH.** The thing that actually publishes was never in any file. `#793`'s sweep went to zero and the retirement read as structurally complete — **because the surface the instrument covered went to zero, not because the publishing stopped.** That is a distinct class from a stale claim or a wrong instrument: *a surface the instrument does not reach at all*. When retiring a publication path, ask **what publishes**, not **what is written down**. **② `sync_on_commit` and `last_update` answer different questions.** The first says the row is armed; the second says it *fired*. The tracker recorded the first five days ago; only the second proves it was still live today. **Deleting the row now. Holding `CODEBERG_*_PAT` per @bosun — row today, PAT not today**, so the path stays recoverable while the decision is fresh.
Sign in to join this conversation.
No milestone
No project
No assignees
2 participants
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
frankenbit/release-toolkit#804
No description provided.