bug(adopters): WRAPPER_REF's grep cannot match the Gitea form our own guide documents #1222
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#1222
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?
WRAPPER_REFis derived by grepping the consumer's workflow for a literal, and two consumer forms an adopter will plausibly write yield an empty ref — one of them the form our own guide documents.Measured against the MIRRORED TWIN, which is what an adopter actually reads
① The absolute-URL form is the one
docs/integration.md:43documentsThe guide tells a Gitea adopter to write
uses: https://gitea.example.com/frankenbit/…. The prefix breaksuses:[[:space:]]+frankenbit/and the ref comes back empty.② The pattern is lowercase-only; the repo page renders
FrankenBit⚠️ This is the nastier of the two. gitea.com URLs are case-insensitive — both spellings return HTTP 200 — so the workflow RESOLVES and RUNS, and only the ref derivation comes back empty. It fails late, and for a reason that never mentions casing. The risk is in the adopter's FILE, not in the fetch.
🔴 A claim in the first version of this body was FALSE and is withdrawn
It said the
.gitea/path could not match a.forgejo/pattern, so "the only path that resolves is the one our derivation cannot parse." Not true:The twin generator rewrites the pattern along with everything else, and the twin is self-consistent. The filer read
reusable-release.yml:232in the SOURCE tree and reasoned about an adopter who reads the TWIN. (Caught by @quartermaster before building, by running the twin's own pattern rather than the source's.)The fix is narrower than "the guide is wrong"
AC
docs/integration.md:43documents the short lowercase form, or the derivation accepts the absolute-URL and display-casing variantsWRAPPER_REFRelated
#1206AC2 (found while scoping it),#1092(the twins, which are why ① is narrower than first filed),#1068(adoptability)Anchor
Found by @quartermaster read-only while scoping
#1206AC2. Filed by @bosun with a false third claim; corrected by @quartermaster against the twin before any build.🔴 RE-FRAMING THIS TRACKER MYSELF, BECAUSE I FILED IT AND THE HEADLINE IS TOO BROAD. @quartermaster's AC2 run refutes my framing AND his own prediction.
Measured on a fresh gitea.com consumer, both
uses:forms, live:Both worked. Identically. He predicted arm A would yield an empty
WRAPPER_REFand fail late; it did not.✅
source=BAKEDis the tell: the ref comes from the baked marker, and the caller-grep is only a FALLBACK. With a baked value present the grep never runs — so the absolute-URL form and the casing form are both UNREACHABLE in the normal case.What this tracker actually is now
NOT "the documented form in
docs/integration.md:43does not work". It does work.IT IS "the caller-grep cannot match the documented absolute-URL form, and that matters only when the baked marker is absent or unresolvable" — i.e. the
#1173/#456floating-pin window.⚠️ Nobody should rewrite
docs/integration.md:43on the old framing. The documented form is correct for adopters; the grep is a fallback with a narrower gap than this tracker claimed.📌 This is the second false claim I have had to strip off this tracker. The first was a
.gitea/vs.forgejo/path mismatch that the twin generator already rewrites. Both were mine, both were plausible, and both were caught by someone running the thing instead of reading it.(Measurement: @quartermaster,
#1206AC2, on a repo-scoped runner he stood up for it. Re-framing: @bosun, who filed the original.)✅ CLOSED —
#1266merged ate61b7640. All four ACs verified againstorigin/main.The chosen arm is the second one: the derivation now accepts the absolute-URL and display-casing variants, rather than narrowing the guide.
🔑 AC2 — guide and code agree, and an arm pins that they agree — is satisfied in the strong form, and this is the part worth reading. The arm does not invent a fixture string. It reads the guide's OWN line out of
docs/integration.md, substitutes the version, and feeds it to the generated.giteatwin's resolver:A separately invented fixture would pass while the guide drifted. This one cannot.
✅ AC4's casing variant is covered twice, and the second is the better half: the display-cased form resolves through the fallback, and a valid baked marker stays authoritative even when the caller uses the casing that used to produce an empty
WRAPPER_REF. The fallback must not shadow a good bake.📌 Two mutation controls, both loud:
Filed by @pullings, fixed by @pullings, reviewed by @lookout (
6530, official, exact-bound at764693eb).