qa-verification
QA verification skill that tests like a human QA would — navigating the app in a browser, looking at what's on screen, and flagging anything that looks wrong. Use when verifying implemented features match task specifications, testing user flows, or validating acceptance criteria from docs/TASKS.md. Triggers on "verify this PR", "QA this feature", "visual test", "check the UI", "screenshot test", "verify task X". Works against localhost, preview/staging deployments, and production URLs. Auto-selects Google accounts; pauses for user assistance only on credential-based login flows.
What this skill does
# QA Verification
Test like a human QA — navigate the app, look at the screen, and flag what looks wrong.
## Core Rules
1. **Screenshots are your eyes.** Every verification judgment must come from looking at a screenshot. If you can't see it in the screenshot, you can't claim it passes or fails.
2. **`browser_snapshot` is for interaction only.** You need snapshot refs to click buttons and fill forms — that's fine. But NEVER use snapshot/DOM data to verify acceptance criteria. A human QA doesn't open DevTools to check if a element exists; they look at the screen.
3. **Flag visual problems even if they aren't in the acceptance criteria.** A human QA notices when a modal is cut off, text overflows its container, buttons overlap, or layout looks broken. You should too. Report these as additional findings separate from acceptance criteria results. **Major visual issues FAIL the PR** — see severity rules below.
5. **Don't rationalize away visual bugs.** If a modal is unreadable, a layout is broken, or UI is unusable, that's a FAIL — even if every acceptance criterion technically passes. Never downgrade a major visual issue to "non-blocking" or "note it for later". If a user would look at the screen and say "this is broken", the PR fails.
4. **Navigate like a user.** Click links, fill forms, wait for pages to load. Don't skip steps or assume state.
## What to Look For
Beyond acceptance criteria, flag anything a human would notice:
- **Layout issues** — elements overlapping, content cut off at viewport edges, modals extending off-screen, unexpected scrollbars
- **Text problems** — truncated labels, text overflowing containers, unreadable contrast, placeholder text still showing
- **Broken interactions** — buttons that don't appear clickable, missing hover/focus states, forms that don't respond
- **Loading/state issues** — spinners that never resolve, flash of unstyled content, empty states where data should be
- **Visual inconsistencies** — misaligned elements, inconsistent spacing, elements that look out of place
### Visual Issue Severity
Every visual issue must be classified:
| Severity | Meaning | Effect on Verdict |
|----------|---------|-------------------|
| **Minor** | Cosmetic nits — slightly off spacing, alignment, minor inconsistencies | Note in report, does NOT affect verdict |
| **Major** | Unusable UI — content unreadable, overlapping elements that block interaction, broken modals, missing backdrops that make dialogs illegible | **FAIL the PR**, same as a failed acceptance criterion |
**When in doubt, ask: "Would a user be able to complete this task?"** If the answer is no, it's Major.
## Workflow
### 1. Parse Task Specification
Read the task file from `docs/tasks/task-<id>.md` or `docs/TASKS.md`. Extract:
- **Acceptance criteria**: Specific conditions to verify
- **User flows**: Step-by-step interactions to walk through
If user specifies a PR number, use `gh pr view <number>` to identify affected files and infer the relevant task.
### 2. Gather Test Context
Before starting, collect:
| Item | Source | Default |
|------|--------|---------|
| **Target URL** | User-provided | `http://localhost:3000` (also works with preview/staging/production URLs) |
| **Task/PR** | User-specified | Ask user |
| **Auth required?** | Task spec or inference | Assume no |
| **Screenshot dir** | User preference | `./qa-screenshots/` |
### 3. Clean Screenshot Directory
Before taking any screenshots, wipe the screenshot directory to remove leftovers from previous runs:
```bash
rm -rf qa-screenshots/ && mkdir -p qa-screenshots/
```
### 4. Verification Loop
For each acceptance criterion:
```
1. SCREENSHOT the current state
2. LOOK at the screenshot — does everything look right?
3. ACT — click, type, navigate (use browser_snapshot only to get element refs)
4. WAIT for the page to settle
5. SCREENSHOT the result
6. LOOK at the screenshot — did the expected thing happen? Does anything look off?
7. RECORD the result with screenshot references
```
At every screenshot, ask yourself: "If I were a human looking at this screen, would anything catch my eye as wrong?" Flag it even if it's unrelated to the current criterion.
### 5. Authentication Handling
**Google Account Selection — handle automatically:**
If the page shows a Google account picker ("Choose an account", list of emails), click the first account and continue. Do NOT ask the user for help.
```
1. browser_take_screenshot to see the auth screen
2. If it looks like a Google account picker, browser_snapshot to get the ref
3. browser_click the first account
4. browser_wait_for(time=2) for redirect
5. browser_take_screenshot to confirm auth completed
6. Continue verification
```
**Credential-based Login — defer to user:**
If the page has a username/password form, pause and ask:
```markdown
## Auth Required
I've encountered a login screen at [URL].
**Screenshot:** auth-required.png
**Options:**
1. **Manual login**: I'll wait while you log in via the browser, then continue
2. **Skip auth flows**: Mark auth-required tests as SKIPPED
3. **Provide credentials**: Share test credentials to proceed
```
### 6. Screenshot Strategy
| When | Filename Pattern | Why |
|------|------------------|-----|
| Before any action | `{criterion}-before-{action}.png` | Baseline |
| After action completes | `{criterion}-after-{action}.png` | Verify result |
| Something looks wrong | `{criterion}-FAIL-{desc}.png` | Evidence |
| Visual issue unrelated to criteria | `visual-issue-{desc}.png` | Additional finding |
- Use `fullPage: true` for layout verification
- Use element screenshots for component-level detail
- PNG format
### 7. Post Screenshots & Report to PR
After completing all verifications, if a PR number is known:
**Step A: Commit screenshots to the PR branch.**
```bash
# Ensure you're on the PR branch
git checkout <branch>
# Stage screenshots
git add qa-screenshots/
# Commit
git commit -m "QA screenshots for PR #<number>"
# Push to remote
git push
```
**Step B: Build image URLs and post the report as a PR comment.**
Construct image URLs using the format:
```
https://github.com/<owner>/<repo>/blob/<branch>/qa-screenshots/<filename>?raw=true
```
Get owner/repo from:
```bash
gh repo view --json nameWithOwner --jq '.nameWithOwner'
```
Embed screenshots inline in the report using markdown image syntax:
```markdown
**Screenshot:** 
```
Post the report as a PR comment:
```bash
gh pr comment <number> --body "<report with embedded images>"
```
Use a HEREDOC to pass the report body to avoid shell escaping issues.
If no PR number is known, skip posting and just output the report.
### 8. Generate Report
```markdown
# QA Report
**Task:** [task ID or PR number]
**URL:** [target URL]
**Date:** [timestamp]
**Screenshots:** [directory path]
## Summary
- Passed: X
- Failed: Y
- Skipped: Z
- Visual Issues: N minor, M major
- **Verdict: PASS / FAIL**
## Acceptance Criteria Results
### 1. [Criterion]
**Status:** PASS / FAIL / SKIP
**Steps:**
1. [What you did]

2. [What you saw]

**Notes:** [What you verified visually]
## Additional Visual Issues
### [Issue description]

**Severity:** Minor / Major
**Details:** [What looks wrong and where]
```
### Verdict Rules
**PASS** when:
- All acceptance criteria pass
- No Major visual issues
**FAIL** when ANY of:
- Any acceptance criterion fails
- Any Major visual issue found (unusable UI, unreadable content, broken interactions)
A PR with all acceptance criteria passing but a Major visual issue is a **FAIL**. Do not pass it with a note — fail it aRelated in Design
contribute
IncludedLocal-only OSS contribution command center. Auto-refreshes the user's in-flight PR and issue state on invoke so conversations start with full context — no need to brief Claude on what's in flight. Helps the user find issues to contribute to on GitHub, builds per-repo dossiers of what each upstream expects (CLA, DCO, branch convention, AI policy, draft-first, review bots, issue templates), runs deterministic gates before any external action so AI-assisted contributions don't reach maintainers as slop. State is markdown-only: candidate files at ~/.contribute-system/candidates/, repo dossiers at ~/.contribute-system/research/, append-only event log at ~/.contribute-system/log.jsonl. No database, no cloud calls. Use when the user asks about their PRs / issues / contributions, wants to find new work to take on, claim an issue, build/refresh a repo's dossier, or draft a Design Issue or PR. Trigger with "/contribute", "what's my PR status", "find a contribution", "claim issue X", "draft a Design Issue for Y", "refresh dossier for Z".
architectural-analysis
IncludedUser-triggered deep architectural analysis of a codebase or scoped subtree across eight modes — information architecture, data flow, integration points, UI surfaces, interaction patterns, data model, control flow, and failure modes. This skill should be used when the user asks to "diagram this codebase," "map the architecture," "show the data flow," "give me an ERD," "trace control flow," "find the integration points," "verify the layout pattern," "audit the UX architecture," or any similar request whose primary deliverable is mermaid diagrams plus cited reports under docs/architecture/. Dispatches haiku/sonnet sub-agents in parallel for per-mode exploration, then verifies every citation mechanically before any node lands in a diagram. Not for one-off prose explanations of code (use code-explanation) or for high-level system design from scratch (use system-design).
mcp
IncludedModel Context Protocol (MCP) server development and tool management. Languages: Python, TypeScript. Capabilities: build MCP servers, integrate external APIs, discover/execute MCP tools, manage multi-server configs, design agent-centric tools. Actions: create, build, integrate, discover, execute, configure MCP servers/tools. Keywords: MCP, Model Context Protocol, MCP server, MCP tool, stdio transport, SSE transport, tool discovery, resource provider, prompt template, external API integration, Gemini CLI MCP, Claude MCP, agent tools, tool execution, server config. Use when: building MCP servers, integrating external APIs as MCP tools, discovering available MCP tools, executing MCP capabilities, configuring multi-server setups, designing tools for AI agents.
react-native-skia
IncludedDesign, build, debug, and optimise high-polish animated graphics in React Native or Expo using @shopify/react-native-skia, Reanimated, and Gesture Handler. Use when the user wants canvas-driven UI, shaders, paths, rich text, image filters, sprite fields, Skottie, video frames, snapshots, web CanvasKit setup, or performance tuning for custom motion-heavy elements such as loaders, hero art, cards, charts, progress indicators, particle systems, or gesture-driven surfaces. Also use when the user asks for fluid, glow, glass, blob, parallax, 60fps/120fps, or GPU-friendly animated effects in React Native, even if they do not explicitly say "Skia". Do not use for ordinary form/layout work with standard views.
plaid
IncludedProduct Led AI Development — guides founders from idea to launched product. Six capabilities: Idea (discover a product idea), Validate (pressure-test the idea against fatal flaws, problem reality, competition, and 2-week MVP feasibility), Plan (vision intake + document generation), Design (translate image references into a design.md spec), Launch (go-to-market strategy), and Build (roadmap execution). Use when someone says "PLAID", "plaid idea", "help me find an idea", "product idea", "idea from my business", "idea from my expertise", "plaid validate", "validate my idea", "pressure-test", "is this idea good", "find fatal flaws", "validate the problem", "plan a product", "define my vision", "generate a PRD", "product strategy", "plaid design", "design from image", "translate image to design", "create design.md", "extract design tokens", "plaid launch", "go-to-market", "launch plan", "GTM strategy", "launch playbook", "plaid build", "build the app", "start building", or "execute the roadmap".
nextjs-framer-motion-animations
IncludedAdds production-safe Motion for React or Framer Motion animations to Next.js apps, including reveal, hover and tap micro-interactions, whileInView, stagger, AnimatePresence, layout and layoutId transitions, reorder, scroll-linked UI, and lightweight route-content transitions. Use when the user asks to add, refactor, or debug Motion or Framer Motion in App Router or Pages Router codebases, especially around server/client boundaries, reduced motion, LazyMotion, bundle size, hydration, or route transitions. Avoid for GSAP-style timelines, WebGL or 3D scenes, heavy scroll storytelling, or CSS-only effects unless Motion is explicitly requested.