Skip to content

♿ WCAG 2.1 AA Phase 2 Audit: Fix accessibility issues in top 10 views#195

Merged
dgarson merged 122 commits intofeat/horizon-ui-phase1-cleanupfrom
reed/wcag-phase2-audit
Mar 3, 2026
Merged

♿ WCAG 2.1 AA Phase 2 Audit: Fix accessibility issues in top 10 views#195
dgarson merged 122 commits intofeat/horizon-ui-phase1-cleanupfrom
reed/wcag-phase2-audit

Conversation

@dgarson
Copy link
Owner

@dgarson dgarson commented Mar 3, 2026

Summary

This PR addresses WCAG 2.1 AA accessibility issues in the top 10 most complex views (by file size) in the Horizon UI web-next application.

Changes Made

Skip Links (WCAG 2.4.1 - Level A)

  • Added skip-to-main-content links to all 10 views for keyboard navigation

Main Landmarks (WCAG 1.3.1 - Level A)

  • Wrapped main content areas with <main id="main-content" role="main"> for screen reader navigation

Color-Only Indicators (WCAG 1.4.1 - Level A)

  • Added aria-hidden="true" to decorative status indicator dots
  • Added visible text labels alongside color indicators

Animation (WCAG 2.3.3 - Level AAA)

  • Changed animate-pulse to motion-safe:animate-pulse for reduced motion preferences

Table Accessibility (WCAG 1.3.1 - Level A)

  • Added scope="col" to table headers in SupportTicketDashboard

Form Labels (WCAG 1.3.1 - Level A)

  • Added aria-label attributes to filter selects without visible labels

Files Modified

  1. src/views/SupportTicketDashboard.tsx - Skip link, main landmark, table scope, select labels
  2. src/views/CloudCostOptimizer.tsx - Skip link, main landmark, status indicator fix
  3. src/views/EnvironmentDriftDetector.tsx - Skip link, main landmark, motion-safe animation
  4. src/views/APIRateLimitManager.tsx - Skip link, main landmark, status indicators
  5. src/views/DataCatalog.tsx - Skip link, main landmark
  6. src/views/DatabaseSchemaViewer.tsx - Skip link, main landmark
  7. src/views/QueueInspector.tsx - Skip link, main landmark, motion-safe animation
  8. src/views/TokenUsageOptimizer.tsx - Skip link, main landmark
  9. src/views/SecurityAuditTrail.tsx - Skip link, main landmark, motion-safe animation
  10. src/views/DecisionProvenance.tsx - Skip link, main landmark

Audit Document

Full audit findings are documented in WCAG_AUDIT_PHASE2.md.

Build Status

✅ Build passes successfully

Testing

  • Keyboard navigation with Tab key
  • Screen reader testing (VoiceOver/NVDA)
  • Reduced motion preference testing

…, wave countdowns, 15 agents, Brave key alert
…coveryWaveResults, DiscoveryAgentCostTracker, ToolReliabilityDashboard)
…tructure

Agent: luis
Original branch: feat/horizon-post-merge
Working on: horizon-ux-views
Reason: restructuring workspace so git repos live at git/{reponame}/
All untracked config + code changes captured here.
…indingTrendChart, AgentSkillHeatmap) — batch 6PM
…penclaw#313)

- New AgentTopologyMap.tsx: pure SVG + React state, no external graph libs
- Static concentric layout: principals (r=210), crons (r=115), workers (r=65 from spawner)
- Node types: Principal (violet circle), Worker (blue circle), Cron (amber diamond)
- Interactive: click-to-inspect detail panel (280px), hover scale effect
- Toolbar: Live/Paused toggle, Reset View, session count badge, legend
- Mock data: 6 principals, 4 workers (from Luis), 2 crons
- Also fix pre-existing TS build errors to get 0-error build:
  - AgentOutputDiffViewer: remove invalid lucide icons + syntax error
  - APICredentialHealthDashboard: fix Badge/Alert variants, remove indicatorClassName
  - AgentSkillHeatmap, AgentSoulEditor, DiscoveryRunReplayControls,
    FindingTrendChart, ModelComparisonMatrix: pre-existing fixes
  - Add missing ui/alert badge card progress components
…penclaw#313)

- New AgentTopologyMap.tsx: pure SVG + React state, no external graph libs
- Static concentric layout: principals (r=210), crons (r=115), workers (r=65 from spawner)
- Node types: Principal (violet circle), Worker (blue circle), Cron (amber diamond)
- Interactive: click-to-inspect detail panel (280px), hover scale effect
- Toolbar: Live/Paused toggle, Reset View, session count badge, legend
- Mock data: 6 principals, 4 workers (from Luis), 2 crons
- Also fix pre-existing TS build errors to get 0-error build:
  - AgentOutputDiffViewer: remove invalid lucide icons + syntax error
  - APICredentialHealthDashboard: fix Badge/Alert variants, remove indicatorClassName
  - AgentSkillHeatmap, AgentSoulEditor, DiscoveryRunReplayControls,
    FindingTrendChart, ModelComparisonMatrix: pre-existing fixes
  - Add missing ui/alert badge card progress components
…-ui-user-experience' into feat/horizon-ui-complete
* security: redact PII in user-facing LLM error details

* add credential disclosure for skill command dispatch

* feat(web-next): add command registry store for command palette

- Add zustand dependency for state management
- Create commandRegistry store with add/remove/execute commands
- Include default navigation and action commands
- Supports NL Actions via keyword matching

* feat(web-next): integrate Skill Builder IDE component

- Add SkillBuilderEditor view that wraps the SkillBuilder component
- Connect save and test handlers with basic validation
- Add navigation entry and route for skill-builder
- Allows creating and editing skills from the UI

bs-ux-5-impl
…quirements' into feat/horizon-ui-complete

# Conflicts:
#	docs/start/onboarding-overview.md
…-ui-for-dashboard' into feat/horizon-ui-complete

# Conflicts:
#	apps/web-next/package.json
#	apps/web-next/src/App.tsx
#	apps/web-next/src/views/AgentDashboard.tsx
#	apps/web-next/src/views/AgentPerformanceBreakdown.tsx
#	apps/web-next/src/views/CronJobManager.tsx
#	apps/web-next/src/views/UsageDashboard.tsx
#	apps/web-next/src/views/WorkqueueDashboard.tsx
- Updated quiz questions to be friendlier and more conversational
- Enhanced level descriptions with more engaging copy
- Improved template descriptions with clearer value propositions
- Refreshed empty state messages for better user guidance
- Updated setup step descriptions for clarity

Part of bs-ux-1-copy
## Summary
- Added skip links to all 10 modified views for keyboard navigation
- Added main landmarks with role='main' for screen reader navigation
- Fixed animate-pulse to use motion-safe: prefix for reduced motion
- Added aria-hidden to decorative status indicator dots
- Added aria-labels to filter selects without visible labels
- Added scope='col' to table headers in SupportTicketDashboard
- Added screen reader text to color-only status indicators

## Files Modified
1. SupportTicketDashboard.tsx
2. CloudCostOptimizer.tsx
3. EnvironmentDriftDetector.tsx
4. APIRateLimitManager.tsx
5. DataCatalog.tsx
6. DatabaseSchemaViewer.tsx
7. QueueInspector.tsx
8. TokenUsageOptimizer.tsx
9. SecurityAuditTrail.tsx
10. DecisionProvenance.tsx

## Audit Document
- WCAG_AUDIT_PHASE2.md contains full audit findings

WCAG Criteria Addressed:
- 2.4.1 Bypass Blocks (Level A) - Skip links
- 1.3.1 Info and Relationships (Level A) - Main landmarks, table scope
- 1.4.1 Use of Color (Level A) - Status indicator text alternatives
- 2.3.3 Animation from Interactions (Level AAA) - motion-safe prefix
@dgarson dgarson merged commit 8b3caf6 into feat/horizon-ui-phase1-cleanup Mar 3, 2026
1 of 3 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants