一键导入
qa-visual-qa-web
Visual QA for HTML/CSS/JS web apps. Validates layout, animations, styling, i18n keys, data display, and interactive elements using Playwright.
用 Codex 或 Claude 帮你安装 复制这段 Prompt,粘贴到 Codex、Claude 或其他助手里,让它检查 Skill 页面并帮你完成安装。
菜单
Visual QA for HTML/CSS/JS web apps. Validates layout, animations, styling, i18n keys, data display, and interactive elements using Playwright.
用 Codex 或 Claude 帮你安装 复制这段 Prompt,粘贴到 Codex、Claude 或其他助手里,让它检查 Skill 页面并帮你完成安装。
基于 SOC 职业分类
Merges bookend agent reports into revised readiness, complexity, and decomposition plan. Produces the final evidence-backed assessment consumed by sprint-architect-agent.
Fast filesystem readiness scan — counts docs, source files, manifests, platform signals. Produces initial ReadinessReport for agent spawning decisions.
Scores proposal complexity against codebase surface. Uses proposal text analysis and readiness stats to determine decomposition tier and agent count.
Generation-time design taste for web UI work. Anti-cliche bans, layout and motion hard rules, and client-intent dials. Advisory only - shapes drafts; declared measured contracts remain the sole gate authority.
Rigorously reasons about definitions, proofs, and computations in algebra, analysis, discrete math, probability, linear algebra, and applied math. Verifies derivations, spots invalid steps, and states assumptions clearly. Use when solving or proving math problems, reviewing mathematical arguments, modeling with equations, interpreting statistics, or when the user mentions proofs, lemmas, theorems, integrals, series, matrices, optimization, or numerical methods.
Visual verification for interactive elements (popups, modals, tooltips). Clicks elements and captures screenshots for analysis. Bypasses MCP browser tool limitations with cross-origin CSS.
| name | qa-visual-qa-web |
| description | Visual QA for HTML/CSS/JS web apps. Validates layout, animations, styling, i18n keys, data display, and interactive elements using Playwright. |
Validates that web code looks and animates correctly per acceptance criteria. Runs after integration-qa passes.
{
"project_dir": "/path/to/project",
"ticket_id": "TICKET-XXX",
"test_path": "tests/integration/visual-qa.spec.js",
"categories": ["layout", "animation", "styling", "i18n", "data_display"]
}
| Category | Description | Example |
|---|---|---|
layout | Wrong dimensions, positioning, spacing | Nav position: static instead of fixed |
styling | CSS not applied (colors, fonts) | Button missing background color |
animation | Keyframes missing or not running | Water particles not animating |
visibility | Elements incorrectly hidden | display: none wrongly applied |
i18n_key_leak | Raw translation keys visible | impact.section_subtitle shown |
i18n_broken | Language switching doesn't work | Clicking 'PT' doesn't change content |
data_display | NaN/undefined/null displayed | "NaN Olympic pools" |
interactive | Buttons don't respond to clicks | Skip button does nothing |
empty_component | Data containers with no content | [data-chart] shows only spinner |
placeholder_image | Stub images (tiny dimensions) | Image 39 bytes, naturalWidth < 10 |
map_not_rendered | Map container without SVG/canvas | [data-map] has no <svg> |
scaffolding_only | UI structure without meaningful content | Section with heading only |
silent_spec_violation | Code violates spec but no error | CSS @import after rules |
cd $project_dir
npx playwright test $test_path --project=chromium --reporter=json
Layout issues:
# Check computed styles
grep -r "position:" src/styles/
grep -r "height:" src/styles/
Animation issues:
# Check if keyframes exist
grep -r "@keyframes" src/styles/
# Check if animation CSS is imported
grep -r "@import.*animation" src/styles/main.css
i18n issues:
# Check locale files
grep -r "section_subtitle" locales/
# Check i18n initialization
grep -r "setLocale\|i18n.init" src/js/
Data display issues:
# Check data binding
grep -r "parseFloat\|parseInt\|Number(" src/js/
# Check for fallbacks
grep -r "|| 0\|?? 0" src/js/
| Violation | Detection |
|---|---|
CSS @import after rules | @import appears after any CSS rule - silently ignored |
JS textContent = on parent | Destroys all child elements |
| CSS custom property missing fallback | var(--undefined) renders empty |
Check for meaningless UI:
[data-*] containers empty after page loadnaturalWidth < 10{
"skill": "qa-visual-qa-web",
"status": "pass|fail",
"tests": {
"total": 23,
"passed": 18,
"failed": 5
},
"issues": [
{
"ticket_id": "BUG-VIS-001",
"title": "Hero section height not 100vh",
"test_name": "hero should have 100vh height",
"category": "layout",
"description": "Hero height = 179px instead of 100vh",
"fix_location": "src/styles/components/hero.css",
"auto_fixable": true
}
],
"next_action": "proceed|fix"
}
| Result | Status | Next Action |
|---|---|---|
| All tests pass | pass | proceed |
| Only LOW/MEDIUM issues | pass | proceed (with warnings) |
| Any HIGH issues | fail | fix |
| Scaffolding detected | fail | fix (BLOCK_AND_DECOMPOSE) |
Layout - Nav not fixed:
{
"category": "layout",
"title": "Navigation not fixed at top",
"fix_location": "src/styles/components/nav.css",
"fix_suggestion": "Add: position: fixed; top: 0; width: 100%;"
}
i18n Key Leak:
{
"category": "i18n_key_leak",
"title": "Raw i18n key visible in impact section",
"description": "'impact.section_subtitle' visible instead of translated text",
"fix_location": "locales/en.json or src/js/i18n.js"
}
Silent Spec Violation:
{
"category": "silent_spec_violation",
"title": "CSS @import after rules (styles not loading)",
"description": "@import at line 290 after CSS rules - silently ignored",
"fix_location": "src/styles/main.css",
"fix_suggestion": "Move all @import to top of file"
}