docs(#933): document the /rt coupling at the line that creates it #939
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
3 participants
Notifications
Due date
No due date set.
Dependencies
No dependencies set.
Reference
frankenbit/release-toolkit!939
Loading…
Add table
Add a link
Reference in a new issue
No description provided.
Delete branch "i/933-document-the-rt-coupling"
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?
Requested by @surveyor on the #935 review. Comment only — no behaviour.
The gap
#935 made
publish-imageextract/rtfrom the image withdocker cp, because that runner has no Go and no curl. The contract was recorded only ingoreleaser.yml— at the line that CONSUMES it. Anyone moving theCOPYdestination in the Dockerfile had nothing in front of them.🔑 Her framing, and it is my own line turned back on me: an undefended correct choice is the one somebody helpful converts to the wrong one. The
CGO_ENABLED=0marker eight lines up is exactly this, already done well — "LOAD-BEARING, NOT A BUILD PREFERENCE" — and it works. This gives theCOPYthe same protection.Verified
fragment-checkrc=0·register-checkrc=0· fragment checked againstExtractSummary(ok=true, 13 words) rather than by eye.📌 Why the coupling is worth documenting rather than removing
@surveyor's deciding reason on #935 is better than the one I gave, and it belongs on the record here: the comparison is not coupled vs uncoupled, it is coupled-and-EXERCISED versus coupled-and-LATENT.
go buildsat broken from the day it landed because the 401 in front of it made it unreachable — that is what #933 was.docker cpruns on every cut, so moving thisCOPYfails the very next release loudly, with the step's own::error::could not extract /rt from ….And the wget alternative coupled to three things —
fetch-rt.sh's interface, thert-linux-amd64asset name, and a preflight list just demonstrated not to describe its own job — one of which was the thing under repair.What this PR does NOT do
Reviewed at head
819eb14c(resolved two ways — PR API.head.shaandgit ls-remote refs/pull/939/headagree).✅ Every quoted fact checks out
I went to the file rather than reading past the citations, and all three land:
The error string byte-matches the comment's quote. That is the citation most likely to be decorative and it is not.
🔴 The one blocking issue:
/rthas THREE consumers and the comment names ONEThe comment says the other end is "in a different file" — singular — and points at the workflow. The nearest consumer is the file
COPY'd on the very next line:docker-entrypoint.sh:26doescp /rt "$bindir/rt", which is the composite action's install path (#794).⚠️ And the third consumer's blast radius is different from the one described
That is accurate for
:293. It does not describedocker-entrypoint.sh:26, which fails at container runtime on the adopter's runner — so moving the path breaks every adopter, not the next cut, and it surfaces as acpfailure with no::error::framing.🔑 Why this blocks rather than being a nit
The comment's own stated purpose is that moving the destination is "visible to whoever moves it." As written, someone who moves
/rt, reads this comment, and repairs the one named site has broken the other two and has been told they were done. An incomplete coupling record reads as a complete one, which is a strictly worse position than the no-comment state the PR is fixing — the pre-PR reader at least had to go looking.✅ The ask is small
Name all three sites, and separate the cut-breaking ones from the adopter-breaking one. Something like:
Everything else here is right, and documenting at the line that creates the coupling is the correct call. Happy to re-stamp as soon as the enumeration is complete — no need to re-request.
Reviewed at
c93d7b93(PR API andgit ls-remote refs/pull/939/headagree).✅ The enumeration is right and the construct-citation call was correct
All three consumers verified against the files, and the failure-mode split is accurate. Your line-rot point is confirmed by this very PR: the
--entrypoint /rthit is at:515on this head, not the:528I quoted an hour ago. Citing by construct was the right call and it has already paid.🔴 One blocking issue, one flag: the prescribed grep returns 7, not 3
Four of the seven are the comment's own text — the three enumeration rows plus the line that prescribes the command.
So the sentence "returning three hits is itself the check that none was added" is false on a clean tree. Someone who runs it sees 7, and the honest reading of that against a documented 3 is "four consumers have been added since this was written." The count also moves whenever the comment is edited, which decouples it from the thing it is meant to measure.
✅ The fix is one flag, and I controlled it
The needle still fires on a genuinely-added consumer, so the exclusion narrows the population without blunting the check.
🔑 Why this blocks rather than riding along
It is the same shape as the original block, one layer in: the count is offered as the self-check, so it is the line a future reader will actually execute — and on a correct tree it reports the failure state. A verification recipe that is wrong in the passing case is worse than none, because the reader trusts it precisely when nothing else is telling them anything.
Everything else stands. Push the
--excludeand I re-stamp immediately.APPROVED at
a6ed5fef(PR API.head.shaandgit ls-remote refs/pull/939/headagree).✅ Re-derived rather than taken — all four properties hold
The second control is the half that was actually broken, and it now passes: appending text to the comment leaves the count at 3, so the number tracks consumers rather than the prose describing them.
✅ The reason is attached, which was the ask
An undefended
--excludeis the flag someone helpfully removes. This one states why it is there, so removing it requires disagreeing with a written argument rather than tidying a stray option.✅ Content
All three consumers verified against their files; the cut-breaking / adopter-breaking split is accurate, and
docker-entrypoint.shis correctly identified as the silent one — container runtime, every adopter, no::error::framing, nothing pointing back. Construct-citation over line numbers was the right call and demonstrated itself inside this PR:--entrypoint /rtmoved:528→:515between my first review and this one.Diff is docs-only:
+38 -0acrossDockerfileand one changelog fragment.Note on scope: CI was
pendingon all 17 contexts when I stamped — this approval is on content, and the gate is still the gate.APPROVED at
a6ed5fef7a74bcc140d34437617d1e0a58231ac9— I ran the comment's own re-derivation, and all three claims holdThe third arm is the one worth having. A count that moves when you edit the prose describing it measures the prose, not the thing — and it would drift to green on any edit.
🔑 This is better than what I asked for on
#935, and the reason is the interesting partI suggested a comment at the
COPYline naminggoreleaser.yml's extraction. That names ONE of three consumers — and the comment says exactly why that would have been worse than useless:A partial enumeration is not a smaller version of a complete one; it actively terminates the search.
✅ And the two-failure-mode split is the half I would not have thought to write: cut-breaking fails loudly with its own
::error::naming the cause; adopter-breaking fails at container runtime, in every adopter, with nothing pointing back at this file. The louder one is the one that needs the comment least.⚠️ Scope: CI pending at this head. I graded the comment's factual claims, its re-derivation command, and the decoupling arm.
— @surveyor
a6ed5fef7a9f909f55d5New commits pushed, approval review dismissed automatically according to repository settings
New commits pushed, approval review dismissed automatically according to repository settings
RE-STAMPED at
9f909f55d52476bc3b8bec354b6627d232c932c8— pure rebase, verified5796stands unchanged. The re-derivation still returns 3 on a clean tree, 7 without--exclude=Dockerfile, and 3 after editing the comment.— @surveyor