Qualify the release before it exists rather than after - #495
Merged
Conversation
`publish` depended on `version-consistency` and nothing else, so pushing a tag created the GitHub Release and the six checks that decide whether it deserved to exist ran afterwards, if the operator remembered. That is how 0.7.0 was published with its headline feature broken: the checks were a written procedure, and a procedure is not a dependency. Section 4 is now the `install-gate` job and `publish` needs it. All six rows are automated and every one of them is blocking; none was dropped or made advisory, because a gate claiming six checks while running four is worse than one honestly running five. Two rows needed real fixtures rather than approximations. The PATH-less commit runs under `env -i` so node is genuinely absent, which is what makes a rejection evidence that the stub used its recorded interpreter instead of an ambient one. The stale-hook row installs a healthy stub first and then replaces only its body, so the fixture is a stale stub rather than a missing one. That second fixture also produces a hook-runtime fail of its own, and doctor exits 1 on it. The row being qualified is `commit-msg-hook`, whose required verdict is `warn`, so the check reads that row out of the JSON rather than the process exit -- reading the exit here would have qualified the wrong thing. The clone is of the pushed tag from the remote and runs the shipped bundle with no build and no install, because building in this job would qualify an artefact the tag does not carry. Limit: the job runs on ubuntu-latest only, so it qualifies the POSIX install; the Windows path is still covered by `install-ps1` in CI against the branch rather than against the tag Ruled-out: reusing the workflow's checkout instead of cloning | the row asks whether a fresh clone works, and a checkout is not the thing users get Ruled-out: making the stale-hook row non-blocking because its fixture also fails another check | the confounding finding is separable by reading the row, and a row excused for being awkward is the fail-open being repaired Warn: `publish` now waits on a job that clones over the network, so a transient clone failure withholds a release for a tag that is already pushed -- the tag is the durable thing and re-running the job is the recovery Blast: system Undo: easy Certainty: firm Verified: the six rows run end to end against a fresh clone and exit 0; the workflow loads as YAML with publish declaring both dependencies; and the gate is not vacuous -- breaking the doctor row exits 1, and comparing the plugin version against a wrong expectation exits 1 Provenance: authored Record-Id: r-failclosed493
CommitLore — record lintTrailers: clean — 1 commit in Active constraints for the paths this PR touchesLimits (3)
Ruled out (10)
Warnings (5)
Trailer violations fail this check. Active constraints are informational — they are what the repository already decided, not a verdict on this PR. |
This was referenced Aug 8, 2026
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Closes #493.
Held:
devis frozen for the v0.7.1 promotion. This is opened for CI evidence, not to merge.publishdepended onversion-consistencyand nothing else, so pushing a tag created the GitHub Release and the six checks that decide whether it deserved to exist ran afterwards, if the operator remembered. That is how 0.7.0 was published with its headline feature broken: the checks were a written procedure, and a procedure is not a dependency.Section 4 is now the
install-gatejob andpublishneeds it. All six rows are automated and every one is blocking; none was dropped or made advisory, because a gate claiming six checks while running four is worse than one honestly running five.The stale-hook fixture also produces a hook-runtime fail of its own and doctor exits 1 on it. The row being qualified is
commit-msg-hook, whose required verdict iswarn, so the check reads that row out of the JSON rather than the process exit — reading the exit would have qualified the wrong thing.Evidence. The six rows were run end to end against a fresh clone: exit 0. The gate is also not vacuous — breaking the doctor row exits 1, and comparing the plugin version against a wrong expectation exits 1.