as-app/docs/a11y-audit-log.md
2026-01-12 18:27:57 +01:00

174 lines
4.9 KiB
Markdown

# A11y audit log
Keep this log lightweight and practical. Prefer short entries that state:
- what was checked
- what was fixed
- what remains
Format:
```
YYYY-MM-DD - Area - Result - Notes
```
## Log
- 2026-01-06 - P0 conventions - Added documentation and testID conventions; added minimal `testID` for header actions, Send Alert CTAs, and ChatInput controls. (lint clean)
# Accessibility Audit Log
This log tracks manual accessibility verification for WCAG 2.2 AA on iOS (VoiceOver) and Android (TalkBack).
Reference docs:
- WCAG mapping: [docs/a11y-wcag22-aa.md](docs/a11y-wcag22-aa.md:1)
- VoiceOver runbook: [docs/qa-voiceover.md](docs/qa-voiceover.md:1)
- TalkBack runbook: [docs/qa-talkback.md](docs/qa-talkback.md:1)
- A11y target inventory: [docs/a11y-audit-targets.md](docs/a11y-audit-targets.md:1)
- TestID convention: [docs/testids.md](docs/testids.md:1)
---
## Template (copy/paste for each audit run)
### Audit run
- Date:
- Commit SHA:
- App version/build:
- Tester:
#### Devices
- iOS device:
- iOS version:
- VoiceOver settings used:
- Android device:
- Android version:
- TalkBack settings used:
#### Global checks (apply on every screen)
- [ ] Focus order matches visual order
- [ ] No focus traps (especially maps, drawers, modals)
- [ ] Controls have correct name/role/state
- [ ] Target size: 44x44 pt (iOS) / 48dp (Android) for primary controls
- [ ] Dynamic type / font scaling does not clip or hide text
- [ ] Error/success states are perceivable and announced when appropriate
- [ ] No duplicate focusable decorative elements
#### Results summary
- Blockers:
- Majors:
- Minors:
- Notes:
---
### Core journeys checklist (fill out)
#### 1) Send Alert (P0)
Targets:
- [src/scenes/SendAlert/index.js](src/scenes/SendAlert/index.js:1)
- [src/scenes/SendAlert/RadarModal.js](src/scenes/SendAlert/RadarModal.js:1)
Steps:
- [ ] Navigate to Send Alert
- [ ] Help toggle readable + state announced
- [ ] Radar button opens modal, focus goes to modal title
- [ ] Radar loading/success/error announced once (no spam)
- [ ] Close radar modal, focus returns to radar trigger
- [ ] All CTAs (red/yellow/green/unknown/call) are reachable and correctly described
Findings:
- iOS:
- Android:
#### 2) Chat + Messaging (P0)
Targets:
- [src/containers/ChatInput/index.js](src/containers/ChatInput/index.js:1)
- [src/containers/ChatMessages/index.js](src/containers/ChatMessages/index.js:1)
- [src/lib/expo-audio-player/index.js](src/lib/expo-audio-player/index.js:1)
Precondition:
- An alert with an open chat thread is available (or use a staging account).
Steps:
- [ ] Open chat thread
- [ ] Message list reads in correct order (sender, time, content)
- [ ] Text input is labeled and discoverable (testID `chat-input-text`)
- [ ] Send/mic control describes current action
- [ ] Start recording: announcement once
- [ ] Stop recording: announcement once
- [ ] Delete recording: destructive hint present
- [ ] Send text message: focus remains stable
- [ ] Play/pause audio: control labeled + state conveyed
- [ ] New incoming message: concise announcement (no spam)
Findings:
- iOS:
- Android:
#### 3) Map + Routing (P0)
Targets:
- [src/scenes/AlertCurMap/index.js](src/scenes/AlertCurMap/index.js:1)
- [src/containers/Map/MapView.js](src/containers/Map/MapView.js:1)
- [src/scenes/AlertCurMap/RoutingSteps.js](src/scenes/AlertCurMap/RoutingSteps.js:1)
Steps:
- [ ] Open Alert map screen
- [ ] Map surface is not focusable (no trap)
- [ ] Overlay controls are reachable and described (zoom/recenter/toggles)
- [ ] Non-visual alternative entry is discoverable before the map
- [ ] Open route steps list/drawer, focus goes to title
- [ ] Close route steps list/drawer, focus returns to trigger
Findings:
- iOS:
- Android:
#### 4) Settings / Permissions (P0)
Targets:
- [src/scenes/Params/Permissions.js](src/scenes/Params/Permissions.js:1)
- [src/containers/PermissionWizard/index.js](src/containers/PermissionWizard/index.js:1)
Steps:
- [ ] Open Permissions settings
- [ ] Each permission item exposes switch semantics (role switch + checked/disabled)
- [ ] Blocked permission shows accessible button to open OS settings
- [ ] Permission request success/failure is announced once
- [ ] Permission wizard screens have headings and initial focus
Findings:
- iOS:
- Android:
#### 5) Profile + Account management (P0)
Targets:
- [src/scenes/Profile/Form.js](src/scenes/Profile/Form.js:1)
- [src/scenes/Profile/AvatarUploader.js](src/scenes/Profile/AvatarUploader.js:1)
- [src/scenes/Profile/AccountManagement.js](src/scenes/Profile/AccountManagement.js:1)
Steps:
- [ ] Open Profile
- [ ] Edit fields: labels and errors announced
- [ ] Open avatar edit modal: focus to modal header
- [ ] Close avatar edit modal: focus returns to trigger
- [ ] Open account modal(s): focus to modal header
- [ ] Destructive action confirmation: clear label/hint and error focus
Findings:
- iOS:
- Android:
---
## Audit runs
<!-- Paste completed runs above this line -->