Skip to content

dispatch-gates discovers no family for a workflow verification step whose script is not named check-*docs-drift-check.yml runs one on packages/** and the tool cannot mention it in any bucket #9187

Description

@os-project-manager

Filed unassigned by the dev seat on #9171 (session session_01Y26DJEHSBhhAQ6wwfsHNza), from the trigger-vs-derivation sweep that card asked for. Duplicate-searched by script name and by the discovery function's name first. Not fixed in that PR — different fix surface (discovery, not matching), and #9171 is explicitly bounded to the matching half.

The gap, measured

extractCheckInvocations in scripts/pm/dispatch-gates.mjs discovers a check family from a run: step in exactly two shapes:

pnpm [--filter PKG] [run] check:NAME
node scripts/.../check-NAME.mjs

The second requires the literal check- in the filename. .github/workflows/docs-drift-check.yml runs

 - name: Self-test the mapperrun: node scripts/docs-audit/affected-docs.mjs --self-test

affected-docs.mjs carries no check- segment, so no family is discovered for it. Measured on origin/main at the time of filing: of the 25 workflow files the tool reads, docs-drift-check.yml contributes 0 of the 103 discovered families — the step exists, has a verdict, is runnable locally in one second, and appears in neither half of the tool's output for any card. That is the one output shape the script's own header forbids ("a gate the derivation cannot mention at all"), and it is the same class as the block-scalar discovery bug recorded in runCommandTexts, where six families were invisible for the same structural reason.

It is not a marginal path either. The workflow declares

paths:
- 'packages/**'
- 'scripts/docs-audit/**'
- '.github/workflows/docs-drift-check.yml'

so CI schedules it for every card touching packages/, and — after #9171 landed the CI-trigger match key — it is the one paths-filtered workflow whose trigger still buys the derivation nothing, because it has no discovered family to attach the trigger to. A card editing scripts/docs-audit/affected-docs.mjs is the sharpest case: it is editing the very mapper whose self-test CI will run on it.

.github/workflows/scaffold-e2e.yml is a second instance of the same shape (declared paths:, zero discovered families), though its steps are an e2e build rather than a named verification, so whether it belongs in "check families" at all is part of what a disposition has to decide.

What a disposition has to decide

  1. Widen the discovery regex to a --self-test-shaped invocation, or to any node scripts/**.mjs step whose command carries a self-test flag. Cheap. The risk is the one the script's header prices repeatedly: a wider net that names steps a dev cannot usefully pre-run turns leads into noise ("22 leads is the same as none").
  2. Name the discovery contract instead — decide what counts as a family (a step with a verdict a dev can reproduce locally) and derive from that, rather than from a filename convention that the tree happens to follow 103 times and not twice.
  3. Neither — rule the check- naming convention normative and make a gate hold workflow steps to it, so a verification step that is not discoverable is a CI failure rather than a silent omission.

⛔ No recommendation from this seat; the sweep measured the gap and stopped there, as #9171 bounded it to.

Not claimed

  • Nothing shipped broken. No PR is known to have been under-verified through this; the omission was found by sweeping triggers against the derivation, not by an incident.
  • No census of non-check- verification steps across the 25 workflows was taken. The two named above are what the trigger sweep surfaced, because it only examined workflows declaring a paths: filter. Unfiltered workflows were not read for this shape at all.

Backlinks: #9171 (the measurement that surfaced it, and the CI-trigger match key that made the remaining gap visible) · #9144 (same blind-spot class on the check:i18n edge).


Generated by Claude Code

Metadata

Metadata

Type

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions