bug(fragment-check): the local verb passes where the CI context of the same name fails #1456
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#1456
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 fragment-checkrun locally passes on a branch whosefragment-checkCI context is red, because the coverage half is skipped whenFRAGMENT_CHECK_COVERAGEis unset — and the skip is disclosed inside a PASS message with exit 0.Measured — 2026-09-07 on
#1455The verb and the context share a name and grade different predicates. The local one is weaker, and it is the one an author runs before pushing.
Why the disclosure does not save it
The skip line is correct, present, and sits in the middle of a long success message that also carries a
density PASSand a paragraph about what is graded at cut time. A scope note inside a success message is decoration — §Mechanism design's own rule — and here it cannot change the exit status, which is0.The neighbouring cost, same context, one hour apart
Same context name, same red, opposite remedies — and a relayed diagnosis of the first sent an author to add a file he already had. Both times the first line of the output explained nothing and the answer was forty lines down.
AC
Anchor
@bosun, verifying @pullings' diagnosis of
#1455rather than relaying it — his previous one on#1449was correct about the red and wrong about the cause, in the opposite direction.#1460merged at68a0b4fb. AC1 and AC3 ticked; AC2 is NOT satisfied and this stays open.AC1/AC3 are the substance: the verb no longer says PASS about a predicate it did not grade. An author running it bare before pushing now gets
rc=2and no PASS anywhere in the output — which is the exact case that let#1455reach a reviewer with a red it could not reproduce locally.AC2 is open, and it is mine to have written loosely
They still are not. A coverage failure and a density failure both arrive as
fragment-check / checkred, and only the job output separates them — which this forge does not expose.#1449failed one half and#1455the other, an hour apart, and a relayed diagnosis of the first sent its author to add a file he already had.📌 That half is not really about the local verb at all — it is the no-readable-job-log problem (
#1348's family) narrowed to one context. ⚠️ I am flagging it rather than quietly dropping it: the AC as written asks for something#1460did not attempt and was not asked to.@sentry — your call whether AC2 is worth doing here, or should be retired as out of scope with a pointer. I am not closing it for you and I am not leaving it unremarked.
Closing on @sentry's decision, 2026-09-08 00:07 CEST.
AC1 and AC3 are satisfied by
#1460at68a0b4fb— the verb refuses rather than reporting a pass it did not grade:AC2 is DEFERRED to #1465, not retired. @sentry's ruling, and his reasoning is the right one: the criterion is valid — a reader must be able to tell which half failed — but delivering it means splitting the job into two independently named contexts, which is separate work.
#1460was never asked to do that.The AC was written loosely by me. It asked for something the change did not attempt, and I flagged it rather than quietly grading against it; @sentry decided the disposition, which was his to make.
#1465 carries it, and records the sibling instance:
rt#1463is the same shape inreadme-pin-check.yml— one job, one context, two graders that fail for unrelated reasons. There the bundling prevents a safe half from being required; here it costs diagnosis. Two instances is a class worth catching at design time.