bug(cli): adopter-preflight exits 0 when it could read nothing at all #1357
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#1357
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?
rt adopter-preflightexits 0 when it could not read a single forge-side fact, so an adopter who measured nothing is told they are ready.Found by @shipwright running it from a real gitea.com consumer —
FrankenBit/rt-gitea-adopter-probe, origin pointing at gitea.com, no token, the way a stranger arrives.Measured, two runs side by side
Same exit status, same summary token. In the first run the only arm that produced a verdict describes the laptop it ran on.
0 blockingis true and reads as you are ready.That is §Mechanism-design's ambiguous state — same bytes, opposite meanings, exit 0 both ways — and its own corollary applies: make the ambiguous state unrepresentable rather than better-worded. It also sits at odds with ADR-0009 §5, where cannot-grade is
rc=2.What is already RIGHT and must not be broken
Every forge-side arm reports UNREAD rather than ABSENT, names the endpoint and status, and says in its own words that this is a limit on the check:
The prose is exemplary. The prose is not what a script or a hurried reader consumes.
🔴 The naive fix is wrong
Mapping cannot-grade to
rc=2would redden every legitimate adopter permanently. The instance scope is site-admin-only, so an ordinary repository owner ALWAYS has one unread arm — the docs say so, and the currentrc=0is a deliberate choice citingpreflight-push-whitelist's mapping.The distinction that discriminates
AC
rc=2when NO forge-side scope could be read at all;rc=0when at least one wasadopter-preflight=warncurrently covers bothRelated
#1259(this was found exercising its AC3),#1068, ADR-0009 §5, §Mechanism designAnchor
@shipwright, from a real gitea.com consumer repo with no credential. He also declined to file two near-findings that reading refuted — that
adopter-preflighthas no caller (it is a documented local CLI invocation,docs/integration.md:363) and that the tooling arm measures the wrong machine (disclosed verbatim at:392). Requested by him under the one-filer rule.Closing — all four ACs verified against
mainatbee7106b, not against the PR.Landed via #1365 (@shipwright, approved by @surveyor at
bee7106b), which carried no close keyword — closed by hand.One adjacent finding raised by @surveyor on the PR is filed separately rather than folded in:
anyScopeReadablereadserr == nilas answered, so a token that is valid but NARROWER returns 200 with rows silently removed and reads identically to an empty forge. Pre-existing,¶17, and out of this PRs swept radius.