{ "feature_id": "F-015", "agent": "qa", "verdict": "APPROVED", "summary": "QA approved. Acceptance criteria are traced with structural evidence and green checks: Product JSON-LD exists, sitemap/robots build routes exist and exclude drafts through activeOnly search, redirects are stored/configured via REDIRECTS_JSON and return 301, public pages have canonical metadata, and verify.sh is green.", "acceptance": [ { "criterion": "Product page embeds valid Product JSON-LD", "status": "PASS", "evidence": "json-ld.tsx builds @type Product and product page renders JsonLdScript; JSON is serialized and script-safe escaped" }, { "criterion": "sitemap.xml lists active public URLs and excludes draft content", "status": "PASS", "evidence": "sitemap.ts includes static URLs, active product pagination through searchProducts, category tree and brands; backend SearchProducts uses activeOnly=true" }, { "criterion": "Given stored redirect When old URL requested Then HTTP 301 to new URL", "status": "PASS", "evidence": "redirects.ts parses REDIRECTS_JSON into RedirectRepository; proxy.ts returns NextResponse.redirect(..., 301) for matched local path" }, { "criterion": "Every public page has canonical URL", "status": "PASS", "evidence": "layout root canonical plus product/category/brand/search generateMetadata alternates canonical" }, { "criterion": "verify.sh green", "status": "PASS", "evidence": "./scripts/verify.sh PASS" } ], "commands": [ "rg structured-data and metadata route patterns: PASS", "cd project/storefront && npm run lint: PASS", "cd project/storefront && npm run typecheck: PASS", "cd project/storefront && npm run build: PASS; output includes /robots.txt, /sitemap.xml and Proxy", "cd project && npm run typecheck: PASS", "cd project && npm test: PASS; 17 passed, 7 skipped; 64 assertions passed, 33 skipped", "./scripts/verify.sh: PASS" ], "notes": [ "External Google Rich Results/Lighthouse validators are not installed in this environment; QA used structural JSON-LD/canonical/build evidence." ], "timestamp": "2026-08-15T16:02:57Z" }