Accessibility
This page documents the accessibility system built into fork-sync-all and
propagated to all infra-core and upstream-sync consumer repos.
What the system does
Every repo in the OSP stack is audited for accessibility on every push to
main and weekly via check-accessibility.yml. The audit covers five layers:
| Layer | Tool | What it checks |
|---|---|---|
| CODEOWNERS | github-codeowners | Ownership coverage %, unowned files, CODEOWNERS validation |
| README scan | Built-in | Missing alt text, non-descriptive links, table headers, reading level, bare URLs |
| WCAG 2.1 AA | pa11y + axe-core | HTML accessibility violations in generated docs |
| Audio overview | espeak-ng | README → MP3 audio for visually impaired users |
| Braille output | liblouis | README → Grade 2 English Braille (.brl file) |
Accessibility artifacts
Each repo that has run check-accessibility.yml will have these files committed
to its default branch:
| File | Format | Audience |
|---|---|---|
README.audio.mp3 | MP3 audio | Screen reader users, visually impaired developers |
README.brl | Braille Grade 2 | Braille display users |
accessibility-report.json | JSON | CI systems, dashboards, automation |
Running the audit
On push: automatically triggered when README.md or CODEOWNERS changes.
Weekly: runs every Monday at 04:17 UTC.
Manually:
# Via GitHub CLI
gh workflow run check-accessibility.yml
# With options
gh workflow run check-accessibility.yml \
-f repo=my-repo \
-f fail_on_error=true
Locally (requires espeak-ng, python3-louis, pa11y):
sudo apt-get install espeak-ng ffmpeg python3-louis liblouis-data
npm install -g pa11y github-codeowners
REPO_DIR=. OWNER=my-org REPO=my-repo \
AUDIO_ENABLED=true BRAILLE_ENABLED=true WCAG_ENABLED=true \
bash scripts/check-accessibility.sh
Installing the runner dependencies
The check-accessibility.yml workflow installs these automatically on the
GitHub Actions runner. For local use:
# Ubuntu / Debian
sudo apt-get install espeak-ng ffmpeg python3-louis liblouis-data
# macOS (Homebrew)
brew install espeak liblouis ffmpeg
pip3 install louis
# Node tools
npm install -g pa11y github-codeowners
CODEOWNERS coverage
Ownership coverage is measured by github-codeowners audit. Thresholds:
| Coverage | Status |
|---|---|
| ≥ 80% | ✅ Pass |
| 50–79% | ⚠️ Warning |
| < 50% | ❌ Error |
To see unowned files:
cd <repo>
github-codeowners audit -u
To validate your CODEOWNERS file:
github-codeowners validate
README accessibility standards
The README scan checks for:
- Missing alt text — every
![]()image must have descriptive alt text - Non-descriptive links — avoid
[click here],[here],[link],[read more] - Table headers — every markdown table must have a
|---|---|separator row - Bare URLs — wrap URLs in descriptive link text:
[description](url) - Reading level — avg sentence length ≤ 20 words is accessible; > 30 is flagged
- H1 heading — every README must start with a
# Title
WCAG 2.1 AA compliance
HTML docs in DOCS/generated/ are scanned with pa11y against the
WCAG 2.1 AA standard. Common issues:
| Issue | Fix |
|---|---|
Missing alt on <img> | Add descriptive alt text |
| Low colour contrast | Ensure 4.5:1 ratio for normal text, 3:1 for large text |
| Missing form labels | Associate <label> with every <input> |
| Missing landmark regions | Wrap content in <main>, <nav>, <header> |
| Empty links | Add descriptive text inside <a> tags |
Audio overview
README.audio.mp3 is generated by espeak-ng,
a lightweight open source TTS engine. The README is stripped of markdown syntax
before synthesis for cleaner output.
Playback:
# Any media player
mpv README.audio.mp3
vlc README.audio.mp3
# Command line
ffplay README.audio.mp3
Braille output
README.brl is generated by liblouis,
the standard open source Braille translation library used by NVDA, JAWS, and
VoiceOver. Output is Unified English Braille (UEB) Grade 2.
To display on a Braille terminal:
# Most Braille displays accept .brl files directly via their driver software
# On Linux with brltty:
brltty -f README.brl
Upstream tools tracked
All accessibility tools are forked into Interested-Deving-1896 and mirrored
to the accessibility_deving GitLab subgroup:
| Tool | Purpose | Upstream |
|---|---|---|
| nvda | Screen reader for Windows | nvaccess/nvda |
| osara | REAPER accessibility (audio production) | jcsteh/osara |
| liblouis | Braille translation library | liblouis/liblouis |
| espeak-ng | Text-to-speech engine | espeak-ng/espeak-ng |
| axe-core | WCAG rules engine | dequelabs/axe-core |
| pa11y | CLI WCAG auditing | pa11y/pa11y |
| github-codeowners | CODEOWNERS auditing | kohofinancial/github-codeowners |
| target-size-highlighter | WCAG 2.5.5 pointer target visualiser | accessibility-tools/target-size-highlighter |
| z-index-focus-override | WCAG 2.4.11 focus indicator bookmarklet | accessibility-tools/z-index-focus-override |
| README | Accessible HTML doc generator (no-JS) | canalplus/README |