From bee-dev-team
Gate 1 of the Vue.js frontend development cycle - ensures all components pass axe-core automated accessibility scans with zero WCAG 2.1 AA violations.
npx claudepluginhub luanrodrigues/ia-frmwrk --plugin bee-dev-teamThis skill uses the workspace's default tool permissions.
Ensure all Vue.js frontend components meet **WCAG 2.1 AA** accessibility standards through automated axe-core scanning, keyboard navigation testing, and focus management validation.
Generates design tokens/docs from CSS/Tailwind/styled-components codebases, audits visual consistency across 10 dimensions, detects AI slop in UI.
Records polished WebM UI demo videos of web apps using Playwright with cursor overlay, natural pacing, and three-phase scripting. Activates for demo, walkthrough, screen recording, or tutorial requests.
Delivers idiomatic Kotlin patterns for null safety, immutability, sealed classes, coroutines, Flows, extensions, DSL builders, and Gradle DSL. Use when writing, reviewing, refactoring, or designing Kotlin code.
Ensure all Vue.js frontend components meet WCAG 2.1 AA accessibility standards through automated axe-core scanning, keyboard navigation testing, and focus management validation.
Core principle: Accessibility is not optional. All components MUST be accessible to all users, including those using keyboard navigation, screen readers, and assistive technologies.
<block_condition>
This skill ORCHESTRATES. Vue.js Frontend QA Analyst Agent (accessibility mode) EXECUTES.
| Who | Responsibility |
|---|---|
| This Skill | Gather requirements, dispatch agent, track iterations |
| QA Analyst Frontend Vue.js Agent | Run axe-core, write keyboard tests, verify ARIA |
MANDATORY: Load testing-accessibility.md standards via WebFetch.
<fetch_required> https://raw.githubusercontent.com/luanrodrigues/ia-frmwrk/master/dev-team/docs/standards/frontend-vuejs/testing-accessibility.md </fetch_required>
REQUIRED INPUT:
- unit_id: [task/subtask being tested]
- implementation_files: [files from Gate 0]
- language: [typescript only]
OPTIONAL INPUT:
if any REQUIRED input is missing:
→ STOP and report: "Missing required input: [field]"
if language != "typescript":
→ STOP and report: "Vue.js frontend accessibility testing only supported for TypeScript/Vue"
Task tool:
subagent_type: "bee:qa-analyst-frontend-vuejs"
model: "opus"
prompt: |
**MODE:** ACCESSIBILITY TESTING (Gate 1)
**Standards:** Load testing-accessibility.md (frontend-vuejs)
**Input:**
- Unit ID: {unit_id}
- Implementation Files: {implementation_files}
- Language: typescript
- Framework: Vue 3 with Composition API
**Requirements:**
1. Run axe-core scans on all Vue components (all states: default, loading, error, empty, disabled)
2. Test keyboard navigation (Tab, Enter, Escape, Arrow keys)
3. Test focus management (trap, restoration, auto-focus) - use Vue's nextTick() where needed
4. Verify semantic HTML usage within Vue templates
5. Check ARIA attributes on dynamic Vue template bindings (v-bind:aria-*, :aria-*)
6. Verify color contrast
7. Test with Vue Testing Library (@testing-library/vue) + axe-core
**Vue-Specific Checks:**
- Teleport components (modals via <Teleport>) have proper focus trapping
- v-show vs v-if usage does not create hidden but focusable elements unexpectedly
- Dynamic :disabled bindings properly prevent interaction
- Transition/animation does not cause focus loss
- defineExpose() patterns for ref-based focus management are correctly implemented
**Output Sections Required:**
- ## Accessibility Testing Summary
- ## Violations Report
- ## Handoff to Next Gate
Parse agent output:
if "Status: PASS" in output:
→ Gate 1 PASSED
→ Return success with metrics
if "Status: FAIL" in output:
→ Dispatch fix to implementation agent (bee:frontend-engineer-vuejs or bee:ui-engineer-vuejs)
→ Re-run accessibility tests (max 3 iterations)
→ If still failing: ESCALATE to user
## Accessibility Testing Summary
**Status:** {PASS|FAIL}
**Components Tested:** {count}
**Violations Found:** {count}
**Keyboard Nav Tests:** {count}
**Focus Management Tests:** {count}
## Violations Report
| Component | States Scanned | Violations | Status |
|-----------|---------------|------------|--------|
| {component} | {states} | {count} | {PASS|FAIL} |
## Handoff to Next Gate
- Ready for Gate 2 (Unit Testing): {YES|NO}
- Iterations: {count}
See shared-patterns/shared-anti-rationalization.md for universal anti-rationalizations. Gate-specific:
| Rationalization | Why It's WRONG | Required Action |
|---|---|---|
| "It's an internal tool" | WCAG compliance is mandatory for all applications. | Run accessibility tests |
| "The library handles it" | Components can be misused. axe-core catches misuse. | Run axe-core scans |
| "We'll fix accessibility later" | Retrofitting costs 10x. Fix now. | Fix violations now |
| "Only one violation, it's minor" | One violation = FAIL. No exceptions. | Fix all violations |
| "Keyboard nav works, I tested manually" | Manual ≠ automated. Tests must be repeatable. | Write automated tests |
| "Vue transitions handle focus automatically" | Transitions do not manage focus. Implement explicitly. | Add focus management tests |
| "v-show hides it visually, accessibility handled" | v-show keeps element in DOM. axe-core still scans it. | Use v-if or add aria-hidden |