Agentic-qe coverage-drop-investigator
Use when test coverage has dropped and you need to find which changes caused it and what tests to add. Traces coverage regressions to specific commits and files.
install
source · Clone the upstream repo
git clone https://github.com/proffesor-for-testing/agentic-qe
Claude Code · Install into ~/.claude/skills/
T=$(mktemp -d) && git clone --depth=1 https://github.com/proffesor-for-testing/agentic-qe "$T" && mkdir -p ~/.claude/skills && cp -r "$T/.claude/skills/coverage-drop-investigator" ~/.claude/skills/proffesor-for-testing-agentic-qe-coverage-drop-investigator && rm -rf "$T"
manifest:
.claude/skills/coverage-drop-investigator/SKILL.mdsource content
Coverage Drop Investigator
Runbook-style skill for investigating coverage regressions. Identifies which changes caused coverage to drop and recommends targeted tests.
Activation
/coverage-drop-investigator
Investigation Flow
Step 1: Measure Current Coverage
# Generate coverage report npx jest --coverage --coverageReporters=json-summary # View summary cat coverage/coverage-summary.json | jq '.total'
Step 2: Find When Coverage Dropped
# Compare coverage with main branch git stash && npx jest --coverage --coverageReporters=json-summary mv coverage/coverage-summary.json coverage/baseline.json git stash pop && npx jest --coverage --coverageReporters=json-summary # Compare jq -s '.[0].total.statements.pct as $baseline | .[1].total.statements.pct as $current | {baseline: $baseline, current: $current, delta: ($current - $baseline)}' coverage/baseline.json coverage/coverage-summary.json
Step 3: Identify Uncovered Files
# Find files with lowest coverage cat coverage/coverage-summary.json | jq 'to_entries | map(select(.key != "total")) | sort_by(.value.statements.pct) | .[0:10] | .[] | {file: .key, statements: .value.statements.pct, branches: .value.branches.pct}'
Step 4: Map to Recent Changes
# Find recently changed files with low coverage git diff --name-only main...HEAD | while read file; do jq --arg f "$file" '.[$f] // empty | {file: $f, statements: .statements.pct}' coverage/coverage-summary.json done
Step 5: Recommend Tests
For each uncovered file, identify:
- Uncovered functions — need new test cases
- Uncovered branches — need conditional test cases (if/else paths)
- Uncovered lines — may indicate dead code or missing edge cases
Step 6: Report
## Coverage Drop Report - **Current**: {{current_pct}}% - **Baseline (main)**: {{baseline_pct}}% - **Delta**: {{delta}}% - **Files causing drop**: | File | Coverage | Changed Lines | Tests Needed | |------|----------|--------------|-------------| | {{file}} | {{pct}}% | {{lines}} | {{count}} | - **Recommended action**: {{write_tests / accept_drop / mark_as_excluded}}
Composition
After investigation:
— generate tests for uncovered files/qe-test-generation
— verify existing tests actually catch bugs/mutation-testing
— prevent future drops/coverage-guard
Gotchas
- Coverage can drop because NEW code was added without tests, not because tests were removed
- 100% coverage is not always the goal — focus on critical paths, not getters/setters
- Branch coverage drops are more concerning than line coverage drops — branches indicate logic paths
- Coverage tools may count generated code or type definitions — exclude with coveragePathIgnorePatterns