WCAG 2.1 AA conformance report — remediated module

Criterion-by-criterion conformance of the remediated module. This is the web version of report/conformance-report.md; the Markdown source is canonical. Markdown source.

This is not an official VPAT®/ACR. It follows the structure of a VPAT table for the author's portfolio, is written by an instructional designer (with AI assistance, disclosed), and carries no certification. Statuses use the VPAT vocabulary honestly: Supports / Partially Supports / Does Not Support / Not Applicable.

Evaluated contentThe remediated module: docs/module/ (index, lesson, slides, video, transcript, quiz)
"Before" basisThe original module as retrieved: docs/before/ (2011–2012 MIT OCW pages + 6 PDFs)
StandardWCAG 2.1 Level A + AA (W3C); WCAG 2.2 items noted as best practice, labeled "exceeds requirement"
Methodsaxe-core 4.11.1, Lighthouse 13.0.1, pa11y 9.0.0; scripted keyboard/reflow/contrast checks (Playwright 1.57.0); Label-in-Name check (2.5.3, Playwright); PDF tag-tree inspection (pypdf/pymupdf); DOM inspection. Full detail: audit/methodology.md
Dates2026-10-25 (2.5.1–2.5.4 rows and corrected 1.3.1/2.4.6 remarks: 2026-10-26 review round)
EvaluatorAI agent with scripted tools (labeled; see limitations). No human screen-reader pass yet; no daily-AT-user review yet.

Overall: Partially Supports WCAG 2.1 AA.

The remaining gaps are specific and disclosed:

  1. 1.2.2 / 1.2.5 (captions and audio description): captions are shipped with text from the publisher's official transcript and machine-aligned timings. Accuracy against the audio is not verified: the machine speech-to-text check was dropped (it would need an AI speech model), and the human timing spot-check is pending. Audio description is provided as text, not as a recorded track.
  2. No screen-reader session evidence (Guidepup VoiceOver automation does not function on macOS 27; human protocol pending).
  3. No review by a daily assistive-technology user (invitation template provided).

Table 1 — Level A

CriterionBeforeAfterRemarks
1.1.1 Non-text ContentDoes Not SupportSupportsBefore: slide figures with junk/missing alt (I-24, I-25), exam diagram with none (I-29), chart data visual-only (I-26). After: informative figures have alt + long descriptions (<details>); decorative images use empty alt; third-party images the publisher excludes from the license are described, not reproduced.
1.2.1 Audio-only and Video-only (Prerecorded)Not ApplicableNot ApplicableNo audio-only or video-only content in the module.
1.2.2 Captions (Prerecorded)Does Not SupportPartially SupportsBefore: no captions anywhere; player had no caption control (I-01). After: <track kind="captions"> with text from the official publisher transcript. Not verified against the audio: machine speech-to-text check dropped (needs an AI speech model); human timing spot-check pending.
1.2.3 Audio Description or Media Alternative (Prerecorded)Does Not SupportPartially SupportsBefore: no transcript or alternative (I-03). After: full transcript page + chapter-by-chapter text description of the visuals. Pending human confirmation that the alternative is adequate in practice.
1.3.1 Info and RelationshipsDoes Not SupportSupportsBefore: two h1s on every page — the site-logo image h1 first, then the topic h1 buried after 15 sidebar h3s (I-10, I-11) — plus no landmarks (I-13) and 15 state-less menu toggles (I-15). After: landmarks, one content h1, logical heading order, real table markup, fieldset/legend quiz, aria-current nav state.
1.3.2 Meaningful SequenceSupportsSupportsOriginal HTML and tagged PDFs read in order; verified unchanged in remediation.
1.3.3 Sensory CharacteristicsSupportsSupportsNo sensory-only instructions found in either version ("click the red button" pattern absent).
1.4.1 Use of ColorSupportsSupportsExam solutions mark answers with text ("Answer: D"), verified. Quiz feedback is textual, never color-only.
1.4.2 Audio ControlNot ApplicableNot ApplicableNo audio plays automatically.
2.1.1 KeyboardDoes Not SupportSupportsBefore: Flash-era player not keyboard operable at all (I-04) — the video function is unavailable without a pointer. After: native <video> controls, native buttons; scripted test confirms player + chapters + quiz operable (11/11 keyboard tests).
2.1.2 No Keyboard TrapSupportsSupportsBefore: popup not dismissible with Escape and focus left behind (I-05, I-06) — pattern removed entirely. After: scripted tests find no traps.
2.1.4 Character Key ShortcutsSupportsSupportsNo character-key shortcuts implemented.
2.2.1 Timing AdjustableNot ApplicableNot ApplicableQuiz has no time limit (stated on the page).
2.2.2 Pause, Stop, HideNot ApplicableNot ApplicableNo moving or auto-updating content.
2.3.1 Three Flashes or Below ThresholdSupportsSupportsNo flashing content.
2.4.1 Bypass BlocksDoes Not SupportSupportsBefore: skip link has tabindex="-1" and is unreachable (I-14). After: skip link is the first tab stop and moves focus to <main tabindex="-1">; landmarks provide additional bypass (scripted test passes).
2.4.2 Page TitledSupportsSupportsBefore: descriptive but very long pipe titles (I-33). After: concise, descriptive titles.
2.4.3 Focus OrderPartially SupportsSupportsBefore: popup opened without moving focus (I-05). After: popup removed; linear order verified by scripted tab-through.
2.4.4 Link Purpose (In Context)Partially SupportsSupportsBefore: 12 identically-named download links (I-07), [K&R]/[Stangor] (I-31), broken hhttp:// (I-08). After: descriptive link text throughout.
2.5.1 Pointer GesturesNot ApplicableNot ApplicableNo multipoint, path-based, or long-press gesture functionality in either version; all controls are single-pointer activation and keyboard operable.
2.5.2 Pointer CancellationSupportsSupportsNo down-event-only or dragging functionality; native buttons and links activate on pointer-up.
2.5.3 Label in NameSupportsSupportsVisible label text is contained in each control's accessible name. Scripted check (scripts/check-label-in-name.mjs, 2026-10-26) verified every labeled control on all 9 site pages: skip link ("Skip to main content"), nav links, quiz radio labels, "Check answer" buttons, video chapter buttons.
2.5.4 Motion ActuationNot ApplicableNot ApplicableNo functionality is triggered by device motion or user motion.
3.1.1 Language of PageSupportsSupportslang="en" on every page (before and after).
3.2.1 On FocusSupportsSupportsNo focus-triggered context changes.
3.2.2 On InputSupportsSupportsNo input-triggered context changes.
3.3.1 Error IdentificationNot ApplicableSupportsNo error-prone forms before (search only). After: quiz identifies wrong answers in text.
3.3.2 Labels or InstructionsDoes Not SupportSupportsBefore: search field unlabeled (I-16, critical) with value-as-placeholder (I-17). After: all controls labeled; quiz explains what to do.
4.1.1 ParsingSupportsSupportsaxe parse checks clean on all remediated pages.
4.1.2 Name, Role, ValueDoes Not SupportSupportsBefore: unlabeled inputs (I-16, I-18), iframes without titles (I-19), state-less toggles (I-15). After: native controls, labeled inputs, aria-expanded not needed (no disclosure widgets besides <details>), live regions for quiz status.

Table 2 — Level AA

CriterionBeforeAfterRemarks
1.2.4 Captions (Live)Not ApplicableNot ApplicableNo live media.
1.2.5 Audio Description (Prerecorded)Does Not SupportPartially SupportsBefore: none, though the lecture is inherently visual (I-02, critical). After: chapter-by-chapter extended text description + slide deck with figure descriptions. Recorded audio description is future work; honesty requires "Partially Supports".
1.3.4 OrientationSupportsSupportsFluid layout works in both orientations; no orientation lock.
1.3.5 Identify Input PurposeNot ApplicableNot ApplicableNo inputs collecting information about the user (search existed in the original but identifies no user information).
1.4.3 Contrast (Minimum)Partially SupportsSupportsBefore: automated measurement flagged the white-on-white "OCW Scholar" image-replacement text (I-21, documented as robustness issue). After: palette measured — every text pair ≥ 4.5:1 (ratios in docs/module/css/module.css); scripted measurement reports 0 failures.
1.4.4 Resize TextSupportsSupportsRelative units; browser zoom verified.
1.4.5 Images of TextPartially SupportsSupportsBefore: slide meaning largely carried by images. After: all text is real text; logo replaced with a text title.
1.4.10 ReflowDoes Not SupportSupportsBefore: 952 px document at 320 px viewport (I-20; screenshot evidence). After: no horizontal scrolling at 320 px on any page (scripted test); data tables scroll within their own container (permitted 2-D exception for data tables).
1.4.11 Non-text Contrast (Minimum)Partially SupportsSupportsAfter: UI borders 5.45:1, focus ring 5.50:1 (≥ 3:1 required); measured and documented.
1.4.12 Text SpacingSupportsSupportsLayout survives text-spacing overrides (relative units; verified visually at increased spacing).
1.4.13 Content on Hover or FocusSupportsSupportsNo tooltips or hover-revealed content; the popup pattern (which lacked dismissibility, I-06) was removed.
2.4.5 Multiple WaysPartially SupportsSupportsBefore: nav + broken/unlabeled site search. After: module nav, in-page menus, and the overview page's contents table provide multiple routes.
2.4.6 Headings and LabelsDoes Not SupportSupportsBefore: duplicate logo-first h1 with the topic heading buried after 15 sidebar h3s, plus level skips (I-10, I-11, I-12). After: descriptive headings and labels throughout.
2.4.7 Focus VisiblePartially SupportsSupportsBefore: browser default outlines (mostly OK; 2 ambiguous stops). After: explicit 3px focus ring, 5.50:1, verified on every focusable element including the video player (focus-within).
3.1.2 Language of PartsSupportsSupportsNo passages in other languages requiring marking.
3.2.3 Consistent NavigationSupportsSupportsModule nav repeated identically across pages (before and after).
3.2.4 Consistent IdentificationSupportsSupportsIcons/labels used consistently.
3.3.3 Error SuggestionNot ApplicableSupportsQuiz incorrect answers get a suggestion that links directly to the relevant lesson section (per-question anchor into module/lesson.html), not a generic "re-read the material" message.
3.3.4 Error Prevention (Legal, Financial, Data)Not ApplicableNot ApplicableNo submissions of the covered kinds.
4.1.3 Status MessagesPartially SupportsSupportsQuiz feedback and score use role="status" / aria-live="polite"; scripted test confirms the feedback region is populated. A human screen-reader pass is still pending, hence not "verified with AT".

WCAG 2.2 best practice (exceeds requirement — not part of WCAG 2.1 AA)

CriterionStatusRemarks
2.4.11 Focus Not Obscured (Minimum)SupportsSticky-free layout; focused elements are not covered by fixed bars.
2.5.8 Target Size (Minimum)SupportsButtons/links ≥ 24×24 px (min-height + padding; the original failed this at scale — I-22). Exceeds WCAG 2.1 AA.

Scope and honesty notes