diff --git a/public/og-default.png b/public/og-default.png index c844239c..538265bb 100644 Binary files a/public/og-default.png and b/public/og-default.png differ diff --git a/public/og/checklist.png b/public/og/checklist.png index 56b10529..b2fc54bd 100644 Binary files a/public/og/checklist.png and b/public/og/checklist.png differ diff --git a/public/og/spec.png b/public/og/spec.png index 36395d72..b5e1a315 100644 Binary files a/public/og/spec.png and b/public/og/spec.png differ diff --git a/public/og/spec/accessibility.png b/public/og/spec/accessibility.png index 45e22d5c..27d4d66d 100644 Binary files a/public/og/spec/accessibility.png and b/public/og/spec/accessibility.png differ diff --git a/public/og/spec/accessibility/redundant-entry.png b/public/og/spec/accessibility/redundant-entry.png new file mode 100644 index 00000000..1d3c08cf Binary files /dev/null and b/public/og/spec/accessibility/redundant-entry.png differ diff --git a/src/content/changelog/2026-06-18-redundant-entry.md b/src/content/changelog/2026-06-18-redundant-entry.md new file mode 100644 index 00000000..8cb3cdf7 --- /dev/null +++ b/src/content/changelog/2026-06-18-redundant-entry.md @@ -0,0 +1,8 @@ +--- +title: Redundant entry (WCAG 2.2 SC 3.3.7) +date: "2026-06-18" +type: added +relatedSlugs: [redundant-entry] +--- + +Added a page on [redundant entry](/spec/accessibility/redundant-entry/), WCAG 2.2 Success Criterion 3.3.7 (Level A): information a user already entered earlier in the same process must be auto-populated or selectable, not typed again. It covers the essential, security, and expired exceptions and the carry-forward and `autocomplete` patterns that satisfy it. diff --git a/src/content/spec/accessibility/accessible-authentication.md b/src/content/spec/accessibility/accessible-authentication.md index 3365ef7c..c721d515 100644 --- a/src/content/spec/accessibility/accessible-authentication.md +++ b/src/content/spec/accessibility/accessible-authentication.md @@ -6,7 +6,7 @@ summary: "Let people log in without solving a puzzle, transcribing a code, or me status: recommended order: 115 appliesTo: [all] -relatedSlugs: [form-labels, form-errors, mobile-form-inputs, webauthn] +relatedSlugs: [form-labels, form-errors, mobile-form-inputs, webauthn, redundant-entry] updated: "2026-06-17T00:00:00.000Z" sources: - title: "WCAG 3.3.8 — Accessible Authentication (Minimum) (Level AA)" diff --git a/src/content/spec/accessibility/form-errors.md b/src/content/spec/accessibility/form-errors.md index 78643cd7..fc0b41c2 100644 --- a/src/content/spec/accessibility/form-errors.md +++ b/src/content/spec/accessibility/form-errors.md @@ -6,7 +6,7 @@ summary: "When a form submission fails, errors must be identified in text, assoc status: required order: 110 appliesTo: [all] -relatedSlugs: [form-labels, aria-usage, color-contrast, mobile-form-inputs, accessible-authentication] +relatedSlugs: [form-labels, aria-usage, color-contrast, mobile-form-inputs, accessible-authentication, redundant-entry] updated: "2026-05-29T09:13:20.000Z" sources: - title: "WCAG 3.3.1 — Error Identification (Level A)" diff --git a/src/content/spec/accessibility/form-labels.md b/src/content/spec/accessibility/form-labels.md index 9c088d16..f49b760a 100644 --- a/src/content/spec/accessibility/form-labels.md +++ b/src/content/spec/accessibility/form-labels.md @@ -6,7 +6,7 @@ summary: "Every form control needs a programmatically associated label. A placeh status: required order: 30 appliesTo: [all] -relatedSlugs: [form-errors, aria-usage, mobile-form-inputs, accessible-authentication] +relatedSlugs: [form-errors, aria-usage, mobile-form-inputs, accessible-authentication, redundant-entry] updated: "2026-05-29T10:57:27.000Z" sources: - title: "WCAG 3.3.2 — Labels or Instructions (Level A)" diff --git a/src/content/spec/accessibility/mobile-form-inputs.md b/src/content/spec/accessibility/mobile-form-inputs.md index 17cdea53..b98c9b4d 100644 --- a/src/content/spec/accessibility/mobile-form-inputs.md +++ b/src/content/spec/accessibility/mobile-form-inputs.md @@ -6,7 +6,7 @@ summary: "On a phone, the right input type, inputmode, and enterkeyhint summon t status: recommended order: 150 appliesTo: [all] -relatedSlugs: [form-labels, form-errors, touch-target-size, meta-viewport, accessible-authentication] +relatedSlugs: [form-labels, form-errors, touch-target-size, meta-viewport, accessible-authentication, redundant-entry] updated: "2026-06-08T00:00:00.000Z" sources: - title: "HTML Living Standard — The inputmode attribute" diff --git a/src/content/spec/accessibility/redundant-entry.md b/src/content/spec/accessibility/redundant-entry.md new file mode 100644 index 00000000..225a30fe --- /dev/null +++ b/src/content/spec/accessibility/redundant-entry.md @@ -0,0 +1,51 @@ +--- +title: "Redundant entry" +slug: redundant-entry +category: accessibility +summary: "Don't make people re-type information they already gave you in the same process. Auto-populate it, or let them pick it from what they entered a step ago." +status: recommended +order: 116 +appliesTo: [all] +relatedSlugs: [form-labels, form-errors, mobile-form-inputs, accessible-authentication] +updated: "2026-06-18T00:00:00.000Z" +sources: + - title: "WCAG 3.3.7 — Redundant Entry (Level A)" + url: "https://www.w3.org/WAI/WCAG22/Understanding/redundant-entry.html" + publisher: "W3C" + - title: "WCAG 2.2 Recommendation" + url: "https://www.w3.org/TR/WCAG22/#redundant-entry" + publisher: "W3C" + - title: "MDN — HTML autocomplete attribute" + url: "https://developer.mozilla.org/en-US/docs/Web/HTML/Reference/Attributes/autocomplete" + publisher: "MDN" +--- + +## What it is + +**Redundant Entry** is WCAG 2.2 Success Criterion 3.3.7, at **Level A** — the baseline conformance level. The rule is short: when information has already been entered by, or provided to, the user earlier in the **same process**, and that information is asked for again, it must be either **auto-populated** or **available for the user to select** rather than typed out a second time. + +Three exceptions are spelled out: re-entry is genuinely **essential** (e.g. a memory test that is the point of the step), the information is **required for security** (re-typing a password to confirm it), or the previously entered information is **no longer valid**. + +## Why it matters + +A checkout, a multi-step signup, or a booking flow that asks for the same address, name, or email twice forces the user to either remember exactly what they typed two screens ago or scroll back to check. For people with **short-term and working-memory limitations**, that recall is a real barrier — the same cognitive-load problem that [accessible authentication](/spec/accessibility/accessible-authentication/) addresses at the login gate. It also punishes anyone entering text slowly: people with motor impairments, people on small touch keyboards, and people using switch or voice input all pay the re-typing cost twice. Every redundant field is another chance to introduce a mismatch and fail validation. + +## How to implement + +- **Carry data forward.** Once a value is captured in a process, store it in session state and pre-fill any later field that needs it. "Billing address same as shipping" — checked by default where sensible — is the canonical pattern. +- **Offer a selection, not a blank box.** Where auto-fill isn't appropriate, let the user pick the earlier value from a list or summary instead of re-keying it. +- **Lean on the platform.** Mark fields with the correct [`autocomplete`](https://developer.mozilla.org/en-US/docs/Web/HTML/Reference/Attributes/autocomplete) tokens (`email`, `name`, `street-address`, `postal-code`) so the browser can fill repeated fields itself. +- **Confirm, then reuse.** On review screens, display the captured values back rather than presenting empty inputs to fill again. + +## Common mistakes + +- A two-step form that asks for an email address on page one and again on page three. +- "Confirm email" fields used for plain data entry (not a security confirmation) with no copy or carry-forward. +- A separate billing-address block with no "same as shipping" option. +- Wiping previously entered fields after a validation error elsewhere on the form. + +## Verification + +- Walk a multi-step flow end to end and note any value you are asked to type more than once. +- For each repeat, confirm it is auto-populated, selectable, or falls under the essential/security/expired exception. +- Trigger a validation error late in the flow and check that earlier entries survive.