feat: add /speckit.qa command — systematic QA testing#2041
feat: add /speckit.qa command — systematic QA testing#2041arunt14 wants to merge 2 commits intogithub:mainfrom
Conversation
Add a new core command for systematic quality assurance testing with two modes: - Browser QA: Playwright/Puppeteer-driven UI testing with screenshots - CLI QA: Test runner execution, API validation, command-line verification Validates acceptance criteria from spec.md against actual application behavior. Generates QA report with pass/fail evidence and coverage metrics. Inspired by GStack's /qa and /browse commands.
There was a problem hiding this comment.
Pull request overview
Adds a new core /speckit.qa command template plus a QA report template to support systematic, evidence-based QA validation of a feature’s acceptance criteria (browser-driven and/or CLI-driven), fitting into the Spec Kit command workflow as a post-implementation quality gate.
Changes:
- Added
templates/commands/qa.mdto define the/speckit.qaworkflow, including before/after extension hook support. - Added
templates/qa-template.mdto standardize the generated QA report format.
Reviewed changes
Copilot reviewed 2 out of 2 changed files in this pull request and generated 3 comments.
| File | Description |
|---|---|
| templates/commands/qa.md | New command template that outlines QA context loading, scenario extraction, browser/CLI execution, reporting, and extension hooks. |
| templates/qa-template.md | New markdown template for QA reports (results table, AC coverage matrix, suite summary, failure details, environment, metrics). |
💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.
templates/commands/qa.md
Outdated
| - Flag any pre-existing test failures vs. new failures from implementation changes | ||
|
|
||
| 9. **Generate QA Report**: | ||
| Create the QA report at `FEATURE_DIR/qa/qa-{timestamp}.md` using the QA report template. The report must include: |
There was a problem hiding this comment.
Step 9 says to generate the report “using the QA report template” but doesn’t reference the canonical template file path. Other commands explicitly point to templates/*-template.md (e.g., checklist/tasks), which makes outputs consistent and avoids drift. Please reference templates/qa-template.md (or .specify/templates/qa-template.md depending on runtime path conventions) and specify that the report should follow it verbatim.
| Create the QA report at `FEATURE_DIR/qa/qa-{timestamp}.md` using the QA report template. The report must include: | |
| Create the QA report at `FEATURE_DIR/qa/qa-{timestamp}.md` using the canonical QA report template at `templates/qa-template.md`, following it verbatim (do not add, remove, or reorder sections). The report must include: |
templates/commands/qa.md
Outdated
| 10. **Provide QA Verdict**: | ||
| Based on results, provide one of: | ||
| - ✅ **QA PASSED**: All critical scenarios pass, no blockers. Safe to proceed to `/speckit.ship` | ||
| - ⚠️ **QA PASSED WITH NOTES**: Critical paths pass but some edge cases or non-critical scenarios failed. List items. | ||
| - ❌ **QA FAILED**: Critical user flows or acceptance criteria are not met. Must fix and re-test. |
There was a problem hiding this comment.
The verdict terminology is inconsistent: the report/template sections use “✅ ALL PASSED /
| --- | ||
| description: Run systematic QA testing against the implemented feature, validating acceptance criteria through browser-driven or CLI-based testing. | ||
| scripts: | ||
| sh: scripts/bash/check-prerequisites.sh --json --require-tasks --include-tasks | ||
| ps: scripts/powershell/check-prerequisites.ps1 -Json -RequireTasks -IncludeTasks |
There was a problem hiding this comment.
Adding templates/commands/qa.md makes qa a core command name when discovered from the templates directory, but the hard-coded fallback list in src/specify_cli/extensions.py (_FALLBACK_CORE_COMMAND_NAMES) doesn’t include qa. In environments where command discovery isn’t available, extension validation could incorrectly allow an extension namespace/id of qa. Please add qa to the fallback set to keep core/extension conflict checks consistent.
|
Please deliver this as an extension. See https://github.com/github/spec-kit/tree/main/extensions |
- Reference templates/qa-template.md explicitly in step 9 - Standardize verdict terminology (ALL PASSED/PARTIAL PASS/FAILURES FOUND) - Add 'qa' to _FALLBACK_CORE_COMMAND_NAMES in extensions.py
|
Thanks for the review! I've addressed all 3 comments in the latest push:
|
|
Please review https://github.com/github/spec-kit/blob/main/extensions/EXTENSION-PUBLISHING-GUIDE.md for publishing a community hosted extension |
|
Thanks @mnriem for the guidance! I've reviewed the Extension Publishing Guide and understand the direction - these should be delivered as community extensions rather than core commands. I'll restructure these as proper extensions following the extension.yml manifest pattern and the standard extension directory structure. Will close this PR and resubmit as an extension contribution to catalog.community.json. |
|
Closing in favor of PR #2049 — restructured as a community extension per maintainer feedback. Extension repo and v1.0.0 release are available. |
Description
Problem
Spec-Kit's
/speckit.implementcommand follows a TDD approach during development, but there is no dedicated QA testing step after implementation is complete. Unit tests written during TDD verify individual components, but they don't validate the end-to-end user experience against the acceptance criteria defined inspec.md. There's no way to answer: "Does the built application actually do what the spec says it should?"This gap is especially problematic for web applications, where visual rendering, navigation flows, and form interactions can break even when unit tests pass.
Industry context: GStack's
/qaand/browsecommands demonstrate that persistent browser automation for visual QA — combined with acceptance criteria validation — catches an entire class of issues that unit tests miss.Solution
Adds
/speckit.qa— a new core command for systematic quality assurance testing that validates acceptance criteria fromspec.mdagainst actual application behavior. Supports two modes:Browser QA Mode (web applications):
CLI QA Mode (non-web applications):
Output: QA report with pass/fail evidence, acceptance criteria coverage matrix, and verdict (QA PASSED / QA PASSED WITH NOTES / QA FAILED).
Business Value
Workflow Position
Files Added
templates/commands/qa.mdbefore_qa,after_qa)templates/qa-template.mdTesting
uv run specify --helpuv sync && uv run pytest— 878/972 pass (44 failures are pre-existing, unrelated to this change)specify initAI Disclosure
implement.mdandanalyze.md. All content was reviewed and validated against the project's template conventions.