{"abstract":"The announcement trace violates the stated deadline-scheduler contract.","category":"Assistive announcements","checks":10,"contract":"Enqueue [id,text,ready,expiry,priority]. Cancel removes all matching IDs. Tick sets monotonic clock; dispatch at most one eligible unexpired item, highest priority then earliest enqueue. Expiry is exclusive. Future items remain. Expired items are purged even without ready work. Successful dispatch removes precisely that entry. Clock reset clears queue. Report spoken IDs/text, pending IDs and clock.","evaluation_group":"s3-announcement-deadline-scheduler","failed_approach":"The attempted repair substitutes q.pop(0) and still violates a regression oracle.","family":"s3-assistive-announcements-deadline-scheduler-dequeue","id":"FA-20636","implementations":{"attempt":{"sha256":"0f78f78691ff6adf558b0e770c4c1806403431861e52209e46570c6fb55a1f88","source":"\"\"\"Failure Map reference implementation. Python standard library only.\"\"\"\nimport json\n\nN = 1\nobservations = []\ndef solve(events):\n    q=[]; spoken=[]; now=0; seq=0\n    for e in events:\n        if e[0]=='enqueue':\n            seq+=1\n            q.append([e[1],e[2],e[3],e[4],e[5],seq])\n        elif e[0]=='cancel': q=[x for x in q if x[0]!=e[1]]\n        elif e[0]=='reset': now=0; q.clear()\n        elif e[0]=='tick':\n            now=max(now,e[1])\n            q=[x for x in q if x[3]>now]\n            eligible=[x for x in q if x[2]<=now]\n            if eligible:\n                chosen=min(eligible,key=lambda x:(-x[4],x[5]))\n                spoken.append(chosen[:2])\n                q.pop(0)\n    return [spoken,[x[0] for x in q],now]\ndef check(label, actual, expected):\n    observations.append({\"check\": label, \"actual\": actual, \"expected\": expected, \"passed\": actual == expected})\nfixtures = [\"[['enqueue','a','a'*N,0,100,1],['enqueue','b','b'*N,0,100,3],['enqueue','c','c',0,100,3],['tick',N],['tick',N],['tick',N]]\", \"[['enqueue','a','wait'*N,N+1,N+5,1],['tick',N]]\", \"[['enqueue','a','wait'*N,N+1,N+5,1],['tick',N],['tick',N+1]]\", \"[['enqueue','a','expired'*N,0,N,1],['tick',N]]\", \"[['enqueue','a','gone',0,100,1],['enqueue','b','keep'*N,0,100,2],['cancel','missing'],['cancel','a'],['tick',N]]\", \"[['tick',N+5],['tick',N]]\", \"[['tick',N+5],['tick',N],['enqueue','a','old',0,100,1],['reset']]\", '[]', \"[['enqueue','r','first',N,100,1],['enqueue','s','second',0,100,1],['tick',N]]\", \"[['enqueue','z','first',0,100,1],['enqueue','a','second'*N,0,100,1],['tick',N]]\"]\nexpected = {1: [[[['b', 'b'], ['c', 'c'], ['a', 'a']], [], 1], [[], ['a'], 1], [[['a', 'wait']], [], 2], [[], [], 1], [[['b', 'keep']], [], 1], [[], [], 6], [[], [], 0], [[], [], 0], [[['r', 'first']], ['s'], 1], [[['z', 'first']], ['a'], 1]], 2: [[[['b', 'bb'], ['c', 'c'], ['a', 'aa']], [], 2], [[], ['a'], 2], [[['a', 'waitwait']], [], 3], [[], [], 2], [[['b', 'keepkeep']], [], 2], [[], [], 7], [[], [], 0], [[], [], 0], [[['r', 'first']], ['s'], 2], [[['z', 'first']], ['a'], 2]], 3: [[[['b', 'bbb'], ['c', 'c'], ['a', 'aaa']], [], 3], [[], ['a'], 3], [[['a', 'waitwaitwait']], [], 4], [[], [], 3], [[['b', 'keepkeepkeep']], [], 3], [[], [], 8], [[], [], 0], [[], [], 0], [[['r', 'first']], ['s'], 3], [[['z', 'first']], ['a'], 3]], 4: [[[['b', 'bbbb'], ['c', 'c'], ['a', 'aaaa']], [], 4], [[], ['a'], 4], [[['a', 'waitwaitwaitwait']], [], 5], [[], [], 4], [[['b', 'keepkeepkeepkeep']], [], 4], [[], [], 9], [[], [], 0], [[], [], 0], [[['r', 'first']], ['s'], 4], [[['z', 'first']], ['a'], 4]], 5: [[[['b', 'bbbbb'], ['c', 'c'], ['a', 'aaaaa']], [], 5], [[], ['a'], 5], [[['a', 'waitwaitwaitwaitwait']], [], 6], [[], [], 5], [[['b', 'keepkeepkeepkeepkeep']], [], 5], [[], [], 10], [[], [], 0], [[], [], 0], [[['r', 'first']], ['s'], 5], [[['z', 'first']], ['a'], 5]]}[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":"7f04d5ddf24c1d8bc3901347b35088a4714254d536fa206e94ff853d529fcc9a","source":"\"\"\"Failure Map reference implementation. Python standard library only.\"\"\"\nimport json\n\nN = 1\nobservations = []\ndef solve(events):\n    q=[]; spoken=[]; now=0; seq=0\n    for e in events:\n        if e[0]=='enqueue':\n            seq+=1\n            q.append([e[1],e[2],e[3],e[4],e[5],seq])\n        elif e[0]=='cancel': q=[x for x in q if x[0]!=e[1]]\n        elif e[0]=='reset': now=0; q.clear()\n        elif e[0]=='tick':\n            now=max(now,e[1])\n            q=[x for x in q if x[3]>now]\n            eligible=[x for x in q if x[2]<=now]\n            if eligible:\n                chosen=min(eligible,key=lambda x:(-x[4],x[5]))\n                spoken.append(chosen[:2])\n                pass\n    return [spoken,[x[0] for x in q],now]\ndef check(label, actual, expected):\n    observations.append({\"check\": label, \"actual\": actual, \"expected\": expected, \"passed\": actual == expected})\nfixtures = [\"[['enqueue','a','a'*N,0,100,1],['enqueue','b','b'*N,0,100,3],['enqueue','c','c',0,100,3],['tick',N],['tick',N],['tick',N]]\", \"[['enqueue','a','wait'*N,N+1,N+5,1],['tick',N]]\", \"[['enqueue','a','wait'*N,N+1,N+5,1],['tick',N],['tick',N+1]]\", \"[['enqueue','a','expired'*N,0,N,1],['tick',N]]\", \"[['enqueue','a','gone',0,100,1],['enqueue','b','keep'*N,0,100,2],['cancel','missing'],['cancel','a'],['tick',N]]\", \"[['tick',N+5],['tick',N]]\", \"[['tick',N+5],['tick',N],['enqueue','a','old',0,100,1],['reset']]\", '[]', \"[['enqueue','r','first',N,100,1],['enqueue','s','second',0,100,1],['tick',N]]\", \"[['enqueue','z','first',0,100,1],['enqueue','a','second'*N,0,100,1],['tick',N]]\"]\nexpected = {1: [[[['b', 'b'], ['c', 'c'], ['a', 'a']], [], 1], [[], ['a'], 1], [[['a', 'wait']], [], 2], [[], [], 1], [[['b', 'keep']], [], 1], [[], [], 6], [[], [], 0], [[], [], 0], [[['r', 'first']], ['s'], 1], [[['z', 'first']], ['a'], 1]], 2: [[[['b', 'bb'], ['c', 'c'], ['a', 'aa']], [], 2], [[], ['a'], 2], [[['a', 'waitwait']], [], 3], [[], [], 2], [[['b', 'keepkeep']], [], 2], [[], [], 7], [[], [], 0], [[], [], 0], [[['r', 'first']], ['s'], 2], [[['z', 'first']], ['a'], 2]], 3: [[[['b', 'bbb'], ['c', 'c'], ['a', 'aaa']], [], 3], [[], ['a'], 3], [[['a', 'waitwaitwait']], [], 4], [[], [], 3], [[['b', 'keepkeepkeep']], [], 3], [[], [], 8], [[], [], 0], [[], [], 0], [[['r', 'first']], ['s'], 3], [[['z', 'first']], ['a'], 3]], 4: [[[['b', 'bbbb'], ['c', 'c'], ['a', 'aaaa']], [], 4], [[], ['a'], 4], [[['a', 'waitwaitwaitwait']], [], 5], [[], [], 4], [[['b', 'keepkeepkeepkeep']], [], 4], [[], [], 9], [[], [], 0], [[], [], 0], [[['r', 'first']], ['s'], 4], [[['z', 'first']], ['a'], 4]], 5: [[[['b', 'bbbbb'], ['c', 'c'], ['a', 'aaaaa']], [], 5], [[], ['a'], 5], [[['a', 'waitwaitwaitwaitwait']], [], 6], [[], [], 5], [[['b', 'keepkeepkeepkeepkeep']], [], 5], [[], [], 10], [[], [], 0], [[], [], 0], [[['r', 'first']], ['s'], 5], [[['z', 'first']], ['a'], 5]]}[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":"b9de4f8d705c0de1a01c39bc7dcf2c74b8ce4c89b1d6dd6f18f12208ca9d3979","source":"\"\"\"Failure Map reference implementation. Python standard library only.\"\"\"\nimport json\n\nN = 1\nobservations = []\ndef solve(events):\n    q=[]; spoken=[]; now=0; seq=0\n    for e in events:\n        if e[0]=='enqueue':\n            seq+=1\n            q.append([e[1],e[2],e[3],e[4],e[5],seq])\n        elif e[0]=='cancel': q=[x for x in q if x[0]!=e[1]]\n        elif e[0]=='reset': now=0; q.clear()\n        elif e[0]=='tick':\n            now=max(now,e[1])\n            q=[x for x in q if x[3]>now]\n            eligible=[x for x in q if x[2]<=now]\n            if eligible:\n                chosen=min(eligible,key=lambda x:(-x[4],x[5]))\n                spoken.append(chosen[:2])\n                q.remove(chosen)\n    return [spoken,[x[0] for x in q],now]\ndef check(label, actual, expected):\n    observations.append({\"check\": label, \"actual\": actual, \"expected\": expected, \"passed\": actual == expected})\nfixtures = [\"[['enqueue','a','a'*N,0,100,1],['enqueue','b','b'*N,0,100,3],['enqueue','c','c',0,100,3],['tick',N],['tick',N],['tick',N]]\", \"[['enqueue','a','wait'*N,N+1,N+5,1],['tick',N]]\", \"[['enqueue','a','wait'*N,N+1,N+5,1],['tick',N],['tick',N+1]]\", \"[['enqueue','a','expired'*N,0,N,1],['tick',N]]\", \"[['enqueue','a','gone',0,100,1],['enqueue','b','keep'*N,0,100,2],['cancel','missing'],['cancel','a'],['tick',N]]\", \"[['tick',N+5],['tick',N]]\", \"[['tick',N+5],['tick',N],['enqueue','a','old',0,100,1],['reset']]\", '[]', \"[['enqueue','r','first',N,100,1],['enqueue','s','second',0,100,1],['tick',N]]\", \"[['enqueue','z','first',0,100,1],['enqueue','a','second'*N,0,100,1],['tick',N]]\"]\nexpected = {1: [[[['b', 'b'], ['c', 'c'], ['a', 'a']], [], 1], [[], ['a'], 1], [[['a', 'wait']], [], 2], [[], [], 1], [[['b', 'keep']], [], 1], [[], [], 6], [[], [], 0], [[], [], 0], [[['r', 'first']], ['s'], 1], [[['z', 'first']], ['a'], 1]], 2: [[[['b', 'bb'], ['c', 'c'], ['a', 'aa']], [], 2], [[], ['a'], 2], [[['a', 'waitwait']], [], 3], [[], [], 2], [[['b', 'keepkeep']], [], 2], [[], [], 7], [[], [], 0], [[], [], 0], [[['r', 'first']], ['s'], 2], [[['z', 'first']], ['a'], 2]], 3: [[[['b', 'bbb'], ['c', 'c'], ['a', 'aaa']], [], 3], [[], ['a'], 3], [[['a', 'waitwaitwait']], [], 4], [[], [], 3], [[['b', 'keepkeepkeep']], [], 3], [[], [], 8], [[], [], 0], [[], [], 0], [[['r', 'first']], ['s'], 3], [[['z', 'first']], ['a'], 3]], 4: [[[['b', 'bbbb'], ['c', 'c'], ['a', 'aaaa']], [], 4], [[], ['a'], 4], [[['a', 'waitwaitwaitwait']], [], 5], [[], [], 4], [[['b', 'keepkeepkeepkeep']], [], 4], [[], [], 9], [[], [], 0], [[], [], 0], [[['r', 'first']], ['s'], 4], [[['z', 'first']], ['a'], 4]], 5: [[[['b', 'bbbbb'], ['c', 'c'], ['a', 'aaaaa']], [], 5], [[], ['a'], 5], [[['a', 'waitwaitwaitwaitwait']], [], 6], [[], [], 5], [[['b', 'keepkeepkeepkeepkeep']], [], 5], [[], [], 10], [[], [], 0], [[], [], 0], [[['r', 'first']], ['s'], 5], [[['z', 'first']], ['a'], 5]]}[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-deadline-scheduler-dequeue","generated_at":"2026-09-29T14:40:20.858621+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: q.remove(chosen)","root_cause":"Fault site: q.remove(chosen) is implemented as pass","sha256":"0a967e76261721a599b7c31cf0793e6de79addcc8830cf22b3798a9a259f6925","title":"Delivered announcement remains pending · case 01","variant":1,"variant_policy":"Five numbered records share a model and may reuse boundary fixtures.","verification":{"attempt":{"elapsed_ms":38.955,"exit_code":1,"observations":[{"actual":[[["b","b"],["b","b"],["c","c"]],[],1],"check":"trace-1","expected":[[["b","b"],["c","c"],["a","a"]],[],1],"passed":false},{"actual":[[],["a"],1],"check":"trace-2","expected":[[],["a"],1],"passed":true},{"actual":[[["a","wait"]],[],2],"check":"trace-3","expected":[[["a","wait"]],[],2],"passed":true},{"actual":[[],[],1],"check":"trace-4","expected":[[],[],1],"passed":true},{"actual":[[["b","keep"]],[],1],"check":"trace-5","expected":[[["b","keep"]],[],1],"passed":true},{"actual":[[],[],6],"check":"trace-6","expected":[[],[],6],"passed":true},{"actual":[[],[],0],"check":"trace-7","expected":[[],[],0],"passed":true},{"actual":[[],[],0],"check":"trace-8","expected":[[],[],0],"passed":true},{"actual":[[["r","first"]],["s"],1],"check":"trace-9","expected":[[["r","first"]],["s"],1],"passed":true},{"actual":[[["z","first"]],["a"],1],"check":"trace-10","expected":[[["z","first"]],["a"],1],"passed":true}],"passed":false,"stderr":"","stdout":"{\"observations\": [{\"check\": \"trace-1\", \"actual\": [[[\"b\", \"b\"], [\"b\", \"b\"], [\"c\", \"c\"]], [], 1], \"expected\": [[[\"b\", \"b\"], [\"c\", \"c\"], [\"a\", \"a\"]], [], 1], \"passed\": false}, {\"check\": \"trace-2\", \"actual\": [[], [\"a\"], 1], \"expected\": [[], [\"a\"], 1], \"passed\": true}, {\"check\": \"trace-3\", \"actual\": [[[\"a\", \"wait\"]], [], 2], \"expected\": [[[\"a\", \"wait\"]], [], 2], \"passed\": true}, {\"check\": \"trace-4\", \"actual\": [[], [], 1], \"expected\": [[], [], 1], \"passed\": true}, {\"check\": \"trace-5\", \"actual\": [[[\"b\", \"keep\"]], [], 1], \"expected\": [[[\"b\", \"keep\"]], [], 1], \"passed\": true}, {\"check\": \"trace-6\", \"actual\": [[], [], 6], \"expected\": [[], [], 6], \"passed\": true}, {\"check\": \"trace-7\", \"actual\": [[], [], 0], \"expected\": [[], [], 0], \"passed\": true}, {\"check\": \"trace-8\", \"actual\": [[], [], 0], \"expected\": [[], [], 0], \"passed\": true}, {\"check\": \"trace-9\", \"actual\": [[[\"r\", \"first\"]], [\"s\"], 1], \"expected\": [[[\"r\", \"first\"]], [\"s\"], 1], \"passed\": true}, {\"check\": \"trace-10\", \"actual\": [[[\"z\", \"first\"]], [\"a\"], 1], \"expected\": [[[\"z\", \"first\"]], [\"a\"], 1], \"passed\": true}], \"passed\": false}\n"},"broken":{"elapsed_ms":44.197,"exit_code":1,"observations":[{"actual":[[["b","b"],["b","b"],["b","b"]],["a","b","c"],1],"check":"trace-1","expected":[[["b","b"],["c","c"],["a","a"]],[],1],"passed":false},{"actual":[[],["a"],1],"check":"trace-2","expected":[[],["a"],1],"passed":true},{"actual":[[["a","wait"]],["a"],2],"check":"trace-3","expected":[[["a","wait"]],[],2],"passed":false},{"actual":[[],[],1],"check":"trace-4","expected":[[],[],1],"passed":true},{"actual":[[["b","keep"]],["b"],1],"check":"trace-5","expected":[[["b","keep"]],[],1],"passed":false},{"actual":[[],[],6],"check":"trace-6","expected":[[],[],6],"passed":true},{"actual":[[],[],0],"check":"trace-7","expected":[[],[],0],"passed":true},{"actual":[[],[],0],"check":"trace-8","expected":[[],[],0],"passed":true},{"actual":[[["r","first"]],["r","s"],1],"check":"trace-9","expected":[[["r","first"]],["s"],1],"passed":false},{"actual":[[["z","first"]],["z","a"],1],"check":"trace-10","expected":[[["z","first"]],["a"],1],"passed":false}],"passed":false,"stderr":"","stdout":"{\"observations\": [{\"check\": \"trace-1\", \"actual\": [[[\"b\", \"b\"], [\"b\", \"b\"], [\"b\", \"b\"]], [\"a\", \"b\", \"c\"], 1], \"expected\": [[[\"b\", \"b\"], [\"c\", \"c\"], [\"a\", \"a\"]], [], 1], \"passed\": false}, {\"check\": \"trace-2\", \"actual\": [[], [\"a\"], 1], \"expected\": [[], [\"a\"], 1], \"passed\": true}, {\"check\": \"trace-3\", \"actual\": [[[\"a\", \"wait\"]], [\"a\"], 2], \"expected\": [[[\"a\", \"wait\"]], [], 2], \"passed\": false}, {\"check\": \"trace-4\", \"actual\": [[], [], 1], \"expected\": [[], [], 1], \"passed\": true}, {\"check\": \"trace-5\", \"actual\": [[[\"b\", \"keep\"]], [\"b\"], 1], \"expected\": [[[\"b\", \"keep\"]], [], 1], \"passed\": false}, {\"check\": \"trace-6\", \"actual\": [[], [], 6], \"expected\": [[], [], 6], \"passed\": true}, {\"check\": \"trace-7\", \"actual\": [[], [], 0], \"expected\": [[], [], 0], \"passed\": true}, {\"check\": \"trace-8\", \"actual\": [[], [], 0], \"expected\": [[], [], 0], \"passed\": true}, {\"check\": \"trace-9\", \"actual\": [[[\"r\", \"first\"]], [\"r\", \"s\"], 1], \"expected\": [[[\"r\", \"first\"]], [\"s\"], 1], \"passed\": false}, {\"check\": \"trace-10\", \"actual\": [[[\"z\", \"first\"]], [\"z\", \"a\"], 1], \"expected\": [[[\"z\", \"first\"]], [\"a\"], 1], \"passed\": false}], \"passed\": false}\n"},"fixed":{"elapsed_ms":40.892,"exit_code":0,"observations":[{"actual":[[["b","b"],["c","c"],["a","a"]],[],1],"check":"trace-1","expected":[[["b","b"],["c","c"],["a","a"]],[],1],"passed":true},{"actual":[[],["a"],1],"check":"trace-2","expected":[[],["a"],1],"passed":true},{"actual":[[["a","wait"]],[],2],"check":"trace-3","expected":[[["a","wait"]],[],2],"passed":true},{"actual":[[],[],1],"check":"trace-4","expected":[[],[],1],"passed":true},{"actual":[[["b","keep"]],[],1],"check":"trace-5","expected":[[["b","keep"]],[],1],"passed":true},{"actual":[[],[],6],"check":"trace-6","expected":[[],[],6],"passed":true},{"actual":[[],[],0],"check":"trace-7","expected":[[],[],0],"passed":true},{"actual":[[],[],0],"check":"trace-8","expected":[[],[],0],"passed":true},{"actual":[[["r","first"]],["s"],1],"check":"trace-9","expected":[[["r","first"]],["s"],1],"passed":true},{"actual":[[["z","first"]],["a"],1],"check":"trace-10","expected":[[["z","first"]],["a"],1],"passed":true}],"passed":true,"stderr":"","stdout":"{\"observations\": [{\"check\": \"trace-1\", \"actual\": [[[\"b\", \"b\"], [\"c\", \"c\"], [\"a\", \"a\"]], [], 1], \"expected\": [[[\"b\", \"b\"], [\"c\", \"c\"], [\"a\", \"a\"]], [], 1], \"passed\": true}, {\"check\": \"trace-2\", \"actual\": [[], [\"a\"], 1], \"expected\": [[], [\"a\"], 1], \"passed\": true}, {\"check\": \"trace-3\", \"actual\": [[[\"a\", \"wait\"]], [], 2], \"expected\": [[[\"a\", \"wait\"]], [], 2], \"passed\": true}, {\"check\": \"trace-4\", \"actual\": [[], [], 1], \"expected\": [[], [], 1], \"passed\": true}, {\"check\": \"trace-5\", \"actual\": [[[\"b\", \"keep\"]], [], 1], \"expected\": [[[\"b\", \"keep\"]], [], 1], \"passed\": true}, {\"check\": \"trace-6\", \"actual\": [[], [], 6], \"expected\": [[], [], 6], \"passed\": true}, {\"check\": \"trace-7\", \"actual\": [[], [], 0], \"expected\": [[], [], 0], \"passed\": true}, {\"check\": \"trace-8\", \"actual\": [[], [], 0], \"expected\": [[], [], 0], \"passed\": true}, {\"check\": \"trace-9\", \"actual\": [[[\"r\", \"first\"]], [\"s\"], 1], \"expected\": [[[\"r\", \"first\"]], [\"s\"], 1], \"passed\": true}, {\"check\": \"trace-10\", \"actual\": [[[\"z\", \"first\"]], [\"a\"], 1], \"expected\": [[[\"z\", \"first\"]], [\"a\"], 1], \"passed\": true}], \"passed\": true}\n"}},"verified":true,"visibility":"public"}