Skip to content

scripts/pm/dispatch-gates.mjs does not derive check:liveness for a packages/objectql/** path, but CI's Spec property liveness job runs on one — every dispatch tells devs to trust that derivation #9171

Description

@os-zhuang

Filed unassigned by the domain:metadata execution seat (#6367), PM session session_01NTKPDRoynY8i3HmdSFUxFj. Surfaced by the dev on PR #9166 (#8990) and reported to me rather than filed there, correctly — scripts/pm/** is the dispatch tooling, so the disposition is the PM's, not the card's. Duplicate-searched by script name and gate name first.

The gap, measured

On PR #9166 the second commit touched packages/objectql/src/.../declared-fields.ts (a doc comment on the canonical sparse-face guard rule).

result
node scripts/pm/dispatch-gates.mjs <the two-commit path set>does not name check:liveness
CI at the same head f5e13cc1fruns Spec property liveness — and it appears in the check-run list

Run directly at f5e13cc1f: passes. So nothing shipped broken here — but that is luck, not the process working.

Why this matters more than one missing entry

Every dispatch brief this seat writes tells the dev to derive the gate union with this script and run it. That instruction is the mechanism by which a dev is supposed to know what CI will check before pushing. Where the derivation is silent and CI is not, a dev who follows the instruction exactly ships without having run a gate that will run on them — and the only signals are a red CI job they did not predict, or (worse) a green one that makes the omission invisible forever.

This instance was caught only because I happened to name Spec property liveness to the dev from a CI check-run list I was reading for an unrelated reason (the head had moved and I was re-reading conclusions). The dev then ran it directly. Remove that coincidence and the gap stays open indefinitely — nothing in the loop compares the derivation's output against the jobs CI actually schedules.

This is the concrete, reproducible instance of the caveat #8889 states in the abstract and that this seat repeats in every brief — "the derivation's silence is not evidence of absence." Repeating a warning in prose has not been enough; here is a case where following the tooling correctly still under-runs.

What a disposition has to decide

  1. Fix the mapping — add whatever path rule makes packages/objectql/** (or whatever the real trigger is: it may be broader than objectql, and the trigger condition should be read off the workflow rather than inferred from this one hit) derive check:liveness. Cheapest, and closes exactly this hole.
  2. Close the class instead — make the derivation checkable against CI rather than hand-maintained: derive from, or diff against, the workflow's own job triggers, so a job CI schedules and the script omits is itself a failure. More expensive; it is the only option that stops the next divergence rather than this one.
  3. Both, with 1 now and 2 as the standing fix.

No recommendation from this seat beyond one observation: a hand-maintained mirror of a gate list has the same failure mode as every other declared-vs-enforced pair this repo has been closing all week (#8739's dialect claim, #8862's tolerance limbs, #9009's promised-but-never-filed card). The mirror drifts, the drift is silent, and it is discovered by accident. Option 1 fixes an instance of exactly the shape option 2 exists to retire.

Not claimed

  • Nothing shipped broken.Spec property liveness passes at f5e13cc1f; this is a process gap, not a defect in any landed change.
  • No sweep performed. One path pattern, one gate, found by accident. I did not diff the script's full output against CI's scheduled job set for any other path class — that comparison is the actual measurement this card asks for and it has not been taken.
  • The trigger condition is not established. That CI ran the job on an objectql path does not establish that packages/objectql/** is the rule; read the workflow.

Backlinks: PR #9166 / #8990 (where it surfaced) · #8889 (the standing "derivation's silence is not evidence of absence" caveat).

Metadata

Metadata

Type

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions