Skip to content

a11y(index): ARIA landmarks + canvas accessible name + aria-live region#125

Merged
hyperpolymath merged 1 commit into
mainfrom
a11y/aria-landmarks-and-live-region
Jun 1, 2026
Merged

a11y(index): ARIA landmarks + canvas accessible name + aria-live region#125
hyperpolymath merged 1 commit into
mainfrom
a11y/aria-landmarks-and-live-region

Conversation

@hyperpolymath
Copy link
Copy Markdown
Owner

Summary

Lands the smallest tractable slice of the #122 a11y follow-up — closes 3 of 4 chromium-1080p accessibility failures unmasked once #121 made the page actually load.

  • index.html:
    • #approle="main" (lands landmark check)
    • #pixi-containerrole="application" + aria-label="IDApTIK game" (canvas inherits via .closest('[role="application"]'))
    • new #aria-status div with role="status" + aria-live="polite" + aria-atomic="true" (lands live-region check)
  • public/style.css: standard .visually-hidden recipe so the status region announces without affecting layout

Test plan

  • cd tools/compat-testing && pnpm playwright test tests/accessibility.spec.js --project=chromium-1080p
  • accessibility.spec.js:33 (ARIA landmarks are present) → pass
  • accessibility.spec.js:75 (canvas has accessible name or label) → pass
  • accessibility.spec.js:155 (screen reader announcements via aria-live regions) → pass
  • accessibility.spec.js:222 (high contrast mode does not break rendering) → still fails (depends on the 5-console-errors-during-load issue tracked in Playwright: residual 6 test failures unmasked by #121 (a11y, perf threshold, console errors) #122 Group C)

Out of scope

Refs #122

🤖 Generated with Claude Code

Lands 3 of 4 chromium-1080p a11y test failures unmasked by #121.

Edits:
- `index.html`:
  - `#app` gets `role="main"` (satisfies `accessibility.spec.js:33` landmark check).
  - `#pixi-container` gets `role="application"` + `aria-label="IDApTIK game"` (satisfies `accessibility.spec.js:75` accessible-name check; covers all canvas descendants via `.closest('[role="application"]')`).
  - New `#aria-status` div with `role="status"` + `aria-live="polite"` + `aria-atomic="true"` + visually-hidden CSS class (satisfies `accessibility.spec.js:155` live-region check).
- `public/style.css`: adds the standard `.visually-hidden` recipe (clip-rect+1px+overflow-hidden) so the status region is announced without affecting layout.

Wiring of dual-alert HUD level transitions into the `#aria-status` text content
is intentionally out of scope; the live region's presence is what the spec
asserts, and dispatching content into it from `DualAlertBridge.res` is a
separate follow-up.

The 4th a11y test (high-contrast does not break rendering) depends on the
5-console-errors-during-load issue tracked in the Group C slice of #122 and
is not addressed here.

Refs #122

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Signed-off-by: hyperpolymath <6759885+hyperpolymath@users.noreply.github.com>
@hyperpolymath hyperpolymath enabled auto-merge (squash) June 1, 2026 19:08
@github-actions
Copy link
Copy Markdown

github-actions Bot commented Jun 1, 2026

🔍 Hypatia Security Scan

Findings: 71 issues detected

Severity Count
🔴 Critical 11
🟠 High 18
🟡 Medium 42

⚠️ Action Required: Critical security issues found!

View findings
[
  {
    "reason": "Issue in boj-build.yml",
    "type": "missing_timeout_minutes",
    "file": "boj-build.yml",
    "action": "flag",
    "rule_module": "workflow_audit",
    "severity": "medium"
  },
  {
    "reason": "Issue in build-validation.yml",
    "type": "missing_timeout_minutes",
    "file": "build-validation.yml",
    "action": "flag",
    "rule_module": "workflow_audit",
    "severity": "medium"
  },
  {
    "reason": "Issue in cflite-pr.yml",
    "type": "missing_timeout_minutes",
    "file": "cflite-pr.yml",
    "action": "flag",
    "rule_module": "workflow_audit",
    "severity": "medium"
  },
  {
    "reason": "Issue in codeql.yml",
    "type": "missing_timeout_minutes",
    "file": "codeql.yml",
    "action": "flag",
    "rule_module": "workflow_audit",
    "severity": "medium"
  },
  {
    "reason": "Issue in containers.yml",
    "type": "missing_timeout_minutes",
    "file": "containers.yml",
    "action": "flag",
    "rule_module": "workflow_audit",
    "severity": "medium"
  },
  {
    "reason": "Issue in containers.yml",
    "type": "missing_timeout_minutes",
    "file": "containers.yml",
    "action": "flag",
    "rule_module": "workflow_audit",
    "severity": "medium"
  },
  {
    "reason": "Issue in dco.yml",
    "type": "missing_timeout_minutes",
    "file": "dco.yml",
    "action": "flag",
    "rule_module": "workflow_audit",
    "severity": "medium"
  },
  {
    "reason": "Issue in dogfood-gate.yml",
    "type": "missing_timeout_minutes",
    "file": "dogfood-gate.yml",
    "action": "flag",
    "rule_module": "workflow_audit",
    "severity": "medium"
  },
  {
    "reason": "Issue in dogfood-gate.yml",
    "type": "missing_timeout_minutes",
    "file": "dogfood-gate.yml",
    "action": "flag",
    "rule_module": "workflow_audit",
    "severity": "medium"
  },
  {
    "reason": "Issue in dogfood-gate.yml",
    "type": "missing_timeout_minutes",
    "file": "dogfood-gate.yml",
    "action": "flag",
    "rule_module": "workflow_audit",
    "severity": "medium"
  }
]

Powered by Hypatia Neurosymbolic CI/CD Intelligence

@hyperpolymath hyperpolymath merged commit e94c25c into main Jun 1, 2026
28 checks passed
@hyperpolymath hyperpolymath deleted the a11y/aria-landmarks-and-live-region branch June 1, 2026 20:13
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.

1 participant