{"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 if len(pieces)!=count or count==1: continue and still violates a regression oracle.","family":"s3-assistive-announcements-chunk-assembly-completeness","id":"FA-20476","implementations":{"attempt":{"sha256":"c6a00379d1d65b4a55d88533e4217dcbc3bd24e10129ff980831b656d72d98c0","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 or count==1: 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":"20d842223087083b71ecd17ae682597b377ef03612cfebe7551d8d6b404813c3","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 or count>0: 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-completeness","generated_at":"2026-09-29T14:40:19.296858+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: if len(pieces)!=count: continue","root_cause":"Fault site: if len(pieces)!=count: continue is implemented as if len(pieces)!=count or count>0: continue","sha256":"035210b829620c63a0e6420edfaae413333ee0d43009cbe3973c0c95831dc592","title":"Complete utterance is incorrectly retained as incomplete · case 01","variant":1,"variant_policy":"Five numbered records share a model and may reuse boundary fixtures.","verification":{"attempt":{"elapsed_ms":42.984,"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":[[],[0],true],"check":"trace-4","expected":[["inside"],[],false],"passed":false},{"actual":[[],[],false],"check":"trace-5","expected":[[],[],false],"passed":true},{"actual":[[],[],false],"check":"trace-6","expected":[[],[],false],"passed":true},{"actual":[[],[0],true],"check":"trace-7","expected":[["x"],[],false],"passed":false},{"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\": [[], [0], true], \"expected\": [[\"inside\"], [], false], \"passed\": false}, {\"check\": \"trace-5\", \"actual\": [[], [], false], \"expected\": [[], [], false], \"passed\": true}, {\"check\": \"trace-6\", \"actual\": [[], [], false], \"expected\": [[], [], false], \"passed\": true}, {\"check\": \"trace-7\", \"actual\": [[], [0], true], \"expected\": [[\"x\"], [], false], \"passed\": false}, {\"check\": \"trace-8\", \"actual\": [[], [0], true], \"expected\": [[], [0], true], \"passed\": true}], \"passed\": false}\n"},"broken":{"elapsed_ms":44.232,"exit_code":1,"observations":[{"actual":[[],[0,1],true],"check":"trace-1","expected":[["one two"],[],false],"passed":false},{"actual":[[],[0,1],true],"check":"trace-2","expected":[["new end"],[],false],"passed":false},{"actual":[[],[0],true],"check":"trace-3","expected":[[],[0],true],"passed":true},{"actual":[[],[0],true],"check":"trace-4","expected":[["inside"],[],false],"passed":false},{"actual":[[],[],false],"check":"trace-5","expected":[[],[],false],"passed":true},{"actual":[[],[],false],"check":"trace-6","expected":[[],[],false],"passed":true},{"actual":[[],[0],true],"check":"trace-7","expected":[["x"],[],false],"passed":false},{"actual":[[],[0],true],"check":"trace-8","expected":[[],[0],true],"passed":true}],"passed":false,"stderr":"","stdout":"{\"observations\": [{\"check\": \"trace-1\", \"actual\": [[], [0, 1], true], \"expected\": [[\"one two\"], [], false], \"passed\": false}, {\"check\": \"trace-2\", \"actual\": [[], [0, 1], true], \"expected\": [[\"new end\"], [], false], \"passed\": false}, {\"check\": \"trace-3\", \"actual\": [[], [0], true], \"expected\": [[], [0], true], \"passed\": true}, {\"check\": \"trace-4\", \"actual\": [[], [0], true], \"expected\": [[\"inside\"], [], false], \"passed\": false}, {\"check\": \"trace-5\", \"actual\": [[], [], false], \"expected\": [[], [], false], \"passed\": true}, {\"check\": \"trace-6\", \"actual\": [[], [], false], \"expected\": [[], [], false], \"passed\": true}, {\"check\": \"trace-7\", \"actual\": [[], [0], true], \"expected\": [[\"x\"], [], false], \"passed\": false}, {\"check\": \"trace-8\", \"actual\": [[], [0], true], \"expected\": [[], [0], true], \"passed\": true}], \"passed\": false}\n"},"fixed":{"elapsed_ms":41.559,"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"}