Lands L2 of the agent-first coverage architecture (ADR-020) — the
aggregated trend store.
Script: scripts/coverage/aggregate.mjs (zero-dep Node ESM)
- discoverLcovs: walks packages/* and apps/* for coverage/lcov.info
- normalizeLcov: rewrites SF entries from package-relative (vitest's
output) to repo-relative, so the merged file matches git diff paths
- summarizeLcov: computes statement/branch/function/line percentages
from LF/LH/BRF/BRH/FNF/FNH summary records
- aggregate: merges all lcovs and returns mergedLcov + summary
- Writes coverage/lcov.info (gitignored — large) and
coverage/summary.json (committed — trend via git log -- ...) with
timestamp, short commit SHA, repo + per-package percentages
Test surface: scripts/coverage/aggregate.test.mjs (10 tests, all green)
- Fixtures at __fixtures__/aggregate-pkg-a.lcov +
aggregate-pkg-b.lcov (synthetic, structured to make percentages
deterministic)
- Covers: path normalization (prefix, absolute, double-prefix
avoidance), summary computation (percentages, zero-division,
rounding), discovery (packages + apps, missing dirs), full
aggregation in a tmp repo
Wired:
- root package.json adds "coverage:aggregate" script
- .gitignore restructured: per-package coverage/ stays ignored,
aggregated /coverage/ ignored EXCEPT summary.json (committed for
trend) and .gitkeep markers
L1 allowlist fix folded in (scripts/coverage/diff.mjs):
- The previous (^|/)coverage/ regex accidentally caught
scripts/coverage/* — replaced with anchored patterns
(^coverage/, ^packages/*/coverage/, ^apps/*/coverage/)
- Allowlist scripts/ and turbo/generators/ since they're dev tooling
tested via node --test, outside vitest's v8 lcov pipeline
Smoke-tested end-to-end:
- pnpm coverage:aggregate merged 3 lcovs (auth + media + navigation
from this session's earlier runs), repo coverage 95.22% statements
- pnpm coverage:diff against HEAD~1 with the new merged lcov reports
PASS — all 6 diff files correctly allowlisted
First committed snapshot of coverage/summary.json lands with this
commit, anchoring the trend history at this state.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
58 lines
966 B
Plaintext
58 lines
966 B
Plaintext
# Dependencies
|
|
node_modules
|
|
|
|
# Turbo
|
|
.turbo
|
|
|
|
# Build outputs
|
|
dist
|
|
build
|
|
.next
|
|
out
|
|
storybook-static
|
|
|
|
# Environment
|
|
.env
|
|
.env.local
|
|
.env.*.local
|
|
|
|
# Per-user local overrides (never commit — .claude/settings.local.json, etc.)
|
|
*.local
|
|
*.local.*
|
|
**/settings.local.json
|
|
|
|
# Testing — per-package coverage output (vitest)
|
|
packages/*/coverage/
|
|
apps/*/coverage/
|
|
# Aggregated coverage output (pnpm coverage:aggregate): ignore everything
|
|
# under /coverage/ EXCEPT summary.json (committed for trend history per
|
|
# ADR-020) and .gitkeep markers.
|
|
/coverage/*
|
|
!/coverage/summary.json
|
|
!/coverage/.gitkeep
|
|
# Keep the source scripts at scripts/coverage/ tracked (allows files
|
|
# named "coverage" elsewhere)
|
|
!/scripts/coverage/
|
|
|
|
# OS
|
|
.DS_Store
|
|
Thumbs.db
|
|
|
|
# IDE
|
|
.vscode
|
|
.idea
|
|
*.swp
|
|
|
|
# Debug
|
|
npm-debug.log*
|
|
pnpm-debug.log*
|
|
|
|
# Superpowers brainstorm sessions
|
|
.superpowers/
|
|
|
|
# Git worktrees
|
|
.worktrees/
|
|
|
|
# Template setup history — preserved locally, invisible to fresh clones.
|
|
.archive/
|