Problem
main CI has been failing since #9813 (gate.ignoredCheckRuns) merged. The last four ci.yml runs on
main are all failure, and every PR branched from or merged with main since inherits it — #9804 went
red on exactly these tests with no changes of its own in that area.
Six test failures across three files, all direct consequences of #9813:
1. fetchLiveCiAggregate / fetchLiveCiAggregatePreferGraphQl gained an eighth parameter
(ignoredCheckRuns), but three toHaveBeenCalledWith assertions still pass seven:
test/unit/agent-approval-queue.test.ts — "threads the repo's expectedCiContexts into the accept-time
live CI re-check", "unions branch-protection contexts into the accept-time live CI re-check", "falls back
to expectedCiContexts when the accept-time branch-protection read fails"
test/unit/queue.test.ts — "surfaces stale optional CI after the stale-CI cap"
2. The durable cache key gained an |ign: segment. src/queue/ci-resolution.ts now builds
...|adv:${...}|ign:${...}, but test/unit/queue.test.ts's durable-cache regression still expects
|adv: alone.
3. config/examples/loopover.full.yml was not synced. #9813 added the whole ignoredCheckRuns block
(19 lines of comment + key) to .loopover.yml.example but not to loopover.full.yml, and
test/unit/config-templates.test.ts requires the two byte-identical from # WHERE IT LIVES onward.
Why it matters beyond the red build
Per the gate's disposition matrix, red CI auto-CLOSES a contributor PR. A contributor who opened a PR after
#9813 landed gets closed for a defect that is not theirs and that they cannot fix. This is the same class of
harm #9798 and #9801 describe — a CI signal that corresponds to no real problem in the PR — except this one
does not self-correct.
Fix
Update the three assertions to the real arity, the cache-key expectation to |adv:|ign:, and sync
loopover.full.yml's tail from .loopover.yml.example. All three are test/fixture corrections; no
production behaviour changes, because #9813's implementation is correct — only the expectations were left
behind.
Follow-up worth considering
config-templates.test.ts catches template divergence but only after merge. The two files are required to be
byte-identical from a fixed marker onward, which is a generation relationship expressed as an assertion —
loopover.full.yml's tail could be generated from .loopover.yml.example by a :write/:check pair like
the ones this repo already uses elsewhere (replay-runner-image-manifest, gen-contract-api-schemas), so
the two cannot drift in the first place.
Problem
mainCI has been failing since #9813 (gate.ignoredCheckRuns) merged. The last fourci.ymlruns onmainare allfailure, and every PR branched from or merged withmainsince inherits it — #9804 wentred on exactly these tests with no changes of its own in that area.
Six test failures across three files, all direct consequences of #9813:
1.
fetchLiveCiAggregate/fetchLiveCiAggregatePreferGraphQlgained an eighth parameter(
ignoredCheckRuns), but threetoHaveBeenCalledWithassertions still pass seven:test/unit/agent-approval-queue.test.ts— "threads the repo's expectedCiContexts into the accept-timelive CI re-check", "unions branch-protection contexts into the accept-time live CI re-check", "falls back
to expectedCiContexts when the accept-time branch-protection read fails"
test/unit/queue.test.ts— "surfaces stale optional CI after the stale-CI cap"2. The durable cache key gained an
|ign:segment.src/queue/ci-resolution.tsnow builds...|adv:${...}|ign:${...}, buttest/unit/queue.test.ts's durable-cache regression still expects|adv:alone.3.
config/examples/loopover.full.ymlwas not synced. #9813 added the wholeignoredCheckRunsblock(19 lines of comment + key) to
.loopover.yml.examplebut not toloopover.full.yml, andtest/unit/config-templates.test.tsrequires the two byte-identical from# WHERE IT LIVESonward.Why it matters beyond the red build
Per the gate's disposition matrix, red CI auto-CLOSES a contributor PR. A contributor who opened a PR after
#9813 landed gets closed for a defect that is not theirs and that they cannot fix. This is the same class of
harm #9798 and #9801 describe — a CI signal that corresponds to no real problem in the PR — except this one
does not self-correct.
Fix
Update the three assertions to the real arity, the cache-key expectation to
|adv:|ign:, and syncloopover.full.yml's tail from.loopover.yml.example. All three are test/fixture corrections; noproduction behaviour changes, because #9813's implementation is correct — only the expectations were left
behind.
Follow-up worth considering
config-templates.test.tscatches template divergence but only after merge. The two files are required to bebyte-identical from a fixed marker onward, which is a generation relationship expressed as an assertion —
loopover.full.yml's tail could be generated from.loopover.yml.exampleby a:write/:checkpair likethe ones this repo already uses elsewhere (
replay-runner-image-manifest,gen-contract-api-schemas), sothe two cannot drift in the first place.