{"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.","contract_signature":"events","evaluation_group":"s3-announcement-coalescing-window","failed_approach":"The attempted repair substitutes elif e[0]=='cancel': pending.pop(next(iter(pending)),None) if pending else None and still violates a regression oracle.","family":"s3-assistive-announcements-coalescing-window-cancel-scope","id":"FA-20811","implementations":{"attempt":{"sha256":"01a777a8af634136570dc805d430c011008f48f270a6b349a00ee37f4f2c8141","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(next(iter(pending)),None) if pending else 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":"23556378b23e2ee2fb30ee965c2ef7373e83d9adcb34db09e85b58f3857f335b","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.clear()\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-cancel-scope","generated_at":"2026-09-29T14:40:22.825258+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: elif e[0]=='cancel': pending.pop(e[1],None) is implemented as elif e[0]=='cancel': pending.clear()","sha256":"0d97cefeab9a6cb15ba75491f1a1cb6322b66748c3ffa32e7b94d6de8bf77b47","title":"Canceling one burst discards other sources · 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":45.623,"exit_code":1,"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":[[],[["b",3,"keep",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\", 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\": [[], [[\"b\", 3, \"keep\", 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":48.624,"exit_code":1,"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":[[],[],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\", 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\": [[], [], 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"}},"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."}}