UI Delivery Protocol
Tooling Note: Commands use
playwright-cli, an internal wrapper around Playwright. If unavailable, use standard Playwright:npx playwright <command>
🎨 MANDATORY FOR ALL UI WORK
Before marking ANY UI task complete, you MUST:
1. Visual Verification (Screenshots)
# Open the page playwright-cli open <url-or-file-path> # Screenshot at mobile breakpoint playwright-cli run-code "window.resizeTo(375, 812)" playwright-cli screenshot --full-page ./qa-screenshots/mobile.png # Screenshot at tablet breakpoint playwright-cli run-code "window.resizeTo(768, 1024)" playwright-cli screenshot --full-page ./qa-screenshots/tablet.png # Screenshot at desktop breakpoint playwright-cli run-code "window.resizeTo(1440, 900)" playwright-cli screenshot --full-page ./qa-screenshots/desktop.png
2. Console Error Check
playwright-cli console error
Zero console errors from application code.
What counts as an error:
- •
console.error()calls from your code - •Uncaught exceptions
- •Failed network requests (4xx/5xx)
What may be noted but doesn't block:
- •Warnings from third-party libraries (document with link to issue)
- •Deprecation warnings
Exception Process: If a known library produces unavoidable errors, add to /docs/known-console-errors.md with ticket link.
3. Build Verification
# For React/Vite projects npm run build # Must complete with no errors
4. Accessibility Check (Mandatory)
# Run automated accessibility scan node scripts/run-axe.mjs <path>
Zero critical or serious violations.
Checks include:
- •Color contrast (WCAG AA)
- •ARIA labels on interactive elements
- •Keyboard navigation
- •Focus indicators
If violations exist:
- •Fix critical/serious issues
- •Document minor issues with remediation plan
6. QA Gate (Mandatory)
node scripts/qa-gate.mjs <path> ui
Must exit with code 0 (PASS) before delivery.
Exit codes:
- •0 = ✅ PASS — Ready to ship
- •1 = 🟡 REVISE — Fixable issues, re-run
- •2 = 🔴 REJECT — Fundamental problems, rebuild
7. Adversarial Review (Mandatory)
node scripts/adversarial-review.mjs <deliverable> ui
Must get PASS or REVISE (not REJECT).
Scoring:
- •80-100 = ✅ PASS — Ship it
- •70-79 = 🟡 REVISE — Address issues, re-review
- •0-69 = 🔴 REJECT — Rebuild from scratch
5. Adversarial Review
node scripts/adversarial-review.mjs <deliverable> ui
Must get PASS or REVISE (not REJECT).
✅ DELIVERY CHECKLIST
Every UI deliverable must include:
- • Mobile screenshot (375px) — saved as
[ticket]-mobile.png - • Tablet screenshot (768px) — saved as
[ticket]-tablet.png - • Desktop screenshot (1440px) — saved as
[ticket]-desktop.png - • Console errors: 0 from app code
- • Accessibility: 0 critical/serious violations
- • Build: PASS
- • QA gate: PASS (exit 0)
- • Adversarial review: PASS (80-100) or REVISE (70-79)
Screenshot Naming: ./qa-screenshots/[date]/[ticket-id]-[breakpoint].png
Artifact Storage: Attach screenshots to PR or upload to shared storage.
📤 COMPLETION MESSAGE TEMPLATE
✅ [Task Name] Complete **Screenshots:** 📱 Mobile: ./qa-screenshots/2026-02-15/ABC-123-mobile.png 📱 Tablet: ./qa-screenshots/2026-02-15/ABC-123-tablet.png 🖥️ Desktop: ./qa-screenshots/2026-02-15/ABC-123-desktop.png **Quality Checks:** ✅ Build: PASS (no errors) ✅ Console: 0 app errors (3 third-party warnings noted) ✅ Accessibility: 0 critical/serious violations ✅ QA Gate: PASS (exit 0) ✅ Adversarial: PASS (82/100) **Deliverables:** - /path/to/file1 - /path/to/file2 **Logs:** - QA Gate: ./logs/qa-gate.log - Adversarial: ./reports/adversarial-review.md **Notes:** [any important info]
🚫 DO NOT DELIVER IF:
- •Screenshots are missing
- •Console has errors
- •Build fails
- •QA gate blocks
- •Adversarial review rejects
🆘 STUCK?
If you can't get a clean screenshot or build:
- •Try to fix it yourself (30 min max)
- •If still stuck → notify Maria with specific error
./notify-maria.sh "UI issue: [specific problem]. Error: [message]. Help needed."
📚 EXAMPLE: Complete UI Workflow
# 1. Build the project cd /projects/my-dashboard npm run build # 2. Open in browser playwright-cli open ./dist/index.html # 3. Take screenshots mkdir -p ./qa-screenshots playwright-cli run-code "window.resizeTo(375, 812)" playwright-cli screenshot --full-page ./qa-screenshots/mobile.png playwright-cli run-code "window.resizeTo(768, 1024)" playwright-cli screenshot --full-page ./qa-screenshots/tablet.png playwright-cli run-code "window.resizeTo(1440, 900)" playwright-cli screenshot --full-page ./qa-screenshots/desktop.png # 4. Check console playwright-cli console error # 5. Run QA gate node scripts/qa-gate.mjs ./dist/index.html ui # 6. Deliver with screenshots attached
Last Updated: Feb 15, 2026
Enforced By: qa-gate.mjs, adversarial-review.mjs