{"abstract":"The announcement trace violates the stated coalescing-window contract.","category":"Assistive announcements","checks":8,"contract":"Per-source announcements coalesce during an explicit tick window. First update opens [deadline=now+window,text,count]. Further updates replace text, increment count, and never slide deadline. Tick monotonically advances now and emits due sources by deadline then source insertion order as [source,text,count]. Force emits one source immediately. Cancel removes one source. Changing window affects future openings only. Return spoken, pending and now.","evaluation_group":"s3-announcement-coalescing-window","failed_approach":"The attempted repair substitutes else: pending[e[1]]=[now+window-1,e[2],1] and still violates a regression oracle.","family":"s3-assistive-announcements-coalescing-window-deadline-origin","id":"FA-20806","implementations":{"attempt":{"sha256":"2489b970f0f99cce08ce1d75d5058621772369402eb33d35a18a5c77bf9f43f5","source":"\"\"\"Failure Map reference implementation. Python standard library only.\"\"\"\nimport json\n\nN = 1\nobservations = []\ndef solve(events):\n    window=3; now=0; pending={}; spoken=[]\n    for e in events:\n        if e[0]=='window': window=max(1,e[1])\n        elif e[0]=='update':\n            if e[1] in pending:\n                pending[e[1]][1]=e[2]\n                pending[e[1]][2]+=1\n            else: pending[e[1]]=[now+window-1,e[2],1]\n        elif e[0]=='cancel': pending.pop(e[1],None)\n        elif e[0]=='force' and e[1] in pending:\n            row=pending.pop(e[1]); spoken.append([e[1],row[1],row[2]])\n        elif e[0]=='tick':\n            now=max(now,e[1])\n            ready=sorted([k for k,v in pending.items() if v[0]<=now],key=lambda k:pending[k][0])\n            for k in ready:\n                row=pending.pop(k)\n                spoken.append([k,row[1],row[2]])\n    return [spoken,[[k]+v for k,v in pending.items()],now]\ndef check(label, actual, expected):\n    observations.append({\"check\": label, \"actual\": actual, \"expected\": expected, \"passed\": actual == expected})\nfixtures = [\"[['window',N],['update','z','first'],['update','z','last'*N],['tick',N]]\", \"[['tick',N+3],['window',2],['update','a','x'*N]]\", \"[['tick',N+3],['window',2],['update','a','x'*N],['tick',N+4],['tick',N+5]]\", \"[['window',0],['update','a','x'*N],['tick',0]]\", \"[['update','a','first'*N],['update','b','keep'],['cancel','b']]\", \"[['update','a','x'],['update','a','y'*N],['force','a'],['tick',10]]\", \"[['window',1],['update','z','early'*N],['window',3],['update','a','late'],['tick',N+4],['tick',0]]\", '[]']\nexpected = {1: [[[['z', 'last', 2]], [], 1], [[], [['a', 6, 'x', 1]], 4], [[['a', 'x', 1]], [], 6], [[], [['a', 1, 'x', 1]], 0], [[], [['a', 3, 'first', 1]], 0], [[['a', 'y', 2]], [], 10], [[['z', 'early', 1], ['a', 'late', 1]], [], 5], [[], [], 0]], 2: [[[['z', 'lastlast', 2]], [], 2], [[], [['a', 7, 'xx', 1]], 5], [[['a', 'xx', 1]], [], 7], [[], [['a', 1, 'xx', 1]], 0], [[], [['a', 3, 'firstfirst', 1]], 0], [[['a', 'yy', 2]], [], 10], [[['z', 'earlyearly', 1], ['a', 'late', 1]], [], 6], [[], [], 0]], 3: [[[['z', 'lastlastlast', 2]], [], 3], [[], [['a', 8, 'xxx', 1]], 6], [[['a', 'xxx', 1]], [], 8], [[], [['a', 1, 'xxx', 1]], 0], [[], [['a', 3, 'firstfirstfirst', 1]], 0], [[['a', 'yyy', 2]], [], 10], [[['z', 'earlyearlyearly', 1], ['a', 'late', 1]], [], 7], [[], [], 0]], 4: [[[['z', 'lastlastlastlast', 2]], [], 4], [[], [['a', 9, 'xxxx', 1]], 7], [[['a', 'xxxx', 1]], [], 9], [[], [['a', 1, 'xxxx', 1]], 0], [[], [['a', 3, 'firstfirstfirstfirst', 1]], 0], [[['a', 'yyyy', 2]], [], 10], [[['z', 'earlyearlyearlyearly', 1], ['a', 'late', 1]], [], 8], [[], [], 0]], 5: [[[['z', 'lastlastlastlastlast', 2]], [], 5], [[], [['a', 10, 'xxxxx', 1]], 8], [[['a', 'xxxxx', 1]], [], 10], [[], [['a', 1, 'xxxxx', 1]], 0], [[], [['a', 3, 'firstfirstfirstfirstfirst', 1]], 0], [[['a', 'yyyyy', 2]], [], 10], [[['z', 'earlyearlyearlyearlyearly', 1], ['a', 'late', 1]], [], 9], [[], [], 0]]}[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":"ac6cdadc353aa48fdb091943329771b02040d4b0e72052b6c57d745c95c2e285","source":"\"\"\"Failure Map reference implementation. Python standard library only.\"\"\"\nimport json\n\nN = 1\nobservations = []\ndef solve(events):\n    window=3; now=0; pending={}; spoken=[]\n    for e in events:\n        if e[0]=='window': window=max(1,e[1])\n        elif e[0]=='update':\n            if e[1] in pending:\n                pending[e[1]][1]=e[2]\n                pending[e[1]][2]+=1\n            else: pending[e[1]]=[window,e[2],1]\n        elif e[0]=='cancel': pending.pop(e[1],None)\n        elif e[0]=='force' and e[1] in pending:\n            row=pending.pop(e[1]); spoken.append([e[1],row[1],row[2]])\n        elif e[0]=='tick':\n            now=max(now,e[1])\n            ready=sorted([k for k,v in pending.items() if v[0]<=now],key=lambda k:pending[k][0])\n            for k in ready:\n                row=pending.pop(k)\n                spoken.append([k,row[1],row[2]])\n    return [spoken,[[k]+v for k,v in pending.items()],now]\ndef check(label, actual, expected):\n    observations.append({\"check\": label, \"actual\": actual, \"expected\": expected, \"passed\": actual == expected})\nfixtures = [\"[['window',N],['update','z','first'],['update','z','last'*N],['tick',N]]\", \"[['tick',N+3],['window',2],['update','a','x'*N]]\", \"[['tick',N+3],['window',2],['update','a','x'*N],['tick',N+4],['tick',N+5]]\", \"[['window',0],['update','a','x'*N],['tick',0]]\", \"[['update','a','first'*N],['update','b','keep'],['cancel','b']]\", \"[['update','a','x'],['update','a','y'*N],['force','a'],['tick',10]]\", \"[['window',1],['update','z','early'*N],['window',3],['update','a','late'],['tick',N+4],['tick',0]]\", '[]']\nexpected = {1: [[[['z', 'last', 2]], [], 1], [[], [['a', 6, 'x', 1]], 4], [[['a', 'x', 1]], [], 6], [[], [['a', 1, 'x', 1]], 0], [[], [['a', 3, 'first', 1]], 0], [[['a', 'y', 2]], [], 10], [[['z', 'early', 1], ['a', 'late', 1]], [], 5], [[], [], 0]], 2: [[[['z', 'lastlast', 2]], [], 2], [[], [['a', 7, 'xx', 1]], 5], [[['a', 'xx', 1]], [], 7], [[], [['a', 1, 'xx', 1]], 0], [[], [['a', 3, 'firstfirst', 1]], 0], [[['a', 'yy', 2]], [], 10], [[['z', 'earlyearly', 1], ['a', 'late', 1]], [], 6], [[], [], 0]], 3: [[[['z', 'lastlastlast', 2]], [], 3], [[], [['a', 8, 'xxx', 1]], 6], [[['a', 'xxx', 1]], [], 8], [[], [['a', 1, 'xxx', 1]], 0], [[], [['a', 3, 'firstfirstfirst', 1]], 0], [[['a', 'yyy', 2]], [], 10], [[['z', 'earlyearlyearly', 1], ['a', 'late', 1]], [], 7], [[], [], 0]], 4: [[[['z', 'lastlastlastlast', 2]], [], 4], [[], [['a', 9, 'xxxx', 1]], 7], [[['a', 'xxxx', 1]], [], 9], [[], [['a', 1, 'xxxx', 1]], 0], [[], [['a', 3, 'firstfirstfirstfirst', 1]], 0], [[['a', 'yyyy', 2]], [], 10], [[['z', 'earlyearlyearlyearly', 1], ['a', 'late', 1]], [], 8], [[], [], 0]], 5: [[[['z', 'lastlastlastlastlast', 2]], [], 5], [[], [['a', 10, 'xxxxx', 1]], 8], [[['a', 'xxxxx', 1]], [], 10], [[], [['a', 1, 'xxxxx', 1]], 0], [[], [['a', 3, 'firstfirstfirstfirstfirst', 1]], 0], [[['a', 'yyyyy', 2]], [], 10], [[['z', 'earlyearlyearlyearlyearly', 1], ['a', 'late', 1]], [], 9], [[], [], 0]]}[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":"23aa7e960877a8056cc277834bf39c2b10a7d46462d8899ba4604a4cc4a22365","source":"\"\"\"Failure Map reference implementation. Python standard library only.\"\"\"\nimport json\n\nN = 1\nobservations = []\ndef solve(events):\n    window=3; now=0; pending={}; spoken=[]\n    for e in events:\n        if e[0]=='window': window=max(1,e[1])\n        elif e[0]=='update':\n            if e[1] in pending:\n                pending[e[1]][1]=e[2]\n                pending[e[1]][2]+=1\n            else: pending[e[1]]=[now+window,e[2],1]\n        elif e[0]=='cancel': pending.pop(e[1],None)\n        elif e[0]=='force' and e[1] in pending:\n            row=pending.pop(e[1]); spoken.append([e[1],row[1],row[2]])\n        elif e[0]=='tick':\n            now=max(now,e[1])\n            ready=sorted([k for k,v in pending.items() if v[0]<=now],key=lambda k:pending[k][0])\n            for k in ready:\n                row=pending.pop(k)\n                spoken.append([k,row[1],row[2]])\n    return [spoken,[[k]+v for k,v in pending.items()],now]\ndef check(label, actual, expected):\n    observations.append({\"check\": label, \"actual\": actual, \"expected\": expected, \"passed\": actual == expected})\nfixtures = [\"[['window',N],['update','z','first'],['update','z','last'*N],['tick',N]]\", \"[['tick',N+3],['window',2],['update','a','x'*N]]\", \"[['tick',N+3],['window',2],['update','a','x'*N],['tick',N+4],['tick',N+5]]\", \"[['window',0],['update','a','x'*N],['tick',0]]\", \"[['update','a','first'*N],['update','b','keep'],['cancel','b']]\", \"[['update','a','x'],['update','a','y'*N],['force','a'],['tick',10]]\", \"[['window',1],['update','z','early'*N],['window',3],['update','a','late'],['tick',N+4],['tick',0]]\", '[]']\nexpected = {1: [[[['z', 'last', 2]], [], 1], [[], [['a', 6, 'x', 1]], 4], [[['a', 'x', 1]], [], 6], [[], [['a', 1, 'x', 1]], 0], [[], [['a', 3, 'first', 1]], 0], [[['a', 'y', 2]], [], 10], [[['z', 'early', 1], ['a', 'late', 1]], [], 5], [[], [], 0]], 2: [[[['z', 'lastlast', 2]], [], 2], [[], [['a', 7, 'xx', 1]], 5], [[['a', 'xx', 1]], [], 7], [[], [['a', 1, 'xx', 1]], 0], [[], [['a', 3, 'firstfirst', 1]], 0], [[['a', 'yy', 2]], [], 10], [[['z', 'earlyearly', 1], ['a', 'late', 1]], [], 6], [[], [], 0]], 3: [[[['z', 'lastlastlast', 2]], [], 3], [[], [['a', 8, 'xxx', 1]], 6], [[['a', 'xxx', 1]], [], 8], [[], [['a', 1, 'xxx', 1]], 0], [[], [['a', 3, 'firstfirstfirst', 1]], 0], [[['a', 'yyy', 2]], [], 10], [[['z', 'earlyearlyearly', 1], ['a', 'late', 1]], [], 7], [[], [], 0]], 4: [[[['z', 'lastlastlastlast', 2]], [], 4], [[], [['a', 9, 'xxxx', 1]], 7], [[['a', 'xxxx', 1]], [], 9], [[], [['a', 1, 'xxxx', 1]], 0], [[], [['a', 3, 'firstfirstfirstfirst', 1]], 0], [[['a', 'yyyy', 2]], [], 10], [[['z', 'earlyearlyearlyearly', 1], ['a', 'late', 1]], [], 8], [[], [], 0]], 5: [[[['z', 'lastlastlastlastlast', 2]], [], 5], [[], [['a', 10, 'xxxxx', 1]], 8], [[['a', 'xxxxx', 1]], [], 10], [[], [['a', 1, 'xxxxx', 1]], 0], [[], [['a', 3, 'firstfirstfirstfirstfirst', 1]], 0], [[['a', 'yyyyy', 2]], [], 10], [[['z', 'earlyearlyearlyearlyearly', 1], ['a', 'late', 1]], [], 9], [[], [], 0]]}[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-coalescing-window-deadline-origin","generated_at":"2026-09-29T14:40:22.594375+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: else: pending[e[1]]=[now+window,e[2],1]","root_cause":"Fault site: else: pending[e[1]]=[now+window,e[2],1] is implemented as else: pending[e[1]]=[window,e[2],1]","sha256":"b9597282aa07c5f061f5a68a79f3255b8d8b82b236e3423836670224d9129586","title":"New burst deadline is relative to process zero · case 01","variant":1,"variant_policy":"Five numbered records share a model and may reuse boundary fixtures.","verification":{"attempt":{"elapsed_ms":42.212,"exit_code":1,"observations":[{"actual":[[["z","last",2]],[],1],"check":"trace-1","expected":[[["z","last",2]],[],1],"passed":true},{"actual":[[],[["a",5,"x",1]],4],"check":"trace-2","expected":[[],[["a",6,"x",1]],4],"passed":false},{"actual":[[["a","x",1]],[],6],"check":"trace-3","expected":[[["a","x",1]],[],6],"passed":true},{"actual":[[["a","x",1]],[],0],"check":"trace-4","expected":[[],[["a",1,"x",1]],0],"passed":false},{"actual":[[],[["a",2,"first",1]],0],"check":"trace-5","expected":[[],[["a",3,"first",1]],0],"passed":false},{"actual":[[["a","y",2]],[],10],"check":"trace-6","expected":[[["a","y",2]],[],10],"passed":true},{"actual":[[["z","early",1],["a","late",1]],[],5],"check":"trace-7","expected":[[["z","early",1],["a","late",1]],[],5],"passed":true},{"actual":[[],[],0],"check":"trace-8","expected":[[],[],0],"passed":true}],"passed":false,"stderr":"","stdout":"{\"observations\": [{\"check\": \"trace-1\", \"actual\": [[[\"z\", \"last\", 2]], [], 1], \"expected\": [[[\"z\", \"last\", 2]], [], 1], \"passed\": true}, {\"check\": \"trace-2\", \"actual\": [[], [[\"a\", 5, \"x\", 1]], 4], \"expected\": [[], [[\"a\", 6, \"x\", 1]], 4], \"passed\": false}, {\"check\": \"trace-3\", \"actual\": [[[\"a\", \"x\", 1]], [], 6], \"expected\": [[[\"a\", \"x\", 1]], [], 6], \"passed\": true}, {\"check\": \"trace-4\", \"actual\": [[[\"a\", \"x\", 1]], [], 0], \"expected\": [[], [[\"a\", 1, \"x\", 1]], 0], \"passed\": false}, {\"check\": \"trace-5\", \"actual\": [[], [[\"a\", 2, \"first\", 1]], 0], \"expected\": [[], [[\"a\", 3, \"first\", 1]], 0], \"passed\": false}, {\"check\": \"trace-6\", \"actual\": [[[\"a\", \"y\", 2]], [], 10], \"expected\": [[[\"a\", \"y\", 2]], [], 10], \"passed\": true}, {\"check\": \"trace-7\", \"actual\": [[[\"z\", \"early\", 1], [\"a\", \"late\", 1]], [], 5], \"expected\": [[[\"z\", \"early\", 1], [\"a\", \"late\", 1]], [], 5], \"passed\": true}, {\"check\": \"trace-8\", \"actual\": [[], [], 0], \"expected\": [[], [], 0], \"passed\": true}], \"passed\": false}\n"},"broken":{"elapsed_ms":50.429,"exit_code":1,"observations":[{"actual":[[["z","last",2]],[],1],"check":"trace-1","expected":[[["z","last",2]],[],1],"passed":true},{"actual":[[],[["a",2,"x",1]],4],"check":"trace-2","expected":[[],[["a",6,"x",1]],4],"passed":false},{"actual":[[["a","x",1]],[],6],"check":"trace-3","expected":[[["a","x",1]],[],6],"passed":true},{"actual":[[],[["a",1,"x",1]],0],"check":"trace-4","expected":[[],[["a",1,"x",1]],0],"passed":true},{"actual":[[],[["a",3,"first",1]],0],"check":"trace-5","expected":[[],[["a",3,"first",1]],0],"passed":true},{"actual":[[["a","y",2]],[],10],"check":"trace-6","expected":[[["a","y",2]],[],10],"passed":true},{"actual":[[["z","early",1],["a","late",1]],[],5],"check":"trace-7","expected":[[["z","early",1],["a","late",1]],[],5],"passed":true},{"actual":[[],[],0],"check":"trace-8","expected":[[],[],0],"passed":true}],"passed":false,"stderr":"","stdout":"{\"observations\": [{\"check\": \"trace-1\", \"actual\": [[[\"z\", \"last\", 2]], [], 1], \"expected\": [[[\"z\", \"last\", 2]], [], 1], \"passed\": true}, {\"check\": \"trace-2\", \"actual\": [[], [[\"a\", 2, \"x\", 1]], 4], \"expected\": [[], [[\"a\", 6, \"x\", 1]], 4], \"passed\": false}, {\"check\": \"trace-3\", \"actual\": [[[\"a\", \"x\", 1]], [], 6], \"expected\": [[[\"a\", \"x\", 1]], [], 6], \"passed\": true}, {\"check\": \"trace-4\", \"actual\": [[], [[\"a\", 1, \"x\", 1]], 0], \"expected\": [[], [[\"a\", 1, \"x\", 1]], 0], \"passed\": true}, {\"check\": \"trace-5\", \"actual\": [[], [[\"a\", 3, \"first\", 1]], 0], \"expected\": [[], [[\"a\", 3, \"first\", 1]], 0], \"passed\": true}, {\"check\": \"trace-6\", \"actual\": [[[\"a\", \"y\", 2]], [], 10], \"expected\": [[[\"a\", \"y\", 2]], [], 10], \"passed\": true}, {\"check\": \"trace-7\", \"actual\": [[[\"z\", \"early\", 1], [\"a\", \"late\", 1]], [], 5], \"expected\": [[[\"z\", \"early\", 1], [\"a\", \"late\", 1]], [], 5], \"passed\": true}, {\"check\": \"trace-8\", \"actual\": [[], [], 0], \"expected\": [[], [], 0], \"passed\": true}], \"passed\": false}\n"},"fixed":{"elapsed_ms":44.24,"exit_code":0,"observations":[{"actual":[[["z","last",2]],[],1],"check":"trace-1","expected":[[["z","last",2]],[],1],"passed":true},{"actual":[[],[["a",6,"x",1]],4],"check":"trace-2","expected":[[],[["a",6,"x",1]],4],"passed":true},{"actual":[[["a","x",1]],[],6],"check":"trace-3","expected":[[["a","x",1]],[],6],"passed":true},{"actual":[[],[["a",1,"x",1]],0],"check":"trace-4","expected":[[],[["a",1,"x",1]],0],"passed":true},{"actual":[[],[["a",3,"first",1]],0],"check":"trace-5","expected":[[],[["a",3,"first",1]],0],"passed":true},{"actual":[[["a","y",2]],[],10],"check":"trace-6","expected":[[["a","y",2]],[],10],"passed":true},{"actual":[[["z","early",1],["a","late",1]],[],5],"check":"trace-7","expected":[[["z","early",1],["a","late",1]],[],5],"passed":true},{"actual":[[],[],0],"check":"trace-8","expected":[[],[],0],"passed":true}],"passed":true,"stderr":"","stdout":"{\"observations\": [{\"check\": \"trace-1\", \"actual\": [[[\"z\", \"last\", 2]], [], 1], \"expected\": [[[\"z\", \"last\", 2]], [], 1], \"passed\": true}, {\"check\": \"trace-2\", \"actual\": [[], [[\"a\", 6, \"x\", 1]], 4], \"expected\": [[], [[\"a\", 6, \"x\", 1]], 4], \"passed\": true}, {\"check\": \"trace-3\", \"actual\": [[[\"a\", \"x\", 1]], [], 6], \"expected\": [[[\"a\", \"x\", 1]], [], 6], \"passed\": true}, {\"check\": \"trace-4\", \"actual\": [[], [[\"a\", 1, \"x\", 1]], 0], \"expected\": [[], [[\"a\", 1, \"x\", 1]], 0], \"passed\": true}, {\"check\": \"trace-5\", \"actual\": [[], [[\"a\", 3, \"first\", 1]], 0], \"expected\": [[], [[\"a\", 3, \"first\", 1]], 0], \"passed\": true}, {\"check\": \"trace-6\", \"actual\": [[[\"a\", \"y\", 2]], [], 10], \"expected\": [[[\"a\", \"y\", 2]], [], 10], \"passed\": true}, {\"check\": \"trace-7\", \"actual\": [[[\"z\", \"early\", 1], [\"a\", \"late\", 1]], [], 5], \"expected\": [[[\"z\", \"early\", 1], [\"a\", \"late\", 1]], [], 5], \"passed\": true}, {\"check\": \"trace-8\", \"actual\": [[], [], 0], \"expected\": [[], [], 0], \"passed\": true}], \"passed\": true}\n"}},"verified":true,"visibility":"public"}