Tagout

v2.3.1: a release that only proved the release path

Released 2026-09-09, four hours after 2.3.0. One dependency bump, and the first time the release cut itself went through every gate the kit had just gained.

What we were trying to fix

Nothing in the kit. Renovate proposed actions/setup-node v7 (#493), the checks on its head sha were green, and the merge mandate says a green PR on a non-flagship repository is merged without asking. That produced a fix(deps) commit on main, and release-please does what it does with a fix: it opened the 2.3.1 PR.

What we decided

To merge it, and to write down what merging a release PR costs by hand. The two runs on the release PR landed action_required, as they do on every rebase release-please makes, and had to be approved one by one before pr_verdict.py could say anything. That is the gap #495 now tracks: merge-pr reads a run awaiting approval as a failed check, so the release PR is the one PR the kit’s own skill cannot land.

What got cut

Nothing was cut from this release, because nothing was in it. What the day cut was the queue of things left for a human: the README caught up with 2.3.0’s rails, the journal caught up with 2.2.0 and 2.3.0, and the portfolio’s own pr_verdict.py stopped reading a superseded, cancelled run as a red check.

What bit us

The journal gate, exactly as #468 had predicted the day before. The gate exempts only the newest tag, and the release PR passes it because its tag does not exist yet. So the moment 2.3.1 was tagged, main went red on the release commit for want of a 2.3.0 article, and stayed red for the twenty minutes it took to write one. #468 had weighed widening the window and chosen to document the recovery instead; the recovery is now known to work, and the rule that follows from it is simple: write the previous version’s article before merging the release PR, never after.