{"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 count=1 if e[1] else 0 and still violates a regression oracle.","family":"s3-assistive-announcements-chunk-assembly-declared-count","id":"FA-20441","implementations":{"attempt":{"sha256":"ff78371e1ba2c92ff46b0a9b5e6df4346e02bce662c162df0edc5d78a7b2230f","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=1 if e[1] else 0\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"},"broken":{"sha256":"81fd4dc34d02f64835f0125f218c9e845ff64b3fcfd415f242cd3c12118f5115","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=max(0,e[1]-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-declared-count","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: count=e[1] is implemented as count=max(0,e[1]-1)","sha256":"c75b5d650e525e55d6f5104e4a9819e7ea649c689140c26ad901a3ce2279e904","title":"Assembler silently shortens the declared speech chunk count · 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":40.947,"exit_code":1,"observations":[{"actual":[["one"],[],false],"check":"trace-1","expected":[["one two"],[],false],"passed":false},{"actual":[["new"],[],false],"check":"trace-2","expected":[["new end"],[],false],"passed":false},{"actual":[["fresh"],[],false],"check":"trace-3","expected":[[],[0],true],"passed":false},{"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":[["partial"],[],false],"check":"trace-8","expected":[[],[0],true],"passed":false}],"passed":false,"stderr":"","stdout":"{\"observations\": [{\"check\": \"trace-1\", \"actual\": [[\"one\"], [], false], \"expected\": [[\"one two\"], [], false], \"passed\": false}, {\"check\": \"trace-2\", \"actual\": [[\"new\"], [], false], \"expected\": [[\"new end\"], [], false], \"passed\": false}, {\"check\": \"trace-3\", \"actual\": [[\"fresh\"], [], false], \"expected\": [[], [0], true], \"passed\": false}, {\"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\": [[\"partial\"], [], false], \"expected\": [[], [0], true], \"passed\": false}], \"passed\": false}\n"},"broken":{"elapsed_ms":45.888,"exit_code":1,"observations":[{"actual":[["one"],[],false],"check":"trace-1","expected":[["one two"],[],false],"passed":false},{"actual":[["new"],[],false],"check":"trace-2","expected":[["new end"],[],false],"passed":false},{"actual":[["fresh"],[],false],"check":"trace-3","expected":[[],[0],true],"passed":false},{"actual":[[],[],false],"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":[[],[],false],"check":"trace-7","expected":[["x"],[],false],"passed":false},{"actual":[["partial"],[],false],"check":"trace-8","expected":[[],[0],true],"passed":false}],"passed":false,"stderr":"","stdout":"{\"observations\": [{\"check\": \"trace-1\", \"actual\": [[\"one\"], [], false], \"expected\": [[\"one two\"], [], false], \"passed\": false}, {\"check\": \"trace-2\", \"actual\": [[\"new\"], [], false], \"expected\": [[\"new end\"], [], false], \"passed\": false}, {\"check\": \"trace-3\", \"actual\": [[\"fresh\"], [], false], \"expected\": [[], [0], true], \"passed\": false}, {\"check\": \"trace-4\", \"actual\": [[], [], false], \"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\": [[], [], false], \"expected\": [[\"x\"], [], false], \"passed\": false}, {\"check\": \"trace-8\", \"actual\": [[\"partial\"], [], false], \"expected\": [[], [0], true], \"passed\": false}], \"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."}}