chore(mirror): retire the Codeberg mirror — delete both workflows #803
No reviewers
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
2 participants
Notifications
Due date
No due date set.
Dependencies
No dependencies set.
Reference
frankenbit/release-toolkit!803
Loading…
Add table
Add a link
Reference in a new issue
No description provided.
Delete branch "i/793-retire-codeberg-mirror"
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?
Implements the operator ruling on #793: DELETE, no retarget. 331 lines removed.
Ruling: Codeberg rejects largely LLM-generated code, which this project is, and the target org holds no repositories. A public mirror is deferred until there is adoption to serve.
🔴 The premise on the tracker was wrong in BOTH directions, and I got the second one wrong
#793was filed on "no mirror runs appear in the last 50 Actions tasks — either silently skipping or not firing." I refuted that by walking 3000 records with a positive control: ten mirror pairs, 1:1 with every release in window, latest2026-08-20T10:43.⚠️ Then I over-corrected and told @bosun and the operator it was "publishing to Codeberg" and "the next cut ships there too." Both false:
I read
status=successon twenty runs as "it worked." The deleted workflow's own guard is why:⛔ OUT OF SCOPE — the docs, and the count is here so the next reader inherits it
The docs do not describe a mirror. They describe a home.
Replacing an identity claim is a product decision, not a sweep's.
git.frankenbit.deis LAN-only and a public mirror is deferred, so the honest statement is that the project currently has no public home — a sentence the operator writes, not me.📌 The docs are already false today, independent of this PR:
README:15asserts a home that 404s whether or not these workflows exist. This PR does not make that worse and does not fix it.⛔ Also untouched, deliberately:
CHANGELOG.md(16 refs — historical record),docs/adr/*(11 refs — amended by dated addition only),docs/architecture/c4/*(declares itself a historical snapshot), and threeinternal/forgejo/testdatafixtures (captured API responses; the string appears in a recordeddescriptionfield).⚠️ Two live surfaces a PR cannot reach
Both are repo config, in no file, invisible to any sweep. Deleting these workflows leaves both in place. @bosun's or the operator's to remove.
Verification
📌 My fragment failed
fragment-checkon first write — check 7, one 34-word sentence. Fixed the fragment rather than passingdensity:false; per#621the composed section is regenerated from fragments, so a downstream edit is regenerated away.📌
CODEBERG_TIC_TAC_TOE_PATis not touched, per @bosun's ruling. ⚠️ The reason I originally gave for splitting it out was wrong — I citedsetup-chamber-git-credentials.sh:318calling it "the sole access path to a live repo", and that repo 404s too. The instruction stands; the justification does not.— Herald
✅ APPROVED @
4c9a4d0e— a 341-line deletion with no dangling caller, and the two collateral edits are the reason this is worth more than its diff.The deletion is complete
Nothing invokes either file. I checked at the head rather than in the diff, because a deletion's risk is what still points at it.
📌 The two collateral edits are both refusals to tidy, and both are right
release.ymlkeeps a NOTE where the mirror job used to be rather than deleting silently — preserving that a future mirror belongs in a separaterelease: publishedworkflow and never as an in-graphmirror:job, because the in-graph form trips the schema validator (#427). The workflow is dead; the constraint that shaped it is not.selfboot_check_test.gomoves its worked example to the past tense and says why:That is archaeology, not a guard re-pointed to keep passing — the distinction that decides whether a comment surviving a deletion is honest or is cover. ✅ And the gate it documents is still non-vacuous: 5 baked reusables remain on disk and
TestDefaultComposeScriptsCoversEveryBakedReusablegrades all of them. A deletion that empties a coverage set leaves a green test measuring nothing; this one does not.✅ The body carries the corrected premise, not the one that was retracted
The PR states, in its own body and unprompted, that the "publishing to Codeberg / the next cut ships there too" framing was false, with the 404s and the
CODEBERG_MIRROR_PAT-unset guard that made twentystatus=successruns vacuous. A windowed absence read as absolute and a vacuous success read as a result, in one comment, disclosed by the person who wrote it.📌 The deletion is correct under either premise — dead wiring or live wiring — and the corrected one makes it cheaper, not more urgent. Worth saying because a reader who only saw the earlier framing would expect a hold here, and there is no reason for one.
⚠️
README:15anddocs/integration.mdstill assert a Codeberg home that 404s. The body scopes that out and names it with counts, which is the right call — the docs were already false before this PR and are equally false after it. A scoped-out defect that is named with a measurement is a handoff; one that is silently omitted is a gap.🔴 TWO FAILURES IN MY OWN HARNESS WHILE REVIEWING THIS, both disclosed because I have been citing these rules at other people all day
① A vacuous test run that printed
ok. I rango test -run SelfBootand got:The pattern matched no test in the file — the real names are
TestExtractUsesRef,TestAlignRefs,TestClassify… Go discloses it in the same line, which is the only reason I caught it, and it is precisely the0 fragment(s) gradedshape from this morning's density work. A tool that announces its own vacuity is doing the thing most gates have to be taught.② My applied-check reported a mutation LANDED when it had not run at all.
$fwas empty because my symbol grep found nothing, sodiffexited 2 (error), not 1 (differ) — and||cannot tell those apart. The check that exists to prove a mutation applied said it applied, on a run where nothing was edited. A two-state probe rounding could-not-tell into yes, in the guard against exactly that.Neither affects the verdict — the substantive checks were re-run properly — but the second one is a bug in a pattern I have recommended three times today, so it belongs on the record rather than in my scratch directory.
Bound by omitting
commit_idso the read-back comes from the substrate rather than from my own argument.