cognitive-accessibility
Skill: Cognitive Accessibility
Domain: Cognitive, learning, and neurological accessibility
WCAG scope: WCAG 2.2 AA + key AAA, COGA W3C guidance
Agents that use this skill: cognitive-accessibility, web-accessibility-wizard, accessibility-lead, forms-specialist
Purpose
This skill provides reference tables, scoring formulas, and evaluation patterns for cognitive accessibility review. It covers:
- WCAG 2.2 success criteria with cognitive accessibility relevance
- COGA (Cognitive Accessibility) W3C guidance mapping
- Plain language analysis techniques
- Reading level computation
- Authentication pattern analysis (3.3.8 / 3.3.9)
- Redundant entry detection (3.3.7)
- Timeout and session management analysis
WCAG 2.2 Cognitive Accessibility Criteria Reference
Level A
| SC | Name | What to Check | Common Failures |
|---|---|---|---|
| 2.2.1 | Timing Adjustable | Session timeouts warn >=20s before expiry; user can extend >=10x or disable | Redirect without warning; extension UI exists but does nothing |
| 2.2.2 | Pause, Stop, Hide | Auto-moving/blinking content >5s has pause/stop control | Blinking backgrounds, marquee text, auto-scrolling feeds |
| 2.3.1 | Three Flashes | No content flashes >3 Hz (absolute) | Transition animations that strobe |
| 3.3.1 | Error Identification | Error identified in text, not just color | Red border with no error message |
| 3.3.2 | Labels or Instructions | Format requirements shown before error, required fields identified upfront | Format hint only in error state; asterisks with no legend |
| 3.3.7 | Redundant Entry (2.2 new) | Previously-entered info not re-requested in same session unless security-essential or stale | Email re-entered on step 3; billing address not pre-filled from shipping |
Level AA
| SC | Name | What to Check | Common Failures |
|---|---|---|---|
| 2.4.6 | Headings and Labels | Headings describe content; labels describe input purpose | "Section 1", "Info", "Details" as heading text |
| 3.2.3 | Consistent Navigation | Nav appears in same relative order across pages | Footer nav changes order on mobile vs desktop |
| 3.2.4 | Consistent Identification | Same-function components have same accessible name across pages | "Search" button on one page, "Find" on another |
| 3.3.3 | Error Suggestion | For detected errors, suggest correction when possible/safe | "Invalid email" with no example or format hint |
| 3.3.4 | Error Prevention (Legal, Financial) | Review step before irreversible submission; allow reversal or confirmation | One-click purchase with no review screen; no undo for account deletion |
| 3.3.8 | Accessible Authentication Min. (2.2 new) | Authentication must not require cognitive function test unless an alternative exists | autocomplete="off" on login forms; paste disabled in password fields; transcription-only CAPTCHA |
Level AAA (Advisory - Review and Report)
| SC | Name | What to Check |
|---|---|---|
| 2.2.6 | Timeouts | Warn about data loss from inactivity at start of session |
| 3.1.3 | Unusual Words | Jargon/idiom defined on first use |
| 3.1.4 | Abbreviations | Abbreviations expanded on first use |
| 3.1.5 | Reading Level | General content <= Grade 8; see formula below |
| 3.3.9 | Accessible Authentication Enhanced (2.2 new) | No cognitive function test at all (removes the object-recognition exception) |
Authentication Pattern Analysis (3.3.8 / 3.3.9)
Failing Patterns
| Pattern | Failure | SC |
|---|---|---|
autocomplete="off" on type="password" |
Blocks password manager paste | 3.3.8 |
JavaScript onpaste="return false" on password input |
Blocks manual paste | 3.3.8 |
| CAPTCHA with only distorted text option | No cognitive-free alternative | 3.3.8 |
| Security question requiring exact recall | Pure memory test | 3.3.8 |
| Re-entering full card number on the same session order flow | Redundant cognitive work | 3.3.7 |
Passing Patterns
| Pattern | Why It Passes |
|---|---|
<input type="password" autocomplete="current-password"> |
Allows password manager autofill |
| Passkey/biometric as login alternative | No cognitive function test |
| "Same as shipping address" checkbox on billing form | Eliminates redundant entry |
| CAPTCHA with audio alternative | Provides non-visual option |
| Email magic link with no password required | Removes cognitive test entirely |
Redundant Entry Patterns (3.3.7)
Detection Checklist
In multi-step forms or wizards:
- Map all input fields across all steps
- Flag any field that requests information already collected in an earlier step
- Exception: security confirmation (password confirm) and data that can become stale (current vs. new address)
Common Violations
| Step 1 Collects | Step 3 Also Asks | Violation? |
|---|---|---|
| Email address | Email for confirmation | Yes - unless security-essential |
| Full name | Billing name | Yes - should pre-fill |
| Shipping address | Billing address | Yes - should offer "same as shipping" |
| Date of birth | DOB for age verification | Yes - same session, same data |
| Password | Password confirm | No - security essential |
| Current address | New address (for change) | No - intentionally different |
Plain Language Analysis
Sentence Analysis
Evaluate all instructional text, error messages, button labels, and tooltip copy.
| Metric | Target | How to Measure |
|---|---|---|
| Sentence length | <= 25 words; aim for 15-20 | Count words between periods/question marks |
| Voice | Active preferred | Flag: "was submitted", "is required to be", "will be shown" |
| Double negatives | Zero tolerance | Flag: "not unable", "not required to not", "not without" |
| Jargon | Flag or define | Unexpanded acronyms, technical terms, domain-specific language |
| Consistent terminology | Same term for same concept | Flag: "sign in" + "log in" on same page/flow |
Error Message Quality Rubric
Score each error message 0-3 on each dimension:
| Dimension | 0 | 1 | 2 | 3 |
|---|---|---|---|---|
| Identification | No message | Generic ("Error occurred") | Names the field | Names the field and exact problem |
| Cause | Absent | Vague | Partial | Full explanation |
| Solution | Absent | Vague hint | General guidance | Specific example or format |
| Tone | Blame ("You entered...wrong") | Neutral | Neutral + helpful | Supportive and constructive |
Minimum score to pass: 2 on Identification, 1 on Solution.
Error Message Examples
| Rating | Error Text |
|---|---|
| Fail | "Invalid input." |
| Fail | "You entered the wrong password." |
| Marginal | "Password is incorrect." |
| Pass | "The password doesn't match. Passwords are case-sensitive - check Caps Lock and try again." |
| Pass | "Email must include @ - for example, name@company.com" |
Reading Level Computation
Flesch-Kincaid Grade Level Formula
$$GL = 0.39 \times \frac{W}{S} + 11.8 \times \frac{Sy}{W} - 15.59$$
Where:
- $W$ = total words
- $S$ = total sentences
- $Sy$ = total syllables
Syllable counting rules:
- Count each vowel cluster (a, e, i, o, u) as one syllable
- Subtract one syllable for silent trailing e ("made" = 1, "make" = 1)
- Each word has at least 1 syllable
Grade Level Targets
| Content Type | Target GL | Rationale |
|---|---|---|
| Consumer web app (general) | <= 8 | ~50% of US adults read at Grade 8 or below |
| Government / public services | <= 6 | Plain language mandate standard |
| Healthcare patient-facing | <= 6 | Low health literacy is common |
| Legal terms of service | <= 10 with plain-language summary | Complex by nature, but summary required |
| Technical developer docs | <= 12 | Expert audience acceptable |
Quick-Estimate Method (when full computation is impractical)
Flag content for reading level review when:
- Any single sentence exceeds 35 words
- More than 30% of words exceed 3 syllables in a paragraph
- 3 or more Latin abbreviations in a single page ("i.e.", "e.g.", "et al.", "viz.")
Timeout Warning Requirements (2.2.1)
Detection Pattern
- Identify any page or application state with session persistence (authenticated areas, multi-step forms with temporary state)
- Check for: activity monitoring, session expiry timers, auto-logout functionality
- Verify warning mechanism exists when found
Compliant Implementation Pattern
// PASS: Session warning with extension option
const SESSION_TIMEOUT_MS = 15 * 60 * 1000; // 15 minutes
const WARNING_BEFORE_MS = 2 * 60 * 1000; // Warn 2 minutes before
let warningShown = false;
sessionTimer = setTimeout(() => {
if (!warningShown) {
warningShown = true;
showSessionWarning({
message: "Your session will expire in 2 minutes due to inactivity.",
extendLabel: "Stay signed in",
logoutLabel: "Sign out now",
onExtend: () => { resetTimer(); warningShown = false; },
onLogout: () => endSession()
});
}
}, SESSION_TIMEOUT_MS - WARNING_BEFORE_MS);
ARIA for Session Warning
<div role="alertdialog" aria-modal="true" aria-labelledby="session-title" aria-describedby="session-desc">
<h2 id="session-title">Session expiring</h2>
<p id="session-desc">Your session will expire in <span id="session-countdown">2:00</span> minutes.</p>
<button type="button" id="extend-btn" autofocus>Stay signed in</button>
<button type="button">Sign out</button>
</div>
COGA Guidance Mapping
Making Content Usable - Key Objectives
From the W3C COGA "Making Content Usable for People with Cognitive and Learning Disabilities" guidance:
| Objective | What to Check | Severity |
|---|---|---|
| Use a clear and understandable writing style | Reading level, plain language, sentence structure | High |
| Avoid creating excessive cognitive load | Step count in forms, memory demands, auto-advancing content | High |
| Provide reminders and feedback | Confirmation messages, progress indicators ("Step 2 of 4"), success confirmation | Medium |
| Help users avoid mistakes and recover from them | Validation before submit, undo capability, confirm destructive actions | High |
| Make forms easy to fill out | Pre-populate known data, stepwise format, visible format hints | High |
| Use a consistent and predictable layout | Navigation location, interactive element behavior, icon consistency | Medium |
| Use familiar icons and symbols | Standard iconography, labeled icons, no icon-only navigation | Medium |
| Avoid distorting a person's view of reality | No fake urgency timers, no dark patterns | High |
Severity Assessment for COGA Findings
| Finding Type | Severity | Rationale |
|---|---|---|
| 3.3.8 violation (paste disabled / CAPTCHA only) | Critical | Completely blocks authentication for many users |
| 3.3.7 violation (required re-entry of existing data) | High | Significant burden; causes abandonment |
| 2.2.1 violation (no timeout warning) | High | Data loss and user confusion |
| Reading level > Grade 10 (non-technical) | High | Excludes ~20% of adults |
| Error message with no correction guidance | High | Users cannot self-recover |
| Poor error message tone (blame language) | Medium | Anxiety increase; may cause abandonment |
| Inconsistent terminology across same flow | Medium | Confusion; increased cognitive load |
| Missing progress indicator in multi-step | Medium | User cannot gauge effort remaining |
| Reading level Grade 9-10 (general content) | Medium | Partial barrier |
| Jargon without definition | Low-Medium | Depends on density |
| Missing confirmation of success | Low | Uncertainty about whether action completed |
Integration Notes
When Used by web-accessibility-wizard
The wizard invokes cognitive-accessibility as part of Phase 3 (Forms and Input) and Phase 5 (Dynamic Content). Specifically:
- Phase 3: delegates 3.3.7 and 3.3.8 detection + error message quality to this skill
- Phase 5: delegates timeout warning detection to this skill
When Used Standalone
cognitive-accessibility agent loads this skill and applies the full Phase 2 + Phase 3 assessment independently. It accepts page URLs, component files, or plain text content blocks.
Handoffs from this Skill
- Form validation specifics ->
forms-specialist - ARIA state for error announcements ->
aria-specialist - Live region for timeout warnings ->
live-region-controller - WCAG criterion explanations ->
wcag-guide
More from community-access/accessibility-agents
mobile-accessibility
Mobile accessibility reference data for React Native, Expo, iOS, and Android auditing. Covers accessibilityLabel, accessibilityRole, accessibilityHint, touch target sizes (44x44pt minimum), screen reader compatibility, and platform-specific semantics. Use when reviewing any React Native or native mobile code for accessibility.
139playwright-testing
Browser-based accessibility testing patterns using Playwright and @axe-core/playwright. Covers MCP tool usage, keyboard scan patterns, viewport testing, contrast verification, and accessibility tree snapshots. Use when implementing or reviewing Playwright-based accessibility tests.
136design-system
Color token contrast computation, framework token paths (Tailwind/MUI/Chakra/shadcn), focus ring validation, WCAG 2.4.13 Focus Appearance, motion tokens, and spacing tokens for touch target compliance. Use when validating design system tokens for WCAG AA/AAA contrast compliance before they reach deployed UI.
135report-generation
Audit report formatting, severity scoring, scorecard computation, and compliance export for document accessibility audits. Use when generating DOCUMENT-ACCESSIBILITY-AUDIT.md reports, computing document severity scores (0-100 with A-F grades), creating VPAT/ACR compliance exports, or formatting remediation priorities.
135python-development
Python and wxPython development reference patterns, common pitfalls, framework-specific guides, desktop accessibility APIs, and cross-platform considerations. Use when building, debugging, packaging, or reviewing Python desktop applications.
132framework-accessibility
Framework-specific accessibility patterns, common pitfalls, and code fix templates for React, Next.js, Vue, Angular, Svelte, and Tailwind CSS. Use when generating framework-aware accessibility fixes or checking framework-specific anti-patterns.
131