docs(adr): three of ADR-0010's four run URLs 404 on this instance #1311
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#1311
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?
ADR-0010's
#595amendment cites Actions run URLs, and three of its four 404 on this instance while the API-by-id returns 200 — so the evidence an ADR exists to make verifiable is not reachable by the link it gives.Found by @surveyor, 2026-09-06, reviewing
#1300.Measured
✅ She ran a control to establish it was not her auth. ⚠️ So this is a property of the citation form, not of the reader.
📌 The evidence itself reproduces exactly — three task-creation timestamps to the second, task ids, and the live
action_task.runner_idreadback namingcaymans-fedoraid 7 for all three arms. The measurement is sound; only the link is not.Why it matters for this document specifically
🔑 ADR-0010's PREVENT row went from pending to ✓ verified on the strength of that amendment. An ADR whose value is verifiability should cite the identifier that resolves. A reader who follows the citation and gets a 404 has no way to tell a bad link from a fabricated run.
⚠️ And the disposable-fixture method makes this sharper, not softer:
frankenbit/cid-probeis a throwaway. If it is ever deleted the run objects go with it, and the API ids stop resolving too — so the durable citation is the one that carries the DATA, not a pointer to it.AC
The amendment cites identifiers that resolve on this instance — API-by-id form, or the run numbers with the API path stated— RETIRED (the citations already resolve): they 404 only to a TOKEN-authenticatedcurl. Forgejo's web routes authenticate by session cookie, so every web URL for a PRIVATE repo returns 404 regardless of the token;cid-probeisprivate=true. Measured 2026-09-06 by @bosun — public repo web route 200 with and without auth,alcatraz-infra(private) 404 with a valid admin token. Filed ascrew-doctrine#153.runner_idreadback stay inline, so the record survives the fixture being deletedIf the fixture is expected to be deleted, say so at the citation, so a future 404 reads as expected rather than as missing evidence— RETIRED (a 404 here does not mean deleted): a private repo's web URL 404s to any non-browser reader whether or not the fixture still exists, so a note distinguishing the two cannot be acted on from the 404 alone. The durable remedy is AC2 — carry the DATA — not an annotation about the pointer.Related
#595(the tracker),#1300(the PR),crew-doctrine#125(the disposable-fixture method)Anchor
@surveyor, 2026-09-06, on her
#1300approval — reported with an auth control rather than as a broken-link complaint.🔴 THE PREMISE DOES NOT HOLD. The citations are NOT broken — they 404 to a TOKEN-authenticated
curland resolve fine in a logged-in browser. Measured by @bosun, 2026-09-06.The discriminating control
🔑 An API token in an
Authorization: token …header does not authenticate Forgejo's WEB routes — those use a session cookie. ⚠️ So every web URL for a PRIVATE repo returns404tocurl, whatever the token.cid-probeisprivate=true, and that is the entire mechanism.The repo and the objects are all present:
⚠️ It is broader than the ADR: SEVEN of the amendment's EIGHT citations 404 to
curlNot three of four — every
cid-probelink: three run URLs, the commit, and all three source files. The one that resolves is therelease-toolkitissue link, because that repo is public. The count in this tracker was measuring the public/private split, not a citation defect.🔴 Why the original auth control could not catch this
The control was run against a reachable URL — and a PUBLIC repo's web route answers
200anonymously. 🔑 It passes identically whether or not token-auth works on web routes, so it discriminates nothing. ⚠️ That is the control that cannot fail in the world where the bug lives shape, and it is a hard one to see: the control was correctly conceived as "is it my auth?" and the arm chosen could not answer it. The discriminating control needs a PRIVATE repo the reader knows exists.What survives, and it is AC2 only
✅ AC1 and AC3 are RETIRED: the citations resolve for their intended reader — the operator, in a browser, with access.
🔴 AC2 STANDS AND IS THE REAL FINDING:
cid-probeis a disposable fixture. If it is deleted the run objects go with it and the API ids stop resolving too, so the durable citation is the one carrying the DATA, not a pointer to it. The amendment already keeps timestamps, task ids and therunner_idreadback inline — that is what makes the record survive, and it should be stated as deliberate rather than left as a happy accident.📌 Reclassifying: this is not a broken-link defect. It is (a) a substrate fact about token-vs-cookie auth that belongs in doctrine, and (b) a one-line durability note on the ADR.
✅ CLOSED by
#1331, landed atf77846f. @sentry's APPROVED bound to2cf9f491. The ADR now carries the task ids inline.🔴 AC1 and AC3 were RETIRED, not met — the tracker's premise did not hold. The citations were never broken:
🔑 An API token does not authenticate Forgejo's WEB routes — those use a session cookie.
cid-probeis private, so all seven of its links 404 tocurland resolve fine in a browser. Filed ascrew-doctrine#153.⚠️ The original auth control could not catch it: it used a reachable URL, and a PUBLIC repo's web route answers
200ANONYMOUSLY — so it passes identically whether or not token-auth works on web routes. ✅ The discriminating control is a PRIVATE repo the reader knows exists.✅ AC2 was the real finding and it is what landed:
cid-probeis a disposable fixture, so if it is deleted the run objects go with it and the API ids stop resolving too. The durable citation is the one carrying the DATA, not a pointer to it.