release: stop shipping the basic-auth claim #56 removed as false #57
No reviewers
Labels
No labels
area:defold
area:docs
area:infra
area:protocol
area:testing
kind:bug
kind:chore
phase:breadth
phase:core
phase:hardening
phase:slice
No milestone
No project
No assignees
1 participant
Notifications
Due date
No due date set.
Dependencies
No dependencies set.
Reference
yuris/spacetimedb-defold!57
Loading…
Add table
Add a link
Reference in a new issue
No description provided.
Delete branch "feat/release-notes"
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?
release.ymlappends boilerplate to every release body, and that boilerplate asserted:#56 measured the opposite. The mechanism in that sentence is false:
https://user:token@…/archive/v0.1.0.zip→ 200, serves the archive?token=<bad-token>→ 401So the 404 the claim was built on meant "no such repo", not "basic auth refused".
The README was corrected in #56. This file would have republished the same sentence in the v1.0.0 release notes — which is the one place a consumer reads before they have the README, since
release.ymlturns the tag annotation into the release body. Same replacement wording as the README now carries: the query token is what the archive endpoint validates, and URL credentials are handled inconsistently rather than rejected.Found while auditing
release.ymlimmediately before cutting the tag. Two other things were checked and are not bugs:run: |baseline, so the appended markdown lands at column 0. Confirmed against v0.1.0's published body, which is not indented — an earlier read suggested it might render as a code block, and it does not.git tag --formatis deliberate and correct; the comment at:27-29explains that this runner's checkout produces a lightweight tag.No behaviour change to the workflow itself, and nothing in
stdb/. Suite and both conformance tiers are green onmainat86761ceindependently of this.d31ab18d6ed3ba750cdaReview — automated reviewer, posted for the record
Hunk correct and evidence-backed. Safe to fire on a tag push — one mutating call, fails closed on every read error, a 409 on re-run leaves an existing release untouched. But two more lines were needed in the same file, and one was a high-severity content defect. Both since applied in
d3ba750.The claim, re-derived and then localised precisely
All four observations reproduced against Forgejo 15.0.1: public archive anonymous 200 (57,220 B), with basic auth in the URL 200 and byte-identical,
?token=<bad>401, nonexistent repo 404 with and without basic auth.Then the decisive test, which is better than the PR's own framing — a real account with the wrong password:
/archive/v0.1.0.zip/api/v1/repos/…user's password is invalid [uid: 1, name: yuris]/….git/info/refsCredentials are incorrect or have expiredSo the basic-auth middleware runs on the API and git-http routes but not on
/archive. Credentials there are discarded, not mishandled — while?token=andAuthorization: tokenare consulted on that same route, both 401 on a bad value even for a public repo.That makes "handled inconsistently" honest about the forge but misleading about the endpoint the sentence is actually about, where behaviour is perfectly consistent: ignored. Replaced with the precise version.
Untested and stated as such: there is no private repo on this forge, so the private case — which is what the sentence is about — rests on inference (discarded credentials → anonymous → Forgejo hides private repos → 404). That inference reconciles both readings of the same 404 but is not a measurement. The wording does not over-claim; if anything it under-claims, since on the public path credentials are not unreliable, they are inert.
Both claimed non-bugs confirmed
Indentation.
:23sets the block-scalar baseline at 10 spaces and every boilerplate line is at exactly 10 (no tabs), so v0.1.0's published body has## Use as a Defold libraryand the fence at column 0. The annotation's own 2-space bullets survive, 2 spaces being no fence. Bonus from the same fetch: v0.1.0's live body carries the false sentence verbatim — the defect already shipped once.API vs
git tag. v0.1.0 is a real annotated tag;.messageis 637 chars and the junction renders as exactly one blank line. Nit, since fixed: the comment blamed "this runner's checkout", but the job has no checkout step at all. The real conclusion is stronger —git tagwould fail outright, not return the wrong thing.Findings
:48-49. The boilerplate told every consumer to add both URLs unconditionally, whileREADME.md:117-119tells HTML5 consumers to remove that exact 4.2.3 URL. New for v1.0.0:patches/did not exist at v0.1.0 (raw/tag/v0.1.0/patches/…404 while the README 200s), so v0.1.0's boilerplate was correct and v1.0.0's is the first that misdirects. Fixed.:30-31..message // ""yields""for{"message":""},{"message":null}and{}alike, rc 0, no abort. An unannotated tag would publish a boilerplate-only body and exit green. Fixed with a guard; verified it exits 1.:61.-X POSTwith-Lre-POSTs the body across a 3xx, and-f -sdiscards the error body so a 409/422 prints nothing. Fixed:--fail-with-body,-Ldropped.Audit of the rest
Verified good: the header's claim that
/archive/<ref>.zipresolves without a release object (200 formainand for a bare sha);DEP_URLbyte-identical toREADME.md:187; the 4.2.3 URL matchinggame.project:4;connectsurviving #55's renames;draft:false/prerelease:falsecorrect and matching v0.1.0.jq -n --arground-trips byte-identically — 1338/1338 on a hostile multi-paragraph annotation carrying backticks, a fenced block, a backslash,$HOME, quotes, a tab, and non-ASCII.No half-publish path exists: exactly one mutating call, a failed tag read aborts at
curl -f(verified exit 22) before any POST, and a duplicate release 409s leaving the existing one untouched.