{"abstract":"The announcement trace violates the stated chunk-assembly contract.","category":"Assistive announcements","checks":8,"contract":"Utterance chunks carry a sequence index. Begin sets expected count and clears previous chunks. Put accepts only in-range indices; last write wins. Seal emits only a contiguous complete set, in index order, joined by spaces. A successful seal clears pieces and closes the assembly. Cancel closes without speech; reopen starts a new assembly. Report emitted strings and pending indices.","evaluation_group":"s3-announcement-chunk-assembly","failed_approach":"The attempted repair substitutes elif e[0]=='cancel': pieces.clear() and still violates a regression oracle.","family":"s3-assistive-announcements-chunk-assembly-cancel-close","id":"FA-20471","implementations":{"attempt":{"sha256":"2725b00eaa430dc4efc8e85d9fd1059a9c6719f7824153a67c30ee3f5debafba","source":"\"\"\"Failure Map reference implementation. Python standard library only.\"\"\"\nimport json\n\nN = 1\nobservations = []\ndef solve(events):\n    count=0; pieces={}; opened=False; spoken=[]\n    for e in events:\n        if e[0]=='begin':\n            count=e[1]\n            pieces.clear()\n            opened=True\n        elif e[0]=='put':\n            if not opened: continue\n            if not 0<=e[1]<count: continue\n            pieces[e[1]]=e[2]\n        elif e[0]=='cancel': pieces.clear()\n        elif e[0]=='seal':\n            if not opened: continue\n            if len(pieces)!=count: continue\n            if count: spoken.append(' '.join(pieces[i] for i in range(count)))\n            pieces.clear(); opened=False\n    return [spoken, sorted(pieces), opened]\ndef check(label, actual, expected):\n    observations.append({\"check\": label, \"actual\": actual, \"expected\": expected, \"passed\": actual == expected})\nfixtures = [\"[['begin',2],['put',1,'two'*N],['put',0,'one'],['seal'],['seal']]\", \"[['begin',2],['put',0,'old'],['put',0,'new'*N],['put',1,'end'],['seal']]\", \"[['begin',2],['put',1,'old'],['begin',2],['put',0,'fresh'*N],['seal']]\", \"[['begin',1],['put',1,'outside'*N],['put',0,'inside'],['seal']]\", \"[['begin',N],['put',0,'x'],['cancel'],['put',0,'late']]\", \"[['begin',0],['seal'],['seal']]\", \"[['begin',1],['put',0,'x'*N],['seal']]\", \"[['begin',2],['put',0,'partial'*N],['seal']]\"]\nexpected = {1: [[['one two'], [], False], [['new end'], [], False], [[], [0], True], [['inside'], [], False], [[], [], False], [[], [], False], [['x'], [], False], [[], [0], True]], 2: [[['one twotwo'], [], False], [['newnew end'], [], False], [[], [0], True], [['inside'], [], False], [[], [], False], [[], [], False], [['xx'], [], False], [[], [0], True]], 3: [[['one twotwotwo'], [], False], [['newnewnew end'], [], False], [[], [0], True], [['inside'], [], False], [[], [], False], [[], [], False], [['xxx'], [], False], [[], [0], True]], 4: [[['one twotwotwotwo'], [], False], [['newnewnewnew end'], [], False], [[], [0], True], [['inside'], [], False], [[], [], False], [[], [], False], [['xxxx'], [], False], [[], [0], True]], 5: [[['one twotwotwotwotwo'], [], False], [['newnewnewnewnew end'], [], False], [[], [0], True], [['inside'], [], False], [[], [], False], [[], [], False], [['xxxxx'], [], False], [[], [0], True]]}[N]\nfor i, expression in enumerate(fixtures):\n    check(\"trace-\"+str(i+1), solve(eval(expression)), expected[i])\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":"d4b34bdb174ec992649676c9be698aca5f7c403ff7a9e5f49319e9012c6ffd41","source":"\"\"\"Failure Map reference implementation. Python standard library only.\"\"\"\nimport json\n\nN = 1\nobservations = []\ndef solve(events):\n    count=0; pieces={}; opened=False; spoken=[]\n    for e in events:\n        if e[0]=='begin':\n            count=e[1]\n            pieces.clear()\n            opened=True\n        elif e[0]=='put':\n            if not opened: continue\n            if not 0<=e[1]<count: continue\n            pieces[e[1]]=e[2]\n        elif e[0]=='cancel': opened=False\n        elif e[0]=='seal':\n            if not opened: continue\n            if len(pieces)!=count: continue\n            if count: spoken.append(' '.join(pieces[i] for i in range(count)))\n            pieces.clear(); opened=False\n    return [spoken, sorted(pieces), opened]\ndef check(label, actual, expected):\n    observations.append({\"check\": label, \"actual\": actual, \"expected\": expected, \"passed\": actual == expected})\nfixtures = [\"[['begin',2],['put',1,'two'*N],['put',0,'one'],['seal'],['seal']]\", \"[['begin',2],['put',0,'old'],['put',0,'new'*N],['put',1,'end'],['seal']]\", \"[['begin',2],['put',1,'old'],['begin',2],['put',0,'fresh'*N],['seal']]\", \"[['begin',1],['put',1,'outside'*N],['put',0,'inside'],['seal']]\", \"[['begin',N],['put',0,'x'],['cancel'],['put',0,'late']]\", \"[['begin',0],['seal'],['seal']]\", \"[['begin',1],['put',0,'x'*N],['seal']]\", \"[['begin',2],['put',0,'partial'*N],['seal']]\"]\nexpected = {1: [[['one two'], [], False], [['new end'], [], False], [[], [0], True], [['inside'], [], False], [[], [], False], [[], [], False], [['x'], [], False], [[], [0], True]], 2: [[['one twotwo'], [], False], [['newnew end'], [], False], [[], [0], True], [['inside'], [], False], [[], [], False], [[], [], False], [['xx'], [], False], [[], [0], True]], 3: [[['one twotwotwo'], [], False], [['newnewnew end'], [], False], [[], [0], True], [['inside'], [], False], [[], [], False], [[], [], False], [['xxx'], [], False], [[], [0], True]], 4: [[['one twotwotwotwo'], [], False], [['newnewnewnew end'], [], False], [[], [0], True], [['inside'], [], False], [[], [], False], [[], [], False], [['xxxx'], [], False], [[], [0], True]], 5: [[['one twotwotwotwotwo'], [], False], [['newnewnewnewnew end'], [], False], [[], [0], True], [['inside'], [], False], [[], [], False], [[], [], False], [['xxxxx'], [], False], [[], [0], True]]}[N]\nfor i, expression in enumerate(fixtures):\n    check(\"trace-\"+str(i+1), solve(eval(expression)), expected[i])\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":"487859558e9ea4f960034fbbe63d30f2c3627975329046abbffd800b5318da5f","source":"\"\"\"Failure Map reference implementation. Python standard library only.\"\"\"\nimport json\n\nN = 1\nobservations = []\ndef solve(events):\n    count=0; pieces={}; opened=False; spoken=[]\n    for e in events:\n        if e[0]=='begin':\n            count=e[1]\n            pieces.clear()\n            opened=True\n        elif e[0]=='put':\n            if not opened: continue\n            if not 0<=e[1]<count: continue\n            pieces[e[1]]=e[2]\n        elif e[0]=='cancel': pieces.clear(); opened=False\n        elif e[0]=='seal':\n            if not opened: continue\n            if len(pieces)!=count: continue\n            if count: spoken.append(' '.join(pieces[i] for i in range(count)))\n            pieces.clear(); opened=False\n    return [spoken, sorted(pieces), opened]\ndef check(label, actual, expected):\n    observations.append({\"check\": label, \"actual\": actual, \"expected\": expected, \"passed\": actual == expected})\nfixtures = [\"[['begin',2],['put',1,'two'*N],['put',0,'one'],['seal'],['seal']]\", \"[['begin',2],['put',0,'old'],['put',0,'new'*N],['put',1,'end'],['seal']]\", \"[['begin',2],['put',1,'old'],['begin',2],['put',0,'fresh'*N],['seal']]\", \"[['begin',1],['put',1,'outside'*N],['put',0,'inside'],['seal']]\", \"[['begin',N],['put',0,'x'],['cancel'],['put',0,'late']]\", \"[['begin',0],['seal'],['seal']]\", \"[['begin',1],['put',0,'x'*N],['seal']]\", \"[['begin',2],['put',0,'partial'*N],['seal']]\"]\nexpected = {1: [[['one two'], [], False], [['new end'], [], False], [[], [0], True], [['inside'], [], False], [[], [], False], [[], [], False], [['x'], [], False], [[], [0], True]], 2: [[['one twotwo'], [], False], [['newnew end'], [], False], [[], [0], True], [['inside'], [], False], [[], [], False], [[], [], False], [['xx'], [], False], [[], [0], True]], 3: [[['one twotwotwo'], [], False], [['newnewnew end'], [], False], [[], [0], True], [['inside'], [], False], [[], [], False], [[], [], False], [['xxx'], [], False], [[], [0], True]], 4: [[['one twotwotwotwo'], [], False], [['newnewnewnew end'], [], False], [[], [0], True], [['inside'], [], False], [[], [], False], [[], [], False], [['xxxx'], [], False], [[], [0], True]], 5: [[['one twotwotwotwotwo'], [], False], [['newnewnewnewnew end'], [], False], [[], [0], True], [['inside'], [], False], [[], [], False], [[], [], False], [['xxxxx'], [], False], [[], [0], True]]}[N]\nfor i, expression in enumerate(fixtures):\n    check(\"trace-\"+str(i+1), solve(eval(expression)), expected[i])\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 bounded policy, not a browser, speech engine, platform API, or standards conformance claim. 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-assistive-announcements-chunk-assembly-cancel-close","generated_at":"2026-09-29T14:40:19.250420+00:00","license":"CC0-1.0","python":"3.12.14","seed":1,"split":"open-access"},"relevance":"Deterministic controlled model of assistive announcement delivery.","repair":"Restore the stated transition: elif e[0]=='cancel': pieces.clear(); opened=False","root_cause":"Fault site: elif e[0]=='cancel': pieces.clear(); opened=False is implemented as elif e[0]=='cancel': opened=False","sha256":"223408340e91b81924858ade1a32db8965191b876d2fcdbac68a7b1a157ce5b9","title":"Cancel retains a live chunk assembly · case 01","variant":1,"variant_policy":"Five numbered records share a model and may reuse boundary fixtures.","verification":{"attempt":{"elapsed_ms":44.541,"exit_code":1,"observations":[{"actual":[["one two"],[],false],"check":"trace-1","expected":[["one two"],[],false],"passed":true},{"actual":[["new end"],[],false],"check":"trace-2","expected":[["new end"],[],false],"passed":true},{"actual":[[],[0],true],"check":"trace-3","expected":[[],[0],true],"passed":true},{"actual":[["inside"],[],false],"check":"trace-4","expected":[["inside"],[],false],"passed":true},{"actual":[[],[0],true],"check":"trace-5","expected":[[],[],false],"passed":false},{"actual":[[],[],false],"check":"trace-6","expected":[[],[],false],"passed":true},{"actual":[["x"],[],false],"check":"trace-7","expected":[["x"],[],false],"passed":true},{"actual":[[],[0],true],"check":"trace-8","expected":[[],[0],true],"passed":true}],"passed":false,"stderr":"","stdout":"{\"observations\": [{\"check\": \"trace-1\", \"actual\": [[\"one two\"], [], false], \"expected\": [[\"one two\"], [], false], \"passed\": true}, {\"check\": \"trace-2\", \"actual\": [[\"new end\"], [], false], \"expected\": [[\"new end\"], [], false], \"passed\": true}, {\"check\": \"trace-3\", \"actual\": [[], [0], true], \"expected\": [[], [0], true], \"passed\": true}, {\"check\": \"trace-4\", \"actual\": [[\"inside\"], [], false], \"expected\": [[\"inside\"], [], false], \"passed\": true}, {\"check\": \"trace-5\", \"actual\": [[], [0], true], \"expected\": [[], [], false], \"passed\": false}, {\"check\": \"trace-6\", \"actual\": [[], [], false], \"expected\": [[], [], false], \"passed\": true}, {\"check\": \"trace-7\", \"actual\": [[\"x\"], [], false], \"expected\": [[\"x\"], [], false], \"passed\": true}, {\"check\": \"trace-8\", \"actual\": [[], [0], true], \"expected\": [[], [0], true], \"passed\": true}], \"passed\": false}\n"},"broken":{"elapsed_ms":43.207,"exit_code":1,"observations":[{"actual":[["one two"],[],false],"check":"trace-1","expected":[["one two"],[],false],"passed":true},{"actual":[["new end"],[],false],"check":"trace-2","expected":[["new end"],[],false],"passed":true},{"actual":[[],[0],true],"check":"trace-3","expected":[[],[0],true],"passed":true},{"actual":[["inside"],[],false],"check":"trace-4","expected":[["inside"],[],false],"passed":true},{"actual":[[],[0],false],"check":"trace-5","expected":[[],[],false],"passed":false},{"actual":[[],[],false],"check":"trace-6","expected":[[],[],false],"passed":true},{"actual":[["x"],[],false],"check":"trace-7","expected":[["x"],[],false],"passed":true},{"actual":[[],[0],true],"check":"trace-8","expected":[[],[0],true],"passed":true}],"passed":false,"stderr":"","stdout":"{\"observations\": [{\"check\": \"trace-1\", \"actual\": [[\"one two\"], [], false], \"expected\": [[\"one two\"], [], false], \"passed\": true}, {\"check\": \"trace-2\", \"actual\": [[\"new end\"], [], false], \"expected\": [[\"new end\"], [], false], \"passed\": true}, {\"check\": \"trace-3\", \"actual\": [[], [0], true], \"expected\": [[], [0], true], \"passed\": true}, {\"check\": \"trace-4\", \"actual\": [[\"inside\"], [], false], \"expected\": [[\"inside\"], [], false], \"passed\": true}, {\"check\": \"trace-5\", \"actual\": [[], [0], false], \"expected\": [[], [], false], \"passed\": false}, {\"check\": \"trace-6\", \"actual\": [[], [], false], \"expected\": [[], [], false], \"passed\": true}, {\"check\": \"trace-7\", \"actual\": [[\"x\"], [], false], \"expected\": [[\"x\"], [], false], \"passed\": true}, {\"check\": \"trace-8\", \"actual\": [[], [0], true], \"expected\": [[], [0], true], \"passed\": true}], \"passed\": false}\n"},"fixed":{"elapsed_ms":41.778,"exit_code":0,"observations":[{"actual":[["one two"],[],false],"check":"trace-1","expected":[["one two"],[],false],"passed":true},{"actual":[["new end"],[],false],"check":"trace-2","expected":[["new end"],[],false],"passed":true},{"actual":[[],[0],true],"check":"trace-3","expected":[[],[0],true],"passed":true},{"actual":[["inside"],[],false],"check":"trace-4","expected":[["inside"],[],false],"passed":true},{"actual":[[],[],false],"check":"trace-5","expected":[[],[],false],"passed":true},{"actual":[[],[],false],"check":"trace-6","expected":[[],[],false],"passed":true},{"actual":[["x"],[],false],"check":"trace-7","expected":[["x"],[],false],"passed":true},{"actual":[[],[0],true],"check":"trace-8","expected":[[],[0],true],"passed":true}],"passed":true,"stderr":"","stdout":"{\"observations\": [{\"check\": \"trace-1\", \"actual\": [[\"one two\"], [], false], \"expected\": [[\"one two\"], [], false], \"passed\": true}, {\"check\": \"trace-2\", \"actual\": [[\"new end\"], [], false], \"expected\": [[\"new end\"], [], false], \"passed\": true}, {\"check\": \"trace-3\", \"actual\": [[], [0], true], \"expected\": [[], [0], true], \"passed\": true}, {\"check\": \"trace-4\", \"actual\": [[\"inside\"], [], false], \"expected\": [[\"inside\"], [], false], \"passed\": true}, {\"check\": \"trace-5\", \"actual\": [[], [], false], \"expected\": [[], [], false], \"passed\": true}, {\"check\": \"trace-6\", \"actual\": [[], [], false], \"expected\": [[], [], false], \"passed\": true}, {\"check\": \"trace-7\", \"actual\": [[\"x\"], [], false], \"expected\": [[\"x\"], [], false], \"passed\": true}, {\"check\": \"trace-8\", \"actual\": [[], [0], true], \"expected\": [[], [0], true], \"passed\": true}], \"passed\": true}\n"}},"verified":true,"visibility":"public"}