Skip to content

Conversation

@jdalton
Copy link
Contributor

@jdalton jdalton commented Nov 5, 2025

Summary

Fixes segmentation fault when running pnpm cover by implementing memory management and processing concurrency options for v8 coverage on our large test suite.

Requires #875.

Changes

1. Logger Hoisting (scripts/cover.mjs)

  • Moved const logger = getDefaultLogger() to module scope
  • Fixes ReferenceError in helper functions and catch blocks

2. Memory Management (package.json)

  • Updated test:unit:coverage script to use NODE_OPTIONS environment variable
  • Added --max-old-space-size=8192 to increase Node.js heap memory limit
  • Prevents out-of-memory crashes during coverage processing

3. V8 Coverage Configuration (vitest.config.mts)

  • Added processingConcurrency: 1 to prevent parallel processing overload
  • Added reportOnFailure: true for better error reporting
  • Added explicit reportsDirectory: './coverage' path

4. Updated Coverage Badges (README.md)

  • Code Coverage: 37.17% (from placeholder 90%)
  • Type Coverage: 98.16% (from placeholder 95%)

Problem

The v8 coverage provider was segfaulting with SIGSEGV when processing our test suite:

  • 196 test files
  • 2,255 tests
  • Large codebase requiring substantial memory for coverage analysis

Root Cause

V8 coverage was attempting to process too much data simultaneously without sufficient memory allocation, causing the Node.js process to crash with a segmentation fault.

Solution

  1. Increased memory limit: Node.js heap now has 8GB available for coverage processing
  2. Sequential processing: Coverage reports are processed one at a time (processingConcurrency: 1)
  3. Fixed logger scope: Prevents ReferenceError that was masking the real issue

Test Results

✓ Coverage now completes successfully:

  • 196 test files passed
  • 2,255 tests passed (2 skipped)
  • Duration: 11.91s
  • Type Coverage: 98.16%
  • Code Coverage: 37.17%
  • Cumulative: 67.66%

Related

This fix enables reliable coverage reporting for our large test suite and unblocks future coverage tracking improvements.

@jdalton jdalton force-pushed the fix/v8-coverage-segfault branch from 5cfcfda to d9d6f85 Compare November 5, 2025 16:16
Fixes segmentation fault when running `pnpm cover` by adding memory
management and processing concurrency options.

Changes:
- Hoist logger to module scope in cover.mjs to fix ReferenceError
- Use NODE_OPTIONS with --max-old-space-size=8192 for vitest coverage
- Add processingConcurrency: 1 to vitest config to prevent v8 crashes
- Add reportOnFailure: true and explicit reportsDirectory

The segfault occurred because v8 coverage was processing too much data
at once without sufficient memory. These changes allow the coverage
command to complete successfully with 2,255 tests and 196 test files.

Test Results:
- 196 test files passed
- 2,255 tests passed, 2 skipped
- Type Coverage: 98.16%
- Code Coverage: 37.17%
- Cumulative: 67.66%
Updates coverage badges to reflect actual test results:
- Code Coverage: 37.17% (yellow badge)
- Type Coverage: 98.16% (green badge)

Based on test run with:
- 196 test files passed
- 2,255 tests passed (2 skipped)
- Duration: 11.91s
@jdalton jdalton force-pushed the fix/v8-coverage-segfault branch from d9d6f85 to 8767731 Compare November 5, 2025 18:41
@mikolalysenko mikolalysenko merged commit 486576f into main Nov 5, 2025
13 checks passed
@mikolalysenko mikolalysenko deleted the fix/v8-coverage-segfault branch November 5, 2025 19:13
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants