QA Manual (web)
Structured manual QA of a web feature, driven through Chrome MCP. The output
is evidence — verification-before-completion is the gate that consumes it.
When to use
After implementing a UI or web-flow change, before claiming it works. Pair
with verification-before-completion: this skill produces the evidence, that
one enforces the gate.
Trigger phrases that should activate this skill:
- "QA this"
- "test this manually"
- "verify the flow"
- "see if it works in the browser"
- "exercise the feature"
- "manually check it"
Pre-flight
- Confirm the feature has a clear "what should happen." If unclear, ask
the user for the happy path in 1 sentence before opening the browser.
- Identify edge cases. 2-3 conditions that would have broken before the
fix: empty input, slow network, missing auth, invalid data, double-submit,
logged-out state. Pick the ones that exercise the changed code, not
generic ones.
- Make sure the app runs. Check the manifest for a dev script
(
pnpm dev, npm start, bun dev, make run). Start it in a background
shell if not already running. Confirm the URL responds before driving the
browser.
The QA pass
For each case (happy path + edges):
- Navigate. Open the page where the feature lives via Chrome MCP's
navigate tool.
- Reset state if needed. Clear localStorage, cookies, IndexedDB if the
test needs a clean slate. A test that only passes with stale state isn't a
real test.
- Exercise the flow. Click, type, submit — mimic a real user. Use
Chrome MCP's interaction tools (
form_input for form fields, plus
whatever click/navigation tools the connected Chrome MCP exposes — check
the available tool list if unsure).
- Capture three signals each step:
- Visual: capture a screenshot of the result using Chrome MCP's
screenshot tool (or
javascript_tool to capture if no direct tool is
available).
- Console: check
read_console_messages for error / warn logs
that weren't there before.
- Network: check
read_network_requests for failed responses
(4xx/5xx) or unexpected calls.
- Compare to expected. Did the right thing happen? If not, stop and
diagnose. Don't keep clicking past a broken state.
Output format
A report with:
- Setup: env (local dev URL, branch/commit, browser).
- Cases run: numbered list.
- Results per case: Pass / Fail with screenshot ref + console/network
anomalies.
- Verdict: "Verified" or "Failed: <which case, what went wrong>".
Example:
Setup: localhost:3000, branch feat/oauth-callback, Chrome MCP.
Cases:
- Happy path: login → callback → land on dashboard. Pass.
Screenshot captured.
- Edge — missing state param: callback URL stripped of
state.
Pass. Redirects to login with error toast. Screenshot.
- Edge — double-submit: trigger callback twice in 200ms.
Pass. Idempotent, single session.
Console: clean.
Network: 1 expected 302 redirect, no errors.
Verdict: Verified.
Anti-patterns
- Don't just screenshot the happy path and stop. Edges are where bugs
hide.
- Don't ignore console warnings. New
Warning: lines mean adjacent code
is degraded.
- Don't skip the network tab. A successful render with a silent 500 in
the background is not passing.
- Don't run QA on an outdated build. If you changed code, restart the
dev server before driving the browser.
- Don't keep clicking past a broken state. Stop, diagnose, fix or report.
- Don't conflate "looks the same as before" with "works." Visual
regressions are one signal; behavior is what you're testing.
Pair with
verification-before-completion — the gate that consumes this skill's
output before allowing a "done" claim.
ui-review — broader visual / a11y / typography review. This skill is
about behavior; that one is about polish.
verify-pr — when verifying a whole PR end-to-end, not just one feature.
1---2name: qa-manual3description: Drives a local web app through Chrome MCP across the happy path plus 2-3 edge cases, capturing screenshots, console errors, and network failures to produce QA evidence. Use when manually QA'ing a web feature, testing a flow in the browser, exercising a change before claiming it works, or producing evidence for verification-before-completion.4---56# QA Manual (web)78Structured manual QA of a web feature, driven through Chrome MCP. The output9is evidence — `verification-before-completion` is the gate that consumes it.1011## When to use1213After implementing a UI or web-flow change, before claiming it works. Pair14with `verification-before-completion`: this skill produces the evidence, that15one enforces the gate.1617Trigger phrases that should activate this skill:1819- "QA this"20- "test this manually"21- "verify the flow"22- "see if it works in the browser"23- "exercise the feature"24- "manually check it"2526## Pre-flight27281. **Confirm the feature has a clear "what should happen."** If unclear, ask29 the user for the happy path in 1 sentence before opening the browser.302. **Identify edge cases.** 2-3 conditions that would have broken before the31 fix: empty input, slow network, missing auth, invalid data, double-submit,32 logged-out state. Pick the ones that exercise the changed code, not33 generic ones.343. **Make sure the app runs.** Check the manifest for a dev script35 (`pnpm dev`, `npm start`, `bun dev`, `make run`). Start it in a background36 shell if not already running. Confirm the URL responds before driving the37 browser.3839## The QA pass4041For each case (happy path + edges):42431. **Navigate.** Open the page where the feature lives via Chrome MCP's44 `navigate` tool.452. **Reset state if needed.** Clear localStorage, cookies, IndexedDB if the46 test needs a clean slate. A test that only passes with stale state isn't a47 real test.483. **Exercise the flow.** Click, type, submit — mimic a real user. Use49 Chrome MCP's interaction tools (`form_input` for form fields, plus50 whatever click/navigation tools the connected Chrome MCP exposes — check51 the available tool list if unsure).524. **Capture three signals each step:**53 - **Visual:** capture a screenshot of the result using Chrome MCP's54 screenshot tool (or `javascript_tool` to capture if no direct tool is55 available).56 - **Console:** check `read_console_messages` for `error` / `warn` logs57 that weren't there before.58 - **Network:** check `read_network_requests` for failed responses59 (4xx/5xx) or unexpected calls.605. **Compare to expected.** Did the right thing happen? If not, stop and61 diagnose. Don't keep clicking past a broken state.6263## Output format6465A report with:6667- **Setup:** env (local dev URL, branch/commit, browser).68- **Cases run:** numbered list.69- **Results per case:** Pass / Fail with screenshot ref + console/network70 anomalies.71- **Verdict:** "Verified" or "Failed: <which case, what went wrong>".7273Example:7475> **Setup:** `localhost:3000`, branch `feat/oauth-callback`, Chrome MCP.76>77> **Cases:**78>79> 1. **Happy path:** login → callback → land on dashboard. **Pass.**80> Screenshot captured.81> 2. **Edge — missing state param:** callback URL stripped of `state`.82> **Pass.** Redirects to login with error toast. Screenshot.83> 3. **Edge — double-submit:** trigger callback twice in 200ms.84> **Pass.** Idempotent, single session.85>86> **Console:** clean.87> **Network:** 1 expected 302 redirect, no errors.88>89> **Verdict:** Verified.9091## Anti-patterns9293- **Don't just screenshot the happy path and stop.** Edges are where bugs94 hide.95- **Don't ignore console warnings.** New `Warning:` lines mean adjacent code96 is degraded.97- **Don't skip the network tab.** A successful render with a silent 500 in98 the background is not passing.99- **Don't run QA on an outdated build.** If you changed code, restart the100 dev server before driving the browser.101- **Don't keep clicking past a broken state.** Stop, diagnose, fix or report.102- **Don't conflate "looks the same as before" with "works."** Visual103 regressions are one signal; behavior is what you're testing.104105## Pair with106107- `verification-before-completion` — the gate that consumes this skill's108 output before allowing a "done" claim.109- `ui-review` — broader visual / a11y / typography review. This skill is110 about behavior; that one is about polish.111- `verify-pr` — when verifying a whole PR end-to-end, not just one feature.