{"abstract":"Duplicate target IDs are announced repeatedly.","category":"Assistive semantics","checks":7,"contract":"Resolve target IDs in caller order, deduplicate, and exclude self references, missing nodes, incompatible roles and hidden targets.","contract_signature":"ids, registry, role, required_role, self_id","evaluation_group":"xi-aria-relationships","failed_approach":"Allowing only one target truncates multi-target relationships.","family":"xi-aria-relationships-duplicates","id":"FA-8461","implementations":{"attempt":{"sha256":"5bbef4c14b51f649ff33bfc5226238335cbabcfd3d623ba371d2c53a851dab41","source":"\"\"\"Failure Map reference implementation. Python standard library only.\"\"\"\nimport json\n\nN = 1\nobservations = []\ndef solve(ids, registry, role, required_role, self_id):\n    seen = set()\n    result = []\n    for ident in ids:\n        if ident == self_id: continue\n        if result: continue\n        if ident not in registry: continue\n        if registry[ident]['role'] != required_role: continue\n        if registry[ident]['hidden']: continue\n        seen.add(ident)\n        result.append(ident)\n    return result\ndef check(label, actual, expected):\n    observations.append({\"check\": label, \"actual\": actual, \"expected\": expected, \"passed\": actual == expected})\ncheck('self', solve(['self','a'], {'self':{'role':'panel','hidden':False},'a':{'role':'panel','hidden':False}}, 'tab', 'panel', 'self'), ['a'])\ncheck('dedup', solve(['a','a','b'], {'a':{'role':'panel','hidden':False},'b':{'role':'panel','hidden':False}}, 'tab', 'panel', 'self'), ['a', 'b'])\ncheck('missing', solve(['a','gone','b'], {'a':{'role':'panel','hidden':False},'b':{'role':'panel','hidden':False}}, 'tab', 'panel', 'self'), ['a', 'b'])\ncheck('role', solve(['bad','a'], {'bad':{'role':'button','hidden':False},'a':{'role':'panel','hidden':False}}, 'tab', 'panel', 'self'), ['a'])\ncheck('hidden', solve(['bad','a'], {'bad':{'role':'panel','hidden':True},'a':{'role':'panel','hidden':False}}, 'tab', 'panel', 'self'), ['a'])\ncheck('parameterized relationship identity', solve([str(N)], {str(N):dict(role='panel',hidden=False)}, 'tab', 'panel', 'self'), [str(N)])\nfor repetition in range(N):\n    check('repeat hidden', solve(['bad','a'], {'bad':{'role':'panel','hidden':True},'a':{'role':'panel','hidden':False}}, 'tab', 'panel', 'self'), ['a'])\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":"6ed20625c3611bdeeb2a87ccde41372974854392108db0a3c603097dfbfad9c5","source":"\"\"\"Failure Map reference implementation. Python standard library only.\"\"\"\nimport json\n\nN = 1\nobservations = []\ndef solve(ids, registry, role, required_role, self_id):\n    seen = set()\n    result = []\n    for ident in ids:\n        if ident == self_id: continue\n        if False: continue\n        if ident not in registry: continue\n        if registry[ident]['role'] != required_role: continue\n        if registry[ident]['hidden']: continue\n        seen.add(ident)\n        result.append(ident)\n    return result\ndef check(label, actual, expected):\n    observations.append({\"check\": label, \"actual\": actual, \"expected\": expected, \"passed\": actual == expected})\ncheck('self', solve(['self','a'], {'self':{'role':'panel','hidden':False},'a':{'role':'panel','hidden':False}}, 'tab', 'panel', 'self'), ['a'])\ncheck('dedup', solve(['a','a','b'], {'a':{'role':'panel','hidden':False},'b':{'role':'panel','hidden':False}}, 'tab', 'panel', 'self'), ['a', 'b'])\ncheck('missing', solve(['a','gone','b'], {'a':{'role':'panel','hidden':False},'b':{'role':'panel','hidden':False}}, 'tab', 'panel', 'self'), ['a', 'b'])\ncheck('role', solve(['bad','a'], {'bad':{'role':'button','hidden':False},'a':{'role':'panel','hidden':False}}, 'tab', 'panel', 'self'), ['a'])\ncheck('hidden', solve(['bad','a'], {'bad':{'role':'panel','hidden':True},'a':{'role':'panel','hidden':False}}, 'tab', 'panel', 'self'), ['a'])\ncheck('parameterized relationship identity', solve([str(N)], {str(N):dict(role='panel',hidden=False)}, 'tab', 'panel', 'self'), [str(N)])\nfor repetition in range(N):\n    check('repeat hidden', solve(['bad','a'], {'bad':{'role':'panel','hidden':True},'a':{'role':'panel','hidden':False}}, 'tab', 'panel', 'self'), ['a'])\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":"xi-aria-relationships-duplicates","generated_at":"2026-09-29T14:38:21.744506+00:00","license":"CC0-1.0","python":"3.12.14","seed":1,"split":"open-access"},"relevance":"A deterministic model of accessible relationship resolution; this isolates one interface invariant without requiring a browser.","root_cause":"The duplicates operation uses `if False: continue` where the contract requires `if ident in seen: continue`.","sha256":"ce35e9bd0efbd784c397d114a87644f108a221dc9f7692e74b8f8ac7e5a9cd0c","title":"Accessible relationship resolution: Duplicate target IDs are announced repeatedly · case 01","variant":1,"variant_policy":"Five numbered records share a model and may reuse boundary fixtures.","verified":true,"visibility":"public","verification":{"attempt":{"elapsed_ms":39.141,"exit_code":1,"observations":[{"actual":["a"],"check":"self","expected":["a"],"passed":true},{"actual":["a"],"check":"dedup","expected":["a","b"],"passed":false},{"actual":["a"],"check":"missing","expected":["a","b"],"passed":false},{"actual":["a"],"check":"role","expected":["a"],"passed":true},{"actual":["a"],"check":"hidden","expected":["a"],"passed":true},{"actual":["1"],"check":"parameterized relationship identity","expected":["1"],"passed":true},{"actual":["a"],"check":"repeat hidden","expected":["a"],"passed":true}],"passed":false,"stderr":"","stdout":"{\"observations\": [{\"check\": \"self\", \"actual\": [\"a\"], \"expected\": [\"a\"], \"passed\": true}, {\"check\": \"dedup\", \"actual\": [\"a\"], \"expected\": [\"a\", \"b\"], \"passed\": false}, {\"check\": \"missing\", \"actual\": [\"a\"], \"expected\": [\"a\", \"b\"], \"passed\": false}, {\"check\": \"role\", \"actual\": [\"a\"], \"expected\": [\"a\"], \"passed\": true}, {\"check\": \"hidden\", \"actual\": [\"a\"], \"expected\": [\"a\"], \"passed\": true}, {\"check\": \"parameterized relationship identity\", \"actual\": [\"1\"], \"expected\": [\"1\"], \"passed\": true}, {\"check\": \"repeat hidden\", \"actual\": [\"a\"], \"expected\": [\"a\"], \"passed\": true}], \"passed\": false}\n"},"broken":{"elapsed_ms":39.322,"exit_code":1,"observations":[{"actual":["a"],"check":"self","expected":["a"],"passed":true},{"actual":["a","a","b"],"check":"dedup","expected":["a","b"],"passed":false},{"actual":["a","b"],"check":"missing","expected":["a","b"],"passed":true},{"actual":["a"],"check":"role","expected":["a"],"passed":true},{"actual":["a"],"check":"hidden","expected":["a"],"passed":true},{"actual":["1"],"check":"parameterized relationship identity","expected":["1"],"passed":true},{"actual":["a"],"check":"repeat hidden","expected":["a"],"passed":true}],"passed":false,"stderr":"","stdout":"{\"observations\": [{\"check\": \"self\", \"actual\": [\"a\"], \"expected\": [\"a\"], \"passed\": true}, {\"check\": \"dedup\", \"actual\": [\"a\", \"a\", \"b\"], \"expected\": [\"a\", \"b\"], \"passed\": false}, {\"check\": \"missing\", \"actual\": [\"a\", \"b\"], \"expected\": [\"a\", \"b\"], \"passed\": true}, {\"check\": \"role\", \"actual\": [\"a\"], \"expected\": [\"a\"], \"passed\": true}, {\"check\": \"hidden\", \"actual\": [\"a\"], \"expected\": [\"a\"], \"passed\": true}, {\"check\": \"parameterized relationship identity\", \"actual\": [\"1\"], \"expected\": [\"1\"], \"passed\": true}, {\"check\": \"repeat hidden\", \"actual\": [\"a\"], \"expected\": [\"a\"], \"passed\": true}], \"passed\": false}\n"}},"member_only":{"stages":["fixed"],"fields":["implementations.fixed","verification.fixed","harness","repair"],"note":"The verified repair, its recorded checks, the repair description, and the scoring harness are available to members."}}