Keyboard shortcuts

Press or to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

Accessibility

This document states the accessibility standard that the online materials in this repository are subject to, the conformance status of those materials, and the automated measures that keep that status from silently regressing.

It is written to be accurate rather than reassuring. Where this material does not yet conform, that is said plainly, with the specific criterion and the remediation path.

Last reviewed: 2 September 2026 · Contact: Kevin Sullivan, sullivan@virginia.edu

1. Scope

Everything published from this repository to https://kevinsullivan.github.io/Lean4CS1, which is the course book, the course page and schedule, and the standalone pages built from src/. It does not cover third-party sites linked from those pages, nor the PDFs of assigned readings, which are the publishers’ material and are not redistributed here.

2. Applicable standard

The University of Virginia is a public entity under Title II of the Americans with Disabilities Act, so course material published on the open web is governed by the Department of Justice rule on web and mobile accessibility, published 24 April 2024:

28 CFR § 35.200 — Requirements for web and mobile accessibility. “A public entity shall ensure that the following are readily accessible to and usable by individuals with disabilities: (1) Web content that a public entity provides or makes available, directly or through contractual, licensing, or other arrangements …”

The technical standard the rule adopts is WCAG 2.1, Level A and Level AA.

The compliance date that applies here is 26 April 2027. A state university takes the population of its state, not its enrolment, so UVA falls in the “50,000 or more” tier. That date is one year later than originally set: DOJ extended it by interim final rule in April 2026. Entities under 50,000 and special district governments have until 26 April 2028.

Two related obligations point at the same technical target and are satisfied by meeting it:

  • Section 508 of the Rehabilitation Act, whose Revised Standards (36 CFR Part 1194, App. A, § 702.10.1, effective 18 January 2018) incorporate WCAG 2.0 Level A and AA by reference. WCAG 2.1 is a superset, so conforming to 2.1 AA conforms to 2.0 AA.
  • Section 504 of the same Act, as a condition of federal financial assistance.

The rule excepts compliance that would cause a fundamental alteration of the service or an undue financial and administrative burden. No such exception is claimed for this material.

3. Conformance status

Partially conformant with WCAG 2.1 Level AA, with the exceptions in §5.

Claiming full conformance today would be false. The pages authored in this repository conform and are verified on every deploy. Pages generated by mdBook, the static site generator that builds the book, carry defects originating in its own theme, listed in §5 with their upstream tracking issues.

Status
lean4-fall-2026.htmlConformant, gated on every deploy
lean4-fall-2026-sources.htmlConformant, gated on every deploy
Book chapters, cover, course page, 404, printPartially conformant — see §5

4. Automated measures

The assurance is a build gate, not a periodic audit, so a regression cannot reach the published site between reviews.

What runs. scripts/a11y_check.py serves the built book, drives it in headless Chromium, and runs axe-core against the rule tags wcag2a, wcag2aa, wcag21a, wcag21aa and section508.

Where it runs.

  • Locally, as make a11y. The target depends on build, so it can never audit a stale book/.
  • In continuous integration, as the Check accessibility step of .github/workflows/mdbook.yml, positioned between the build and the upload. A violation on a gated page fails the job, and nothing is published. The site cannot regress into non-conformance without the deploy stopping.

What it gates versus reports. A violation on a page authored here fails the build. Violations on mdBook’s generated pages are printed but do not fail it, because they originate upstream and cannot be corrected from this repository; gating on them would stop every deploy for a defect we cannot fix. They remain visible in each build log and are tracked in §5.

Verified in both directions. The gate is exercised for false negatives as well as false positives: removing the lang attribute from a page causes the build to fail, and restoring it causes it to pass. A check that cannot fail provides no assurance.

Checks performed by hand, because automated tools cannot evaluate them, and repeated when layout or type changes:

  • 1.4.10 Reflow — no horizontal scrolling at 320 CSS pixels.
  • 1.4.12 Text Spacing — no clipping or overlap when line height, letter spacing, word spacing and paragraph spacing are overridden to the criterion’s values.
  • 1.4.4 Resize Text — no loss of content at 200%.
  • 2.4.1 / 2.4.7 — the skip link is the first tab stop and becomes visible on focus; focus indicators are visible throughout.
  • 1.4.3 Contrast — computed ratios for every foreground/background token pair in both light and dark themes, against the 4.5:1 threshold for body text.

The limits of this. Automated testing detects a minority of accessibility barriers — commonly estimated at a third to a half. A clean axe run is evidence of the absence of machine-detectable defects, not of usability for disabled readers. Testing with actual assistive technology, and by disabled users, is not currently part of this process and would strengthen it materially.

5. Known non-conformances

All three arise in mdBook’s generated output rather than in content authored here. Each is reported upstream; none is fixable from this repository without overriding mdBook’s templates.

DefectCriterionWhereUpstream
Sidebar toggle is a <label> carrying ARIA attributes not permitted on that element4.1.2 Name, Role, Value (A)every generated page#2615, fix proposed in PR #3078
No bypass block to skip the repeated sidebar and header2.4.1 Bypass Blocks (A)every generated page#2107, fix proposed in PR #2144
Scrollable code and table regions are not keyboard focusable2.1.1 Keyboard (A)chapters with wide code or tables#1789

Remediated, not merely absent. mdBook renders Markdown task lists (- [ ]) as <input disabled type="checkbox"> with no accessible name, failing 4.1.2 Name, Role, Value (A). The setup checklist used that syntax and carried eight instances. It is now written as a plain bulleted list, which reads the same and removes the defect from this site entirely. The underlying mdBook bug is reported upstream as #3212 and would return if task-list syntax were reintroduced, so it is recorded here rather than forgotten. The build now rejects that syntax, so the claim in this paragraph cannot quietly become false.

PR #3078 is mergeable and awaiting review; PR #2144 currently conflicts. Neither has merged, so remediation here does not depend on upstream: mdBook supports replacing theme/index.hbs, which would let the first two be fixed locally ahead of the April 2027 date. That carries its own maintenance cost, since an overridden template pins this repository to a snapshot of mdBook’s markup and can regress on upgrade.

6. Reporting a problem

If any part of this material is inaccessible to you, email sullivan@virginia.edu with the page address and what went wrong. Reports are acted on, and a barrier that blocks access to course content is treated as urgent regardless of whether it appears above.

7. Review

This statement is reviewed whenever the accessibility gate changes, when mdBook is upgraded, and at the start of each semester. The upstream issues in §5 are re-checked at each review.