{"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.","contract_signature":"events","evaluation_group":"s3-announcement-chunk-assembly","failed_approach":"The attempted repair substitutes ' '.join(pieces[i] for i in reversed(range(count))) and still violates a regression oracle.","family":"s3-assistive-announcements-chunk-assembly-join","id":"FA-20481","implementations":{"attempt":{"sha256":"25a965a1ef7ba03ca7812dbb3d1044f3034ee5503f91a6e6db7031d7a8c35793","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 reversed(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":"1bc5c5b58fca2e4f1c3535cdb4f2c1b8e5082888a62e2dff02cfba10985a347e","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-join","generated_at":"2026-09-29T14:40:19.434824+00:00","license":"CC0-1.0","python":"3.12.14","seed":1,"split":"open-access"},"relevance":"Deterministic controlled model of assistive announcement delivery.","root_cause":"Fault site: ' '.join(pieces[i] for i in range(count)) is implemented as ''.join(pieces[i] for i in range(count))","sha256":"3a1e8580b1b9640373c1d84f9600fe61ecd3469a2e4df0a1f18fe56a2aa9519f","title":"Chunk join glues spoken words together · 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":41.877,"exit_code":1,"observations":[{"actual":[["two one"],[],false],"check":"trace-1","expected":[["one two"],[],false],"passed":false},{"actual":[["end new"],[],false],"check":"trace-2","expected":[["new end"],[],false],"passed":false},{"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":false,"stderr":"","stdout":"{\"observations\": [{\"check\": \"trace-1\", \"actual\": [[\"two one\"], [], false], \"expected\": [[\"one two\"], [], false], \"passed\": false}, {\"check\": \"trace-2\", \"actual\": [[\"end new\"], [], false], \"expected\": [[\"new end\"], [], false], \"passed\": false}, {\"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\": false}\n"},"broken":{"elapsed_ms":42.59,"exit_code":1,"observations":[{"actual":[["onetwo"],[],false],"check":"trace-1","expected":[["one two"],[],false],"passed":false},{"actual":[["newend"],[],false],"check":"trace-2","expected":[["new end"],[],false],"passed":false},{"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":false,"stderr":"","stdout":"{\"observations\": [{\"check\": \"trace-1\", \"actual\": [[\"onetwo\"], [], false], \"expected\": [[\"one two\"], [], false], \"passed\": false}, {\"check\": \"trace-2\", \"actual\": [[\"newend\"], [], false], \"expected\": [[\"new end\"], [], false], \"passed\": false}, {\"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\": 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."}}