Skip to content

Commit ce16aec

Browse files
committed
ci(half-state-patrol): state the measured reason the two steps stay in the caller
The two files justified keeping `actions/setup-node` and the closed-card sweep in the CALLING workflow with a census argument -- `check-node-version` and `check-self-test-wired` derive their population from `.github/workflows/` and only from there, so a step moved into the composite action would drop out and the gate would still print OK. Both censuses read `.github/actions/**` as well now, so the sentence is false: measured on this tree they print "2 composite action(s)", and `collectInvocations` puts the sweep's own bytes in the population under the composite action's name when they are presented as one. A wrong reason on a right decision invites the change it was written to prevent, so each bullet now carries what can be measured instead: - setup-node: the action holds NO Node pin of its own, and the floor it asserts is read from the `.nvmrc` that shipped with it. A setup-node step inside the composite would install the very version that floor is then compared against -- `check-node-version` holds every pin in this repo equal to that same file -- so the check could never fail and would say nothing about the caller's runner. - the closed-card sweep: the true reason was already the first half of the sentence (it WRITES to cards under a ruling no sibling took), so the false half is deleted rather than rewritten. Comment-only. The parsed YAML of both files is byte-identical to the base, and every one of the 56 changed lines is a comment line. Claude-Session: https://claude.ai/code/session_01Wnstp2kTth7sGXfr8fXypc Co-authored-by: Claude <noreply@anthropic.com>
1 parent a251aaa commit ce16aec

2 files changed

Lines changed: 26 additions & 30 deletions

File tree

‎.github/actions/half-state-patrol/action.yml‎

Lines changed: 18 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -47,23 +47,25 @@
4747
#
4848
# ## What deliberately did NOT move into here, and why
4949
#
50-
# Two steps stay in the CALLING workflow, both because a gate in this repo
51-
# derives its population from `.github/workflows/` and only from there:
50+
# Two steps stay in the CALLING workflow, each for its OWN reason -- and ⛔ not
51+
# for the census reason this block used to give. `check-node-version` and
52+
# `check-self-test-wired` read `.github/actions/**` as well as
53+
# `.github/workflows/`; their scope lines say "2 composite action(s)", so a
54+
# step moved in here stays audited, under this file's name, in both.
5255
#
53-
# - `actions/setup-node`. `scripts/check-node-version.mjs` scans
54-
# `.github/workflows/*.yml` and reports how many setup-node steps it
55-
# audited; a step moved in here would drop out of that census and the gate
56-
# would still print OK. `.github/actions/setup-pnpm` records the same
57-
# reasoning for the same gate, and the same answer: callers keep their own
58-
# setup-node step with its literal `node-version` pin.
59-
# - the closed-card sweep. `scripts/check-self-test-wired.mjs` builds its
60-
# population from the scripts a WORKFLOW names, and the only CI invocation
61-
# of `scripts/pm/sweep-closed-cards.mjs --self-test` in this repo is the one
62-
# in that workflow. Moved in here it would leave that gate green while
63-
# auditing one script fewer. It is also the one step in the old file that
64-
# was never repo-agnostic -- it WRITES to cards and was gated on the
65-
# repository name -- so leaving it in the objectstack caller states plainly
66-
# what the `if:` used to state obliquely.
56+
# - `actions/setup-node`. This action holds NO Node pin of its own -- the
57+
# floor in `Locate the patrol sources` is read from the `.nvmrc` that
58+
# shipped with it, and `check-node-version.mjs` holds every setup-node pin
59+
# in this repo equal to that same file. A `setup-node` step in here would
60+
# install the very version that floor is then compared against: equal by
61+
# construction, unable to fail, and no longer a reading about the CALLER's
62+
# runner. The caller picks the Node it runs on; this action only refuses
63+
# one that is too old, by name. (`setup-pnpm` keeps the same separation for
64+
# NO constraint -- there the census was the whole reason, and it is gone.)
65+
# - the closed-card sweep. It is the one step in the old file that was never
66+
# repo-agnostic -- it WRITES to cards and was gated on the repository name
67+
# -- so leaving it in the objectstack caller states plainly what the `if:`
68+
# used to state obliquely.
6769
#
6870
# ## Where this runs, and against which board
6971
#

‎.github/workflows/half-state-patrol.yml‎

Lines changed: 8 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -248,11 +248,11 @@ jobs:
248248
- name: Checkout repository
249249
uses: actions/checkout@v7
250250

251-
# Stays in the caller on purpose: `scripts/check-node-version.mjs` scans
252-
# `.github/workflows/*.yml` only and reports how many setup-node steps it
253-
# audited, so a step moved into the composite action would drop out of
254-
# that census while the gate still printed OK. `.github/actions/setup-pnpm`
255-
# records the same reasoning for the same gate.
251+
# Stays in the caller on purpose, and ⛔ NOT for a census reason: the Node
252+
# census reads `.github/actions/**` too. The patrol action holds no Node
253+
# pin of its own and only asserts a floor from the `.nvmrc` it shipped
254+
# with, so the runner's Node has to be the CALLER's choice for that check
255+
# to be a reading about anything. The action's header carries the measure.
256256
- name: Setup Node.js
257257
uses: actions/setup-node@v7
258258
with:
@@ -316,15 +316,9 @@ jobs:
316316
# close-time hygiene rather than the backfill the 2026-08-31 maintainer
317317
# ruling refused.
318318
#
319-
# ⛔ NOT in the composite action, for two reasons that both say the same
320-
# thing. It is the one step of the old file that was never
321-
# repo-agnostic: it WRITES to cards under a ruling this repo's board
322-
# took, and no sibling has taken it. And this workflow is the only place
323-
# in CI that runs `scripts/pm/sweep-closed-cards.mjs --self-test`, which
324-
# is how `scripts/check-self-test-wired.mjs` knows that self-test is
325-
# run at all — that gate builds its population from `.github/workflows/`
326-
# and nowhere else, so moving this step would leave it green while
327-
# auditing one script fewer.
319+
# ⛔ NOT in the composite action. It is the one step of the old file
320+
# that was never repo-agnostic: it WRITES to cards under a ruling this
321+
# repo's board took, and no sibling has taken it.
328322
#
329323
# ⛔ This step never fails the job, whatever the sweep returns; the
330324
# alarm rides an annotation and the run summary instead. Findings are

0 commit comments

Comments
 (0)