Build-an-X workflow that uses an LLM to map existing tests to spec sections - given a spec doc + the test suite, the LLM identifies which tests cover which sections, surfaces uncovered sections (gap), and recommends specific tests to add. Output is a coverage matrix per spec ID. Scope is mapping tests that already exist and naming the gaps, not authoring tests for new acceptance criteria. Use when a spec doc and a test suite both exist but nobody can say which requirements are actually covered - before a release sign-off, an audit, or a decision about where to spend the next round of test effort.
74
93%
Does it follow best practices?
Run evals on this skill
Adds up to 20 points to the overall score
View guide
Low
Low-risk findings worth noting
Deep reference for the ai-spec-coverage-mapper SKILL.md. Consult when
scheduling the mapper on a cadence, or when hardening the report against
LLM-hallucinated coverage claims.
A single mapping goes stale the moment ACs or tests change. Schedule it weekly and open an issue with the report:
on:
schedule:
- cron: '0 4 * * MON'
jobs:
spec-coverage:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v5
- run: python scripts/ai-coverage.py
- uses: peter-evans/create-issue-from-file@v5
with:
title: 'Spec coverage report - week of ${{ github.event.repository.updated_at }}'
content-filepath: spec-coverage-report.mdFilter to the ACs and tests changed since the last run to keep cost and runtime down - re-mapping the whole codebase every week is slow and expensive for no new signal.
LLMs may claim a test "covers" an AC when it doesn't. Before trusting a
full row:
acceptance-test-from-criteria (in the qa-bdd
plugin) if the team uses @AC-X.Y tags - those tags are the ground
truth the LLM's semantic guess can be checked against.The mapper reads code; it does not run it. A test that imports cleanly but throws at runtime can still be classified "covered," so a green matrix is a prompt to verify, not a sign-off on its own.