docs(release): document the CI approval, the revert: subject, and correct the pipeline's own account of itself - #440
Merged
Conversation
IgorShevchik
force-pushed
the
docs/release-click-and-revert
branch
from
August 20, 2026 03:47
2ac296b to
9c6e4e5
Compare
revert: subjectrevert: subject, and correct the pipeline's own account of itself
…orrect the pipeline's own account of itself Five review passes found the first version of this change wrong in ways that mattered, including one place where it told the reader the opposite of what they would be looking at. This is the corrected version, and it fixes the false claims the pipeline makes about itself rather than only adding true ones beside them. **The symptom is stated correctly now.** The release PR sits at `blocked` while its `ci` check is **green** — the green one is the dispatched run; a separate `pull_request` run is held at `action_required`, creates no jobs and therefore no check run, and is what branch protection is waiting on. The first version said "blocked with no `ci` check", which is what the API contradicts and which would have sent a reader to the wrong remedy, since a green check with a refused merge is also what a stale branch looks like. Both causes are now listed, in the order to check them, with the literal error string a person will search on. **The click is documented as a procedure with an order.** Actions → the held run is the primary route; the Checks tab is not, because a held run renders nothing there. Approval attaches to a run and a run to a commit, so any push to `main` strands it — up to nine held runs in a day here — which makes approve-then-merge a race, not a sequence, and merges to `main` have to pause while it runs. **Two workflow comments asserted the mechanism this document refutes.** Both `ci.yml` and `release-please.yml` claimed a `GITHUB_TOKEN` PR fires no pull_request event and that the dispatched run satisfies the required check. Neither is true, and they are the files a person opens first. Corrected and pointed at the new section, as `release-watchdog.yml` already does for the cadence commitment. **The revert guidance now names where the subject is actually set.** Retitling the PR is not sufficient: a revert PR is always a single commit, and for those the squash subject may come from the commit rather than the title. The squash-merge dialog is the route that works either way. Recorded too: the parse failure prints in the Release Please job log (it is invisible, not absent), a `Revert "…"` that is the only commit since the last tag opens no release PR at all, and a `revert:` does not cancel the `feat:` it undoes — both ship, and the release is still a minor. The two `Revert "…"` commits in this history are no longer offered as evidence of harm. They predate `bootstrap-sha` and the CHANGELOG's first entry, which the #435 commit message already said and this one had dropped. The sample under release-please is zero; that is now stated plainly. **The template is where the trap is catchable.** GitHub's revert button opens the PR form with `Revert "…"` already in the title box, so the instruction goes there as well as in the guides nobody has open at that moment. The watchdog's nudge — which reaches a maintainer exactly when their release PR is stuck — now links the section instead of only saying "merge it". Also corrected in passing: the file claimed under Optional hardening that merging is "the only human step", contradicting its own opening; the `severity:crash` paragraph existed twice; a cross-reference pointed at the wrong promise; two paragraphs about release cadence had been orphaned under a heading about repository settings; branch protection was missing from the list of settings the pipeline depends on; and the break-glass omitted `dev:prepare` and `--no-git-checks`, without which it ships a tarball missing a file `package.json` lists. The "no workflow-file fix" claim is softened to "none worth taking", because one does work: a workflow can `POST /statuses/{sha}` with `context: ci`. It is refused on purpose — it fabricates the signal the gate carries — and the reason is now recorded next to the trick. `merge_group` and the Actions approval setting are listed as unexplored rather than impossible. Closes #353.
IgorShevchik
force-pushed
the
docs/release-click-and-revert
branch
from
August 20, 2026 04:37
9c6e4e5 to
94b3164
Compare
8 tasks
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.
Linked issue
Closes #353.
Type of change
Description
Five review passes found the first revision of this PR wrong in ways that mattered — most sharply, it told the reader the opposite of what they would be looking at. This revision fixes the false claims the pipeline makes about itself rather than only adding true ones beside them.
The symptom is stated correctly now
The first revision opened with "the release PR will sit at blocked with no
cicheck". The API contradicts it:get_check_runson #356 returns exactly one check run —ci, success. A held run creates no jobs and therefore no check run, so the held one is invisible while the dispatched one is green.That mattered beyond accuracy. Green check + refused merge is also what a stale branch looks like, so the wrong symptom routed the reader to the wrong remedy. Both causes are now documented, in the order to check them, with the literal string someone will search on:
The click is a procedure with an order
ciand concluded the doc was stale.mainstrands it — up to nine held runs in a day here, not the four first claimed, which was the lowest day in the sample presented as typical. That makes approve-then-merge a race rather than a sequence, so the doc now says merges tomainpause while the run is in flight, and says what to do if one lands anyway.Two workflow comments asserted the mechanism this document refutes
ci.ymlandrelease-please.ymlboth claimed aGITHUB_TOKENPR fires nopull_requestevent and that the dispatched run satisfies the required check. Neither is true, and they are the files a person opens first when the PR is stuck. Both corrected and pointed at the new section — the same disciplinerelease-watchdog.ymlalready applies to the cadence commitment ("keep the two in sync").Leaving them was the largest gap in the first revision: #353 explicitly asks for that comment to be corrected, so closing the issue without touching it would have left its named artifact lying in the tree.
The revert guidance now names where the subject is actually set
Retitling the PR may not be enough. A revert PR is always a single commit, and for single-commit PRs GitHub may take the squash subject from the commit rather than the title — evidence in this repo (
167cd6f3, PR #439) points that way. The squash-merge dialog is the route that works either way.Three things added because they change what a reader does:
commit could not be parsed: <sha> Revert "…"prints in the Release Please job log every run. The first revision said no error exists anywhere, which removes the one diagnosis available.Revert "…"that is the only commit since the last tag opens no release PR at all.revert:does not cancel thefeat:it undoes — both appear and the release is still a minor.The two revert commits are no longer offered as evidence
The first revision cited
8b774dcdand2cc874e2as proof of harm. Both predatebootstrap-shaand the CHANGELOG's first entry by 18 days, so no changelog generator ever saw them — a disqualifier stated in #435's own commit message and dropped here. The sample of reverts under release-please is zero; the doc now says so, which is also the honest reason to write this down before the first one rather than after.The template is where the trap is catchable
GitHub's revert button opens the PR form with
Revert "…"already in the title box. That is the screen, at the moment, so the instruction goes there — plus aRevertrow in Type of change — rather than only into guides nobody has open then.The watchdog's nudge reaches a maintainer exactly when their release PR is stuck; it said "Merging it tags, releases and publishes" and now links the approval section.
Corrected in passing
severity:crashexplanation existed twice, near-verbatim, in two places that must stay in sync.pnpm run dev:prepareand--no-git-checks, without which it ships a tarball missing.nuxt/b24ui.static.css— a filepackage.jsonlists infiles."No workflow-file fix" is now "none worth taking"
One does work: a workflow can
POST /repos/{owner}/{repo}/statuses/{sha}withcontext: ci, and a commit status satisfies a required check exactly as a check run does. It is refused on purpose — it fabricates the signal the gate exists to carry — and that reason is now recorded next to the trick, so the next person finds both.merge_groupand the Actions approval setting are listed as unexplored, not impossible.Verification
test/workflows/run.shtest/utils/documented-scripts.spec.tspnpm refuses to publishparsed as a script invocationassert-actions-pinned.pyshellcheck -x -S warningeslint .releasing.mdChecklist