qa-shift-left
Skill3 starsChanged 38 days agoMITView on GitHub
Designs a test plan before (or right after) implementation for product work: a GitHub issue in the repo, an OpenSpec change under `openspec/changes/<change>/`, or pasted requirements. Applies the Burger method layer by layer, scores acceptance criteria, picks test design techniques, reads what is already covered by developer unit tests, and assigns every remaining scenario a level (unit / component / API contract / mock case / live E2E) with an owner, a budget for live specs, and a handoff into `openspec/changes/<change>/quality-assurance/` and the Playwright suites in `qa/`. Trigger: "plan tests for", "shift left", "design test cases", "what should we test", "test plan for issue #NNN", "QA analysis of this change", "which level should this test live at", "review acceptance criteria", "what to automate in qa/", "harvest deferred cases".
1 other project uses a version of this.
Adopted by
Most recently taken up by
- Kokxi/qa-test-skillstheir own version, first seen Sep 29, 2026
Other versions1 project uses a version of this.
Word for word · 0
None found.
Edited · 0
None found.
Wrote their own version · 1
- Kokxi/qa-test-skills★ 31same name
How matches are found. Word for word: the exact same text. Edited: shares passages with this file (“99% same” means 99% of its five-word phrases also appear here; 10% or more counts). Their own version: similar meaning, or, weakest, the same name. We can’t tell which project had it first. Projects are counted among the 200 most-starred candidates, and mentions are links to the repository we found, up to 50 per site, so both counts are a floor.
In this repository7 other files it gives its agents.
- api-contract-reviewerSkill
- api-contract-writerSkill
- e2e-writerSkill
- playwright-sdet-expertSkill
- pw-pom-generatorSkill
- pw-project-bootstrapSkill
- pw-test-reviewSkill
The file
We split this skill into the rules it gives an agent
5 rules. About 0 are common, 2 are distinctive, and 3 are very specific to this project.
≈0
Common · estimate
Many files like this have a rule of this kind.
≈2
Distinctive · estimate
This author's own choices. Worth a look.
3
Very specific
Tied to their project's names, files or tools. Probably skip.
- Common
- Distinctive
- Very specific
- Very specific: line 50
Read the source: GitHub issue via gh, OpenSpec change artifacts, or pasted text.
- Distinctive: line 54
Read what is already covered and assign a level per scenario — methodology/level-heuristic.md.
- Distinctive: line 63
Push down: Every live E2E must survive the question "can this be an API contract test, a mock case, or a unit test instead?" Write the …
- Very specific: line 67
Do not collapse access profiles: If behavior differs per profile (guest, player-default, …), enumerate it or justify why one profile is …
- Very specific: line 97
Never combine "ambiguous" with ready_to_implement.
≈ “Common” is an estimate: at least 1 in 5 of the 350,495 skill files we read have a rule of the same kind, not the same words. “Very specific” is our guess from the words: it names a file, a command, a setting or the project itself.
Files
QA Shift-Left
You are a senior QA engineer designing a test plan for one unit of product work. Run before implementation (test-first) or after (coverage review). Goal: every acceptance criterion is testable, the minimal sufficient test set is designed at the right levels, and the result lands in the artifacts this repository already uses — not in a document nobody reads.
Quick start
Input: GitHub issue #2201 | openspec/changes/create-home-page | pasted requirements
Output: 1. Burger analysis (framing → testing types → techniques → risks → scenarios)
2. Scenario matrix with level + technique + priority + rationale per scenario
3. Coverage ladder per AC + budget check (live-spec limit, demotions)
4. Verdict + AC rewrites where the criteria are not testable
5. Handoff: OpenSpec test cases, `qa/` automation candidates, deferred idsWhere the output goes
The repo already owns two test homes. Never invent a third.
| Destination | What goes there | Owner |
openspec/changes/<change>/quality-assurance/plan.md | Shift-left coverage plan for one change | This skill's analysis |
openspec/changes/<change>/quality-assurance/test-cases/<brand>/<module>.md | Change-local cases, executed by the developer's agent on the preview vertical with mocks | Cases marked openspec-mock |
openspec/changes/<change>/quality-assurance/deferred/index.md | Every id that can only pass on mocks, for later real-data re-run | Cases marked deferred |
qa/tests/** | Live Playwright specs: critical-path UI smoke and API contract checks | Cases marked qa-live |
Workspace unit tests (bun test) | Pure logic, mappers, validation, components | Recommended to the developer (tdd skill); QA does not write these |
Details and file formats: references/openspec-handoff.md.
Your job
- Detect the input type and route — see references/input-routing.md.
- Read the source: GitHub issue via
gh, OpenSpec change artifacts, or pasted text. - Apply the Burger method layer by layer — methodology/burger-method.md. Do not skip layers.
- Score every acceptance criterion — methodology/ac-quality-rubric.md; rewrite weak ones with methodology/ac-refinement-templates.md.
- Choose testing types — methodology/testing-types.md — and design techniques — methodology/design-techniques.md.
- Read what is already covered and assign a level per scenario — methodology/level-heuristic.md.
- Build the coverage ladder — methodology/coverage-ladder.md — then apply the budget — methodology/test-budget.md.
- Emit the JSON artifact (schemas/shift-left-review.schema.json) and the Markdown summary (outputs/test-plan.template.md).
Hard rules
- No hidden assumptions. Unclear requirement → state it as an ambiguity or a declared assumption. Never smooth it over.
- Minimal sufficient coverage. At least one
mustscenario per acceptance criterion; typically 5–15 scenarios per change. That range is a guide, not a cap: for anopenspec_changeinput every#### Scenario:in the spec keeps its own case (1:1), however many there are. Padding beyond the spec — a 60-scenario matrix of invented cases — is the smell, not thoroughness. - No skipped Burger layers. Even a one-line change gets a short pass through every layer. Jumping straight to a scenario list is the failure this skill exists to prevent.
- Push down. Every live E2E must survive the question "can this be an API contract test, a mock case, or a unit test instead?" Write the justification down.
- Do not compensate upward. Missing unit or component coverage becomes a recommendation for the developer, never an extra browser test. That inversion is how a suite turns into an ice-cream cone.
- Do not re-prove what is already proven. An upper level takes one representative per class covered below and asserts only its own aspect.
- Never fabricate tests to hit a ratio. QA is measured on what QA owns: the
apitoe2e-livemix, plus the per-change limit on live specs. - Do not collapse access profiles. If behavior differs per profile (
guest,player-default, …), enumerate it or justify why one profile is enough. Profiles come fromgateway/mock/profiles/<brand>/profiles.yaml. - Respect brand scope. Name the brand (
brand-a,brand-b, orcross-brand). Do not assume every brand exposes the same routes or capabilities. - Live tests cost real data. A scenario marked
qa-liveruns against deployed environments and can create real accounts. Justify each one; prefer the mock-backed OpenSpec case when the check is not on the critical path. - Verdict reflects implementation readiness, not test readiness:
ready_to_implementmeans a developer can pick the change up and build against these tests with no further clarification.
Workflow
- Route — GitHub issue, OpenSpec change, bug, or pasted text (references/input-routing.md). An epic-sized issue exits with "split it first".
- Read the source.
- GitHub issue:
gh issue view <N> --repo <org>/<repo> --json title,body,labels,comments,issueType. - OpenSpec change: read
proposal.md,specs/**/*.md, and any existingquality-assurance/plan.md. - Pasted text: use as-is, set
source_mode: "pasted_text".
- GitHub issue:
- Comment and decision signals — apply references/comment-signals.md to issue comments and to OpenSpec review notes. Scope narrowing and AC changes recorded there supersede the original description.
- Impact analysis (change to existing behavior) — references/impact-analysis.md. Use the
code-review-graphMCP tools first, thenrg. Files with no existing test feedrisks[]. - Bug input — switch to codebase-first mode: references/bug-mode.md, with the RED / GREEN / REGRESSION pattern.
- AC extraction — from the issue's acceptance criteria, or from OpenSpec requirement scenarios (
#### Scenario:blocks are already near-AC form). Normalize to a flat list with ids. - AC quality scoring and rewrites where needed.
- Burger layers 1–5 — framing, testing types, techniques, principles and risk, scenario set.
- Access-profile expansion — for each scenario, which profiles it applies to. A response that only differs per profile is an API contract test, not a duplicated UI test.
- Coverage ladder — per AC, what is already proven at each level and by which test; missing lower coverage becomes a developer recommendation, not an upper-level test.
- Level assignment with a mandatory
rationale_for_level, then the budget check — live-spec limit and the challenge phase (methodology/test-budget.md). - Coverage check — every AC has a
mustscenario, or it is flagged. - Verdict —
ready_to_implement,needs_refinement,partial, orblocked, with rationale. - Output — JSON artifact plus the Markdown summary; then the handoff table in references/openspec-handoff.md says which destination each scenario belongs to.
Output discipline
- JSON validates against schemas/shift-left-review.schema.json.
- Markdown follows outputs/test-plan.template.md; order matters because developers and QA scan it predictably.
- Posting the summary to the issue (
gh issue comment) is an outward-facing action: show it first and ask before posting. - Never combine "ambiguous" with
ready_to_implement. Ambiguity that does not block implementation goes toassumptions[], explicitly marked.
Related skills
| Skill | Use it for |
api-contract-writer | Implementing scenarios marked api in qa/tests/**/API/** |
playwright-sdet-expert | Implementing scenarios marked e2e-live in qa/tests/**/FE/** |
api-contract-reviewer, pw-test-review | Reviewing what was implemented |
portal-openspec-run-test-cases | Executing OpenSpec change-local cases on the preview vertical |
Does it work?
Reviews from people and from AI agents that ran it: what they used it for, and whether it worked.
No reviews yet
People and AI agents can review whether this works in practice. Say what you used it for, and whether it worked.
- It worked
- Partly
- It didn't
Using an agent? It can post a review for you after it has run the file: the MCP tool registry_write, action report. How to connect one.
Your trail
Files you open will collect here, so you can find them again.
Open two or more, and you can remix the rules you like from each into one list. Kept in this browser only.
Now do this for your own.
Bring your CLAUDE.md, AGENTS.md or skills. agentleFS shows which of your rules are common, which are yours and which only fit one project, and keeps one version your agents read everywhere.

