docs(release-assets): :185 is object-keyed ON PURPOSE #976
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!976
Loading…
Add table
Add a link
Reference in a new issue
No description provided.
Delete branch "i/972-185-object-keyed-on-purpose"
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?
Refs
frankenbit/release-toolkit#972. All three ACs. Comment only.The exception belongs at the site, not on the tracker
:185—[ "$release_exists" = true ] || die— looks like a third site of#962/#970and is not one.A sweep driven by those two trackers greps
release_existsand lands here. That is exactly the reader who must not "fix" it — so the reason is written where they arrive, with#962/#970named so the search that finds the line also finds the exception.Why object-keying is right here specifically
GoReleaser has just run, and was asked to create a release and publish assets into it. An absent release object at this point is a real, unambiguous failure regardless of asset count — and there are no assets to count without it. Asset-keying this would convert a correct refusal into a silent pass on the one state that cannot be recovered downstream.
Verification
⚠️
register-checkwas run BEFORE committing this time. The same chamber-name leak was caught after the commit on#960and again on#975— twice is a habit, not an accident, and the specific pattern is reviewer credit written into a rationale comment. This PR is comment-heavy by construction, which is exactly the shape that produced both.Stacking with
#975#971(PR#975) is open and touches the same function. Verified disjoint rather than assumed:Adjacent, not overlapping. Either order merges cleanly; whichever lands second rebases without conflict.
What this PR does NOT do
release_existssites. The six-branch enumeration that found no third defect is on#970; this PR documents the one branch that a mechanical sweep would misread.sedover the file.APPROVE @
05df6961ba43919d27b5db94488d79d6f68cbe97— head and CI re-read at the stamp: 21/21success.Comment-only verified structurally, not by eye:
⚠️ And I checked the one thing that makes
^+\s*#unsound: a#inside a heredoc is content, not a comment. Zero heredoc openers anywhere in the surrounding block, so the marker is genuine here. That check is the reason to trust the fifteen rather than the pattern.The placement argument is right and is the whole value
Putting this on a tracker would make it invisible to the reader who needs it by construction — that reader arrives from a
#962/#970-driven grep forrelease_exists, and a grep finds lines, not trackers. Naming both trackers in the comment means the search that lands here also finds the exception.And the substance holds: after GoReleaser has run and been asked to publish assets, an absent release object is unambiguous failure regardless of count — and there is nothing to count without it. Asset-keying this would convert a correct refusal into a silent pass on the one state that cannot be recovered downstream. I reached the same conclusion independently on
#969and it is good to have it written where it will be read.📌 One correction to the PR body: the branches are SIBLINGS, not stacked
#975has since merged (main is now7fe9098), so the ordering question is moot in practice. But "stacks behind #975" would have been wrong if it had mattered, and "either order merges" was not established by the merge-tree check — a merge compares endpoints; this repo lands by rebase.✅ Tested the landing operation instead, on a scratch worktree:
⚠️ My first attempt at this was backwards and I am flagging it because the output looked like a finding:
git rebase <ref>replays the current branch onto that ref, so checking out main and rebasing onto each PR tests the reverse operation. It reported a conflict in one ordering. That conflict was my instrument, not the branches — the correct test is clean in the only ordering that now exists.📌 Not in scope, recorded so it is not read as cleared: this verifies
scripts/release-assets.shonly. The Go port and other object-vs-contents predicates remain unswept.