{"abstract":"Shared text is lost in a label-reference graph, or a cycle prevents termination.","category":"Accessibility interaction semantics","checks":6,"contract":"Controlled label graph: each node has [local_text,ordered_reference_ids]. Resolve the root by concatenating its local text and recursively resolved references with spaces, omitting missing nodes and edges to path ancestors. Shared nodes contribute once per path. Graph size is bounded by fixtures.","evaluation_group":"model-309d196882f52155","failed_approach":"A global visited set stops cycles but incorrectly suppresses a shared node reached by two independent branches.","family":"z-accessibility-label-cycle","id":"FA-11401","implementations":{"attempt":{"sha256":"b8870589e86541e7f9dd85dbe0c3884ec2895117b28eaf9b09fd0ec27fe70c0e","source":"\"\"\"Failure Map reference implementation. Python standard library only.\"\"\"\nimport json\n\nN = 1\nobservations = []\ndef solve(graph, root):\n    seen = set()\n    def visit(key):\n        if key not in graph or key in seen: return []\n        seen.add(key)\n        text,refs = graph[key]\n        return ([text] if text else []) + [part for ref in refs for part in visit(ref)]\n    return ' '.join(visit(root))\ndef check(label, actual, expected):\n    observations.append({\"check\": label, \"actual\": actual, \"expected\": expected, \"passed\": actual == expected})\ncheck('self cycle', solve({'a':[str(N),['a']]}, 'a'), str(N))\ncheck('two node cycle', solve({'a':['A',['b']], 'b':[str(N),['a']]}, 'a'), 'A '+str(N))\ncheck('shared diamond', solve({'a':['',['b','c']], 'b':['B',['d']], 'c':['C',['d']], 'd':[str(N),[]]}, 'a'), 'B '+str(N)+' C '+str(N))\ncheck('missing root', solve({}, str(N)), '')\ncheck('dangling branch', solve({'a':[str(N),['gone']]}, 'a'), str(N))\ncheck('ordered branches', solve({'a':['',['c','b']], 'b':['B',[]], 'c':[str(N),[]]}, 'a'), str(N)+' B')\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":"00d0633c3e292ebdaad54b9751fc30805c5bd22617a33ced8fee6abeb2beca3b","source":"\"\"\"Failure Map reference implementation. Python standard library only.\"\"\"\nimport json\n\nN = 1\nobservations = []\ndef solve(graph, root):\n    def visit(key, depth=0):\n        if key not in graph or depth > len(graph): return []\n        text, refs = graph[key]\n        return ([text] if text else []) + [part for ref in refs for part in visit(ref,depth+1)]\n    return ' '.join(visit(root))\ndef check(label, actual, expected):\n    observations.append({\"check\": label, \"actual\": actual, \"expected\": expected, \"passed\": actual == expected})\ncheck('self cycle', solve({'a':[str(N),['a']]}, 'a'), str(N))\ncheck('two node cycle', solve({'a':['A',['b']], 'b':[str(N),['a']]}, 'a'), 'A '+str(N))\ncheck('shared diamond', solve({'a':['',['b','c']], 'b':['B',['d']], 'c':['C',['d']], 'd':[str(N),[]]}, 'a'), 'B '+str(N)+' C '+str(N))\ncheck('missing root', solve({}, str(N)), '')\ncheck('dangling branch', solve({'a':[str(N),['gone']]}, 'a'), str(N))\ncheck('ordered branches', solve({'a':['',['c','b']], 'b':['B',[]], 'c':[str(N),[]]}, 'a'), str(N)+' B')\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":"2a57777aee75cd2c8d2e224a7cff2d69fbc272a0a5dc68aecf39ce35a3c94963","source":"\"\"\"Failure Map reference implementation. Python standard library only.\"\"\"\nimport json\n\nN = 1\nobservations = []\ndef solve(graph, root):\n    def visit(key, path):\n        if key not in graph or key in path: return []\n        text,refs = graph[key]\n        return ([text] if text else []) + [part for ref in refs for part in visit(ref,path | {key})]\n    return ' '.join(visit(root,set()))\ndef check(label, actual, expected):\n    observations.append({\"check\": label, \"actual\": actual, \"expected\": expected, \"passed\": actual == expected})\ncheck('self cycle', solve({'a':[str(N),['a']]}, 'a'), str(N))\ncheck('two node cycle', solve({'a':['A',['b']], 'b':[str(N),['a']]}, 'a'), 'A '+str(N))\ncheck('shared diamond', solve({'a':['',['b','c']], 'b':['B',['d']], 'c':['C',['d']], 'd':[str(N),[]]}, 'a'), 'B '+str(N)+' C '+str(N))\ncheck('missing root', solve({}, str(N)), '')\ncheck('dangling branch', solve({'a':[str(N),['gone']]}, 'a'), str(N))\ncheck('ordered branches', solve({'a':['',['c','b']], 'b':['B',[]], 'c':[str(N),[]]}, 'a'), str(N)+' B')\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-label-cycle","generated_at":"2026-09-29T14:38:47.530977+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":"Cut only edges returning to the current recursion path and keep independent branch occurrences.","root_cause":"Reference traversal conflates previously visited nodes with ancestors on the current traversal path.","sha256":"8a14a0f158ef723ecdf560fd9218fd9372ec5dc41d2add7810abb8b16f4f97ca","title":"A global recursion guard erases a repeated label branch · case 01","variant":1,"variant_policy":"Five numbered records share a model and may reuse boundary fixtures.","verification":{"attempt":{"elapsed_ms":39.919,"exit_code":1,"observations":[{"actual":"1","check":"self cycle","expected":"1","passed":true},{"actual":"A 1","check":"two node cycle","expected":"A 1","passed":true},{"actual":"B 1 C","check":"shared diamond","expected":"B 1 C 1","passed":false},{"actual":"","check":"missing root","expected":"","passed":true},{"actual":"1","check":"dangling branch","expected":"1","passed":true},{"actual":"1 B","check":"ordered branches","expected":"1 B","passed":true}],"passed":false,"stderr":"","stdout":"{\"observations\": [{\"check\": \"self cycle\", \"actual\": \"1\", \"expected\": \"1\", \"passed\": true}, {\"check\": \"two node cycle\", \"actual\": \"A 1\", \"expected\": \"A 1\", \"passed\": true}, {\"check\": \"shared diamond\", \"actual\": \"B 1 C\", \"expected\": \"B 1 C 1\", \"passed\": false}, {\"check\": \"missing root\", \"actual\": \"\", \"expected\": \"\", \"passed\": true}, {\"check\": \"dangling branch\", \"actual\": \"1\", \"expected\": \"1\", \"passed\": true}, {\"check\": \"ordered branches\", \"actual\": \"1 B\", \"expected\": \"1 B\", \"passed\": true}], \"passed\": false}\n"},"broken":{"elapsed_ms":41.05,"exit_code":1,"observations":[{"actual":"1 1","check":"self cycle","expected":"1","passed":false},{"actual":"A 1 A","check":"two node cycle","expected":"A 1","passed":false},{"actual":"B 1 C 1","check":"shared diamond","expected":"B 1 C 1","passed":true},{"actual":"","check":"missing root","expected":"","passed":true},{"actual":"1","check":"dangling branch","expected":"1","passed":true},{"actual":"1 B","check":"ordered branches","expected":"1 B","passed":true}],"passed":false,"stderr":"","stdout":"{\"observations\": [{\"check\": \"self cycle\", \"actual\": \"1 1\", \"expected\": \"1\", \"passed\": false}, {\"check\": \"two node cycle\", \"actual\": \"A 1 A\", \"expected\": \"A 1\", \"passed\": false}, {\"check\": \"shared diamond\", \"actual\": \"B 1 C 1\", \"expected\": \"B 1 C 1\", \"passed\": true}, {\"check\": \"missing root\", \"actual\": \"\", \"expected\": \"\", \"passed\": true}, {\"check\": \"dangling branch\", \"actual\": \"1\", \"expected\": \"1\", \"passed\": true}, {\"check\": \"ordered branches\", \"actual\": \"1 B\", \"expected\": \"1 B\", \"passed\": true}], \"passed\": false}\n"},"fixed":{"elapsed_ms":40.861,"exit_code":0,"observations":[{"actual":"1","check":"self cycle","expected":"1","passed":true},{"actual":"A 1","check":"two node cycle","expected":"A 1","passed":true},{"actual":"B 1 C 1","check":"shared diamond","expected":"B 1 C 1","passed":true},{"actual":"","check":"missing root","expected":"","passed":true},{"actual":"1","check":"dangling branch","expected":"1","passed":true},{"actual":"1 B","check":"ordered branches","expected":"1 B","passed":true}],"passed":true,"stderr":"","stdout":"{\"observations\": [{\"check\": \"self cycle\", \"actual\": \"1\", \"expected\": \"1\", \"passed\": true}, {\"check\": \"two node cycle\", \"actual\": \"A 1\", \"expected\": \"A 1\", \"passed\": true}, {\"check\": \"shared diamond\", \"actual\": \"B 1 C 1\", \"expected\": \"B 1 C 1\", \"passed\": true}, {\"check\": \"missing root\", \"actual\": \"\", \"expected\": \"\", \"passed\": true}, {\"check\": \"dangling branch\", \"actual\": \"1\", \"expected\": \"1\", \"passed\": true}, {\"check\": \"ordered branches\", \"actual\": \"1 B\", \"expected\": \"1 B\", \"passed\": true}], \"passed\": true}\n"}},"verified":true,"visibility":"public"}