Generated banner for Accessibility
Generated logo for Accessibility

Accessibility

MicrosoftOfficialPublished by Microsoft

  • Skill
  • Tool integration
  • Software development
  • MIT
  • Low risk
  • Has scripts

From the author

Consolidated accessibility skill entrypoint for WCAG 2.2, ARIA Authoring Practices, cognitive accessibility, Section 508, EN 301 549, design intent verification, and the Accessibility Planner workflow.
— the description by Microsoft

AutoGineer summary

Written by AutoGineer from the skill’s own files, not by the author

The accessibility skill provides a structured approach to managing accessibility requirements across the development lifecycle. It includes a six-phase Accessibility Planner workflow, a command-line scanner for static analysis, and a runtime probe harness for verifying interaction-based accessibility. The skill enforces a doctrine of method adequacy, ensuring that verification methods are only used to decide criteria they are capable of observing, and supports the generation of evidence bundles for review.

What it does

  • Provides a six-phase workflow for accessibility discovery, planning, and backlog handoff.
  • Wraps the axe-core CLI to perform static accessibility scans on web pages.
  • Executes Playwright-based runtime probes to verify interaction behavior and screen-reader announcements.
  • Enforces method adequacy rules to distinguish between static findings and interaction-based verification.
  • Generates deterministic evidence bundles for accessibility reviews and reporting.
  • Maps findings to WCAG 2.2, ARIA Authoring Practices, and other accessibility standards.

When to use it

  • When planning accessibility requirements for a new project or feature.
  • When performing automated static scans of web content for common accessibility defects.
  • When verifying complex interaction behaviors that static analysis cannot fully evaluate.
  • When building an evidence register to track accessibility conformance across development phases.

Advantages

  • Standardizes accessibility verification across different projects and teams.
  • Prevents over-reliance on static analysis for complex interaction-based criteria.
  • Supports tiered enforcement postures to match project risk and maturity.
  • Integrates with standard CI workflows for automated accessibility testing.

Usage examples

“Scan my local file index.html for accessibility violations.”
The skill runs the axe-core scanner against the file and outputs a normalized JSON report of findings.
“Run the accessibility runtime probes for my project.”
The skill executes the configured Playwright probes and aggregates the results into a coverage matrix.

Install

Documentation by Microsoft

Accessibility — Skill Entry

This skill is the canonical accessibility reference contract for HVE Core. Agents and instructions invoke this skill by name and rely on it to own framework reference resolution, phase guidance resolution, and the scanner CLI entrypoint.

Framework references

Assessment reference (cross-cutting, not a conformance framework):

  • Assistive-technology announcement model — read this when deciding the announcement-class criteria (WCAG 1.3.1, 4.1.2, 4.1.3): what a screen-reader user should hear, and how to decide it with an accessibility-tree assertion or a manual AT pass.

Accessibility Planner workflow

The Accessibility Planner runs six phases, each keyed to a state id:

  1. Phase 1 — Discovery (discovery)

  2. Phase 2 — Framework Selection (framework-selection)

  3. Phase 3 — Standards Mapping (standards-mapping)

  4. Phase 4 — Plan Risk Assessment (plan-risk-assessment)

  5. Phase 5 — Impact and Evidence (impact-evidence)

  6. Phase 6 — Backlog Handoff (backlog-handoff)

Phase reference index

  • Phase 1 — Discovery: capture-coaching.md — read this when running exploration-first capture questioning.

  • Phase 2 — Framework Selection: framework-selection.md — read this when choosing which frameworks and conformance level apply.

  • Phase 3 — Standards Mapping: walk the framework references roll-up tables to emit controlMappings; consumed by Phase 5. No dedicated file — mapping is driven by the framework roll-ups.

  • Phase 4 — Plan Risk Assessment: capture-coaching.md governs the questioning posture when escalation triggers reopen scoping; tier criteria are applied per the Accessibility Planner identity instructions and recorded as riskClassification.tier. No dedicated file — the accessibility risk surface is narrow enough to stay inline.

  • Phase 5 — Impact and Evidence: impact-assessment.md — read this when building the evidence register, tradeoff log, and seed work-items.

  • Phase 6 — Backlog Handoff: backlog-handoff.md — read this when rendering work items and validating handoff gates.

Method adequacy (decide vs inform)

Method adequacy is the doctrine that a verification method may only be recorded as satisfying a success criterion when that method can actually decide the criterion. A method that can observe a related signal but cannot confirm the user-facing outcome only informs the criterion; it raises or lowers suspicion but never closes it. This section is the canonical definition; the planner evidence register, the reviewer verdict logic, and the runtime probe harness all resolve adequacy through it.

The machine-readable adequacy source is scripts/runtime_a11y/probe-criteria-map.json. Each probe entry lists the criteria it decides and the criteria it only informs. A result counts as adequate only when the winning method appears in the decides list for that criterion and state.

Failure classes and adequate methods

Accessibility defects generalize into five classes. Static analysis (axe, eslint-plugin-jsx-a11y, snapshot structure counts) can decide only the first class; the remaining four require an interaction-state probe or an assistive-technology (AT) pass to be decided rather than merely informed.

ClassRepresentative WCAG SCWhat static analysis can doAdequate method to decide
Static-decidable structure1.1.1, 1.4.3, 4.1.2 (name present), 2.4.2, 3.1.1Decideaxe / static scan
Interaction behavior2.1.1, 2.1.2, 2.4.3, 2.4.7, 2.4.11Inform onlyKeyboard/interaction probe driving keys across focus/open states, or manual keyboard pass
Announcement correctness1.3.1, 4.1.2 (computed name/role), 4.1.3Inform onlyAccessibility-tree assertion of computed name/role/live, or manual AT pass (Windows NVDA or human-led JAWS)
Adaptive rendering1.4.4, 1.4.10, 1.4.12, 2.4.11Inform onlyRendered probe at 200% zoom, 320px reflow, and text-spacing states
Faux semantics1.3.1 (faux headings), 2.4.3 (faux controls)Cannot seeHeuristic source pass plus accessibility-tree assertion; no element exists for a rule engine to flag

For the announcement class, the assistive-technology announcement model specifies what the user should hear per criterion and how to decide it. For the interaction and faux-semantics classes, the focus-management anti-pattern catalog enumerates the defects that pass a static scan yet break keyboard and screen-reader users.

Adequacy rule
  • A control in the interaction, announcement, adaptive-rendering, or faux-semantics classes cannot be recorded as fully satisfied on static evidence alone. Static evidence caps such a control at a partial state until an adequate method is attached.

  • A criterion whose winning method only informs it is never a conformance verdict; it is a lead that routes to an adequate method or a manual pass.

  • Preserve the adequacy determination alongside the status so downstream planners and reviewers do not re-promote an inadequately verified control.

This doctrine and its class taxonomy are repository-original content licensed under CC BY 4.0; the underlying success-criterion definitions remain with WCAG 2.2 as cited in wcag-22.md.

Calibration is evidence quality, not a conformance verdict

Calibration establishes that the assistive-technology stack behaves as expected before its output is trusted. Its checkpoints record driver identity, profile fingerprint, and artifact hashes for a journey that passed.

A checkpoint is deliberately not a matrix input. Nothing in the coverage or outcome pipeline reads one, and that separation is intended rather than unfinished. A passing calibration says the harness was working; it does not say the surface satisfies a success criterion. Wiring checkpoints into coverage would turn a statement about the tool into a statement about the product.

If calibration evidence should ever influence coverage, that is new design work requiring its own review: it needs an explicit mapping from a journey to a criterion, surface, and state, and it must respect the same method-adequacy rules as any other evidence.

Gate strictness by assessment tier

The enforcement posture for the interaction, announcement, adaptive-rendering, and faux-semantics classes graduates with the assessment depth tier recorded in riskClassification.tier, so the gate inherits the rigor a project opted into rather than applying one global switch:

  • basic — the adequate-method probes (keyboard, widget-keyboard, live-region, aria-tree, virtual-sr) report advisory (warn-only); the always-decidable core probes still block.

  • standard (default) — ratchet: the adequate-method probes block on new or changed surfaces and stay advisory over the existing backlog, so no new defect in these classes ships while legacy content is surfaced without freezing the project.

  • comprehensive — the adequate-method probes block on every in-scope surface.

The always-decidable core probes (axe, DOM hygiene, broken links, console errors, target size, contrast, reflow/resize) block at every tier. The CI workflow template implements this dial through the A11Y_TIER and A11Y_RATCHET_SURFACES inputs; the Accessibility Reviewer applies the same graduation to its FAIL and PARTIAL verdicts.

Tooling

The scanner CLI (scripts/scan.py) wraps the Node-based axe-core scanner and normalizes its findings into a stable JSON shape.

Prerequisites
  • Python 3.11+ with uv available on PATH.

  • Node.js with npx available on PATH.

  • Network access on first run so npx can fetch @axe-core/cli.

Quick Start
uv run scripts/scan.py https://example.com --allow-host example.com
uv run scripts/scan.py ./page.html --output results.json
uv run scripts/scan.py file:///path/to/page.html

Loopback HTTP(S) targets need no additional option. Every other remote host requires either a matching, repeatable --allow-host HOST value or the broader --allow-external confirmation. Local paths and local file: URIs must resolve to existing regular files. Network shares, remote file authorities, directories, missing files, credentials, leading-dash targets, and non-HTTP(S) remote schemes are rejected before the axe CLI starts.

Parameters Reference
ParameterRequiredDefaultDescription
targetYes—Authorized HTTP(S) URL or existing regular local file to scan.
--outputNostdoutPath to write the normalized JSON results.
--allow-hostNononeAuthorize one non-loopback HTTP(S) host; repeat as needed.
--allow-externalNofalseConfirm access to any non-loopback HTTP(S) host.

Remote authorization applies to the initial scanner target only. It does not constrain browser redirects, DNS address changes, subresources, WebSockets, Service Workers, downloads, or other browser-derived requests. Run the scanner only from a workstation whose network reach matches the target's trust level.

Script Reference
  • Entrypoint: scripts/scan.py

  • Output shape:

    {
      "target": "<scanned target>",
      "summary": {
        "violations": 0,
        "passes": 0,
        "incomplete": 0,
        "inapplicable": 0
      },
      "violations": [
        { "id": "", "impact": "", "description": "", "nodes": 0 }
      ]
    }
  • Exit codes:

    • 0 — scan completed successfully.

    • 1 — scan failed or returned invalid output.

    • 2 — scanner unavailable (Node.js or @axe-core/cli missing).

Troubleshooting
SymptomLikely causeActionExit code
scanner unavailable errorNode.js or npx not on PATHInstall Node.js so npx resolves, then re-run.2
Long pause or download on first runnpx is fetching @axe-core/cliAllow network access on the first run; later runs use the cache.—
Refusing to probe non-loopback hostRemote host was not explicitly authorizedAdd --allow-host HOST or confirm with --allow-external.2
Local scan target does not existLocal path or file URI cannot be resolvedSupply an existing regular local file, not a directory or share.2
scan failed or returned invalid outputaxe-core CLI errored or emitted non-JSONConfirm the target URL or file is reachable and well-formed.1
Empty violations but issues expectedPage rendered after the scan, or rules N/AConfirm the target fully loads; check summary.inapplicable.0
Mapping findings to frameworks

Each violation's impact is one of minor, moderate, serious, or critical. axe rule tags decode to WCAG success criteria by stripping the wcag prefix and inserting decimals:

axe tagWCAG success criterion
wcag1111.1.1 Non-text Content
wcag1431.4.3 Contrast (Minimum)

WCAG success criteria are normative; the axe techniques that surface them are informative. Treat scanner output as evidence pointing at a criterion, not a conformance verdict.

Runtime probe harness

The runtime probe harness (scripts/runtime_a11y) runs Playwright-based accessibility probes against a project-specific surface inventory and aggregates the results into a coverage matrix. For workflow orchestration, ask the user to run the manual-only accessibility-coverage-matrix skill (/accessibility-coverage-matrix); it is not model-invocable. Use the Accessibility Surface Inventory subagent as the canonical producer of the runtime config. Activate it by name; when it does not resolve, warn the user that the capability is unavailable and stop the dependent step.

Harness prerequisites

Complete these once before any runtime-harness command. They are separate from the scan.py prerequisites above.

  • Python 3.11+ with uv available on PATH.

  • Node.js available on PATH, plus system Google Chrome, because the probes target channel: 'chrome'.

  • Skill-local Node dependencies installed under scripts/runtime_a11y. The CLI fails fast with an install hint when they are missing.

  • Automated Windows NVDA runs additionally require the manifest-selected Guidepup NVDA asset. Machine setup and asset installation are separate actions from npm ci.

Install the harness dependencies from the scripts/runtime_a11y directory:

PLAYWRIGHT_SKIP_BROWSER_DOWNLOAD=1 npm ci
$env:PLAYWRIGHT_SKIP_BROWSER_DOWNLOAD = '1'; npm ci

PLAYWRIGHT_SKIP_BROWSER_DOWNLOAD=1 avoids downloading bundled browsers that the harness never uses.

For automated NVDA runs, prepare the Windows machine once, then install the asset selected by the skill-local Guidepup package. Run the asset command again after updating Guidepup:

Set-Location <skill-root>/scripts/runtime_a11y
npx --yes --registry=https://registry.npmjs.org/ @guidepup/[email protected] setup
npx --yes --registry=https://registry.npmjs.org/ @guidepup/[email protected] install nvda

The commands configure the machine and write versioned assets to the Guidepup user cache. They are not part of ordinary dependency installation. Run the prerequisite-only probe before a calibration session:

uv run scripts/runtime_a11y/__main__.py run-calibration --config <path-to>/a11y-runtime.config.json --prerequisite-only

The preflight reports the skill-local library, manifest-selected NVDA asset, and any conflicting NVDA process independently. Do not start a personal NVDA instance before an automated run; the harness starts an isolated session and rejects an existing process.

Product-neutral screen-reader cases live in scripts/runtime_a11y/screen-reader-cases.json. A downstream binding supplies named routes, targets, states, and explicit execution recipes. Catalog digest drift, missing target closure, duplicate identities, unsupported commands, secret-bearing binding keys, and inferred actions fail before browser startup.

Use repeatable run-calibration --journey <id> arguments for an authorized live subset. Run the downstream integrity recipe before product cases and keep real NVDA advisory/manual. For deterministic evidence, use run-all --probe <probe-id> with surface/state filters or a reviewed probeScoping configuration; ordinary run-all must not be treated as permission to start a real screen reader.

Invocation

Run the harness through its script entrypoint. Invoke it from the skill root, which is the directory holding pyproject.toml, so uv resolves the skill's own environment. This matches the invocation convention used by scan.py and the other Python skills, and it needs no PYTHONPATH.

uv run scripts/runtime_a11y/__main__.py run-all --config a11y-runtime.config.json --out results.json
uv run scripts/runtime_a11y/__main__.py probe <probeId> --config a11y-runtime.config.json
uv run scripts/runtime_a11y/__main__.py render-artifacts --matrix coverage-matrix-repo.json --output-dir .copilot-tracking/accessibility/coverage --repo-slug repo
uv run scripts/runtime_a11y/__main__.py compose-evidence --help

To run from any other working directory, pin the skill as the uv project and use the same script path:

uv run --project <skill-root> <skill-root>/scripts/runtime_a11y/__main__.py run-all --config a11y-runtime.config.json --out results.json
  • --config resolves relative to the current working directory.

  • --out writes the aggregated JSON document to disk.

  • --base-url overrides the configured base URL. It must remain a loopback origin unless the host is allowlisted or --allow-external is supplied.

  • --trace captures Playwright traces and screenshots.

  • --allow-external confirms intentional probing of a non-loopback host.

  • render-artifacts turns a rendered matrix JSON document into the complete coverage evidence bundle.

Evidence bundle composition

compose-evidence combines downstream-owned catalogs, cadence scope, run context, normalized source envelopes, state proofs, and optional qualified-reviewer supplements into one deterministic evidence bundle. It is separate from render-artifacts: rendering creates coverage, EARL, and manual-plan views from a matrix, while composition creates a revision-bound trust envelope across evidence producers.

The command requires explicit input paths and never infers product scope, Git state, time, retention, branch policy, or a release verdict. A consuming project owns those decisions. The composer validates artifact bytes beneath --artifact-root, preserves conflicts and quarantined results, and always emits non-attestation metadata. Automation, reviewer evidence, and release evidence have separate completeness states.

For pull requests, a valid initial bundle may report reviewer evidence as pending. A qualified reviewer can later provide a privacy-minimized, digest-bound supplement and registry snapshot for deterministic recomposition against the prior bundle. Recomposition supplies both --prior-bundle and its independently retained --prior-bundle-digest; omission or mutation of prior history fails closed. Missing required reviewer evidence blocks release completeness, not ordinary bundle production. Raw screen-reader phrases and restricted transcript paths are forbidden in ordinary bundles; only approved counts, redacted metadata, and digests cross this boundary.

Use --require-completeness automated, reviewer, or release only when the downstream workflow intends that dimension to gate. Valid incomplete bundles are still written for diagnosis. The additional exits are:

Exit codeMeaning
5Automated evidence is incomplete.
6Reviewer evidence is pending or invalid.
7Release evidence is incomplete.

Existing exits 0 through 4 retain their meanings. The JSON contracts live beside the runtime at evidence-bundle.schema.json, evidence-source.schema.json, evidence-scope.schema.json, screen-reader-method-cell.schema.json, and qualified-human-result.schema.json.

For a complete adopter path from an inactive template to a first retained bundle and deterministic recomposition, including schema-valid examples for every authored input, read references/evidence-composition-adoption.md.

Visual review capture

capture-visual-review records deterministic screenshot evidence for the configured surfaces and states. It requires visualReview.enabled to be true in the runtime config.

uv run scripts/runtime_a11y/__main__.py capture-visual-review \
  --config <path-to>/a11y-runtime.config.json \
  --run-root .copilot-tracking/accessibility/local-runs/<run-name>
  • --run-root selects the evidence directory. It resolves relative to the repository root and must land on a child path inside .copilot-tracking/accessibility/local-runs. Paths outside that root, and traversal segments, are rejected.

  • Omitting --run-root allocates a timestamped run directory beneath that same root.

  • --visual-surface and --visual-state narrow the capture to specific configured ids.

  • The server the command targets follows serveMode. See Server modes.

Server modes

serveMode in the runtime config decides whether the harness manages a server for capture-visual-review.

serveModeBehavior
autoReuses a healthy server at the configured loopback origin, otherwise builds and starts one it owns and stops afterward.
servedRequires a server already answering the configured loopback origin, and fails with the expected origin and start command when none responds.
externalNever probes or starts a server. The configured target must already be reachable.
offNever probes or starts a server.

auto and served accept only loopback origins, because the harness will not manage or health-probe a remote server. A non-loopback target still requires the allowlist or --allow-external, and is only valid with external or off.

Under auto, starting an owned server builds the site first, so a capture that has to start its own server takes several minutes before the first screenshot. Leave a server running at the configured origin to skip that cost, which is the reuse path.

The Docusaurus site in this repository is configured for auto at http://127.0.0.1:3001, which is the same production-build origin the Playwright end-to-end suite uses. Capturing against the production build keeps visual evidence consistent with what continuous integration verifies.

Config summary

The harness loads scripts/runtime_a11y/config-schema.json and expects a runtime config with fields such as baseUrl, serveMode, allowlist, routes, surfaces, and probeScoping. The config defines the surfaces and interaction states the probes execute. A runtime guard blocks non-loopback targets unless the host is allowlisted or the caller supplies --allow-external. serveMode controls server ownership for visual review capture, described under Server modes.

Real-NVDA journeys support three capture modes:

  • single reads the cumulative speech log after commands and the configured settle interval.

  • clear-and-capture clears earlier speech before the settle interval, then reads the cumulative log.

  • action wraps an existing post-start declarative trigger with Guidepup action capture. Assertions can select actionSpeech or actionNormalizedSpeech to evaluate only output attributed to that trigger.

Action capture waits for Guidepup's one-second speech quiet window. It is appropriate for immediate interaction-driven announcements but does not extend to arbitrary delayed updates and cannot create speech that NVDA does not emit. Keep single, clear-and-capture, accessibility-tree evidence, and manual AT evidence available for those cases. Action mode fails closed when the journey lacks triggerAfterDriverStart, a declarative trigger, a real Guidepup driver, or action-capture support.

Probe inventory and adequacy map

The harness currently includes these probes under scripts/runtime_a11y/runner:

WCAG and ARIA APG probes:

  • probe-axe

  • probe-keyboard-traversal

  • probe-focus-visible

  • probe-focus-obscured

  • probe-live-region

  • probe-aria-tree

  • probe-widget-keyboard

  • probe-reflow-resize

  • probe-target-size

  • probe-contrast

  • probe-forced-colors

  • probe-reduced-motion

  • probe-structure-crawl

  • probe-name-in-label

  • probe-use-of-color (1.4.1)

  • probe-text-spacing (1.4.12)

  • probe-hover-focus (1.4.13)

  • probe-link-purpose (2.4.4)

  • probe-input-purpose (1.3.5)

  • probe-forms (3.3.2, informs 3.3.1/3.3.3)

  • probe-context-change (3.2.1, 3.2.2)

  • probe-orientation (1.3.4)

  • probe-audio-control (1.4.2)

  • probe-timing (2.2.1)

  • probe-zoom-blocker (1.4.4, informs 1.4.10)

  • probe-virtual-sr (4.1.2 name/role announcement captured from a virtual screen reader's spoken-phrase log; informs 1.3.1)

  • probe-real-sr (real Windows NVDA announcement assertions through a Guidepup adapter; only decides when configured expectations are present and the AT stack is available)

Non-WCAG defect-scan probes (framework defect-scan):

  • probe-console-errors (console/page errors)

  • probe-broken-links (same-origin 404s)

  • probe-dom-hygiene (duplicate ids, positive tabindex, missing/duplicate landmarks)

  • probe-title-lang (empty title, invalid lang)

Method adequacy is encoded in scripts/runtime_a11y/probe-criteria-map.json. Each entry records which criteria a probe can decide and which criteria it can only inform. A result only counts as adequate when the winning method is allowed by that mapping.

Coverage engine outputs

The matrix engine in scripts/runtime_a11y/matrix expands the criterion x surface x state grid, merges updates deterministically, and preserves human-confirmed findings over lower-priority automation. It computes adequate-coverage percentages by framework and overall. The render-artifacts command emits a deterministic bundle containing coverage-matrix-{repo-slug}.json, coverage-matrix-{repo-slug}.md, accessibility-results-{repo-slug}.earl.jsonld, manual-at-testplan-{repo-slug}.md, manual-at-testplan-{repo-slug}.yaml, and accessibility-artifacts-{repo-slug}.json.

The EARL (Evaluation and Report Language) JSON-LD export is the normalized results contract for interoperability with the ACT Rules ecosystem and downstream VPAT or EAA review. Each evaluated cell becomes one stable earl:Assertion that records subject, criterion, state, method, method adequacy, result date, and evidence. A result whose winning method only informs its criterion is earl:cantTell, never a false earl:passed. Inapplicable cells are earl:inapplicable; unevaluated cells are omitted. The paired manual plans contain cells that still require a human-deciding method and provide blank result fields for evidence writeback.

Public ARIA-AT and execution contract

The catalog in scripts/runtime_a11y/aria-at-catalog.json is the repository's documented source of truth for generated AT-oriented cases. Its provenance fields are strict and immutable: each mapping records a local catalog version, a canonical upstream URL, a commit-pinned upstream URL, and the upstream commit SHA used for the reviewed refresh. The repository does not copy upstream assertion tables or prose; it paraphrases official W3C and ARIA-AT intent and cites the source in the generated artifacts.

The current public posture is intentionally conservative. The five starter defaults (modal dialog, checkbox, select-only combobox, menu button, and tabs) are citation-bearing manual-only mappings because the richer AT-mode and quick-navigation semantics that these patterns can require are not faithfully modeled by the current structured command boundary. Runtime overrides may create explicit synthetic contract tests, but those are always non-pass candidate evidence and never accessibility conformance evidence. The resolver uses the documented fallback order of state -> surface -> catalog; commands and assertions are stored as atomic arrays, and an explicit empty array intentionally disables execution for a given case.

Unknown patterns remain generic manual drafts or project-refinement markers rather than a fake automation pass. Equally specific ambiguity is treated as a configuration error before rendering or driver startup. The public CLI exposes render-artifacts as an optional mapping configuration step and run-at-plan as the supported path for listing, selecting, executing, and reporting generated AT cases. The real-driver boundary currently supports Guidepup-backed Windows NVDA automation plus manual-only JAWS and other operator-led flows; synthetic execution is a separate evidence channel and never claims a pass. The generated manual plans stay linked to the shared real screen reader testing runbook, while case-specific commands remain inside the generated plan output rather than being written back into the matrix or coverage artifacts.

The generated manual cases, synthetic or real execution evidence, ACT-style result reasoning, EARL outcomes, and later qualified-human review are distinct layers. The public workflow renders representative fixtures through the documented CLI and inspects the six generated artifacts, but it does not commit golden outputs for the inspection bundle.

Exit codes
  • 0 indicates the harness completed successfully, even when probes reported findings.

  • Non-zero exit codes indicate a harness error such as invalid config, a failed probe, missing Node.js, uninstalled harness dependencies, missing browser support, or a blocked target.

verify-intent adds two design-intent codes that a consuming project's CI can distinguish:

Exit codeMeaningTypical response
3A blocking expectation resolved failedTreat as intent drift; the surface regressed
4A blocking expectation was never evaluatedTreat as coverage drift; the check did not run

The two are separate because a failed check and an unrun check call for different responses. Reusing one code would let missing coverage read as a regression, or pass silently.

Runtime dependencies

The harness resolves its Node dependencies from a skill-local package under scripts/runtime_a11y (package.json plus committed package-lock.json), pinning [email protected], @axe-core/[email protected], @guidepup/[email protected], and optional real-AT integration through @guidepup/[email protected]. Install the Node dependencies and the separately managed NVDA asset as described under Harness prerequisites. The probes then resolve their dependencies from the local node_modules; the CLI fails fast with an install hint when node_modules is absent, before it probes or starts any server.

Testing

The harness is tested in two tiers. Browserless verdict and pure-helper unit tests run under node --test (repo script test:node) and cover the decision logic in runner/_core.mjs (for example virtualSrNameRoleStatus and liveRegionStatus). Browser smoke tests under tests/runtime_a11y/runner/probe-smoke/ launch system Chrome and drive the real capture path against inline fixtures to prove the DOM-to-verdict pipeline, including nameless controls, live-region firing, forced-color computed styles, and CDP accessibility-node structure. They are named *.smoke.mjs so the default browserless run skips them. PR Validation runs them through the CI-owned npm run ci:test:a11y:smoke entry point. Local reproduction requires system Chrome and the skill-local node_modules.

CI regression gate

Use the ready-to-copy workflow template at references/ci/accessibility-coverage.workflow-template.yml as the documentation-first integration point for a target project. Copy it into the target repository's GitHub Actions workflow directory only after the target project commits an a11y-runtime.config.json and has a build/serve path that the template can invoke. Once authored *.intent.yaml records exist, the template fails closed if the config or current-run results are missing.

The template mirrors the Docusaurus workflow recipe by provisioning system Chrome, setting up Node 24 plus Python and uv, building the target, serving it under a configurable base URL, and running the harness script entrypoint with uv run --project pinned at the vendored skill root. The core high-confidence probes always block: probe-axe, probe-dom-hygiene, probe-broken-links, probe-console-errors, probe-target-size, probe-contrast, and probe-reflow-resize. The interaction-state and announcement probes (probe-keyboard-traversal, probe-widget-keyboard, probe-live-region, probe-aria-tree, probe-virtual-sr, probe-real-sr) are the adequate method for the classes static analysis only informs, and their blocking posture follows the A11Y_TIER dial defined under Gate strictness by assessment tier: basic reports them advisory, standard ratchets (blocking on the surfaces listed in A11Y_RATCHET_SURFACES), and comprehensive blocks them everywhere. The remaining heuristic probes such as use-of-color, hover-focus, link-purpose, name-in-label, and focus-* are surfaced as informational results so they can guide follow-up work without blocking initial adoption. The real-screen-reader probe stays advisory by default unless a project opts into it through configured expected assertions and a supported OS/AT stack; it returns candidate when the platform or AT is unavailable rather than pretending a pass or failure. Decisive coverage of the adaptive-rendering class depends on the target committing the zoom-200, reflow-320, and text-spacing states in its a11y-runtime.config.json.

The parity reference at references/ci/probe-spec-parity.md maps each runtime probe to the closest existing Docusaurus e2e spec and highlights gaps where no equivalent spec currently exists.

The references/ci/act-rule-format.md reference documents how the harness's probes, generated test cases, and EARL results align to the W3C ACT Rules Format (applicability, expectation, passed/failed/inapplicable) so results interoperate with the ACT Rules ecosystem and conformance reporting.

Design intent verification

A consuming project can declare what a surface must convey and have CI check that what shipped still matches. The declaration is a Design Intent Record, human-authored and committed at design-intent/<surface-id>.intent.yaml in that project. Each intent states what the surface must communicate, why, and for whom, and binds every claim to a named check.

The authored-record field contract is in references/design-intent/record-contract.md. Read it when authoring or reviewing a record. This section covers verification.

This skill supplies the step that turns a probe run into a verdict against that declaration.

Invocation
uv run --project <skill-root> <skill-root>/scripts/runtime_a11y/__main__.py verify-intent \
  --record design-intent/<surface-id>.intent.yaml \
  --results results.json
  • --record is the authored record. It is never read for anything but its declarations and never rewritten.

  • --results is a results document from run-all.

  • --out overrides the output path, which defaults to design-intent/.verification/<surface-id>.earl.json beside the record.

How results resolve to outcomes

A result row matches an expectation when its surface, state, emitting probe, and criterion all match what the record declares. Because criterion coverage overlaps across probes, the emitting probe is part of the join.

SituationOutcomeMode
Every matched criterion passedpassedautomatic
Any matched criterion failedfailedautomatic
Evidence gathered but not decisivecantTellautomatic
No result row matched the expectationuntestedautomatic
The expectation uses assert: customuntestedmanual

An expectation is one claim over one or more criteria, so the worst criterion outcome governs. Expectations the run did not cover report untested rather than being omitted, which keeps a missing check visible instead of silently absent.

Expectations whose criteria a probe only informs resolve to cantTell in normal operation. That is expected: the probe gathered evidence without settling the claim.

A custom expectation reports untested whether or not the record carries a human override. The adapter records only observed runtime outcome in the artifact. Human override remains authoritative in the record itself and is not merged into the generated artifact outcome.

Interpretation is two-layered by contract, and the generated artifact now carries both layers on every assertion:

  • observedOutcome is the generated artifact field outcome. An override never replaces it.

  • effectiveOutcome applies fail-safe precedence. Either an observed or human failed outcome yields failed; human passed settles only untested, cantTell, or inapplicable; otherwise the observed outcome remains. This is the value the gate applies.

  • overrideConflict is true only when the observed and authored override outcomes are each passed or failed and differ. An override that settles an untested, cantTell, or inapplicable expectation is the documented use, not a conflict.

A conclusive conflict fails closed. verify-intent writes one Warning: line to stderr for each conflicting assertion, names the intent, expectation, observed outcome, and override outcome, and returns design-intent drift when the conflicting expectation blocks.

The shipped Python verifier rejects duplicate YAML keys, validates the complete authored schema, and enforces semantic checks for dates, filename and runtime-config bindings, duplicate identifiers, method pairing, and probe adequacy before writing an artifact. This repository's PowerShell validator independently enforces the same contract for source and generated-artifact validation.

Exit codes
  • 0 — the artifact was written and no blocking expectation failed.

  • 1 — the record or results document was malformed. Nothing is written.

  • 2 — the record or results document could not be read.

  • 3 — the artifact was written and a blocking expectation failed.

  • 4 — the artifact was written and a blocking expectation was never evaluated.

Exit codes 3 and 4 are enforcement signals. A consuming project's CI step fails its build on either non-zero exit, exactly as it would for any other command. The artifact is still written so the run can publish it. Which expectations block is the record's decision, through each expectation's blocking flag.

Graphics and diagram semantics have no runtime probe. Those expectations use assert: custom and resolve through human review; see the Graphics ARIA and SVG-AAM reference for the boundary between what automation can decide and what it cannot.

Rendering a record for review

A record states what must be true and how it is checked, but carries no implementation or delivery scope. Reviewers who want prose rather than YAML can render one:

uv run --project <skill-root> <skill-root>/scripts/runtime_a11y/__main__.py project-intent \
  --record design-intent/<surface-id>.intent.yaml \
  --out handoff.md

Output is deterministic and renders only what the record already says, adding no analysis and no verification results. Generate it on demand rather than committing it, so it cannot drift from the record it describes. Without --out the Markdown goes to stdout.

Usage notes

  • Treat this skill as the default accessibility entrypoint for planning and review workflows.

  • Resolve framework and phase guidance through this skill instead of duplicating its internal reference paths in agents or instructions.

  • Use the scanner CLI when you need normalized findings from an accessibility scan.

Files

references/frameworks/section-508.md


title: Section 508 framework reference description: US Section 508 ICT Refresh (revised 2017) standards packaged as an accessibility assessment knowledge base

Section 508 framework reference

This skill packages the US Section 508 ICT Refresh (revised 2017) standards as an accessibility assessment knowledge base. It covers four normative chapters: E202 (General Requirements), E205 (Electronic Content), E207 (Software), and E208 (Support Documentation and Services). Section 508 incorporates the W3C WCAG 2.0 Level A and AA success criteria by reference, so most clauses below carry WCAG cross-references that link into the sibling wcag-22 skill's per-guideline reference files (anchored at #sc-<n>-<m>-<k>).

Source: US Access Board, Information and Communication Technology (ICT) Accessibility Standards, https://www.access-board.gov/ict/. Section 508 standards are works of the US federal government and reside in the public domain under 17 U.S.C. § 105. Clause summaries in this skill are paraphrased in the authors' own words for stylistic consistency with sibling W3C-licensed framework skills.

Clause Roll-up

ClauseTitleTypeWCAG cross-refReference
E202.1AccessibilityGeneraln/achapter-e202.md#clause-e202-1
E202.2DefinitionsGeneraln/achapter-e202.md#clause-e202-2
E202.3AbbreviationsGeneraln/achapter-e202.md#clause-e202-3
E202.4References to WCAG 2.0GeneralWCAG 2.0 A/AA (all SCs)chapter-e202.md#clause-e202-4
E205.1ScopeContentn/achapter-e205.md#clause-e205-1
E205.2Technical StandardsContentsc-1-1-1, sc-1-3-1, sc-1-4-3, sc-4-1-2chapter-e205.md#clause-e205-2
E205.3PDFContentsc-1-1-1, sc-2-1-1, sc-4-1-2chapter-e205.md#clause-e205-3
E205.4WCAG 2.0 Level A and AAContentWCAG 2.0 A/AA (all SCs)chapter-e205.md#clause-e205-4
E205.5Audio DescriptionContentsc-1-2-3, sc-1-2-5chapter-e205.md#clause-e205-5
E205.6CaptionsContentsc-1-2-2, sc-1-2-4chapter-e205.md#clause-e205-6
E205.7FlashingContentsc-2-3-1, sc-2-3-2chapter-e205.md#clause-e205-7
E205.8Color DependencyContentsc-1-4-1chapter-e205.md#clause-e205-8
E205.9Alt TextContentsc-1-1-1chapter-e205.md#clause-e205-9
E205.10TablesContentsc-1-3-1chapter-e205.md#clause-e205-10
E205.11Form Labels and InstructionsContentsc-1-3-1, sc-3-2-2, sc-3-3-2chapter-e205.md#clause-e205-11
E207.1ScopeSoftwaren/achapter-e207.md#clause-e207-1
E207.2General ExceptionsSoftwaren/achapter-e207.md#clause-e207-2
E207.3User Interface StandardsSoftwaresc-1-4-3, sc-2-1-1chapter-e207.md#clause-e207-3
E207.4KeyboardSoftwaresc-2-1-1, sc-2-1-2chapter-e207.md#clause-e207-4
E207.5Keyboard FocusSoftwaresc-2-4-3, sc-2-4-7chapter-e207.md#clause-e207-5
E207.6Status, Prompts, and ResultsSoftwaresc-3-2-1, sc-3-2-2, sc-4-1-3chapter-e207.md#clause-e207-6
E207.7ContrastSoftwaresc-1-4-3chapter-e207.md#clause-e207-7
E207.8FlashingSoftwaresc-2-3-1, sc-2-3-2chapter-e207.md#clause-e207-8
E207.9ControlsSoftwaresc-2-1-1, sc-2-5-5, sc-3-2-1, sc-3-2-4chapter-e207.md#clause-e207-9
E207.10Text PropertiesSoftwaresc-1-4-12chapter-e207.md#clause-e207-10
E207.11Animation and MotionSoftwaresc-2-3-3chapter-e207.md#clause-e207-11
E208.1ScopeSupportn/achapter-e208.md#clause-e208-1
E208.2GeneralSupportn/achapter-e208.md#clause-e208-2
E208.3User Support ServicesSupportn/achapter-e208.md#clause-e208-3
E208.4Accessible DocumentationSupportsc-1-1-1, sc-1-3-1, sc-1-4-3, sc-2-1-1, sc-4-1-2chapter-e208.md#clause-e208-4

Total: 30 clauses (E202: 4; E205: 11; E207: 11; E208: 4).

Assessment Heuristics

Use these heuristics when applying the Section 508 standard against an ICT artifact:

  • Treat WCAG 2.0 Level AA conformance as the baseline target for any electronic content covered by E205, and confirm it by running WCAG-based automated tooling plus targeted manual checks for each cited SC.

  • For software covered by E207, validate keyboard operation, visible focus, status announcements, and 4.5:1 contrast first; these account for the majority of real-world Section 508 findings.

  • For PDF and office documents under E205.3, verify the source authoring tool produced a tagged structure rather than relying on post-hoc remediation, and provide an HTML alternative whenever a scanned PDF cannot be tagged.

  • For documentation and support under E208, audit each support channel (phone, chat, email, training) for an equivalent accessible path before treating documentation alone as compliant.

  • When a clause is marked n/a for WCAG cross-reference, treat the Access Board URL as the authoritative source and rely on procurement and policy controls rather than automated WCAG tooling.

  • Record every E207.2 exception with a documented rationale, a mitigation plan, and a review date so the exception does not silently expand over time.

Chapter E202: General Requirements

Chapter E202 sets the foundational scope, vocabulary, and normative framing for the Section 508 ICT Refresh standard. It establishes accessibility as a mandatory conformance requirement for ICT procured, developed, or maintained by US federal agencies, defines the technical terminology used throughout chapters E205–E208, and incorporates WCAG 2.0 Level A and AA by reference as the underlying technical baseline for electronic content and software.

Source: US Access Board, ICT Accessibility 508 Standards, Chapter E202, https://www.access-board.gov/ict/#e202-general-requirements.

clause-e202-1

E202.1 Accessibility

Information and communication technology covered by Section 508 must be accessible to people with disabilities; conformance with chapters E202 through E208 is mandatory whenever covered ICT is procured, developed, maintained, or used.

Applies to: All covered ICT (electronic content, software, hardware, and support services) across the procurement and lifecycle scope of Section 508.

WCAG cross-reference: n/a (scoping statement; downstream clauses carry the WCAG criteria).

Assessment heuristics:

  • Confirm that procurement and contracting policy names Section 508 conformance as a gating criterion rather than a preference.

  • Confirm that accessibility work is scheduled inside the product development lifecycle rather than treated as a post-release remediation activity.

Source: https://www.access-board.gov/ict/#e202-general-requirements

clause-e202-2

E202.2 Definitions

Establishes the normative vocabulary used across the standard, including terms such as electronic content, software, user interface, assistive technology, and the accessibility principles (perceivable, operable, understandable) carried forward from WCAG 2.0.

Applies to: Interpretation of all clauses in chapters E202–E208; binding when resolving disputes over the meaning of standard terms.

WCAG cross-reference: n/a (definitional content).

Assessment heuristics:

  • Check that procurement language, contract clauses, and team glossaries use these definitions verbatim rather than synonyms.

  • Resolve disagreement about whether a component is in scope by mapping the component to a defined term (for example, distinguishing electronic content from software).

Source: https://www.access-board.gov/ict/#e202-general-requirements

clause-e202-3

E202.3 Abbreviations

Lists the abbreviations used throughout the standard, including WCAG, HTML, PDF, and ARIA, so that downstream technical clauses are unambiguous for procurement officers, developers, and assessors.

Applies to: All written use of standard abbreviations in conformance documentation, procurement RFPs, vendor responses, and accessibility reports.

WCAG cross-reference: n/a (definitional content).

Assessment heuristics:

  • Confirm that vendor accessibility conformance reports use the abbreviations defined here rather than agency-specific shorthand.

  • Treat non-standard abbreviations in conformance documentation as a documentation defect.

Source: https://www.access-board.gov/ict/#e202-general-requirements

clause-e202-4

E202.4 References to WCAG 2.0

Incorporates the W3C Web Content Accessibility Guidelines 2.0 Level A and Level AA success criteria into the Section 508 standard by reference, so that conformance to the technical chapters (E205 through E208) carries with it conformance to every cited WCAG 2.0 success criterion.

Applies to: All technical conformance work under E205 (electronic content), E207 (software), and E208 (support documentation) where WCAG 2.0 criteria are cited.

WCAG cross-reference: WCAG 2.0 Level A and Level AA in full (see the sibling wcag-22 skill for per-criterion detail).

Assessment heuristics:

  • Treat WCAG 2.0 Level AA as the default technical baseline for any electronic content covered by E205.

  • Treat WCAG 2.0 criteria as the authoritative technical text when the Access Board chapter language is silent on a specific implementation detail.

Source: https://www.access-board.gov/ict/#e202-general-requirements

Chapter E205: Electronic Content

Chapter E205 governs the accessibility of electronic documents and web content delivered by covered ICT, including HTML, PDF, office documents, EPUB, and multimedia. It incorporates the full set of WCAG 2.0 Level A and AA success criteria as the technical conformance baseline and adds clauses that address PDF tagging, captions, audio descriptions, color independence, alternative text, table structure, and form labelling. E205 is the broadest technical chapter and applies whenever content is delivered to users rather than executed as code.

Source: US Access Board, ICT Accessibility 508 Standards, Chapter E205, https://www.access-board.gov/ict/#e205-electronic-content.

clause-e205-1

E205.1 Scope

Defines the categories of electronic content covered by chapter E205, including web pages, downloaded documents, email content, embedded media, and content delivered through cloud services or document repositories, regardless of whether the audience is the public or internal staff.

Applies to: All electronic documents and web content produced, procured, or maintained by the covered organisation.

WCAG cross-reference: n/a (scoping clause).

Assessment heuristics:

  • Inventory every delivery channel for electronic content (public web, intranet, email attachments, cloud portals) and confirm each is in the assessment scope.

  • Treat internal-only content as in scope by default; require explicit, documented justification for any exception.

Source: https://www.access-board.gov/ict/#e205-electronic-content

clause-e205-2

E205.2 Technical Standards

Requires electronic content to conform to applicable W3C technical standards (HTML, CSS, ARIA, PDF/A) and to use semantically correct markup so that assistive technology can perceive content structure, names, and roles.

Applies to: Web pages, web applications, and structured document formats where W3C standards apply.

WCAG cross-reference: sc-1-1-1, sc-1-3-1, sc-1-4-3, sc-4-1-2.

Assessment heuristics:

  • Run an HTML and ARIA validator and confirm zero critical errors on representative pages.

  • Confirm PDF outputs embed Unicode text and logical structure tags rather than raster images or untagged streams.

Source: https://www.access-board.gov/ict/#e205-electronic-content

clause-e205-3

E205.3 PDF

Requires PDF files to preserve real text as Unicode, expose a logical reading order through PDF tagging, and remain navigable by keyboard and assistive technology; image-only or scanned PDFs that cannot be remediated must be accompanied by an accessible alternative format.

Applies to: All PDF documents distributed to users.

WCAG cross-reference: sc-1-1-1, sc-2-1-1, sc-4-1-2.

Assessment heuristics:

  • Generate PDFs from accessible source files (Word, InDesign) using styles, and validate the output with a PDF accessibility checker.

  • For scanned PDFs that cannot carry tags, add an OCR text layer or publish a parallel HTML version and link the two together.

Source: https://www.access-board.gov/ict/#e205-electronic-content

clause-e205-4

E205.4 Incorporation of WCAG 2.0 Level A and AA

Requires electronic content to conform to the WCAG 2.0 Level A and Level AA success criteria in their entirety, making WCAG 2.0 AA the primary conformance target for web and document accessibility under Section 508.

Applies to: All electronic content within the scope of E205.1.

WCAG cross-reference: WCAG 2.0 Level A and Level AA in full (see the sibling wcag-22 skill for per-criterion detail).

Assessment heuristics:

  • Run automated WCAG conformance tooling against representative samples and supplement with manual checks targeting cognitive, keyboard, and screen reader scenarios.

  • Maintain an accessibility statement that commits to WCAG 2.0 Level AA and lists known gaps with planned remediation dates.

Source: https://www.access-board.gov/ict/#e205-electronic-content

clause-e205-5

E205.5 Audio Description

Requires prerecorded synchronised media to provide audio descriptions of visual information that is essential to understanding the content but is not already conveyed by the main audio track.

Applies to: Prerecorded video content with significant visual information.

WCAG cross-reference: sc-1-2-3, sc-1-2-5.

Assessment heuristics:

  • Confirm that each in-scope video carries either an embedded audio description track or a separately published descriptive transcript.

  • Audit descriptions for coverage of on-screen text, scene changes, non-verbal action, and speaker identification.

Source: https://www.access-board.gov/ict/#e205-electronic-content

clause-e205-6

E205.6 Captions

Requires synchronised media to include captions that convey dialogue, speaker identification, and sound effects essential to understanding, synchronised with the audio track for both prerecorded and live media.

Applies to: All synchronised audio and video content, including live streams.

WCAG cross-reference: sc-1-2-2, sc-1-2-4.

Assessment heuristics:

  • Confirm that captions are toggleable and synchronised to within roughly 100 milliseconds of the audio track.

  • Confirm that captions include speaker labels, key sound effects, and significant non-speech audio cues.

Source: https://www.access-board.gov/ict/#e205-electronic-content

clause-e205-7

E205.7 Flashing

Prohibits electronic content from flashing more than three times in any one-second period to reduce the risk of triggering photosensitive seizures.

Applies to: All electronic content with animated, video, or auto-refreshing elements.

WCAG cross-reference: sc-2-3-1, sc-2-3-2.

Assessment heuristics:

  • Review animated GIFs, video segments, and CSS animations for flash rates above 3 Hz and remove or replace any that exceed the threshold.

  • Add user controls (pause or stop) for any content with motion that approaches the threshold.

Source: https://www.access-board.gov/ict/#e205-electronic-content

clause-e205-8

E205.8 Color Dependency

Prohibits electronic content from relying on colour alone to convey meaning, indicate an action, prompt a response, or distinguish a visual element; colour must always be paired with text, shape, pattern, or other non-colour cues.

Applies to: All visual content, including charts, status indicators, links, form validation, and infographics.

WCAG cross-reference: sc-1-4-1.

Assessment heuristics:

  • Inspect status indicators (success, warning, error) and confirm each pairs a colour with a label, icon, or shape.

  • Run a colour-blindness simulator over representative charts and dashboards and confirm that no information is lost.

Source: https://www.access-board.gov/ict/#e205-electronic-content

clause-e205-9

E205.9 Alt Text

Requires non-text content (images, graphics, photographs) to carry a text alternative that conveys the purpose or information of the image; decorative content must be marked so assistive technology can skip it.

Applies to: All images, icons, charts, and graphical elements in electronic content.

WCAG cross-reference: sc-1-1-1.

Assessment heuristics:

  • Confirm that every meaningful image carries a concise, purpose-specific alt attribute rather than file names or generic phrasing.

  • Confirm that decorative images use an empty alt attribute (or equivalent) so screen readers omit them.

Source: https://www.access-board.gov/ict/#e205-electronic-content

clause-e205-10

E205.10 Tables

Requires data tables to expose row and column relationships through markup so that assistive technology can announce header cells alongside their associated data cells.

Applies to: Data tables in HTML, office documents, and PDF; not required for purely presentational layout tables.

WCAG cross-reference: sc-1-3-1.

Assessment heuristics:

  • Confirm that HTML tables use header (<th>) and data (<td>) elements with scope or headers attributes.

  • Confirm that office document tables mark the header row as a repeating header rather than relying on visual styling alone.

Source: https://www.access-board.gov/ict/#e205-electronic-content

clause-e205-11

E205.11 Form Labels and Instructions

Requires form fields to carry visible, programmatically associated labels and any instructions needed to complete the form; error messages must be clearly described and associated with the relevant control.

Applies to: All input forms in electronic content, including web forms, fillable PDF forms, and document templates.

WCAG cross-reference: sc-1-3-1, sc-3-2-2, sc-3-3-2.

Assessment heuristics:

  • Confirm that every input has an associated <label> element rather than relying on placeholder text alone.

  • Confirm that required-field indicators are announced by assistive technology and not communicated only through colour or symbols.

Source: https://www.access-board.gov/ict/#e205-electronic-content

Chapter E207: Software

Chapter E207 governs accessibility for software applications, operating systems, and graphical user interfaces. It carries forward the WCAG 2.0 conformance baseline established in E205 and adapts it to non-web software contexts where HTML and browser APIs may be unavailable, addressing keyboard operation, focus management, contrast, controls, text customisation, and motion. Software in scope includes desktop applications, mobile applications, embedded systems, and any user-facing application or platform component.

Source: US Access Board, ICT Accessibility 508 Standards, Chapter E207, https://www.access-board.gov/ict/#e207-software.

clause-e207-1

E207.1 Scope

Defines the scope of chapter E207 as all custom and third-party software components with a user interface, including desktop applications, mobile applications, browser extensions, authoring tools, and middleware that surface user-facing functionality.

Applies to: Any software component a user interacts with directly or indirectly through an interface.

WCAG cross-reference: n/a (scoping clause).

Assessment heuristics:

  • Enumerate first-party and third-party software in the assessment, including embedded or OEM components.

  • Treat documentation and support material accompanying covered software as covered by E208 rather than excluded.

Source: https://www.access-board.gov/ict/#e207-software

clause-e207-2

E207.2 General Exceptions

Permits narrow exceptions for software that is not user-facing or for which accessibility is technically infeasible, provided the exception is documented and does not reduce conformance expectations for the broader product.

Applies to: Backend services, administrative tools, and embedded subsystems claimed to be out of scope.

WCAG cross-reference: n/a (exception clause).

Assessment heuristics:

  • Require every exception to document its rationale, its mitigation (alternative access path), and a review cadence.

  • Re-evaluate each exception when supporting technology changes or when the in-scope user base changes.

Source: https://www.access-board.gov/ict/#e207-software

clause-e207-3

E207.3 User Interface Standards

Requires software user interfaces to conform to applicable platform accessibility standards (Windows UI Automation, macOS Accessibility, Android Accessibility Framework, iOS UIAccessibility, ARIA for web-based UIs) and to follow platform interaction guidelines.

Applies to: All user interface code for covered software.

WCAG cross-reference: sc-1-4-3, sc-2-1-1.

Assessment heuristics:

  • Inspect the UI tree with the platform's accessibility inspector and confirm names, roles, states, and values are exposed.

  • Confirm web-based interfaces use ARIA roles only where native HTML semantics do not already provide the correct affordance.

Source: https://www.access-board.gov/ict/#e207-software

clause-e207-4

E207.4 Keyboard

Requires every software function to be operable through a keyboard interface without requiring specific timings for individual keystrokes, and prohibits keyboard traps that prevent the user from moving focus away from a component.

Applies to: All keyboard-operable workflows in covered software.

WCAG cross-reference: sc-2-1-1, sc-2-1-2.

Assessment heuristics:

  • Walk every primary task with the keyboard only, verifying that focus reaches and operates every interactive component.

  • Confirm modal dialogs, embedded pickers, and custom widgets release focus when dismissed.

Source: https://www.access-board.gov/ict/#e207-software

clause-e207-5

E207.5 Keyboard Focus

Requires the current keyboard focus to be visibly indicated and to move through interactive components in a logical, predictable order; focus must not move unexpectedly without an explicit user action.

Applies to: All software with keyboard navigation.

WCAG cross-reference: sc-2-4-3, sc-2-4-7.

Assessment heuristics:

  • Confirm the focus indicator has sufficient contrast against both focused and unfocused backgrounds, and is not suppressed by the application's stylesheet.

  • Verify tab order matches the logical reading order of the interface rather than the DOM source order.

Source: https://www.access-board.gov/ict/#e207-software

clause-e207-6

E207.6 Status, Prompts, and Results

Requires software to provide clear status messages, prompts, and result feedback so that assistive technology users can perceive system state changes without losing keyboard focus.

Applies to: All software workflows that produce user-visible status, error, or confirmation messages.

WCAG cross-reference: sc-3-2-1, sc-3-2-2, sc-4-1-3.

Assessment heuristics:

  • Confirm transient messages (toasts, banners) use aria-live regions or platform-equivalent announcement APIs.

  • Confirm error messages describe the problem and recommend a remedy in plain language.

Source: https://www.access-board.gov/ict/#e207-software

clause-e207-7

E207.7 Contrast

Requires text and meaningful UI elements to meet minimum contrast ratios: 4.5:1 for body text and 3:1 for large text and non-text UI components such as borders, icons, and focus indicators.

Applies to: All visible UI elements in covered software.

WCAG cross-reference: sc-1-4-3.

Assessment heuristics:

  • Audit screens with a contrast analyser, sampling primary and secondary themes (light, dark, high-contrast).

  • Confirm disabled states are still distinguishable from enabled states without dropping below contrast thresholds for elements that remain readable.

Source: https://www.access-board.gov/ict/#e207-software

clause-e207-8

E207.8 Flashing

Prohibits software animations, progress indicators, and auto-refreshing content from flashing more than three times per second.

Applies to: All animated and auto-updating UI elements.

WCAG cross-reference: sc-2-3-1, sc-2-3-2.

Assessment heuristics:

  • Review progress indicators, loading spinners, and notification animations for flash rates above 3 Hz.

  • Provide a mechanism to pause or disable any content that flashes near the threshold.

Source: https://www.access-board.gov/ict/#e207-software

clause-e207-9

E207.9 Controls

Requires interactive controls (buttons, checkboxes, sliders, menu items) to be operable by keyboard and by standard input devices, with consistent activation semantics across the application.

Applies to: All interactive UI controls in covered software.

WCAG cross-reference: sc-2-1-1, sc-2-5-5, sc-3-2-1, sc-3-2-4.

Assessment heuristics:

  • Confirm controls follow platform conventions (Enter or Space for buttons, Space for checkboxes, arrow keys for sliders and option lists).

  • Confirm similarly named controls behave consistently across screens, especially in long-form workflows.

Source: https://www.access-board.gov/ict/#e207-software

clause-e207-10

E207.10 Text Properties

Requires software to allow customisation of text presentation (line height, letter spacing, word spacing, alignment) without loss of content or functionality.

Applies to: All text-presenting software where user-controlled text properties are technically possible.

WCAG cross-reference: sc-1-4-12.

Assessment heuristics:

  • Verify the application honours OS-level text scaling and contrast settings.

  • Confirm text reflows rather than truncating when spacing or font size is increased.

Source: https://www.access-board.gov/ict/#e207-software

clause-e207-11

E207.11 Animation and Motion

Requires software to avoid auto-playing animations that may disorient users with vestibular conditions and to honour user preferences such as the operating system's reduced-motion setting.

Applies to: All software with animated transitions, parallax effects, or auto-playing motion.

WCAG cross-reference: sc-2-3-3.

Assessment heuristics:

  • Confirm the application respects prefers-reduced-motion (or platform equivalent) and disables or shortens non-essential animation.

  • Provide an in-application setting to disable decorative motion independent of the OS preference.

Source: https://www.access-board.gov/ict/#e207-software

Chapter E208: Support Documentation and Services

Chapter E208 governs the accessibility of documentation and support services that accompany covered ICT, including user manuals, help systems, training materials, knowledge bases, and human support channels such as phone, chat, and email. Documentation is treated as part of the product itself: if the product is accessible but the documentation is not, the product is not in conformance. Support services must offer equivalent accommodations for users with disabilities (TTY, video relay, accessible chat, alternative formats).

Source: US Access Board, ICT Accessibility 508 Standards, Chapter E208, https://www.access-board.gov/ict/#e208-support-documentation-and-services.

clause-e208-1

E208.1 Scope

Defines the scope of chapter E208 to include all documentation and support services associated with covered ICT, whether delivered in-product, online, in print, or through human support channels.

Applies to: All documentation and support deliverables accompanying covered ICT.

WCAG cross-reference: n/a (scoping clause).

Assessment heuristics:

  • Inventory the documentation and support footprint (in-product help, manuals, knowledge bases, training, phone, chat, email).

  • Treat documentation supplied by third-party vendors as in scope when it accompanies a procured covered ICT product.

Source: https://www.access-board.gov/ict/#e208-support-documentation-and-services

clause-e208-2

E208.2 General

Establishes that accessibility of documentation and support is a conformance requirement rather than a recommendation, on the same footing as the underlying product or service.

Applies to: Documentation and support deliverables in the scope of E208.1.

WCAG cross-reference: n/a (conformance statement).

Assessment heuristics:

  • Confirm that the organisation's documentation and support policy commits to accessibility and assigns ownership for the commitment.

  • Confirm that accessibility accommodation requests have a tracked response time and a published escalation path.

Source: https://www.access-board.gov/ict/#e208-support-documentation-and-services

clause-e208-3

E208.3 User Support Services

Requires user support services to provide equivalent access for people with disabilities through accommodations such as TTY or relay services for telephone support, video relay services for users who sign, accessible live chat, and email channels with documented response times.

Applies to: All human-staffed support channels accompanying covered ICT.

WCAG cross-reference: n/a (support service accessibility requirement; underlying technical channels still meet their own clauses).

Assessment heuristics:

  • Confirm that contact information for accessible support channels (TTY, video relay, accessible chat) is published in a discoverable location alongside the primary contact details.

  • Audit the live chat interface for keyboard operability and screen reader compatibility.

Source: https://www.access-board.gov/ict/#e208-support-documentation-and-services

clause-e208-4

E208.4 Accessible Documentation

Requires the content and format of documentation to conform to the WCAG 2.0 Level A and AA success criteria that apply to the documentation's delivery format (HTML, tagged PDF, accessible office documents, captioned video tutorials).

Applies to: All documentation content delivered to users.

WCAG cross-reference: sc-1-1-1, sc-1-3-1, sc-1-4-3, sc-2-1-1, sc-4-1-2.

Assessment heuristics:

  • Apply the same WCAG 2.0 conformance bar to documentation that applies to the underlying product under E205.4.

  • Confirm video tutorials carry captions and audio descriptions, and that documentation search is keyboard-accessible and screen reader friendly.

Source: https://www.access-board.gov/ict/#e208-support-documentation-and-services

Requirements and compatibility

Written for: GitHub Copilot, Claude Code

Works with: Claude Code, Claude apps, OpenAI Codex, GitHub Copilot, Cursor, Gemini CLI, Kiro, OpenCode, Goose, Amp, Roo Code, JetBrains Junie, Factory Droid, Devin (ex-Windsurf), Mistral Vibe, OpenHands, Letta

“Works with” means the tool reads the open Agent Skills format; a skill written for one tool may use features others lack.

Needs: Claude Code frontmatter, Needs Python, Needs Node.js

The author says: Requires Python 3.11+ and uv; the scanner additionally needs Node.js and network access to fetch the pinned axe-core CLI from the public npm registry.

Security

What our scanner noticed· Low risk

  • Instructions that use the network
  • Scripts that your agent may run

This skill includes scripts that your agent may run. Read them before you use it.

A static scan is not a guarantee. Skills are third-party content: review a skill before you let an agent use it.

Attribution and licence

Published by
Microsoft
Publisher
Microsoft (Official)
Source
microsoft/hve-core · .github/skills/accessibility/accessibility · commit f425e94
Licence
MIT License (redistribution allowed)
  • LICENSE (added by AutoGineer from LICENSE)
  • ATTRIBUTION.md (written by AutoGineer)
Synced

AutoGineer is not affiliated with or endorsed by Microsoft.

Get it from the source

1 of this skill’s files are not mirrored here, so there is no ZIP. Get the complete skill from its source: microsoft/hve-core