Found while re-measuring the CI cost model for #5395. Filing it separately because it is a
concrete defect, not a cost question, and neither #5393 (cost) nor #5394 (QUICK_REFERENCE.md
drift) covers it. Not assigned to anyone and nothing has been changed — this card is a
measurement card and did not touch it.
ci.yml's Test (coverage) job has failed 100% of the time since 2026-08-16, so Codecov has received nothing since
| |
|---|
last successful Test (coverage) job | 2026-08-16T10:56:13Z, run 31942979071 |
last successful Upload coverage to Codecov step | the same run |
completed Test (coverage) jobs since then | 51, every one a failure, 0 successes |
| window examined | 373 coverage jobs across 378 unfiltered push/mainci.yml runs, 2026-08-12 .. 2026-08-20 |
The Upload coverage to Codecov step has no if:, so it carries the implicit success() and
is skipped whenever the test step fails. It is skipped in 311 of the 373 coverage jobs, and
in 120 of the 121 most recent ones.
It is one test, and it is a timeout not an assertion
Reading GitHub's check-run annotations for all 51 completed failures:
| failing test file | occurrences |
|---|
scripts/__tests__/check-package-self-import.test.ts | 50 |
scripts/__tests__/quick-reference-current-release-4143.test.ts | 3 (the #5394 drift, recent only) |
| three others, one run on 2026-08-17 | 1 each |
[unit] scripts/__tests__/check-package-self-import.test.ts
> a package name that is not a module edge is not a finding
> the two live specimens in this repository stay unflagged
Error: Test timed out in 15000ms.
at scripts/__tests__/check-package-self-import.test.ts:140:3
First occurrence 2026-08-16T12:48:02Z — the run immediately after the last green one.
The discriminator is v8 coverage instrumentation, not load — measured by ablation
| lane | sharded? | v8 coverage? | does it time out? |
|---|
| PR lane (production), 220 runs sampled | yes, 4 ways | no | no — 0 occurrences |
| push lane (production), 373 coverage jobs | no | yes | yes — 50 of 51 completed failures |
| throwaway prototype, same commit, run 32364577842 | yes, 4 ways | yes | yes |
Counter-probe for the PR-lane zero: the identical annotation scan over the identical PR shard
jobs does return results (7 annotations naming vite-alias-closure.test.ts,
AppContent.systemHubRoutes.test.tsx, vite-objectstack-spec-dist.test.ts,
check-type-check-coverage.test.ts, check-changeset-no-major.test.ts), and the same call
against the push lane returns 50 hits for this file. The method resolves; the zero is real.
So splitting the job 4 ways does not fix it — that was measured, not assumed. Coverage
instrumentation pushes this one test past its 15-second budget regardless of how much else is
running alongside it.
Per AGENTS.md's testing section, the fix direction for "an unbounded cost inside a bounded
window" is to find the race rather than raise the timeout — this issue records the measurement,
not a prescription.
Second, independent symptom found while prototyping
On a failing suite, the live unsharded recipe
(pnpm test:coverage --coverage.reporter=json --coverage.reporter=text) leaves no
coverage/ directory at all. Reproduced 2 of 2 on the same commit — run 32364577842
(NO COVERAGE FILE at coverage/coverage-final.json, after 39m05s) and run 32368063518
(NO coverage/ DIRECTORY AT ALL after the live unsharded run, after 39m25s) — while the same
tree run through vitest's blob-report path produced a complete 1287-file report every time.
So there are two independent reasons Codecov is dark, not one: the upload step is skipped by its
implicit success(), and there would be no file for it to upload anyway. As long as the
suite is red, this job cannot produce a coverage report at all. The mechanism was not identified
— the Actions log CDN is blocked from the measuring session.
Why this matters beyond coverage percentages
ci.yml's own comment justifies keeping this job unsharded as "one unsharded run so Codecov
still receives a single complete report". That justification has been delivering nothing for
four days, which is worth knowing before #5393 is ruled on.
Full measurement, method and counter-probes: #5395.
Generated by Claude Code
Found while re-measuring the CI cost model for #5395. Filing it separately because it is a
concrete defect, not a cost question, and neither #5393 (cost) nor #5394 (
QUICK_REFERENCE.mddrift) covers it. Not assigned to anyone and nothing has been changed — this card is a
measurement card and did not touch it.
ci.yml'sTest (coverage)job has failed 100% of the time since 2026-08-16, so Codecov has received nothing sinceTest (coverage)jobUpload coverage to CodecovstepTest (coverage)jobs since thenpush/mainci.ymlruns, 2026-08-12 .. 2026-08-20The
Upload coverage to Codecovstep has noif:, so it carries the implicitsuccess()andis
skippedwhenever the test step fails. It isskippedin 311 of the 373 coverage jobs, andin 120 of the 121 most recent ones.
It is one test, and it is a timeout not an assertion
Reading GitHub's check-run annotations for all 51 completed failures:
scripts/__tests__/check-package-self-import.test.tsscripts/__tests__/quick-reference-current-release-4143.test.tsFirst occurrence 2026-08-16T12:48:02Z — the run immediately after the last green one.
The discriminator is v8 coverage instrumentation, not load — measured by ablation
Counter-probe for the PR-lane zero: the identical annotation scan over the identical PR shard
jobs does return results (7 annotations naming
vite-alias-closure.test.ts,AppContent.systemHubRoutes.test.tsx,vite-objectstack-spec-dist.test.ts,check-type-check-coverage.test.ts,check-changeset-no-major.test.ts), and the same callagainst the push lane returns 50 hits for this file. The method resolves; the zero is real.
So splitting the job 4 ways does not fix it — that was measured, not assumed. Coverage
instrumentation pushes this one test past its 15-second budget regardless of how much else is
running alongside it.
Per AGENTS.md's testing section, the fix direction for "an unbounded cost inside a bounded
window" is to find the race rather than raise the timeout — this issue records the measurement,
not a prescription.
Second, independent symptom found while prototyping
On a failing suite, the live unsharded recipe
(
pnpm test:coverage --coverage.reporter=json --coverage.reporter=text) leaves nocoverage/directory at all. Reproduced 2 of 2 on the same commit — run 32364577842(
NO COVERAGE FILE at coverage/coverage-final.json, after 39m05s) and run 32368063518(
NO coverage/ DIRECTORY AT ALL after the live unsharded run, after 39m25s) — while the sametree run through vitest's blob-report path produced a complete 1287-file report every time.
So there are two independent reasons Codecov is dark, not one: the upload step is skipped by its
implicit
success(), and there would be no file for it to upload anyway. As long as thesuite is red, this job cannot produce a coverage report at all. The mechanism was not identified
— the Actions log CDN is blocked from the measuring session.
Why this matters beyond coverage percentages
ci.yml's own comment justifies keeping this job unsharded as "one unsharded run so Codecovstill receives a single complete report". That justification has been delivering nothing for
four days, which is worth knowing before #5393 is ruled on.
Full measurement, method and counter-probes: #5395.
Generated by Claude Code