Files
2026-05-15 14:52:29 +08:00

6.0 KiB

Skill Test Spec: /regression-suite

Skill Summary

/regression-suite maps test coverage to GDD requirements: it reads the acceptance criteria from story files in the current sprint (or a specified epic), then scans tests/ for corresponding test files and checks whether each AC has a matching assertion. It produces a coverage report identifying which ACs are fully covered, partially covered, or untested, and which test files have no matching AC (orphan tests).

The skill may write a coverage report to production/qa/ after a "May I write" ask. No director gates apply. Verdicts: FULL COVERAGE (all ACs have tests), GAPS FOUND (some ACs are untested), or CRITICAL GAPS (a critical-priority AC has no test).


Static Assertions (Structural)

Verified automatically by /skill-test static — no fixture needed.

  • Has required frontmatter fields: name, description, argument-hint, user-invocable, allowed-tools
  • Has ≥2 phase headings
  • Contains verdict keywords: FULL COVERAGE, GAPS FOUND, CRITICAL GAPS
  • Contains "May I write" language (skill may write coverage report)
  • Has a next-step handoff (e.g., /test-setup if framework missing, /qa-plan if plan missing)

Director Gate Checks

None. /regression-suite is a QA analysis utility. No director gates apply.


Test Cases

Case 1: Full Coverage — All ACs in sprint have corresponding tests

Fixture:

  • production/sprints/sprint-004.md lists 3 stories with 2 ACs each (6 total)
  • tests/unit/ and tests/integration/ contain test files that match all 6 ACs (by system name and scenario description)

Input: /regression-suite sprint-004

Expected behavior:

  1. Skill reads all 6 ACs from sprint-004 stories
  2. Skill scans test files and matches each AC to at least one test assertion
  3. All 6 ACs have coverage
  4. Skill produces coverage report: "6/6 ACs covered"
  5. Skill asks "May I write to production/qa/regression-sprint-004.md?"
  6. File is written on approval; verdict is FULL COVERAGE

Assertions:

  • All 6 ACs appear in the coverage report
  • Each AC is marked as covered with the matching test file referenced
  • Verdict is FULL COVERAGE
  • "May I write" is asked before writing the report

Case 2: Gaps Found — 3 ACs have no tests

Fixture:

  • Sprint has 5 stories with 8 total ACs
  • Tests exist for 5 of the 8 ACs; 3 ACs have no corresponding test file or assertion

Input: /regression-suite

Expected behavior:

  1. Skill reads all 8 ACs
  2. Skill scans tests — 5 matched, 3 unmatched
  3. Coverage report lists the 3 untested ACs by story and AC text
  4. Skill asks "May I write to production/qa/regression-[sprint]-[date].md?"
  5. Report is written; verdict is GAPS FOUND

Assertions:

  • The 3 untested ACs are listed by name in the report
  • Matched ACs are also shown (not only the gaps)
  • Verdict is GAPS FOUND (not FULL COVERAGE)
  • Report is written after "May I write" approval

Case 3: Critical AC Untested — CRITICAL GAPS verdict, flagged prominently

Fixture:

  • Sprint has 4 stories; one story is Priority: Critical with 2 ACs
  • One of the critical-priority ACs has no test

Input: /regression-suite

Expected behavior:

  1. Skill reads all stories and ACs, noting which stories are critical priority
  2. Skill scans tests — the critical AC has no match
  3. Report prominently flags: "CRITICAL GAP: [AC text] — no test found (Critical priority story)"
  4. Skill recommends blocking story completion until test is added
  5. Verdict is CRITICAL GAPS

Assertions:

  • Verdict is CRITICAL GAPS (not GAPS FOUND)
  • Critical priority AC is flagged more prominently than normal gaps
  • Recommendation to block story completion is included
  • Non-critical gaps (if any) are also listed

Case 4: Orphan Tests — Test file has no matching AC

Fixture:

  • tests/unit/save_system_test.gd exists with assertions for scenarios not present in any current story's AC list
  • Current sprint stories do not reference save system

Input: /regression-suite

Expected behavior:

  1. Skill scans tests and cross-references ACs
  2. save_system_test.gd assertions do not match any current AC
  3. Test file is flagged as ORPHAN TEST in the coverage report
  4. Report notes: "Orphan tests may belong to a past or future sprint, or AC was renamed"
  5. Verdict is FULL COVERAGE or GAPS FOUND depending on overall AC coverage (orphan tests do not affect verdict, they are advisory)

Assertions:

  • Orphan test is flagged in the report
  • Orphan flag includes the filename and suggestion (past sprint / renamed AC)
  • Orphan tests do not cause a GAPS FOUND verdict on their own
  • Overall verdict reflects AC coverage only

Case 5: Director Gate Check — No gate; regression-suite is a QA utility

Fixture:

  • Sprint with stories and test files

Input: /regression-suite

Expected behavior:

  1. Skill produces coverage report and writes it
  2. No director agents are spawned
  3. No gate IDs appear in output

Assertions:

  • No director gate is invoked
  • No gate skip messages appear
  • Verdict is FULL COVERAGE, GAPS FOUND, or CRITICAL GAPS — no gate verdict

Protocol Compliance

  • Reads story ACs from sprint files before scanning tests
  • Matches ACs to tests by system name and scenario (not file name alone)
  • Flags critical-priority untested ACs as CRITICAL GAPS
  • Flags orphan tests (exist in tests/ but no AC matches)
  • Asks "May I write" before persisting the coverage report
  • Verdict is FULL COVERAGE, GAPS FOUND, or CRITICAL GAPS

Coverage Notes

  • The heuristic for matching an AC to a test (by system name + scenario keywords) is approximate; exact matching logic is defined in the skill body.
  • Integration test coverage is mapped the same way as unit test coverage; no distinction in verdicts is made between the two.
  • This skill does not run the tests — it maps AC text to test assertions. Test execution is handled by the CI pipeline.