{"abstract":"Style changes fail to invalidate their own computed name.","category":"Accessibility interaction semantics","checks":8,"contract":"Input [cached_names,dependencies,mutations]. Dependencies [consumer,provider,channel] with channel name or description; only name affects cached names. Mutation [provider,kind] kind text,remove,style,unrelated; text/remove invalidate provider and all transitively dependent name consumers, style invalidates provider only, unrelated does nothing. Include only cached IDs in returned invalidated list but traverse uncached providers. Ignore cycles safely, preserve cache dictionary order in final result. Return [remaining_cache,invalidated_ids].","evaluation_group":"s3-accessibility-name-dependencies","failed_approach":"The local repair substitutes if kind == 'style': invalid.discard(provider); continue but still mishandles the regression fixtures.","family":"s3-accessibility-name-dependencies-style-provider","id":"FA-54456","implementations":{"attempt":{"sha256":"c0152b7f9eac2ac91c1bc7771e2f57a94aab2e744d4101877a5f4da28cba4e89","source":"\"\"\"Failure Map reference implementation. Python standard library only.\"\"\"\nimport json\n\nN = 1\nobservations = []\ndef solve(data):\n    cache,dependencies,mutations = data\n    reverse = {}\n    for consumer,provider,channel in dependencies:\n        if channel == 'name': reverse.setdefault(provider,[]).append(consumer)\n    invalid = set()\n    for provider,kind in mutations:\n        if kind == 'style': invalid.discard(provider); continue\n        if kind not in ('text','remove'): continue\n        pending = [provider]\n        seen = set()\n        while pending:\n            node = pending.pop()\n            if node in seen: continue\n            seen.add(node)\n            invalid.add(node)\n            pending.extend(reverse.get(node,[]))\n    return [{key:value for key,value in cache.items() if key not in invalid},[key for key in cache if key in invalid]]\ndef check(label, actual, expected):\n    observations.append({\"check\": label, \"actual\": actual, \"expected\": expected, \"passed\": actual == expected})\ncheck('contract fixture 1', solve([{'a':'A','b':'B','c':str(N),'keep':'K'},[['b','a','name'],['c','b','name']],[['a','text']]],), [{'keep':'K'},['a','b','c']])\ncheck('contract fixture 2', solve([{'c':'C'},[['c','missing','name']],[['missing','remove']]],), [{},['c']])\ncheck('contract fixture 3', solve([{'a':'A','b':'B'},[['b','a','description']],[['a','text']]],), [{'b':'B'},['a']])\ncheck('contract fixture 4', solve([{'a':'A','b':'B'},[['b','a','name']],[['a','style']]],), [{'b':'B'},['a']])\ncheck('contract fixture 5', solve([{'a':'A','b':'B'},[['b','a','name'],['a','b','name']],[['a','unrelated']]],), [{'a':'A','b':'B'},[]])\ncheck('contract fixture 6', solve([{'z':'Z','a':'A'},[['a','z','name'],['z','a','name']],[['z','text']]],), [{},['z','a']])\ncheck('contract fixture 7', solve([{'a':'A','b':'B'},[],[['a','text'],['b','text']]],), [{},['a','b']])\ncheck('contract fixture 8', solve([{'n'+str(i):'Name'+str(i) for i in range(N+2)},[['n'+str(i),'n'+str(i-1),'name'] for i in range(1,N+2)],[['n0','text']]],), [{},['n'+str(i) for i in range(N+2)]])\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":"639ec6fc0cbb806b7d59f90751809787c5b2b41d5defc4134caf957a416b02fc","source":"\"\"\"Failure Map reference implementation. Python standard library only.\"\"\"\nimport json\n\nN = 1\nobservations = []\ndef solve(data):\n    cache,dependencies,mutations = data\n    reverse = {}\n    for consumer,provider,channel in dependencies:\n        if channel == 'name': reverse.setdefault(provider,[]).append(consumer)\n    invalid = set()\n    for provider,kind in mutations:\n        if kind == 'style': continue\n        if kind not in ('text','remove'): continue\n        pending = [provider]\n        seen = set()\n        while pending:\n            node = pending.pop()\n            if node in seen: continue\n            seen.add(node)\n            invalid.add(node)\n            pending.extend(reverse.get(node,[]))\n    return [{key:value for key,value in cache.items() if key not in invalid},[key for key in cache if key in invalid]]\ndef check(label, actual, expected):\n    observations.append({\"check\": label, \"actual\": actual, \"expected\": expected, \"passed\": actual == expected})\ncheck('contract fixture 1', solve([{'a':'A','b':'B','c':str(N),'keep':'K'},[['b','a','name'],['c','b','name']],[['a','text']]],), [{'keep':'K'},['a','b','c']])\ncheck('contract fixture 2', solve([{'c':'C'},[['c','missing','name']],[['missing','remove']]],), [{},['c']])\ncheck('contract fixture 3', solve([{'a':'A','b':'B'},[['b','a','description']],[['a','text']]],), [{'b':'B'},['a']])\ncheck('contract fixture 4', solve([{'a':'A','b':'B'},[['b','a','name']],[['a','style']]],), [{'b':'B'},['a']])\ncheck('contract fixture 5', solve([{'a':'A','b':'B'},[['b','a','name'],['a','b','name']],[['a','unrelated']]],), [{'a':'A','b':'B'},[]])\ncheck('contract fixture 6', solve([{'z':'Z','a':'A'},[['a','z','name'],['z','a','name']],[['z','text']]],), [{},['z','a']])\ncheck('contract fixture 7', solve([{'a':'A','b':'B'},[],[['a','text'],['b','text']]],), [{},['a','b']])\ncheck('contract fixture 8', solve([{'n'+str(i):'Name'+str(i) for i in range(N+2)},[['n'+str(i),'n'+str(i-1),'name'] for i in range(1,N+2)],[['n0','text']]],), [{},['n'+str(i) for i in range(N+2)]])\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":"e645a0316d8b287c7f412db935226168d348f64cc645fd0080cb175a3b625512","source":"\"\"\"Failure Map reference implementation. Python standard library only.\"\"\"\nimport json\n\nN = 1\nobservations = []\ndef solve(data):\n    cache,dependencies,mutations = data\n    reverse = {}\n    for consumer,provider,channel in dependencies:\n        if channel == 'name': reverse.setdefault(provider,[]).append(consumer)\n    invalid = set()\n    for provider,kind in mutations:\n        if kind == 'style': invalid.add(provider); continue\n        if kind not in ('text','remove'): continue\n        pending = [provider]\n        seen = set()\n        while pending:\n            node = pending.pop()\n            if node in seen: continue\n            seen.add(node)\n            invalid.add(node)\n            pending.extend(reverse.get(node,[]))\n    return [{key:value for key,value in cache.items() if key not in invalid},[key for key in cache if key in invalid]]\ndef check(label, actual, expected):\n    observations.append({\"check\": label, \"actual\": actual, \"expected\": expected, \"passed\": actual == expected})\ncheck('contract fixture 1', solve([{'a':'A','b':'B','c':str(N),'keep':'K'},[['b','a','name'],['c','b','name']],[['a','text']]],), [{'keep':'K'},['a','b','c']])\ncheck('contract fixture 2', solve([{'c':'C'},[['c','missing','name']],[['missing','remove']]],), [{},['c']])\ncheck('contract fixture 3', solve([{'a':'A','b':'B'},[['b','a','description']],[['a','text']]],), [{'b':'B'},['a']])\ncheck('contract fixture 4', solve([{'a':'A','b':'B'},[['b','a','name']],[['a','style']]],), [{'b':'B'},['a']])\ncheck('contract fixture 5', solve([{'a':'A','b':'B'},[['b','a','name'],['a','b','name']],[['a','unrelated']]],), [{'a':'A','b':'B'},[]])\ncheck('contract fixture 6', solve([{'z':'Z','a':'A'},[['a','z','name'],['z','a','name']],[['z','text']]],), [{},['z','a']])\ncheck('contract fixture 7', solve([{'a':'A','b':'B'},[],[['a','text'],['b','text']]],), [{},['a','b']])\ncheck('contract fixture 8', solve([{'n'+str(i):'Name'+str(i) for i in range(N+2)},[['n'+str(i),'n'+str(i-1),'name'] for i in range(1,N+2)],[['n0','text']]],), [{},['n'+str(i) for i in range(N+2)]])\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":"Stipulated finite adapter contract, not a claim of platform accessibility or ARIA conformance. 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":"s3-accessibility-name-dependencies-style-provider","generated_at":"2026-09-29T14:45:48.541143+00:00","license":"CC0-1.0","python":"3.12.14","seed":1,"split":"open-access"},"relevance":"Offline accessibility bridge model with explicit policy; useful for testing semantic API adapters independently of browser implementations.","repair":"Apply the exact contract at the style provider decision: if kind == 'style': invalid.add(provider); continue","root_cause":"The style provider decision in the name dependencies adapter violates its declared contract.","sha256":"691fbed1bfa696cd41886ac5d42d46f3471ddb35322887ee26dc334ddf6040d7","title":"Style changes fail to invalidate their own computed name · case 01","variant":1,"variant_policy":"Five numbered records share a model and may reuse boundary fixtures.","verification":{"attempt":{"elapsed_ms":40.147,"exit_code":1,"observations":[{"actual":[{"keep":"K"},["a","b","c"]],"check":"contract fixture 1","expected":[{"keep":"K"},["a","b","c"]],"passed":true},{"actual":[{},["c"]],"check":"contract fixture 2","expected":[{},["c"]],"passed":true},{"actual":[{"b":"B"},["a"]],"check":"contract fixture 3","expected":[{"b":"B"},["a"]],"passed":true},{"actual":[{"a":"A","b":"B"},[]],"check":"contract fixture 4","expected":[{"b":"B"},["a"]],"passed":false},{"actual":[{"a":"A","b":"B"},[]],"check":"contract fixture 5","expected":[{"a":"A","b":"B"},[]],"passed":true},{"actual":[{},["z","a"]],"check":"contract fixture 6","expected":[{},["z","a"]],"passed":true},{"actual":[{},["a","b"]],"check":"contract fixture 7","expected":[{},["a","b"]],"passed":true},{"actual":[{},["n0","n1","n2"]],"check":"contract fixture 8","expected":[{},["n0","n1","n2"]],"passed":true}],"passed":false,"stderr":"","stdout":"{\"observations\": [{\"check\": \"contract fixture 1\", \"actual\": [{\"keep\": \"K\"}, [\"a\", \"b\", \"c\"]], \"expected\": [{\"keep\": \"K\"}, [\"a\", \"b\", \"c\"]], \"passed\": true}, {\"check\": \"contract fixture 2\", \"actual\": [{}, [\"c\"]], \"expected\": [{}, [\"c\"]], \"passed\": true}, {\"check\": \"contract fixture 3\", \"actual\": [{\"b\": \"B\"}, [\"a\"]], \"expected\": [{\"b\": \"B\"}, [\"a\"]], \"passed\": true}, {\"check\": \"contract fixture 4\", \"actual\": [{\"a\": \"A\", \"b\": \"B\"}, []], \"expected\": [{\"b\": \"B\"}, [\"a\"]], \"passed\": false}, {\"check\": \"contract fixture 5\", \"actual\": [{\"a\": \"A\", \"b\": \"B\"}, []], \"expected\": [{\"a\": \"A\", \"b\": \"B\"}, []], \"passed\": true}, {\"check\": \"contract fixture 6\", \"actual\": [{}, [\"z\", \"a\"]], \"expected\": [{}, [\"z\", \"a\"]], \"passed\": true}, {\"check\": \"contract fixture 7\", \"actual\": [{}, [\"a\", \"b\"]], \"expected\": [{}, [\"a\", \"b\"]], \"passed\": true}, {\"check\": \"contract fixture 8\", \"actual\": [{}, [\"n0\", \"n1\", \"n2\"]], \"expected\": [{}, [\"n0\", \"n1\", \"n2\"]], \"passed\": true}], \"passed\": false}\n"},"broken":{"elapsed_ms":41.093,"exit_code":1,"observations":[{"actual":[{"keep":"K"},["a","b","c"]],"check":"contract fixture 1","expected":[{"keep":"K"},["a","b","c"]],"passed":true},{"actual":[{},["c"]],"check":"contract fixture 2","expected":[{},["c"]],"passed":true},{"actual":[{"b":"B"},["a"]],"check":"contract fixture 3","expected":[{"b":"B"},["a"]],"passed":true},{"actual":[{"a":"A","b":"B"},[]],"check":"contract fixture 4","expected":[{"b":"B"},["a"]],"passed":false},{"actual":[{"a":"A","b":"B"},[]],"check":"contract fixture 5","expected":[{"a":"A","b":"B"},[]],"passed":true},{"actual":[{},["z","a"]],"check":"contract fixture 6","expected":[{},["z","a"]],"passed":true},{"actual":[{},["a","b"]],"check":"contract fixture 7","expected":[{},["a","b"]],"passed":true},{"actual":[{},["n0","n1","n2"]],"check":"contract fixture 8","expected":[{},["n0","n1","n2"]],"passed":true}],"passed":false,"stderr":"","stdout":"{\"observations\": [{\"check\": \"contract fixture 1\", \"actual\": [{\"keep\": \"K\"}, [\"a\", \"b\", \"c\"]], \"expected\": [{\"keep\": \"K\"}, [\"a\", \"b\", \"c\"]], \"passed\": true}, {\"check\": \"contract fixture 2\", \"actual\": [{}, [\"c\"]], \"expected\": [{}, [\"c\"]], \"passed\": true}, {\"check\": \"contract fixture 3\", \"actual\": [{\"b\": \"B\"}, [\"a\"]], \"expected\": [{\"b\": \"B\"}, [\"a\"]], \"passed\": true}, {\"check\": \"contract fixture 4\", \"actual\": [{\"a\": \"A\", \"b\": \"B\"}, []], \"expected\": [{\"b\": \"B\"}, [\"a\"]], \"passed\": false}, {\"check\": \"contract fixture 5\", \"actual\": [{\"a\": \"A\", \"b\": \"B\"}, []], \"expected\": [{\"a\": \"A\", \"b\": \"B\"}, []], \"passed\": true}, {\"check\": \"contract fixture 6\", \"actual\": [{}, [\"z\", \"a\"]], \"expected\": [{}, [\"z\", \"a\"]], \"passed\": true}, {\"check\": \"contract fixture 7\", \"actual\": [{}, [\"a\", \"b\"]], \"expected\": [{}, [\"a\", \"b\"]], \"passed\": true}, {\"check\": \"contract fixture 8\", \"actual\": [{}, [\"n0\", \"n1\", \"n2\"]], \"expected\": [{}, [\"n0\", \"n1\", \"n2\"]], \"passed\": true}], \"passed\": false}\n"},"fixed":{"elapsed_ms":40.762,"exit_code":0,"observations":[{"actual":[{"keep":"K"},["a","b","c"]],"check":"contract fixture 1","expected":[{"keep":"K"},["a","b","c"]],"passed":true},{"actual":[{},["c"]],"check":"contract fixture 2","expected":[{},["c"]],"passed":true},{"actual":[{"b":"B"},["a"]],"check":"contract fixture 3","expected":[{"b":"B"},["a"]],"passed":true},{"actual":[{"b":"B"},["a"]],"check":"contract fixture 4","expected":[{"b":"B"},["a"]],"passed":true},{"actual":[{"a":"A","b":"B"},[]],"check":"contract fixture 5","expected":[{"a":"A","b":"B"},[]],"passed":true},{"actual":[{},["z","a"]],"check":"contract fixture 6","expected":[{},["z","a"]],"passed":true},{"actual":[{},["a","b"]],"check":"contract fixture 7","expected":[{},["a","b"]],"passed":true},{"actual":[{},["n0","n1","n2"]],"check":"contract fixture 8","expected":[{},["n0","n1","n2"]],"passed":true}],"passed":true,"stderr":"","stdout":"{\"observations\": [{\"check\": \"contract fixture 1\", \"actual\": [{\"keep\": \"K\"}, [\"a\", \"b\", \"c\"]], \"expected\": [{\"keep\": \"K\"}, [\"a\", \"b\", \"c\"]], \"passed\": true}, {\"check\": \"contract fixture 2\", \"actual\": [{}, [\"c\"]], \"expected\": [{}, [\"c\"]], \"passed\": true}, {\"check\": \"contract fixture 3\", \"actual\": [{\"b\": \"B\"}, [\"a\"]], \"expected\": [{\"b\": \"B\"}, [\"a\"]], \"passed\": true}, {\"check\": \"contract fixture 4\", \"actual\": [{\"b\": \"B\"}, [\"a\"]], \"expected\": [{\"b\": \"B\"}, [\"a\"]], \"passed\": true}, {\"check\": \"contract fixture 5\", \"actual\": [{\"a\": \"A\", \"b\": \"B\"}, []], \"expected\": [{\"a\": \"A\", \"b\": \"B\"}, []], \"passed\": true}, {\"check\": \"contract fixture 6\", \"actual\": [{}, [\"z\", \"a\"]], \"expected\": [{}, [\"z\", \"a\"]], \"passed\": true}, {\"check\": \"contract fixture 7\", \"actual\": [{}, [\"a\", \"b\"]], \"expected\": [{}, [\"a\", \"b\"]], \"passed\": true}, {\"check\": \"contract fixture 8\", \"actual\": [{}, [\"n0\", \"n1\", \"n2\"]], \"expected\": [{}, [\"n0\", \"n1\", \"n2\"]], \"passed\": true}], \"passed\": true}\n"}},"verified":true,"visibility":"public"}