* fix(#4172): add --merge-async to test:coverage:scripts-floor The "Coverage gate (merged shards)" test.yml job has OOM-crashed (exit 134, SIGABRT) on every push to next since4dfc46b. test:coverage:scripts-floor was the only c8 coverage-merge invocation in package.json still missing --merge-async: c8's default sync merge path (Report._getMergedProcessCov) loads every raw V8 coverage file from the merged 3-shard coverage/tmp directory into memory as one array before merging, instead of folding them in one at a time, and now blows through the job's 8192 MB heap ceiling. This is the same bug class as #4068 (fixed in4d70b4dc4), which added --merge-async to test:coverage:unit and test:coverage:report -- the two other scripts sharing this merge/report code path -- but missed this third sibling, which reads the exact same merged coverage/tmp data in the same job. check-coverage and report both dispatch through c8's shared getCoverageMapFromAllCoverageFiles()/mergeAsync branch, so the fix is identical in shape to #4068's. Extends the existing #4068 regression guard (tests/c8-merge-async-flag.test.cjs) to also assert test:coverage:scripts-floor carries --merge-async, closing the coverage gap #4068 left on this sibling script. Fixes #4172 Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com> * docs(#4172): backfill changeset PR number (pr:0 -> 4173) * fix(#4172): route scripts-floor through `c8 report`, not `check-coverage` The prior commit (1a3d6b75e) added --merge-async to test:coverage:scripts-floor, but the Coverage gate job still OOM-crashed identically on PR #4173's CI run (https://github.com/open-gsd/gsd-core/actions/runs/33587951779/job/100118358975). Root cause of that miss: c8@11.0.0's `check-coverage` CLI subcommand handler (node_modules/c8/lib/commands/check-coverage.js) never forwards argv.mergeAsync into the Report constructor -- only the `report` subcommand's handler (node_modules/c8/lib/commands/report.js) and the default command (which also calls into report.js) do. Verified directly by constructing Report the same way each handler does: the check-coverage path yields report.mergeAsync === undefined even with --merge-async on the command line, while the report path yields true. Fix: route test:coverage:scripts-floor through `c8 report --check-coverage` instead of `c8 check-coverage`. report.js's outputReport() calls the same checkCoverages() threshold-checking helper when --check-coverage is truthy, so behavior (and exit code on threshold failure) is unchanged -- only the code path taken to get there now actually honors --merge-async. Extends the tests/c8-merge-async-flag.test.cjs regression guard with an explicit assertion that scripts-floor invokes `c8 report`, not `check-coverage`, so this can't silently regress back to the broken form. Fixes #4172 Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com> * docs(#4172): correct changeset to describe the actual root cause (check-coverage vs report subcommand gap, not just the missing flag) --------- Co-authored-by: sim <sim@local> Co-authored-by: Claude Sonnet 5 <noreply@anthropic.com>
676 B
676 B
type, pr
| type | pr |
|---|---|
| Fixed | 4173 |
Fixed the coverage gate OOM-crashing on every push to next. The scripts/ coverage-floor check invoked c8's check-coverage subcommand, whose handler silently drops the async-merge flag even when it's passed (unlike its report sibling, which honors it) — the same OOM class as #4068, but this third script slipped through that fix because adding the flag alone wasn't enough here. Routing the check through c8 report --check-coverage instead makes the async-merge flag actually take effect, so coverage now merges incrementally instead of loading every shard's raw data into memory at once and blowing the 8GB CI heap ceiling. (#4172)