fix: a -dev endstate is always work — the post-release bump must not run red

The four-state table called '-dev but changed' half a ceremony and
refused — but that state IS the mandatory post-release bump PR
(bare -> X.Y.(Z+1)-dev after every release), a red run on main once per
release, forever. A tree that ends -dev is by definition not a release:
every such merge is work, green NOTICE no-op. Red now guards only bare
endstates.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
This commit is contained in:
dan-claude-bot 2026-07-19 15:42:27 +00:00
parent d08ec8c6f6
commit c0cd4a1b15
2 changed files with 8 additions and 5 deletions

View file

@ -97,7 +97,9 @@ jobs:
# time the flow itself is improved. Everything in between is a # time the flow itself is improved. Everything in between is a
# half-ceremony and dies loudly: # half-ceremony and dies loudly:
# -dev, unchanged → work under the label: NOTICE + green no-op # -dev, unchanged → work under the label: NOTICE + green no-op
# -dev, changed → a bump that forgot to leave -dev: refuse # -dev, changed → still a dev tree, so still work — the
# post-release bump PR above all (bare -> -dev
# after every release): green NOTICE no-op
# bare, unchanged, # bare, unchanged,
# already released → work merged in the post-release window # already released → work merged in the post-release window
# (ceremony landed, the -dev bump has not): # (ceremony landed, the -dev bump has not):
@ -121,8 +123,9 @@ jobs:
echo "ceremony=no" >> "$GITHUB_OUTPUT" echo "ceremony=no" >> "$GITHUB_OUTPUT"
exit 0 exit 0
fi fi
echo "VERSION changed ('$base_ver' -> '$ver') but is still -dev — half a ceremony; a release PR ships a bare X.Y.Z. Refusing." >&2 echo "NOTICE: VERSION changed ('$base_ver' -> '$ver') and still ends -dev — a dev tree is by definition not a release. This is work (the post-release bump, a renumber); nothing to publish."
exit 1 ;; echo "ceremony=no" >> "$GITHUB_OUTPUT"
exit 0 ;;
esac esac
if [ "$base_ver" = "$ver" ]; then if [ "$base_ver" = "$ver" ]; then
if gh release view "$ver" -R "$GITHUB_REPOSITORY" >/dev/null 2>&1; then if gh release view "$ver" -R "$GITHUB_REPOSITORY" >/dev/null 2>&1; then

View file

@ -148,8 +148,8 @@ check "release.yml: only the 'release' label carries the intent" 0 "" \
# half-ceremony refuses. Pin each verdict's message and the gating output. # half-ceremony refuses. Pin each verdict's message and the gating output.
check "release.yml: decide — dev-tree work no-ops green (not a red run per infra PR)" 0 "" \ check "release.yml: decide — dev-tree work no-ops green (not a red run per infra PR)" 0 "" \
grep -qF "release-flow work under the release label, not a ceremony" "$RY" grep -qF "release-flow work under the release label, not a ceremony" "$RY"
check "release.yml: decide — a half-ceremony (-dev but changed) refuses" 0 "" \ check "release.yml: decide — a -dev endstate is always work (the bump PR no-ops green)" 0 "" \
grep -qF "half a ceremony" "$RY" grep -qF "a dev tree is by definition not a release" "$RY"
check "release.yml: decide — post-release-window work no-ops green" 0 "" \ check "release.yml: decide — post-release-window work no-ops green" 0 "" \
grep -qF "release-flow work merged in the post-release window" "$RY" grep -qF "release-flow work merged in the post-release window" "$RY"
check "release.yml: decide — bare, unchanged, never released refuses to guess" 0 "" \ check "release.yml: decide — bare, unchanged, never released refuses to guess" 0 "" \