Dogfood: Systematic Web Application QA Testing
Operating Rule
Use Playwright MCP first whenever it is available. Load the playwright skill, then call skill_mcp with mcp_name="playwright" for browser work. Do not start with ad-hoc npx playwright, raw Chrome DevTools Protocol scripts, headless Chrome shell commands, Selenium, or generated browser scripts unless Playwright MCP is unavailable or missing a needed capability.
Fallback order:
- Playwright MCP through
skill_mcp.
- browser-harness or another configured browser automation skill.
- Direct HTTP checks with
curl plus static screenshots only when no browser automation exists.
- Ad-hoc local browser scripts only as a last resort, and note the limitation in the report.
Overview
This skill guides systematic exploratory QA testing of web applications. Navigate the app, inspect page structure, interact with controls, capture screenshots, collect console/network evidence, classify issues, and produce a structured report.
Inputs
The user provides:
- Target URL: the entry point to test.
- Scope: focused area or full-site pass.
- Output directory: optional, default
./dogfood-output.
Phase 1: Plan
- Create the output structure:
{output_dir}/
├── screenshots/
└── report.md
- Identify the testing scope and key flows.
- List pages/features to exercise: navigation, forms, auth, search, uploads, edge/error states, and responsive layouts.
- If Playwright MCP is available, load the
playwright skill before browser interaction.
Phase 2: Explore With Playwright MCP
Use this MCP sequence for each important page or flow:
- Set viewport with
browser_resize for desktop.
- Navigate with
browser_navigate and wait for the page to settle using browser_wait_for when needed.
- Capture structure with
browser_snapshot and save it to {output_dir}. Prefer snapshot refs for actions.
- Capture visual evidence with
browser_take_screenshot, saving under {output_dir}/screenshots.
- Capture console output with
browser_console_messages after navigation and after each meaningful interaction.
- Capture network activity with
browser_network_requests; include static requests on initial page load and omit static requests for API-flow checks unless needed.
- Interact through MCP actions:
browser_click, browser_fill_form, browser_type, browser_press_key, browser_select_option, browser_file_upload, and browser_evaluate.
- Use
browser_run_code_unsafe only when normal MCP actions cannot express a needed multi-step interaction. Keep snippets small and evidence-focused.
Important: MCP snapshots expose element refs like e400. Prefer those exact refs for browser_click and browser_fill_form. If a text selector fails, take or read a fresh snapshot before trying another selector.
Phase 3: Interaction Checklist
For each feature tested:
- Click links/buttons and confirm expected navigation or state change.
- Fill forms with valid, invalid, empty, long, and special-character inputs where relevant.
- Test keyboard navigation with Tab, Enter, Escape, and important shortcuts.
- Scroll long pages and scrollable containers.
- Test responsive behavior by resizing at least once to a mobile viewport.
- After every significant action, check console, network, screenshot, and expected vs actual behavior.
For API docs such as Swagger UI or ReDoc:
- Verify
/docs or equivalent page renders, not just returns HTML.
- Verify the schema endpoint loads, usually
/openapi.json.
- Expand representative operations.
- Use "Try it out" on at least one safe GET and one safe non-destructive write/search operation when credentials are available.
- Confirm required auth parameters are visible and executable.
- Do not execute destructive operations unless the user explicitly asks.
Phase 4: Collect And Classify Evidence
For every issue:
- Save a screenshot showing the issue.
- Record URL, steps to reproduce, expected behavior, actual behavior, console errors, failed network requests, and screenshot path.
- Classify using
references/issue-taxonomy.md:
- Severity: Critical, High, Medium, Low.
- Category: Functional, Visual, Accessibility, Console, UX, Content.
- De-duplicate repeated manifestations of the same root issue.
Phase 5: Report
Generate {output_dir}/report.md using templates/dogfood-report-template.md.
The report must include:
- Executive summary with issue counts by severity.
- Per-issue sections sorted by severity.
- Screenshot references using
MEDIA:<screenshot_path>.
- Console and network evidence when relevant.
- Summary table.
- Testing coverage: pages tested, features tested, not tested, blockers.
- If no issues are found, say so explicitly and still include evidence screenshots/snapshots.
Playwright MCP Evidence Pattern
Use this pattern to avoid losing evidence:
- Initial page:
browser_snapshot, browser_take_screenshot, browser_console_messages, browser_network_requests with static=true.
- After opening a flow: fresh
browser_snapshot, screenshot, console, and non-static network log.
- After submission/execution: wait for visible success/error text, then snapshot, screenshot, console, and network log.
- Mobile pass:
browser_resize, navigate or reload, screenshot, console, and browser_evaluate for horizontal overflow.
Example overflow check:
() => ({
bodyWidth: document.body.scrollWidth,
viewportWidth: window.innerWidth,
hasHorizontalOverflow: document.body.scrollWidth > window.innerWidth + 2
})
Tips
- Always check console output after navigation and significant interactions.
- Read snapshots before clicking when selectors are ambiguous.
- Save artifacts to deterministic paths under the output directory.
- If a browser tool attempt fails, record why and switch to the next supported tool instead of repeatedly retrying the same failed path.
- Avoid creating temporary test files in the project unless needed; remove them before finishing.
- Do not install packages or rely on
npx if Playwright MCP is already available.
- When reporting screenshots to the user, include
MEDIA:<screenshot_path> so evidence can render inline.
1---2name: dogfood3description: Exploratory QA of web apps: find bugs, evidence, reports. Use when testing a website or web app with browser interactions, screenshots, console/network checks, or structured QA reporting.4---56# Dogfood: Systematic Web Application QA Testing78## Operating Rule910Use Playwright MCP first whenever it is available. Load the `playwright` skill, then call `skill_mcp` with `mcp_name="playwright"` for browser work. Do not start with ad-hoc `npx playwright`, raw Chrome DevTools Protocol scripts, headless Chrome shell commands, Selenium, or generated browser scripts unless Playwright MCP is unavailable or missing a needed capability.1112Fallback order:131. Playwright MCP through `skill_mcp`.142. browser-harness or another configured browser automation skill.153. Direct HTTP checks with `curl` plus static screenshots only when no browser automation exists.164. Ad-hoc local browser scripts only as a last resort, and note the limitation in the report.1718## Overview1920This skill guides systematic exploratory QA testing of web applications. Navigate the app, inspect page structure, interact with controls, capture screenshots, collect console/network evidence, classify issues, and produce a structured report.2122## Inputs2324The user provides:251. Target URL: the entry point to test.262. Scope: focused area or full-site pass.273. Output directory: optional, default `./dogfood-output`.2829## Phase 1: Plan30311. Create the output structure:32 ```33 {output_dir}/34 ├── screenshots/35 └── report.md36 ```372. Identify the testing scope and key flows.383. List pages/features to exercise: navigation, forms, auth, search, uploads, edge/error states, and responsive layouts.394. If Playwright MCP is available, load the `playwright` skill before browser interaction.4041## Phase 2: Explore With Playwright MCP4243Use this MCP sequence for each important page or flow:44451. Set viewport with `browser_resize` for desktop.462. Navigate with `browser_navigate` and wait for the page to settle using `browser_wait_for` when needed.473. Capture structure with `browser_snapshot` and save it to `{output_dir}`. Prefer snapshot refs for actions.484. Capture visual evidence with `browser_take_screenshot`, saving under `{output_dir}/screenshots`.495. Capture console output with `browser_console_messages` after navigation and after each meaningful interaction.506. Capture network activity with `browser_network_requests`; include static requests on initial page load and omit static requests for API-flow checks unless needed.517. Interact through MCP actions: `browser_click`, `browser_fill_form`, `browser_type`, `browser_press_key`, `browser_select_option`, `browser_file_upload`, and `browser_evaluate`.528. Use `browser_run_code_unsafe` only when normal MCP actions cannot express a needed multi-step interaction. Keep snippets small and evidence-focused.5354Important: MCP snapshots expose element refs like `e400`. Prefer those exact refs for `browser_click` and `browser_fill_form`. If a text selector fails, take or read a fresh snapshot before trying another selector.5556## Phase 3: Interaction Checklist5758For each feature tested:5960- Click links/buttons and confirm expected navigation or state change.61- Fill forms with valid, invalid, empty, long, and special-character inputs where relevant.62- Test keyboard navigation with Tab, Enter, Escape, and important shortcuts.63- Scroll long pages and scrollable containers.64- Test responsive behavior by resizing at least once to a mobile viewport.65- After every significant action, check console, network, screenshot, and expected vs actual behavior.6667For API docs such as Swagger UI or ReDoc:6869- Verify `/docs` or equivalent page renders, not just returns HTML.70- Verify the schema endpoint loads, usually `/openapi.json`.71- Expand representative operations.72- Use "Try it out" on at least one safe GET and one safe non-destructive write/search operation when credentials are available.73- Confirm required auth parameters are visible and executable.74- Do not execute destructive operations unless the user explicitly asks.7576## Phase 4: Collect And Classify Evidence7778For every issue:79801. Save a screenshot showing the issue.812. Record URL, steps to reproduce, expected behavior, actual behavior, console errors, failed network requests, and screenshot path.823. Classify using `references/issue-taxonomy.md`:83 - Severity: Critical, High, Medium, Low.84 - Category: Functional, Visual, Accessibility, Console, UX, Content.854. De-duplicate repeated manifestations of the same root issue.8687## Phase 5: Report8889Generate `{output_dir}/report.md` using `templates/dogfood-report-template.md`.9091The report must include:921. Executive summary with issue counts by severity.932. Per-issue sections sorted by severity.943. Screenshot references using `MEDIA:<screenshot_path>`.954. Console and network evidence when relevant.965. Summary table.976. Testing coverage: pages tested, features tested, not tested, blockers.987. If no issues are found, say so explicitly and still include evidence screenshots/snapshots.99100## Playwright MCP Evidence Pattern101102Use this pattern to avoid losing evidence:103104- Initial page: `browser_snapshot`, `browser_take_screenshot`, `browser_console_messages`, `browser_network_requests` with `static=true`.105- After opening a flow: fresh `browser_snapshot`, screenshot, console, and non-static network log.106- After submission/execution: wait for visible success/error text, then snapshot, screenshot, console, and network log.107- Mobile pass: `browser_resize`, navigate or reload, screenshot, console, and `browser_evaluate` for horizontal overflow.108109Example overflow check:110```js111() => ({112 bodyWidth: document.body.scrollWidth,113 viewportWidth: window.innerWidth,114 hasHorizontalOverflow: document.body.scrollWidth > window.innerWidth + 2115})116```117118## Tips119120- Always check console output after navigation and significant interactions.121- Read snapshots before clicking when selectors are ambiguous.122- Save artifacts to deterministic paths under the output directory.123- If a browser tool attempt fails, record why and switch to the next supported tool instead of repeatedly retrying the same failed path.124- Avoid creating temporary test files in the project unless needed; remove them before finishing.125- Do not install packages or rely on `npx` if Playwright MCP is already available.126- When reporting screenshots to the user, include `MEDIA:<screenshot_path>` so evidence can render inline.