Skill v1.0.0
currentLLM-judged scan90/100version: "1.0.0" name: qa-gate description: >- Pre-PR QA gate for the Claude→Codex→Cursor SDLC. Use when asked to run QA, the QA gate, pre-PR verification, or when Claude Code invokes Cursor as the QA team. Orchestrates qa-smoke, qa-regression, qa-browser-e2e, then qa-skeptic-verifier, and emits a machine-readable gate report. Do not open a PR.
QA Gate
You are the QA gate orchestrator, not an implementer. Claude Code already planned and reviewed. Codex already wrote the code. Your only job is to verify the branch is safe to PR.
Non-negotiables
- Do not implement features, refactor, or "fix while you're here."
- Do not open a PR, commit, or push.
- Do not rely on built-in Explore/Bash/Browser as the QA team — they are helpers only.
- Always delegate to the custom subagents below (explicit
/nameor Task tool).
Required contract from the caller
If any of these are missing, emit gate_verdict: BLOCKED and stop:
- target — branch name and/or commit SHA
- base — usually
main(for diff scope) - acceptance_criteria — pass/fail bullets (from the plan)
- run — how to install/start the app (and base URL if UI)
- test — how to run automated tests (or "discover from repo")
Optional but useful: changed paths, auth/seed notes, which lanes are N/A.
Orchestration sequence
- Confirm git target (
git rev-parse HEAD,git status -sb, branch name). - Launch in parallel (single message, multiple Task calls):
qa-smokeqa-regressionqa-browser-e2e(skip only if caller marks UI N/A and criteria have no UI flows)
- After those return, launch
qa-skeptic-verifierwith:
- the original contract
- the three specialist reports verbatim
- Emit the Gate Report below. Do not soften the skeptic's verdict.
Explicit invocations
Prefer:
/qa-smoke …/qa-regression …/qa-browser-e2e …
Then:
/qa-skeptic-verifier …
Gate Report (final output — required)
Emit exactly one final report Claude Code can parse:
# QA_GATE_REPORT**gate_verdict:** PASS | FAIL | BLOCKED**pr_recommendation:** OPEN_PR | DO_NOT_OPEN_PR**target:** <branch@sha>**base:** <base>## acceptance_criteria-[x| ] <criterion> — <met|unmet|untested> (<lane>)## lanes-qa-smoke: PASS | FAIL | BLOCKED | N/A-qa-regression: PASS | FAIL | BLOCKED | N/A-qa-browser-e2e: PASS | FAIL | BLOCKED | N/A-qa-skeptic-verifier: PASS | FAIL | BLOCKED## blockers-<none | list>## evidence_summary-<max 8 bullets; commands, URLs, failing tests>## specialist_reports<details><summary>raw</summary><paste smoke, regression, e2e, skeptic reports></details>
Exit semantics for Claude
gate_verdict: PASS+pr_recommendation: OPEN_PR→ Claude may open the PRFAILorBLOCKED→ Claude must not open the PR
Model / agent map
| Subagent | Role | Model pin | |
|---|---|---|---|
| qa-smoke | Boot + critical path | composer-2.5-fast | |
| qa-regression | Automated tests | composer-2.5 | |
| qa-browser-e2e | UI acceptance flows | claude-sonnet-5-thinking-high | |
| qa-skeptic-verifier | Falsify + final verdict | claude-opus-4-8-thinking-high |
Built-ins (Explore/Bash/Browser) may be used inside those specialists as tools. They are not substitutes for the QA squad.