{"abstract":"Section-local headers and footers appear in the page landmark inventory, or unnamed sections create noisy regions.","category":"Accessibility interaction semantics","checks":10,"contract":"This deliberately bounded native landmark adapter accepts tag, accessible name, and nearest-first ancestor tag names. main/nav/aside map to main/navigation/complementary. Named form/section map to form/region; empty or ASCII-whitespace-only names yield None. header/footer map to banner/contentinfo only outside every article, aside, main, nav or section ancestor. Other tags yield None. This adapter does not implement author role overrides or full HTML semantics.","evaluation_group":"model-02966efe63515700","failed_approach":"Checking only the nearest ancestor still mistakes a header wrapped inside an article for a page-wide banner.","family":"z-accessibility-contextual-landmark","id":"FA-11431","implementations":{"attempt":{"sha256":"19bbb31ca97f3b4b1b108b716aad15deecd1eaae0e467e8f094e73fe6da4a6ce","source":"\"\"\"Failure Map reference implementation. Python standard library only.\"\"\"\nimport json\n\nN = 1\nobservations = []\ndef solve(tag, name, ancestors):\n    if tag in ('form','section') and not name.strip(''.join(map(chr, [32,9,13,10,12,11]))): return None\n    if tag in ('header','footer') and ancestors and ancestors[0] in {'article','aside','main','nav','section'}: return None\n    return {'main':'main','nav':'navigation','aside':'complementary','form':'form','section':'region','header':'banner','footer':'contentinfo'}.get(tag)\ndef check(label, actual, expected):\n    observations.append({\"check\": label, \"actual\": actual, \"expected\": expected, \"passed\": actual == expected})\ncheck('deep local header', solve('header', str(N), ['div']*N+['article','body']), None)\ncheck('deep local footer', solve('footer', str(N), ['div']*N+['main','body']), None)\ncheck('page header', solve('header', str(N), ['div']*N+['body']), 'banner')\ncheck('page footer', solve('footer', '', ['body']), 'contentinfo')\ncheck('unnamed section', solve('section', ' '*N, ['body']), None)\ncheck('named section', solve('section', 'Results '+str(N), ['body']), 'region')\ncheck('unnamed form', solve('form', '', []), None)\ncheck('named form', solve('form', str(N), []), 'form')\ncheck('unconditional navigation', solve('nav', '', ['article']), 'navigation')\ncheck('nonlandmark', solve('div', str(N), []), None)\nprint(json.dumps({\"observations\": observations, \"passed\": all(x[\"passed\"] for x in observations)}, ensure_ascii=False))\nraise SystemExit(0 if all(x[\"passed\"] for x in observations) else 1)\n"},"broken":{"sha256":"6912ca38d7428809618ee2705037b35dcbd781dce49cf426f2979731770cbddf","source":"\"\"\"Failure Map reference implementation. Python standard library only.\"\"\"\nimport json\n\nN = 1\nobservations = []\ndef solve(tag, name, ancestors):\n    return {'main':'main','nav':'navigation','aside':'complementary','form':'form','section':'region','header':'banner','footer':'contentinfo'}.get(tag)\ndef check(label, actual, expected):\n    observations.append({\"check\": label, \"actual\": actual, \"expected\": expected, \"passed\": actual == expected})\ncheck('deep local header', solve('header', str(N), ['div']*N+['article','body']), None)\ncheck('deep local footer', solve('footer', str(N), ['div']*N+['main','body']), None)\ncheck('page header', solve('header', str(N), ['div']*N+['body']), 'banner')\ncheck('page footer', solve('footer', '', ['body']), 'contentinfo')\ncheck('unnamed section', solve('section', ' '*N, ['body']), None)\ncheck('named section', solve('section', 'Results '+str(N), ['body']), 'region')\ncheck('unnamed form', solve('form', '', []), None)\ncheck('named form', solve('form', str(N), []), 'form')\ncheck('unconditional navigation', solve('nav', '', ['article']), 'navigation')\ncheck('nonlandmark', solve('div', str(N), []), None)\nprint(json.dumps({\"observations\": observations, \"passed\": all(x[\"passed\"] for x in observations)}, ensure_ascii=False))\nraise SystemExit(0 if all(x[\"passed\"] for x in observations) else 1)\n"},"fixed":{"sha256":"13c3a15a938b9c49a09ccebbfc51d247b71a90654b898a60c3ecaf6a0c02b5ff","source":"\"\"\"Failure Map reference implementation. Python standard library only.\"\"\"\nimport json\n\nN = 1\nobservations = []\ndef solve(tag, name, ancestors):\n    if tag in ('form','section') and not name.strip(''.join(map(chr, [32,9,13,10,12,11]))): return None\n    if tag in ('header','footer') and any(parent in {'article','aside','main','nav','section'} for parent in ancestors): return None\n    return {'main':'main','nav':'navigation','aside':'complementary','form':'form','section':'region','header':'banner','footer':'contentinfo'}.get(tag)\ndef check(label, actual, expected):\n    observations.append({\"check\": label, \"actual\": actual, \"expected\": expected, \"passed\": actual == expected})\ncheck('deep local header', solve('header', str(N), ['div']*N+['article','body']), None)\ncheck('deep local footer', solve('footer', str(N), ['div']*N+['main','body']), None)\ncheck('page header', solve('header', str(N), ['div']*N+['body']), 'banner')\ncheck('page footer', solve('footer', '', ['body']), 'contentinfo')\ncheck('unnamed section', solve('section', ' '*N, ['body']), None)\ncheck('named section', solve('section', 'Results '+str(N), ['body']), 'region')\ncheck('unnamed form', solve('form', '', []), None)\ncheck('named form', solve('form', str(N), []), 'form')\ncheck('unconditional navigation', solve('nav', '', ['article']), 'navigation')\ncheck('nonlandmark', solve('div', str(N), []), None)\nprint(json.dumps({\"observations\": observations, \"passed\": all(x[\"passed\"] for x in observations)}, ensure_ascii=False))\nraise SystemExit(0 if all(x[\"passed\"] for x in observations) else 1)\n"}},"limitations":" This reproducer isolates one failure mechanism. Results cover the supplied fixtures. Variants within a family share a test contract and should remain grouped when constructing evaluation splits. Related mechanisms with a shared evaluation_group must also remain together; these controlled models are not independent production incidents.","method":"Deterministic executable model with adversarial boundary fixtures.","provenance":{"created_by":"Failure Map","dependencies":"Python standard library","family":"z-accessibility-contextual-landmark","generated_at":"2026-09-29T14:38:47.907254+00:00","license":"CC0-1.0","python":"3.12.14","seed":1,"split":"open-access"},"relevance":"A controlled offline accessibility-data model. It isolates the stated contract; it does not simulate browser accessibility APIs or claim full ARIA conformance.","repair":"Require names for form/section landmarks and inspect the complete ancestor chain for header/footer sectioning context.","root_cause":"HTML tag names are mapped to landmark roles without the required naming and ancestor context.","sha256":"5cd85c5a288926421c92c64cd857edb843d5cae0da20a2f3422be1da26d9056a","title":"A nested header is exposed as a page-wide banner landmark · case 01","variant":1,"variant_policy":"Five numbered records share a model and may reuse boundary fixtures.","verification":{"attempt":{"elapsed_ms":39.149,"exit_code":1,"observations":[{"actual":"banner","check":"deep local header","expected":null,"passed":false},{"actual":"contentinfo","check":"deep local footer","expected":null,"passed":false},{"actual":"banner","check":"page header","expected":"banner","passed":true},{"actual":"contentinfo","check":"page footer","expected":"contentinfo","passed":true},{"actual":null,"check":"unnamed section","expected":null,"passed":true},{"actual":"region","check":"named section","expected":"region","passed":true},{"actual":null,"check":"unnamed form","expected":null,"passed":true},{"actual":"form","check":"named form","expected":"form","passed":true},{"actual":"navigation","check":"unconditional navigation","expected":"navigation","passed":true},{"actual":null,"check":"nonlandmark","expected":null,"passed":true}],"passed":false,"stderr":"","stdout":"{\"observations\": [{\"check\": \"deep local header\", \"actual\": \"banner\", \"expected\": null, \"passed\": false}, {\"check\": \"deep local footer\", \"actual\": \"contentinfo\", \"expected\": null, \"passed\": false}, {\"check\": \"page header\", \"actual\": \"banner\", \"expected\": \"banner\", \"passed\": true}, {\"check\": \"page footer\", \"actual\": \"contentinfo\", \"expected\": \"contentinfo\", \"passed\": true}, {\"check\": \"unnamed section\", \"actual\": null, \"expected\": null, \"passed\": true}, {\"check\": \"named section\", \"actual\": \"region\", \"expected\": \"region\", \"passed\": true}, {\"check\": \"unnamed form\", \"actual\": null, \"expected\": null, \"passed\": true}, {\"check\": \"named form\", \"actual\": \"form\", \"expected\": \"form\", \"passed\": true}, {\"check\": \"unconditional navigation\", \"actual\": \"navigation\", \"expected\": \"navigation\", \"passed\": true}, {\"check\": \"nonlandmark\", \"actual\": null, \"expected\": null, \"passed\": true}], \"passed\": false}\n"},"broken":{"elapsed_ms":42.723,"exit_code":1,"observations":[{"actual":"banner","check":"deep local header","expected":null,"passed":false},{"actual":"contentinfo","check":"deep local footer","expected":null,"passed":false},{"actual":"banner","check":"page header","expected":"banner","passed":true},{"actual":"contentinfo","check":"page footer","expected":"contentinfo","passed":true},{"actual":"region","check":"unnamed section","expected":null,"passed":false},{"actual":"region","check":"named section","expected":"region","passed":true},{"actual":"form","check":"unnamed form","expected":null,"passed":false},{"actual":"form","check":"named form","expected":"form","passed":true},{"actual":"navigation","check":"unconditional navigation","expected":"navigation","passed":true},{"actual":null,"check":"nonlandmark","expected":null,"passed":true}],"passed":false,"stderr":"","stdout":"{\"observations\": [{\"check\": \"deep local header\", \"actual\": \"banner\", \"expected\": null, \"passed\": false}, {\"check\": \"deep local footer\", \"actual\": \"contentinfo\", \"expected\": null, \"passed\": false}, {\"check\": \"page header\", \"actual\": \"banner\", \"expected\": \"banner\", \"passed\": true}, {\"check\": \"page footer\", \"actual\": \"contentinfo\", \"expected\": \"contentinfo\", \"passed\": true}, {\"check\": \"unnamed section\", \"actual\": \"region\", \"expected\": null, \"passed\": false}, {\"check\": \"named section\", \"actual\": \"region\", \"expected\": \"region\", \"passed\": true}, {\"check\": \"unnamed form\", \"actual\": \"form\", \"expected\": null, \"passed\": false}, {\"check\": \"named form\", \"actual\": \"form\", \"expected\": \"form\", \"passed\": true}, {\"check\": \"unconditional navigation\", \"actual\": \"navigation\", \"expected\": \"navigation\", \"passed\": true}, {\"check\": \"nonlandmark\", \"actual\": null, \"expected\": null, \"passed\": true}], \"passed\": false}\n"},"fixed":{"elapsed_ms":37.457,"exit_code":0,"observations":[{"actual":null,"check":"deep local header","expected":null,"passed":true},{"actual":null,"check":"deep local footer","expected":null,"passed":true},{"actual":"banner","check":"page header","expected":"banner","passed":true},{"actual":"contentinfo","check":"page footer","expected":"contentinfo","passed":true},{"actual":null,"check":"unnamed section","expected":null,"passed":true},{"actual":"region","check":"named section","expected":"region","passed":true},{"actual":null,"check":"unnamed form","expected":null,"passed":true},{"actual":"form","check":"named form","expected":"form","passed":true},{"actual":"navigation","check":"unconditional navigation","expected":"navigation","passed":true},{"actual":null,"check":"nonlandmark","expected":null,"passed":true}],"passed":true,"stderr":"","stdout":"{\"observations\": [{\"check\": \"deep local header\", \"actual\": null, \"expected\": null, \"passed\": true}, {\"check\": \"deep local footer\", \"actual\": null, \"expected\": null, \"passed\": true}, {\"check\": \"page header\", \"actual\": \"banner\", \"expected\": \"banner\", \"passed\": true}, {\"check\": \"page footer\", \"actual\": \"contentinfo\", \"expected\": \"contentinfo\", \"passed\": true}, {\"check\": \"unnamed section\", \"actual\": null, \"expected\": null, \"passed\": true}, {\"check\": \"named section\", \"actual\": \"region\", \"expected\": \"region\", \"passed\": true}, {\"check\": \"unnamed form\", \"actual\": null, \"expected\": null, \"passed\": true}, {\"check\": \"named form\", \"actual\": \"form\", \"expected\": \"form\", \"passed\": true}, {\"check\": \"unconditional navigation\", \"actual\": \"navigation\", \"expected\": \"navigation\", \"passed\": true}, {\"check\": \"nonlandmark\", \"actual\": null, \"expected\": null, \"passed\": true}], \"passed\": true}\n"}},"verified":true,"visibility":"public"}