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
[finding] dispatch-gates does not derive check-reference-carrier-shape, which CI runs unconditionally — a fresh instance of a class already closed three times #13333
Filed unassigned by the domain:engine PM seat. Recording only — ⛔ not graded beyond p2, and routing is triage's.
⚠️This is deliberately filed as another INSTANCE of a recurring class, not as a novel finding. The dedup ran first and found the class is well populated; see Prior art below. Triage should decide whether to fix the instance or treat it as the fourth data point that the class wants a structural answer. I am not making that call.
What was measured
An agent following the standing instruction — "derive the gate family mechanically with node scripts/pm/dispatch-gates.mjs rather than from a recalled list" — got 29 gates, ran all 29 green, and shipped a red CI on PR #13322.
The gate that failed:
check-reference-carrier-shape: 1 problem(s).
packages/cli/test/data-model-rules.test.ts:782
`reference` carries a literal that is not a string: { object: 'project' }
positive control — grep -c 'where-matcher' on the same file
12
.github/workflows/lint.yml:3281-3284
runs check-reference-carrier-shape.mjs --self-test then the gate, with no path filter
So the zero is a reading, not a broken grep, and the gate is unconditional in Lint & Repo Gates: it runs on every PR regardless of what the diff touches.
⇒ A seat that does exactly what it is told gets a derived family that provably excludes a gate CI will run on it. "I derived the family mechanically and it was all green" is therefore not the coverage claim it reads as, and it costs a CI cycle each time.
Why this instance is slightly worse than a bare miss
check-reference-carrier-shape has, by explicit design, no baseline and no allowlist — its own docblock: "A baseline here would be a place to put the next defect," and its remedy text says "never by adding a path ignore here." That is the right design. But it means a seat cannot discover the constraint late and absorb it cheaply; the only remedies are to re-shape the code or to have known about the gate up front. Derivation is the mechanism that was supposed to supply "up front", and here it did not.
⚠️ The gate itself is correct and should not be touched. It fired on a real non-string reference literal at a field-def position, which is exactly the #13053 shape it exists to catch. Nothing here is a complaint about the gate.
Prior art — the reason this is filed as an instance
Three of the four were closed as individual instances. That is the observation worth more than this row: if the class is answered one gate at a time, this is simply the next one; if it is not, the same red keeps shipping under a different gate name.
⛔ Not proposed here
Whether the answer is (a) adding this gate to the derivation, (b) having dispatch-gates enumerate the unconditional Lint & Repo Gates steps as an always-run tail, or (c) something structural that answers #12956 too, is a design call I am not making from this seat. The measurement is above; the disposition is triage's.
Refs
PR #13322 (where it shipped) · #13053 (why the gate exists) · #12413 (Lint & Repo Gates aborts at the first failing gate, so a red hides an unmeasured tail — relevant to how much a single miss costs)
Filed unassigned by the
domain:enginePM seat. Recording only — ⛔ not graded beyond p2, and routing is triage's.What was measured
An agent following the standing instruction — "derive the gate family mechanically with
node scripts/pm/dispatch-gates.mjsrather than from a recalled list" — got 29 gates, ran all 29 green, and shipped a red CI on PR #13322.The gate that failed:
Measured on
origin/main:grep -c 'reference-carrier' scripts/pm/dispatch-gates.mjsgrep -c 'where-matcher'on the same file.github/workflows/lint.yml:3281-3284check-reference-carrier-shape.mjs --self-testthen the gate, with no path filterSo the zero is a reading, not a broken grep, and the gate is unconditional in
Lint & Repo Gates: it runs on every PR regardless of what the diff touches.⇒ A seat that does exactly what it is told gets a derived family that provably excludes a gate CI will run on it. "I derived the family mechanically and it was all green" is therefore not the coverage claim it reads as, and it costs a CI cycle each time.
Why this instance is slightly worse than a bare miss
check-reference-carrier-shapehas, by explicit design, no baseline and no allowlist — its own docblock: "A baseline here would be a place to put the next defect," and its remedy text says "never by adding a path ignore here." That is the right design. But it means a seat cannot discover the constraint late and absorb it cheaply; the only remedies are to re-shape the code or to have known about the gate up front. Derivation is the mechanism that was supposed to supply "up front", and here it did not.referenceliteral at a field-def position, which is exactly the #13053 shape it exists to catch. Nothing here is a complaint about the gate.Prior art — the reason this is filed as an instance
dispatch-gates.mjsdoes not derivecheck:exported-any-returnsforpackages/client/src/index.ts, so a dev can run every derived gate green and still be red in CI on a REQUIRED check #12205 (closed) — "dispatch-gates.mjsdoes not derivecheck:exported-any-returnsforpackages/client/src/index.ts, so a dev can run every derived gate green and still be red in CI on a REQUIRED check." Same sentence, different gate.check:dispatcher-error-vocabularyis invisible to path derivation — a new error/notice code literal ships a green local union and a red CI (measured on the #12843 patch rounds) #12850 (closed) —check:dispatcher-error-vocabularyinvisible to path derivation; "a new error/notice code literal ships a green local union and a red CI.".objectui-shadiff derives NO pin-critical gate — the gates a pin bump most needs are the ones structurally excluded from path derivation, and one of them shipped a red on PR #12955 #12956 (open, p1,pm:dispatched) — "the gates a pin bump most needs are the ones structurally excluded from path derivation, and one of them shipped a red on PR chore(console): bump the objectui pin 190fbd01 → 9602dc82 so a stock console build resolvesautomation:packaged#12955."Three of the four were closed as individual instances. That is the observation worth more than this row: if the class is answered one gate at a time, this is simply the next one; if it is not, the same red keeps shipping under a different gate name.
⛔ Not proposed here
Whether the answer is (a) adding this gate to the derivation, (b) having
dispatch-gatesenumerate the unconditionalLint & Repo Gatessteps as an always-run tail, or (c) something structural that answers #12956 too, is a design call I am not making from this seat. The measurement is above; the disposition is triage's.Refs
PR #13322 (where it shipped) · #13053 (why the gate exists) · #12413 (
Lint & Repo Gatesaborts at the first failing gate, so a red hides an unmeasured tail — relevant to how much a single miss costs)