Sample report

Evidence report: Fernhill Goods

Fernhill Goods is a demo shop we built with 24 planted defects. This is the report Suretto issues for it, in full: every WCAG 2.2 Level A and AA criterion, the fixes, the recordings and the decisions a person made.

Sample. Every product, person and result on this page is fictional. It shows the format of a Suretto report.

Report details

Product
Fernhill Goods online shop (homewares, prices in GBP)
Report
FG-2026-10-20-01
Version
Storefront 1.4.0. Baseline commit a3f9c2e (14 Oct 2026). Verified commit 7d41b08 (20 Oct 2026), after pull requests #11 to #20.
Date issued
Scope
8 templates (Home, Collection, Product, Search results, Cart, Checkout, Account, Content page), 31 components, 14 interactive states. Viewports 1280 × 800 and 320 px wide.
Standard
WCAG 2.2 Level A and AA. Results map to EN 301 549 and to the Revised Section 508 Standards; see the ACR.
Methods
  • Automated rules: axe-core 4.10 on every template and state. Rule logs R-01 to R-07.
  • Screen readers: NVDA 2026.1 with Firefox and JAWS 2026 with Chrome, on Windows 11; VoiceOver on macOS 26 with Safari. Recordings Rec. 01 to Rec. 09.
  • Keyboard only: one recorded run per template. Key runs K-01 to K-08.
  • Visual checks: contrast calculated from browser-derived colours; rendered views used for zoom, reflow, text spacing and flashing checks. Sets V-01 to V-07; contrast table C-1 to C-5.
  • Review by a person: every exception and every change of wording. Rulings X-1 to X-3.
Independence
Fixes were written by Suretto's fixer. Every fix was graded by the verifier, a separate system that did not write it. Rulings were made by a person.

Summary

Planted defects found
24 of 24
Fixed and verified
24 in 10 pull requests
Issues found that we did not plant
2 both open, each with a dated plan
Exceptions ruled by a person
3
Criteria results, WCAG 2.2 Level A and AA (55 criteria)
ResultLevel ALevel AATotal
Supports272148
Partially supports022
Does not apply415
Does not support000

The 24 planted defects

Each defect was planted in the baseline commit, found, fixed in a pull request and graded again after the change. The last column names the artefact that shows the fix working.

Planted defects, fixes and verification
IDDefect before the fixWhereCriterionFixVerified by
D-01Product image alt text was the file name "IMG_2041.jpg"Product1.1.1PR #12Rec. 03, 00:18
D-02Icon-only "Add to bag" button had no accessible nameCollection, Product4.1.2PR #14Rec. 05, 01:13
D-03Workshop film had no captionsContent page1.2.2PR #19Rec. 09, 00:31
D-04Product details table built from styled div elementsProduct1.3.1PR #13Rec. 03, 00:52
D-05Delivery form labels not tied to their fieldsCheckout3.3.2PR #16Rec. 06b, 00:05
D-06Required fields shown by red label colour onlyCheckout, Account1.4.1PR #16Vision V-05
D-07Price text #9a9a9a on #f6f3ee, 2.54:1Collection, Product, Search1.4.3PR #11Contrast C-1
D-08Sale banner was an image of textHome1.4.5PR #12Vision V-06
D-09Product grid scrolled sideways at 320 pxCollection, Search1.4.10PR #15Vision V-02
D-10Quantity stepper border #d4d4d4 on #ffffff, 1.48:1Product, Cart1.4.11PR #11Contrast C-3
D-11Size guide tooltip closed when the pointer moved onto itProduct1.4.13PR #17K-03, 01:40
D-12Main menu opened on hover onlyAll (header)2.1.1PR #17K-01, 00:22
D-13Newsletter dialog trapped focus with no way outHome2.1.2PR #18K-01, 01:05
D-14Checkout session ended after 10 minutes with no warningCheckout2.2.1PR #20Rec. 07, 02:30
D-15Home carousel rotated with no pause controlHome2.2.2PR #18Rec. 01, 00:35
D-16No skip link; 42 tab stops before the main contentAll2.4.1PR #13K-01, 00:04
D-17Every product page had the title "Fernhill Goods"Product2.4.2PR #13Rule log R-02
D-18Closing the cart drawer sent focus to the footerAll (cart drawer)2.4.3PR #14K-02, 00:48
D-19Focus outline removed on links and buttonsAll2.4.7PR #11K-01 to K-08; C-4
D-20Sticky delivery bar covered focused form fieldsCheckout2.4.11PR #15K-06, 00:31
D-21Price filter could only be set by draggingCollection2.5.7PR #17K-02, 01:12
D-22Postcode error read "Invalid input" with no suggestionCheckout3.3.3PR #16Rec. 06b, 00:22
D-23"Added to bag" message not announcedCollection, Product4.1.3PR #14Rec. 05, 01:20
D-24Password field blocked pasteAccount3.3.8PR #20Rec. 08, 00:26

Results by success criterion

All 55 WCAG 2.2 Level A and AA success criteria: 31 at Level A and 24 at Level AA. Evidence codes: Rec. is a screen-reader recording with a timestamp, K a keyboard run, V a vision set, R a rule log, C a contrast row, X a ruling.

WCAG 2.2 Level A and AA results for Fernhill Goods, 20 Oct 2026
CriterionLevelMethodResultEvidence
Principle 1: Perceivable (20 criteria)
1.1.1 Non-text ContentARules, screen reader, reviewSupportsD-01 fixed (PR #12). Rec. 03, 00:18. Rulings X-1, X-2
1.2.1 Audio-only and Video-only (Prerecorded)AReviewDoes not applyNo audio-only or video-only media
1.2.2 Captions (Prerecorded)AReview, screen readerSupportsD-03 fixed (PR #19). Rec. 09, 00:31
1.2.3 Audio Description or Media Alternative (Prerecorded)AReviewSupportsDescriptive transcript on the film page. Rec. 09, 01:05
1.2.4 Captions (Live)AAReviewDoes not applyNo live media
1.2.5 Audio Description (Prerecorded)AAReviewPartially supportsOpen item F-1. Fix due 20 Nov 2026
1.3.1 Info and RelationshipsARules, screen readerSupportsD-04 fixed (PR #13). Rec. 03, 00:52; Rec. 06b, 00:05
1.3.2 Meaningful SequenceAScreen readerSupportsReading order matches layout. Rec. 02, 00:10
1.3.3 Sensory CharacteristicsAReviewSupportsCopy review, 8 templates
1.3.4 OrientationAAVisionSupportsPortrait and landscape renders, V-03
1.3.5 Identify Input PurposeAARules, reviewSupportsautocomplete set on 11 checkout and account fields. Rule log R-07
1.4.1 Use of ColorAVision, reviewSupportsD-06 fixed (PR #16). V-05
1.4.2 Audio ControlAReviewDoes not applyNo audio plays on its own
1.4.3 Contrast (Minimum)AAVisionSupportsD-07 fixed (PR #11). Contrast table C-1, C-2, C-5
1.4.4 Resize TextAAVisionSupports200% text zoom renders, V-01
1.4.5 Images of TextAAVision, reviewSupportsD-08 fixed (PR #12). V-06
1.4.10 ReflowAAVision, keyboardSupportsD-09 fixed (PR #15). 320 px renders, V-02
1.4.11 Non-text ContrastAAVisionSupportsD-10 fixed (PR #11). Contrast table C-3, C-4
1.4.12 Text SpacingAAVisionSupportsSpacing override renders, V-04
1.4.13 Content on Hover or FocusAAKeyboard, visionSupportsD-11 fixed (PR #17). Key run K-03, 01:40
Principle 2: Operable (20 criteria)
2.1.1 KeyboardAKeyboardSupportsD-12 fixed (PR #17). Key run K-01, 00:22
2.1.2 No Keyboard TrapAKeyboardSupportsD-13 fixed (PR #18). K-01, 01:05
2.1.4 Character Key ShortcutsAReviewDoes not applyNo single-key shortcuts
2.2.1 Timing AdjustableAKeyboard, screen readerSupportsD-14 fixed (PR #20). Rec. 07, 02:30
2.2.2 Pause, Stop, HideAKeyboard, screen readerSupportsD-15 fixed (PR #18). Rec. 01, 00:35
2.3.1 Three Flashes or Below ThresholdAVisionSupportsNo flashing content. Frame analysis, V-07
2.4.1 Bypass BlocksAKeyboardSupportsD-16 fixed (PR #13). K-01, 00:04
2.4.2 Page TitledARules, screen readerSupportsD-17 fixed (PR #13). Rule log R-02
2.4.3 Focus OrderAKeyboardSupportsD-18 fixed (PR #14). K-02, 00:48
2.4.4 Link Purpose (In Context)AScreen readerSupportsLinks list, Rec. 02, 01:20
2.4.5 Multiple WaysAAReviewSupportsSearch, main menu and site map
2.4.6 Headings and LabelsAAScreen reader, reviewSupportsHeadings list, Rec. 03, 00:05
2.4.7 Focus VisibleAAKeyboard, visionSupportsD-19 fixed (PR #11). K-01 to K-08; C-4
2.4.11 Focus Not Obscured (Minimum)AAKeyboard, visionSupportsD-20 fixed (PR #15). K-06, 00:31
2.5.1 Pointer GesturesAReviewSupportsGallery has previous and next buttons
2.5.2 Pointer CancellationARules, reviewSupportsActions run on release. Rule log R-06
2.5.3 Label in NameARules, screen readerSupportsRule log R-05; Rec. 05, 01:13
2.5.4 Motion ActuationAReviewDoes not applyNo motion-triggered functions
2.5.7 Dragging MovementsAAKeyboard, reviewSupportsD-21 fixed (PR #17). K-02, 01:12
2.5.8 Target Size (Minimum)AAVisionPartially supportsOpen item F-2. Fix due 4 Dec 2026
Principle 3: Understandable (13 criteria)
3.1.1 Language of PageARulesSupportslang="en-GB" on 8 templates. Rule log R-01
3.1.2 Language of PartsAARules, screen readerSupportsFrench product names marked. Rec. 04, 00:40
3.2.1 On FocusAKeyboardSupportsNo change of context on focus. K-01 to K-08
3.2.2 On InputAKeyboard, screen readerSupportsSort applies on button press. Rec. 02, 00:58
3.2.3 Consistent NavigationAAReviewSupportsSame menu order on 8 templates
3.2.4 Consistent IdentificationAAReviewSupportsComponent inventory, 31 components
3.2.6 Consistent HelpAReviewSupportsHelp link in the same place on every template
3.3.1 Error IdentificationAScreen readerSupportsRec. 06b, 00:22; Rec. 07, 01:10
3.3.2 Labels or InstructionsAScreen reader, reviewSupportsD-05 fixed (PR #16). Rec. 06b, 00:05
3.3.3 Error SuggestionAAScreen reader, reviewSupportsD-22 fixed (PR #16). Rec. 06b, 00:22. Ruling X-3
3.3.4 Error Prevention (Legal, Financial, Data)AAKeyboard, reviewSupportsOrder review step before payment. Rec. 07, 03:05
3.3.7 Redundant EntryAReviewSupportsBilling can reuse the delivery address
3.3.8 Accessible Authentication (Minimum)AAKeyboard, reviewSupportsD-24 fixed (PR #20). Rec. 08, 00:26
Principle 4: Robust (2 criteria)
4.1.2 Name, Role, ValueARules, screen readerSupportsD-02 fixed (PR #14). Rec. 05, 01:13
4.1.3 Status MessagesAAScreen readerSupportsD-23 fixed (PR #14). Rec. 05, 01:20
4.1.1 ParsingRemoved in WCAG 2.2 (obsolete). Not tested and not counted.

One fix, in full

Defect D-02. On the collection page, 12 product cards each had a bag icon button with no name. NVDA read each one as "button". The fix names every button after its product, so the 12 buttons can be told apart.

PR #14 · Give the Add to bag button an accessible name

src/components/ProductCard.tsx+3 −2: 3 lines added, 2 lines removed

38 <p className="price">{formatPrice(product.price)}</p>39 <div className="card-actions">40Removed: <button className="add" onClick={() => addToBag(product)}>41Removed: <BagIcon />40Added: <button type="button" className="add" onClick={() => addToBag(product)}>41Added: <BagIcon aria-hidden="true" focusable="false" />42Added: <span className="visually-hidden">Add to bag, {product.name}</span>43 </button>44 </div>

Verified: NVDA reads "Add to bag, Linen apron, button" (Rec. 05, 01:13).

WCAG 4.1.2 Name, Role, Value. Written by the fixer; graded by the verifier, which did not write it.

Transcript of a recorded run (sample)

Checkout step 2, delivery details. NVDA 2026.1 with Firefox on Windows 11, keyboard only. The same route, before the fixes (Rec. 06a, 14 Oct 2026) and after them (Rec. 06b, 20 Oct 2026). Notes in square brackets are the tester's, not speech.

Before: Rec. 06a

Transcript of Rec. 06a, before the fixes
TimeKey or actionNVDA says
00:00H (next heading)Delivery details, heading, level 1
00:04Tabedit, blank[Full name field. No label is read.]
00:08Tabedit, blank[Address line 1. No label is read.]
00:13Tabedit, blank[Postcode. No label is read.]
00:19Type "SW1A", then TabContinue to payment, button
00:22Enter[No speech. "Invalid input" appears in red under the field. Focus stays on the button.]

After: Rec. 06b

Transcript of Rec. 06b, after the fixes
TimeKey or actionNVDA says
00:00H (next heading)Delivery details, heading, level 1
00:05TabFull name, edit, required, blank
00:09TabAddress line 1, edit, required, blank
00:14TabPostcode, edit, required, blank
00:19Type "SW1A", then TabContinue to payment, button
00:22EnterPostcode, edit, required, invalid entry, SW1A. Enter a full UK postcode, for example SW1A 1AA.[Focus moves to the field in error.]
00:31Type " 1AA", then EnterPayment, heading, level 1. Step 3 of 3.

Fixes shown: D-05 (labels), D-22 (error suggestion) and focus moved to the field in error. Ruling X-3 set the wording of the error.

Contrast measurements

This illustrative table uses browser-derived foreground and background colours at the example verified commit. Ratios are truncated, never rounded up.

Contrast table C-1 to C-5
Row and elementForegroundBackgroundRatioRequiredResult
C-1 Product price text (was #9a9a9a, 2.54:1)Text, 1.4.3#5a5a5a#f6f3ee6.23:14.5:1Passes
C-2 Sale badge textText, 1.4.3#ffffff#b3261e6.53:14.5:1Passes
C-3 Quantity stepper border (was #d4d4d4, 1.48:1)Non-text, 1.4.11#767676#ffffff4.54:13:1Passes
C-4 Focus ring on page backgroundNon-text, 1.4.11#1f4fd1#f6f3ee6.12:13:1Passes
C-5 Footer link textText, 1.4.3#e8e4dc#2b3a2f9.46:14.5:1Passes

Partially supported criteria

We found two issues we did not plant. Neither can be closed by a change to Fernhill's code alone, so neither is marked as met. Each has a ruling and a dated plan.

F-1 1.2.5 Audio Description (Prerecorded)

Where
Workshop film (2 min 40 s) on the content page.
What fails
Three scenes show cutting, hemming and pressing with no narration. Captions (D-03) and a descriptive transcript are in place, so 1.2.3 at Level A is met. Level AA needs the description in the film itself.
Why it is open
It needs a new recorded audio track, not a code change.
Ruling
Partially supports. Decided by the Suretto accessibility reviewer, 20 Oct 2026.
Plan
Fernhill publishes an audio-described version by . Re-test booked for .

F-2 2.5.8 Target Size (Minimum)

Where
Checkout step 3, inside the payment provider's hosted card frame.
What fails
The security code help icon is 16 × 16 CSS px, 6 px from the expiry date field. The spacing exception does not apply.
Why it is open
The frame is served by the payment provider, not by Fernhill's code. Reported to the provider on 20 Oct 2026.
Ruling
Partially supports. Every target Fernhill controls meets 2.5.8; this one does not. Decided by the Suretto accessibility reviewer, 20 Oct 2026.
Plan
Fernhill moves to the provider's newer card fields, which measured 24 × 24 CSS px in a test branch, by . Re-test booked for .

Exceptions and rulings

Rules and recordings cannot settle questions of meaning. These three went to a person. The ruling and the reasoning are part of the record.

X-1 Is the hero texture decorative?

Criterion
1.1.1 Non-text Content
Question
The linen texture strip behind the home page heading has empty alt text. The verifier asked whether it carries meaning.
Ruling
Decorative. Keep alt="".
Reasoning
It carries no information and repeats nothing on the page. A description would add noise before the heading.
Decided by
Suretto accessibility reviewer, 17 Oct 2026

X-2 Wording of a product image's alt text

Criterion
1.1.1 Non-text Content
Question
For D-01, the fixer proposed "Linen apron" as the alt text of the main product image.
Ruling
Changed to "Front view in rust, with crossed back straps".
Reasoning
The product name is the heading next to the image, so repeating it adds nothing. Shoppers choose by colour and fit, and only the image shows them.
Decided by
Suretto accessibility reviewer, agreed with Fernhill's content lead, 17 Oct 2026

X-3 Is the postcode error clear enough?

Criterion
3.3.3 Error Suggestion
Question
For D-22, the fixer replaced "Invalid input" with "Postcode is invalid". The verifier passed the rules but flagged the wording for review.
Ruling
Rejected. Replaced with "Enter a full UK postcode, for example SW1A 1AA."
Reasoning
3.3.3 asks for a suggestion when one is known. "Invalid" names the problem but not the fix.
Decided by
Suretto accessibility reviewer, 18 Oct 2026

The conformance report

The ACR for Fernhill Goods is built from this report. It uses the VPAT 2.5 International edition, which covers WCAG 2.2, the Revised Section 508 Standards and EN 301 549 in one document. It prints to PDF from your browser.

Pilot programme get this report, and the ACR, for their own product.