qa

Verify a feature works after implementation. Actively try to break it — edge cases, error paths, integration wiring, and real usage flows.

40 stars

Best use case

qa is best used when you need a repeatable AI agent workflow instead of a one-off prompt.

Verify a feature works after implementation. Actively try to break it — edge cases, error paths, integration wiring, and real usage flows.

Teams using qa should expect a more consistent output, faster repeated execution, less prompt rewriting.

When to use this skill

  • You want a reusable workflow that can be run more than once with consistent structure.

When not to use this skill

  • You only need a quick one-off answer and do not need a reusable workflow.
  • You cannot install or maintain the underlying files, dependencies, or repository context.

Installation

Claude Code / Cursor / Codex

$curl -o ~/.claude/skills/qa/SKILL.md --create-dirs "https://raw.githubusercontent.com/kdlbs/kandev/main/.agents/skills/qa/SKILL.md"

Manual Installation

  1. Download SKILL.md from GitHub
  2. Place it in .claude/skills/qa/SKILL.md inside your project
  3. Restart your AI agent — it will auto-discover the skill

How qa Compares

Feature / AgentqaStandard Approach
Platform SupportNot specifiedLimited / Varies
Context Awareness High Baseline
Installation ComplexityUnknownN/A

Frequently Asked Questions

What does this skill do?

Verify a feature works after implementation. Actively try to break it — edge cases, error paths, integration wiring, and real usage flows.

Where can I find the source code?

You can find the source code on GitHub using the link provided at the top of the page.

SKILL.md Source

# QA

Verify that a feature works as intended after implementation. Assume bugs exist and hunt for them.

Mindset: you are not confirming it works — you are discovering where it breaks.

## Available skills

- **`/tdd`** — Use to write tests for any gaps found during QA.
- **`/e2e`** — Use to write Playwright E2E tests for user-facing flows that lack coverage.

---

## Before starting: create the pipeline

Create these tasks immediately (use your task/todo tracking tool if available):

1. **Understand the intent** — Read task/PR/commits to understand what was built
2. **Trace the wiring** — Verify the feature is actually connected end-to-end
3. **Test the happy path** — Run the feature as a user would
4. **Try to break it** — Boundary values, error paths, concurrency, auth
5. **Verify test coverage** — Check for missing tests, write them if needed
6. **Report** — Summarize findings with verdict

Mark each task in_progress when you begin it and completed when you finish it.

---

## Phase 1: Understand the intent

Mark task 1 as in_progress.

Read the task description, PR, or recent commits to understand what was built and what it should do. Identify:
- The expected behavior (happy path)
- System boundaries (user input, API endpoints, external data)
- Integration points (what calls what, data flow end-to-end)

Mark task 1 as completed.

---

## Phase 2: Trace the wiring

Mark task 2 as in_progress.

Before testing behavior, verify the feature is actually connected:
- Exports are imported and used (not just defined)
- API routes have consumers (frontend calls them, or tests exercise them)
- Data flows end-to-end: input -> handler -> storage -> response -> display
- New config/env vars are documented and have defaults

If something is orphaned or unwired, stop and report it — no point testing disconnected code.

Mark task 2 as completed.

---

## Phase 3: Test the happy path

Mark task 3 as in_progress.

Run the feature as a user would. For backend changes, call the API. For frontend changes, trace the UI flow. For both, follow the full path:
- Does the basic use case work?
- Does the response/output match expectations?
- Is the data persisted correctly?

Mark task 3 as completed.

---

## Phase 4: Try to break it

Mark task 4 as in_progress.

Systematically test these categories (skip what doesn't apply):

**Boundary values:**
- Empty input, nil/null, zero, negative numbers, max values
- Empty arrays/maps, single element, very large collections
- Strings: empty, whitespace-only, special characters, very long

**Error paths:**
- What happens when dependencies fail (DB down, API timeout, invalid response)?
- Are errors surfaced clearly or silently swallowed?
- Does the system recover or get stuck in a bad state?

**Concurrency:**
- What happens with simultaneous requests to the same resource?
- Race conditions: create/update/delete at the same time
- Does it handle duplicate submissions?

**Authorization:**
- Can the feature be accessed without proper auth?
- Does it respect permission boundaries?

Mark task 4 as completed.

---

## Phase 5: Verify test coverage

Mark task 5 as in_progress.

Check that the implementation has tests covering the behaviors you just verified:
- Are the happy path and key error paths tested?
- Are edge cases from Phase 4 covered?
- If tests are missing, write them using `/tdd` (or `/e2e` for user-facing flows)

Mark task 5 as completed.

---

## Phase 6: Report

Mark task 6 as in_progress.

Summarize what was tested and what was found:

**Verified working:**
- List of behaviors confirmed working

**Issues found:**
- file:line - description, how to reproduce, severity (blocker/suggestion)

**Missing test coverage:**
- Behaviors that work but have no automated test

**Verdict:** Feature complete / Has issues — fix before merge

Mark task 6 as completed.

Related Skills

verify

40
from kdlbs/kandev

Run format, typecheck, test, and lint across the monorepo. Use after implementing changes.

tdd

40
from kdlbs/kandev

Implement changes using Test-Driven Development (Red-Green-Refactor). Use for bug fixes, new features, or any code change that should have test coverage.

spec

40
from kdlbs/kandev

Write a feature spec — the "what & why" of a kandev product feature, before coding. Use when the user says "let's spec X" or starts a new product feature.

simplify

40
from kdlbs/kandev

Simplify recently changed code — inline one-off abstractions, remove speculative code, reduce nesting, replace cleverness with clarity. Run after implementing a feature.

record

40
from kdlbs/kandev

Record an architectural decision (ADR) or save an implementation plan. Use after making significant design choices or completing features.

push

40
from kdlbs/kandev

Commit and push to the current branch. Use --fixup to also wait for CI/CodeRabbit and fix issues.

pr

40
from kdlbs/kandev

Commit, push, and create a PR. Default is ready-for-review with auto-fixup. Use --draft to skip review/fixup.

pr-fixup

40
from kdlbs/kandev

Wait for CI checks and automated reviews (CodeRabbit, Greptile, Claude) on a PR, fix failures and address comments, then push.

playwright-cli

40
from kdlbs/kandev

Automate browser interactions, test web pages and work with Playwright tests.

fix

40
from kdlbs/kandev

Fix bugs and issues — reproduce, find root cause, minimal fix with regression test. Use when something is broken.

feature

40
from kdlbs/kandev

Guided feature development — brainstorm, explore codebase, design architecture, implement with TDD, and review. Use for new features or significant changes.

e2e

40
from kdlbs/kandev

Write and run web E2E tests (Playwright) using TDD — locations, patterns, commands, and debugging.