Skip to content

Commit c48e659

Browse files
committed
ci(pm): re-point two dispatch-gates cases off the patrol's retired schedule
Removing the half-state patrol's schedule makes two cases of the dispatch-gates self-test false: both read the live `.github/workflows` tree and assert that the specimen workflow declares `schedule`. The gate runs on this diff's class (the selector's workflow arm falls through to run), and it is a required context, so the pin is repaired in the same change that makes it false — measured red first: 2 of 1883 cases, and no others. Each case keeps the fact it was always about: one pins that the specimen is not "a workflow no PR runs" (the PR-time trigger), the other that the live sweep is withheld by the value-bearing class. Nothing is added — pinning the absence of a schedule would be a new ratchet, which the same ruling forbids this file without the maintainer's word. Claude-Session: https://claude.ai/code/session_012GcsUbuqFGBibkEDMRC1eE Co-authored-by: Claude <noreply@anthropic.com>
1 parent 51a65a3 commit c48e659

1 file changed

Lines changed: 9 additions & 4 deletions

File tree

‎scripts/pm/dispatch-gates.mjs‎

Lines changed: 9 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -20654,9 +20654,15 @@ function selfTest() {
2065420654
for (const f of readdirSync(wfDirLive).filter((x) => /\.ya?ml$/.test(x))) {
2065520655
eventsOfWorkflow.set(f, declaredTriggerEvents(readFileSync(nodePath.join(wfDirLive, f), 'utf8')));
2065620656
}
20657+
// ⚠️ The specimen lost its SCHEDULE on 2026-09-21 (ruling #208 on #19491,
20658+
// executed by #19497: the patrol is `workflow_dispatch`-only now, and no line
20659+
// of the sweeper was edited for it). Both cases below are re-pointed at the
20660+
// fact each was always about — the PR-time trigger, and the withholding class
20661+
// — and ⛔ nothing is added: pinning the absence of the schedule would be a
20662+
// new ratchet, which this file may not grow without the maintainer's word.
2065720663
t(
20658-
'⭐ the card\'s own specimen declares a pull_request trigger beside its schedule — half-state-patrol.yml is not a workflow no PR runs',
20659-
['schedule', 'workflow_dispatch', 'pull_request'].every((e) => (eventsOfWorkflow.get('half-state-patrol.yml') ?? []).includes(e)),
20664+
'⭐ the card\'s own specimen declares a pull_request trigger beside its workflow_dispatch — half-state-patrol.yml is not a workflow no PR runs',
20665+
['workflow_dispatch', 'pull_request'].every((e) => (eventsOfWorkflow.get('half-state-patrol.yml') ?? []).includes(e)),
2066020666
);
2066120667
t(
2066220668
'and a genuinely scheduled-only workflow reads as one, so the predicate is not answering `pull_request` to everything (stale.yml)',
@@ -20709,10 +20715,9 @@ function selfTest() {
2070920715
// 3m09s it measured is gone without any scheduled-only rule existing.
2071020716
const sweepEntry = triggerFamilies.find((e) => e.check.startsWith('scripts/pm/check-half-states.mjs'));
2071120717
t(
20712-
'the card\'s specimen is still discovered, still reached only through its patrol, and still classified VALUE-BEARING — not withheld for being scheduled',
20718+
'the card\'s specimen is still discovered, still reached only through its patrol, and still classified VALUE-BEARING — withheld by that class and by nothing else',
2071320719
Boolean(sweepEntry)
2071420720
&& [...sweepEntry.workflows].join('|') === 'half-state-patrol.yml'
20715-
&& isScheduled('half-state-patrol.yml')
2071620721
&& reachesPRTime(sweepEntry.workflows)
2071720722
&& Boolean(sweepEntry.notRunnable)
2071820723
&& !sweepEntry.ciOnly,

0 commit comments

Comments
 (0)