From 39b64933d6316b5c28fcce9c16ead393c5220255 Mon Sep 17 00:00:00 2001 From: Claude Date: Wed, 9 Sep 2026 16:35:18 +0000 Subject: [PATCH] docs(pr-automation): the "WHICH LEVEL" prose says the level axis exists MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The closing sentence of the "WHICH LEVEL" block said "This is prose, not a gate -- no check computes it" and "the two remaining levels are yours". Both halves stopped being true when #16055 landed the LEVEL axis in check-changeset-no-major.mjs: on a PR that declares clause ②, grading every moved package `patch` exits 1. The gate builds a pointer to this exact paragraph from four sites (:80, :773, :1457, :1518), so the reader most likely to arrive here is the author the gate has just refused -- sent by the gate to a paragraph denying the gate exists. The correction states the scope in the gate's own words (its header, the `judgeLevel` verdict table) and, in the same breath, the boundary the gate declares for itself at :1521 -- WHICH package received the widening is not something it can read, and it does not claim to. Without that half the prose would flip from "the gate does not exist" to "the gate is omniscient". Prose only: no step logic, condition or permission is touched, and check-changeset-no-major.mjs is not modified -- the gate is correct. Co-Authored-By: Claude Opus 5 Claude-Session: https://claude.ai/code/session_012GKcPZbMoGq7WPzKLfRBTU --- .github/workflows/pr-automation.yml | 30 ++++++++++++++++++++++++++--- 1 file changed, 27 insertions(+), 3 deletions(-) diff --git a/.github/workflows/pr-automation.yml b/.github/workflows/pr-automation.yml index 6f349934ad..89098a07db 100644 --- a/.github/workflows/pr-automation.yml +++ b/.github/workflows/pr-automation.yml @@ -722,9 +722,33 @@ jobs: OPPOSITE bumps for the same additive act. The commit type is not the discriminator it looked like: it correlates with the act, and when they disagree the act wins. The 64 historical `patch` precedents are - pre-rule and nothing is retro-fixed. This is prose, not a gate -- no - check computes it; `check-changeset-no-major.mjs` refuses `major` and - says why in its header, and the two remaining levels are yours. + pre-rule and nothing is retro-fixed. + + PART OF THIS IS A GATE, and which part is the difference between + grading well and being refused. `check-changeset-no-major.mjs` + refuses `major` and says why in its header. Since #16055 the SAME + script also runs a LEVEL AXIS over the rule above, and that + script's header states its scope: "a PR that DECLARES clause ② (a + new key on a published payload) must grade AT LEAST ONE package + whose published source it moves `minor` or above". It mechanizes + this ruling "for exactly the PRs where the widening is already + DECLARED, and for no others", and its `judgeLevel` verdict table + spells both directions: `not-declared`, "the declaration reads + `no`", exits 0; `enforce`, "declared `yes`, moved packages graded + `patch` and NONE of them graded `minor` or above", exits 1. So on + a PR that declares clause ②, grading `patch` across the board is + refused; on every other PR the axis stands down and the two levels + below `major` are yours, as they always were. + + WHAT THE AXIS DOES NOT JUDGE, in its own words: "WHICH of the + packages above received that widening is NOT something this gate + can read, and it does not claim to. Clause ② is declared ONCE, FOR + THE PR" -- neither the carrier label nor the declaration line in + the PR body names a package. The axis cross-checks a declaration + against the levels; it never reads the diff to find the act. + Judging the act is still yours, this paragraph is still where the + rule lives, and everything in it the axis does not reach is still + prose. 2. It releases nothing (.github/, .claude/, skills/, docs/, content/, examples/, tests-only, and the like)