Superseded-run status laundering: a never-tested commit reads green in the combined status #152
Reference in New Issue
Block a user
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?
Found by the final integration review of #111. Not milestoned 1.0.0 —
nextis verified green by cache-defeated container runs, which is the stronger evidence and is what the tag actually rests on. This is about the badge, not the tree.#119 fixed two real problems and its fix works:
be57609carries a genuine 2m52s run. But its cancellation half has a side effect worth naming.Gitea cancels an in-flight run when a newer commit lands and records the cancellation as
failure. The repair rewrites that exactfailure/ "Has been cancelled" status toskipped/ "Superseded by a newer commit; never tested". Gitea'sCombine()foldsskippedinto success — so the combined-status API returns"state":"success"for a commit that was never tested.Observed on
next:0e397b3and95161c7both carryskipped/ "never tested" and both report combinedsuccess.95161c7is the aggregate rate-limit fix (#139) — the very change the prior integration review failed this PR for.The description attached is honest; the rollup is not. Anything reading combined status programmatically — a branch protection rule, a release script, a future manager — sees green for a commit nothing ever ran.
This is distinct from #147, which is about the context string being hardcoded.
The alternative considered and rejected in #119 was leaving those commits
pending, which would block them permanently. That trade was reasonable; the question is whether there is a third option.Options worth weighing
failurein place but fix the description, accepting red-but-honest over green-but-false.skippedand accept it, documenting that combined status is not a reliable per-commit signal on this repo.Definition of done
success, or the limitation is documented where someone building on the status API will see it.git bisect-style archaeology overnextshould be able to distinguish "passed" from "never ran".Implementation requirements
next, PR based onnext, single commit, title ending(closes #N).TODO.md.make checkplus the Docker lint path with the cache defeated.