skills/qa/SKILL.md
QA verification with Firefox DevTools browser automation — load when a diff touches UI, views, or user-facing flows and needs functional verification before committing
npx skillsauth add athal7/dotfiles qaInstall this skill globally with one command. Works with Claude Code, Cursor, and Windsurf.
3 of 9 scanners reported clean
Some scanners were skipped, did not run, or reported a non-clean status. Review each row below.
Perform QA verification using Firefox DevTools browser automation.
openspec/changes/ for an active change proposal, or .opencode/context-log.md if no OpenSpec change exists. Look for acceptance criteria and components to test.source .envrc && echo $PORT, fall back to 3000At the start of every run, create the session directory and initialize the report:
SESSION_DIR="$HOME/.local/share/qa/$(basename "$PWD")/qa-$(date +%Y%m%d-%H%M%S)"
mkdir -p "$SESSION_DIR"
cat > "$SESSION_DIR/report.html" <<'HEADER'
<html><head><style>body{font-family:system-ui,sans-serif;max-width:1100px;margin:2em auto;padding:0 1em}.step{display:flex;gap:1.5em;margin:2em 0;align-items:start}.step img{width:55%;border:1px solid #ccc;border-radius:4px;flex-shrink:0}.step .info{padding-top:.25em}.step .info h3{margin:0 0 .5em}.step .info p{margin:0 0 .5em;color:#333}.step .info a{color:#0969da;word-break:break-all}</style></head><body>
HEADER
Reports persist per-project under ~/.local/share/qa/ so they can be referenced later (e.g. by the demo command).
After every browser action (navigate, click, fill, submit), scroll then screenshot:
evaluate_script with (el) => el.scrollIntoView({ block: 'center' }), passing the element's UID as an argevaluate_script with () => window.scrollTo(0, 0)Save the screenshot, then capture the page URL via evaluate_script with () => location.href, then append a report section:
screenshot_page saveTo="$SESSION_DIR/001-page-name.png"
cat >> "$SESSION_DIR/report.html" <<STEP
<div class="step">
<img src="001-page-name.png">
<div class="info">
<h3>Short step title</h3>
<p>One-line description of what was verified or happened.</p>
<p><a href="THE_URL">THE_URL</a></p>
</div>
</div>
STEP
Number files sequentially (001-, 002-, …). Use a short descriptive slug. Substitute the actual step title, description, filename, and captured URL into each section.
After all testing is done, close and open the report:
printf '</body></html>' >> "$SESSION_DIR/report.html" && open "$SESSION_DIR/report.html"
Use firefox-devtools MCP tools. Check project AGENTS.md for selectors/credentials.
Verify the main flow, then edge cases (empty states, errors, boundaries). Screenshot key states. Check tab navigation and focus for accessibility.
~/.local/share/qa/<project>/qa-20260515-143022/)development
Zoom meeting captions — file locations and format
tools
macOS dictation custom vocabulary — sync knowledge base names and terms to the system spelling dictionary
testing
Look up people, projects, products, and decisions locally first: contact info (email, Slack ID, GitHub handle), titles and teams, project/product status, who works on what, and past decisions. Check before searching Slack, email, calendar, or GitHub — this is the first stop for any contact detail, project context, or decision-history question.
testing
Communication style, audience awareness, and AI-authorship markers for human-facing prose — load when composing chat messages, review comments, merge request descriptions, emails, doc bodies, or ticket descriptions