{
 "use_case": "storefront-accessibility-pass",
 "title": "Storefront accessibility pass: one product page with four planted issues, then the clean sample shop",
 "about": "A product page from Harbor & Pine, a made-up shop, pasted as HTML with its images inline (the browser has no network for pasted pages). Four issues are planted: the packshot's alt says the can is purple (it is orange), Add to cart is a div the keyboard cannot reach, the quantity field has no label, and a banner offer exists only inside the image. The audit must find the rule-engine issue, the keyboard blocker (as P1) and the two model-judged ones, attach a receipt to every model call, and sign a record that verifies. Then the clean version of the sample shop, without the model, must come back with nothing found.",
 "licence": "Harbor & Pine is invented for decosa-api (AGPL-3.0-or-later): packshots drawn with Pillow, the banner photo drawn by Wan2.2-VACE-Fun-A14B (Apache-2.0).",
 "inputs": [{"file": "inputs/product-page.html", "what": "One product page (HTML, images as data: URLs), with four planted issues."}],
 "steps": [
  {"id": "audit", "method": "POST", "path": "/a11y/audit", "timeout": 600, "body": {"html": {"$file": "inputs/product-page.html"}, "synthetic": true}},
  {"id": "verify", "method": "POST", "path": "/record/verify", "auth": false, "body": {"record": {"$ref": "audit.record"}}},
  {"id": "clean", "method": "POST", "path": "/a11y/audit", "timeout": 300, "body": {"sample_id": "clean-shop", "judge": false}}
 ],
 "checks": [
  {"says": "Add to cart, a div the keyboard cannot reach, is found and ranked first (P1)", "path": "audit.findings[category=keyboard].priority", "any_equals": "P1"},
  {"says": "the quantity field without a label is found by the rule engine", "path": "audit.findings[category=label-missing].source", "any_equals": "axe-core"},
  {"says": "the packshot's alt text, which calls the orange can purple, is flagged by the model", "path": "audit.findings.category", "contains": "alt-wrong"},
  {"says": "the banner offer that exists only in the image is flagged", "path": "audit.findings.category", "contains": "image-text"},
  {"says": "at least four findings, each with its WCAG references", "path": "audit.findings", "count_min": 4},
  {"says": "every model call has a receipt", "receipts": "signed", "min": 3},
  {"says": "the signed record verifies", "path": "verify.ok", "equals": true},
  {"says": "the clean sample shop, checked without the model, has no findings", "path": "clean.summary.findings", "equals": 0}
 ]
}
