Found while doing #6148 (PR #6159). Not fixed there — out of that card's scope, and it is an observation about a hand-maintained floor rather than a live breach.
What was measured
scripts/__tests__/merge-queue-reporting.test.ts's MUST_SUBSCRIBE_MERGE_GROUP is a hand-maintained map of workflow file -> why it must subscribe merge_group. Its own header says why it has to be hand-maintained: "may this context be required?" is a property of repository settings, not of the YAML, so nothing mechanical can derive the set.
It names six workflows today: ci.yml, lint.yml, control-bytes.yml, docs-links.yml, changeset-presence.yml, skills-paths.yml.
scripts/dependabot-merge-gate.mjs's REQUIRED_CONTEXTS — the other declaration of "this check is blocking and reports on every PR" — carries two more workflows' checks:
| workflow | check | in REQUIRED_CONTEXTS? | in MUST_SUBSCRIBE_MERGE_GROUP? | subscribes merge_group on disk? |
|---|
doc-component-types.yml | Doc Component Type Check | yes | no | yes |
doc-snippet-types.yml | Doc Snippet Type Check | yes | no | yes |
Measured on main@228909995: grep -c '^ merge_group:' returns 1 for both files.
Why it is worth recording
Nothing is broken right now — both workflows really do subscribe, so the queue is not stalled by either. What is missing is the assertion.
The map exists precisely because a required context that does not report on a queue build does not fail the queue, it stalls it until the ruleset's 60-minute status-check timeout (#3523, which cost #3503 / #3510 / #3516 merging with Type Check at conclusion=failure). Delete the merge_group: trigger from docs-links.yml and that test goes red; delete it from doc-component-types.yml and nothing anywhere notices until a queue build hangs.
So this is the same shape as #4154 one file over — a hand-maintained enumeration that fell behind the thing it enumerates — except here the drift is in a test's floor rather than in prose, which makes it quieter.
Shape of a fix, if it is taken
Two candidates, and the choice is a judgement rather than mechanical:
- Add the two entries. Cheapest, keeps the map's stated purpose (a human declares requirability), and leaves the same gap open for the ninth workflow.
- Cross-check the two declarations against each other.
REQUIRED_CONTEXTS already names the checks; dependabot-merge-gate.test.ts already maps check names back to the workflow files that produce them. Asserting that every workflow producing a REQUIRED_CONTEXTS check also subscribes merge_group would make the floor derive itself from the other declaration, and the hand-maintained map could keep carrying only the reasons. That is strictly more coverage, and it is also more machinery in a test that is already dense.
PR #6159 added its own new workflow to the map by hand, i.e. it took route 1 for one entry without closing the class.
Refs: #6148 / PR #6159 (where this was measured) · #3523 (the incident the map exists for) · #4154 (the same drift in the doc page's copy of the list).
Found while doing #6148 (PR #6159). Not fixed there — out of that card's scope, and it is an observation about a hand-maintained floor rather than a live breach.
What was measured
scripts/__tests__/merge-queue-reporting.test.ts'sMUST_SUBSCRIBE_MERGE_GROUPis a hand-maintained map ofworkflow file -> why it must subscribe merge_group. Its own header says why it has to be hand-maintained: "may this context be required?" is a property of repository settings, not of the YAML, so nothing mechanical can derive the set.It names six workflows today:
ci.yml,lint.yml,control-bytes.yml,docs-links.yml,changeset-presence.yml,skills-paths.yml.scripts/dependabot-merge-gate.mjs'sREQUIRED_CONTEXTS— the other declaration of "this check is blocking and reports on every PR" — carries two more workflows' checks:REQUIRED_CONTEXTS?MUST_SUBSCRIBE_MERGE_GROUP?merge_groupon disk?doc-component-types.ymldoc-snippet-types.ymlMeasured on
main@228909995:grep -c '^ merge_group:'returns 1 for both files.Why it is worth recording
Nothing is broken right now — both workflows really do subscribe, so the queue is not stalled by either. What is missing is the assertion.
The map exists precisely because a required context that does not report on a queue build does not fail the queue, it stalls it until the ruleset's 60-minute status-check timeout (#3523, which cost #3503 / #3510 / #3516 merging with
Type Checkat conclusion=failure). Delete themerge_group:trigger fromdocs-links.ymland that test goes red; delete it fromdoc-component-types.ymland nothing anywhere notices until a queue build hangs.So this is the same shape as #4154 one file over — a hand-maintained enumeration that fell behind the thing it enumerates — except here the drift is in a test's floor rather than in prose, which makes it quieter.
Shape of a fix, if it is taken
Two candidates, and the choice is a judgement rather than mechanical:
REQUIRED_CONTEXTSalready names the checks;dependabot-merge-gate.test.tsalready maps check names back to the workflow files that produce them. Asserting that every workflow producing aREQUIRED_CONTEXTScheck also subscribesmerge_groupwould make the floor derive itself from the other declaration, and the hand-maintained map could keep carrying only the reasons. That is strictly more coverage, and it is also more machinery in a test that is already dense.PR #6159 added its own new workflow to the map by hand, i.e. it took route 1 for one entry without closing the class.
Refs: #6148 / PR #6159 (where this was measured) · #3523 (the incident the map exists for) · #4154 (the same drift in the doc page's copy of the list).