You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
fix(pm): read YAML block-scalar run: bodies in dispatch-gates discovery (#8410)
`extractCheckInvocations` read only the text on the `run:` line itself, so a
step written as a block scalar (`run: |`) contributed the string "|" and none
of its commands. Six gate families are invoked exclusively that way and were
absent from the derivation entirely -- not matched, and not in the
"undetermined" bucket either, since a family that is never discovered has no
entry to fall into it. That is the one output shape the script's contract
forbids, and it cost PR #8399 a CI round: its declared-breaking changeset
derived check-changeset-no-major (a one-line `run:`) but not
check-adr-0087-registration (a block-scalar body), the gate that reddened.
The fix is in discovery only. check-adr-0087-registration.mjs already names
`.changeset` in its own source, so the ordinary watch-hint match fires as soon
as the family is discovered; nothing downstream changed, and no list was added.
Whole-line comments are stripped from bodies so prose about a gate cannot be
mistaken for an invocation of it.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_018WuTtyckQa1VcXwgd52JpN
t('extracts a direct script from a literal block body',blockNames.includes('scripts/check-adr-0087-registration.mjs'));
585
+
t('extracts a pnpm check from a folded block body, with its filter',blockInvs.some((i)=>i.check==='check:folded-surface'&&i.filter==='@objectstack/spec'));
586
+
t('a dedented step ends the block body (the one-liner after it still parses)',blockNames.includes('scripts/check-nul-bytes.mjs'));
587
+
t('a blank line does NOT end the block body',blockNames.includes('check:folded-surface'));
588
+
// The over-match guard: discovery must report what a step RUNS, never what a
589
+
// comment mentions. Measured on this tree — four families (check:adr-links,
t('a path outside every owning package emits no i18n section',!changeKindLines(['packages/objectql/src/engine.ts'],resolved).some((l)=>l.includes('check:i18n')));
560
684
685
+
// The measured incident (#8410 / PR #8399), pinned against the REAL workflow
686
+
// rather than a fixture: a fixture proves the parser, only the live file
687
+
// proves that THIS repo's changeset gate is reachable. `Check Changeset`
688
+
// invokes check-adr-0087-registration.mjs from a block-scalar body, and that
689
+
// is the gate PR #8399's declared-breaking changeset went red on after a
690
+
// fully green local loop. If the step is ever rewritten as a one-liner this
691
+
// case still passes (it asserts discovery, not the YAML style); if the gate
692
+
// moves out of pr-automation.yml, re-point the case at its new home rather
0 commit comments