Thread & Hem
A synthetic demonstration store, authored and remediated by us. The scores below are our engine's real output on these fixtures — not estimates, and not a real merchant's site.
What this is. We built a five-page apparel store carrying 14 defects of the kind small stores actually ship, crawled it, fixed the templates, and crawled it again. Both crawls are real runs of our audit engine (GARGANTUA v0.2.0) on 5 pages. Every figure on this page is read from the resulting reports.
Before and after
| Measure | Before | After |
|---|---|---|
| Distinct defects | 41 | 0 |
| Total occurrences | 139 | 0 |
| WCAG failures — critical | 32 | 0 |
| WCAG failures — serious | 92 | 0 |
| WCAG failures — moderate | 9 | 0 |
| WCAG failures — minor | 0 | 0 |
| WCAG failures — total | 133 | 0 |
| Best-practice findings | 6 | 0 |
| Corroborated by 2+ engines | 26 | 0 |
| Needs human review | 32 | 29 |
| Recommendations | 15 | 10 |
“Needs human review” and “recommendations” are neither failures nor passes — the engine records what no rule can settle instead of guessing. We explain what that means on our own self-scan page.
133 WCAG failures to 0. Shared templates mean the 41 distinct fixes close all 139 occurrences — 98 of them are repeats, closed for free.
What the screen reader heard
“link, 2”
The cart link, announced by a screen reader on the unfixed store. A customer hears a number and nothing else — no word for what the control does. Rule sr-unannounced, WCAG 4.1.2. This phrase is read from the saved transcript, not paraphrased.
Patch log
Every change, the template it was made in, and the defect it closes. Items marked AUTHORED are content a human wrote — no tool can generate a correct product description or control name.
| Template | Change | Closes | Kind |
|---|---|---|---|
| shared header | Added an accessible name to the cart link | D01 | AUTHORED |
| shared footer | Named both social icon links | D02 | AUTHORED |
| product-card | Added alt to every product image | D03 | template |
| product-card | Replaced alt="IMG_4821.jpg" with a description of the garment | D04 | AUTHORED |
| shared CSS | Sale badge recolored to #0B5D4E — 7.5:1 on white | D05 | template |
| product | Labelled the size <select> | D06 | AUTHORED |
| product | Labelled the quantity input | D07 | AUTHORED |
| shared CSS | Removed outline:none; added a visible :focus-visible ring | D08 | template |
| shared head | Removed user-scalable=no and maximum-scale | D09 | template |
| shared CSS | Promo banner made fluid; footer and product grids collapse at 320px | D10 | template |
| shared footer | Renamed the duplicated id="cart-count" | D11 | template |
| shared footer | Gave the empty <h2> real text | D12 | AUTHORED |
| shared header | Added a skip link past the repeated header | D13 | template |
| shared footer | Labelled the newsletter input; named both forms | D14 | AUTHORED |
The full planted-defect record, including which are machine-decidable, is in fixtures/demo-store/PLANTED.md.
One defect is not machine-decidable
Defect D04 was alt="IMG_4821.jpg" — alt text that exists and says nothing. Every engine here reports that image as passing, because text is present. Only a person reading it knows a customer learns nothing. That is why an automated scan is a floor, not a certificate, and why a human triages every report we send.
Honest limits
Generated from the engine's capability manifest, so this list cannot drift from what the engine actually does:
- Content inside same-origin iframes is scanned in its own right, with frame-chain selectors and evidence crops composed into the top document. Cross-origin frames are recorded with their source URL and never scanned — nothing can be known about content the browser will not expose.
- Screen reader output is captured on every page by a virtual screen reader and saved as a transcript alongside the report, so findings can cite what a page announces rather than only what its markup declares.
- Real macOS VoiceOver is available through a separate local command and is not part of a normal scan. Where a scan reports screen-reader evidence, that evidence comes from the virtual reader unless a VoiceOver transcript is attached.
- AI adjudication of ambiguous findings is part of the engine but inactive without an API key. When it is inactive — as in any report that shows no AI provenance — every finding here comes from deterministic rule engines and the screen-reader layer alone. An AI judgment is never presented as a rule-engine fact.
- Interaction coverage is partial: reflow, text spacing, focus visibility, keyboard traps and skip links are exercised, but character-key shortcuts, dragging alternatives, timeouts, motion actuation and multi-step flows are not.
- NVDA, JAWS and other commercial screen readers are not exercised. Assistive technologies differ in how they interpret the same markup, so passing here does not guarantee an equivalent experience in a reader that was not tested.
- Checks requiring human judgment are not automated: whether alt text is meaningful, whether captions are accurate, whether reading level suits the audience, and whether focus order is logical all need a person.
- Automated rule engines can only detect a subset of WCAG failures — absence of findings is never proof of conformance.
Attestation
On [DATE], MendAccess scanned [SCOPE] using GARGANTUA v0.2.0 with axe-core 4.12.1, IBM Equal Access 4.0.29 and a screen-reader pass. The findings and evidence in this package are the engine's output on that date.
Signed: ______________________ · Parveen Sharma, MendAccess
Deliberately unsigned. This is a sample, and a sample nobody stands behind should not carry a signature. A real engagement ends with this line signed by a named human who read the report.