{"abstract":"The event trace violates the tick expiry rule and produces incorrect keyboard state or command output.","category":"Keyboard interactions","checks":10,"contract":"Case [sequence,timeout,events]. Nonempty sequence is list of key names. Events [kind,key,time,repeat]. Only nonrepeat down feeds matcher. Accepted downs more than timeout after the previous accepted down discard the prefix; tick likewise expires it. Cancel resets prefix and clock. Keep longest suffix matching a sequence prefix, and after a match retain the longest proper overlapping prefix. Return match timestamps, partial prefix and last accepted time. Inputs are finite ordered event traces; return the stated deterministic state. Batch entries are independent. N varies the number of independent input transactions.","evaluation_group":"s3-keyboard-sequence-prefix","failed_approach":"The partial repair changes this transition to if last is not None and now>timeout: buffer=[]; last=None, which still violates the model contract on the explicit regression traces.","family":"s3-keyboard-interactions-sequence-prefix-tick-expiry","id":"FA-31446","implementations":{"attempt":{"sha256":"75504365828932e3c9a6ba78d9da473d6097b600efbd912afcb30bfad960d5a1","source":"\"\"\"Failure Map reference implementation. Python standard library only.\"\"\"\nimport json\n\nN = 1\nobservations = []\ndef solve(cases):\n    def run(c):\n        sequence,timeout,events=c\n        buffer=[]; last=None; matches=[]\n        for kind,key,now,repeat in events:\n            if kind=='cancel': buffer=[]; last=None\n            elif kind=='tick':\n                if last is not None and now>timeout: buffer=[]; last=None\n            elif kind=='down' and not repeat:\n                if last is not None and now-last>timeout: buffer=[]\n                candidate=buffer+[key]\n                last=now\n                buffer=[]\n                for size in range(min(len(sequence),len(candidate)),0,-1):\n                    if candidate[-size:]==sequence[:size]:\n                        buffer=candidate[-size:]\n                        break\n                if buffer==sequence:\n                    matches.append(now)\n                    buffer=[]\n                    for size in range(len(sequence)-1,0,-1):\n                        if sequence[-size:]==sequence[:size]:\n                            buffer=sequence[:size]\n                            break\n        return [matches,buffer,last]\n    return [run(c) for c in cases]\ndef check(label, actual, expected):\n    observations.append({\"check\": label, \"actual\": actual, \"expected\": expected, \"passed\": actual == expected})\ncheck('sequence-prefix scenario 0', solve([[['A', 'B'], 5, []]] * N), [[[], [], None]] * N)\ncheck('sequence-prefix scenario 1', solve([[['A', 'B'], 5, [['down', 'A', 10, False], ['down', 'B', 15, False]]]] * N), [[[15], [], 15]] * N)\ncheck('sequence-prefix scenario 2', solve([[['A', 'B'], 5, [['down', 'A', 10, False], ['tick', '', 15, False]]]] * N), [[[], ['A'], 10]] * N)\ncheck('sequence-prefix scenario 3', solve([[['A', 'B'], 5, [['down', 'A', 10, False], ['down', 'B', 16, False]]]] * N), [[[], [], 16]] * N)\ncheck('sequence-prefix scenario 4', solve([[['A', 'B'], 5, [['down', 'A', 10, False], ['down', 'B', 11, True], ['up', 'B', 12, False]]]] * N), [[[], ['A'], 10]] * N)\ncheck('sequence-prefix scenario 5', solve([[['A', 'B'], 5, [['down', 'A', 10, False], ['cancel', '', 11, False]]]] * N), [[[], [], None]] * N)\ncheck('sequence-prefix scenario 6', solve([[['A', 'B', 'A'], 5, [['down', 'A', 10, False], ['down', 'B', 11, False], ['down', 'A', 12, False], ['down', 'B', 13, False], ['down', 'A', 14, False]]]] * N), [[[12, 14], ['A'], 14]] * N)\ncheck('sequence-prefix scenario 7', solve([[['A', 'B', 'A', 'B'], 5, [['down', 'A', 10, False], ['down', 'B', 11, False], ['down', 'A', 12, False], ['down', 'B', 13, False], ['down', 'A', 14, False], ['down', 'B', 15, False]]]] * N), [[[13, 15], ['A', 'B'], 15]] * N)\ncheck('sequence-prefix scenario 8', solve([[['A', 'A', 'B'], 5, [['down', 'A', 10, False], ['down', 'A', 11, False], ['down', 'A', 12, False], ['down', 'B', 13, False]]]] * N), [[[13], [], 13]] * N)\ncheck('sequence-prefix scenario 9', solve([[['A', 'B', 'C'], 5, [['down', 'A', 10, False], ['down', 'X', 11, False], ['down', 'A', 12, False], ['down', 'B', 13, False], ['down', 'C', 14, False]]]] * N), [[[14], [], 14]] * N)\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":"7888a1e798c29aed84a194b1aa00ff11dad2f008e94012fb9f3fffb5e4459039","source":"\"\"\"Failure Map reference implementation. Python standard library only.\"\"\"\nimport json\n\nN = 1\nobservations = []\ndef solve(cases):\n    def run(c):\n        sequence,timeout,events=c\n        buffer=[]; last=None; matches=[]\n        for kind,key,now,repeat in events:\n            if kind=='cancel': buffer=[]; last=None\n            elif kind=='tick':\n                if last is not None and now-last>=timeout: buffer=[]; last=None\n            elif kind=='down' and not repeat:\n                if last is not None and now-last>timeout: buffer=[]\n                candidate=buffer+[key]\n                last=now\n                buffer=[]\n                for size in range(min(len(sequence),len(candidate)),0,-1):\n                    if candidate[-size:]==sequence[:size]:\n                        buffer=candidate[-size:]\n                        break\n                if buffer==sequence:\n                    matches.append(now)\n                    buffer=[]\n                    for size in range(len(sequence)-1,0,-1):\n                        if sequence[-size:]==sequence[:size]:\n                            buffer=sequence[:size]\n                            break\n        return [matches,buffer,last]\n    return [run(c) for c in cases]\ndef check(label, actual, expected):\n    observations.append({\"check\": label, \"actual\": actual, \"expected\": expected, \"passed\": actual == expected})\ncheck('sequence-prefix scenario 0', solve([[['A', 'B'], 5, []]] * N), [[[], [], None]] * N)\ncheck('sequence-prefix scenario 1', solve([[['A', 'B'], 5, [['down', 'A', 10, False], ['down', 'B', 15, False]]]] * N), [[[15], [], 15]] * N)\ncheck('sequence-prefix scenario 2', solve([[['A', 'B'], 5, [['down', 'A', 10, False], ['tick', '', 15, False]]]] * N), [[[], ['A'], 10]] * N)\ncheck('sequence-prefix scenario 3', solve([[['A', 'B'], 5, [['down', 'A', 10, False], ['down', 'B', 16, False]]]] * N), [[[], [], 16]] * N)\ncheck('sequence-prefix scenario 4', solve([[['A', 'B'], 5, [['down', 'A', 10, False], ['down', 'B', 11, True], ['up', 'B', 12, False]]]] * N), [[[], ['A'], 10]] * N)\ncheck('sequence-prefix scenario 5', solve([[['A', 'B'], 5, [['down', 'A', 10, False], ['cancel', '', 11, False]]]] * N), [[[], [], None]] * N)\ncheck('sequence-prefix scenario 6', solve([[['A', 'B', 'A'], 5, [['down', 'A', 10, False], ['down', 'B', 11, False], ['down', 'A', 12, False], ['down', 'B', 13, False], ['down', 'A', 14, False]]]] * N), [[[12, 14], ['A'], 14]] * N)\ncheck('sequence-prefix scenario 7', solve([[['A', 'B', 'A', 'B'], 5, [['down', 'A', 10, False], ['down', 'B', 11, False], ['down', 'A', 12, False], ['down', 'B', 13, False], ['down', 'A', 14, False], ['down', 'B', 15, False]]]] * N), [[[13, 15], ['A', 'B'], 15]] * N)\ncheck('sequence-prefix scenario 8', solve([[['A', 'A', 'B'], 5, [['down', 'A', 10, False], ['down', 'A', 11, False], ['down', 'A', 12, False], ['down', 'B', 13, False]]]] * N), [[[13], [], 13]] * N)\ncheck('sequence-prefix scenario 9', solve([[['A', 'B', 'C'], 5, [['down', 'A', 10, False], ['down', 'X', 11, False], ['down', 'A', 12, False], ['down', 'B', 13, False], ['down', 'C', 14, False]]]] * N), [[[14], [], 14]] * N)\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":"07ca1aca25789f6c51484071e2ada1e97c6d1b587e4d1f28d02b6a39885e9687","source":"\"\"\"Failure Map reference implementation. Python standard library only.\"\"\"\nimport json\n\nN = 1\nobservations = []\ndef solve(cases):\n    def run(c):\n        sequence,timeout,events=c\n        buffer=[]; last=None; matches=[]\n        for kind,key,now,repeat in events:\n            if kind=='cancel': buffer=[]; last=None\n            elif kind=='tick':\n                if last is not None and now-last>timeout: buffer=[]; last=None\n            elif kind=='down' and not repeat:\n                if last is not None and now-last>timeout: buffer=[]\n                candidate=buffer+[key]\n                last=now\n                buffer=[]\n                for size in range(min(len(sequence),len(candidate)),0,-1):\n                    if candidate[-size:]==sequence[:size]:\n                        buffer=candidate[-size:]\n                        break\n                if buffer==sequence:\n                    matches.append(now)\n                    buffer=[]\n                    for size in range(len(sequence)-1,0,-1):\n                        if sequence[-size:]==sequence[:size]:\n                            buffer=sequence[:size]\n                            break\n        return [matches,buffer,last]\n    return [run(c) for c in cases]\ndef check(label, actual, expected):\n    observations.append({\"check\": label, \"actual\": actual, \"expected\": expected, \"passed\": actual == expected})\ncheck('sequence-prefix scenario 0', solve([[['A', 'B'], 5, []]] * N), [[[], [], None]] * N)\ncheck('sequence-prefix scenario 1', solve([[['A', 'B'], 5, [['down', 'A', 10, False], ['down', 'B', 15, False]]]] * N), [[[15], [], 15]] * N)\ncheck('sequence-prefix scenario 2', solve([[['A', 'B'], 5, [['down', 'A', 10, False], ['tick', '', 15, False]]]] * N), [[[], ['A'], 10]] * N)\ncheck('sequence-prefix scenario 3', solve([[['A', 'B'], 5, [['down', 'A', 10, False], ['down', 'B', 16, False]]]] * N), [[[], [], 16]] * N)\ncheck('sequence-prefix scenario 4', solve([[['A', 'B'], 5, [['down', 'A', 10, False], ['down', 'B', 11, True], ['up', 'B', 12, False]]]] * N), [[[], ['A'], 10]] * N)\ncheck('sequence-prefix scenario 5', solve([[['A', 'B'], 5, [['down', 'A', 10, False], ['cancel', '', 11, False]]]] * N), [[[], [], None]] * N)\ncheck('sequence-prefix scenario 6', solve([[['A', 'B', 'A'], 5, [['down', 'A', 10, False], ['down', 'B', 11, False], ['down', 'A', 12, False], ['down', 'B', 13, False], ['down', 'A', 14, False]]]] * N), [[[12, 14], ['A'], 14]] * N)\ncheck('sequence-prefix scenario 7', solve([[['A', 'B', 'A', 'B'], 5, [['down', 'A', 10, False], ['down', 'B', 11, False], ['down', 'A', 12, False], ['down', 'B', 13, False], ['down', 'A', 14, False], ['down', 'B', 15, False]]]] * N), [[[13, 15], ['A', 'B'], 15]] * N)\ncheck('sequence-prefix scenario 8', solve([[['A', 'A', 'B'], 5, [['down', 'A', 10, False], ['down', 'A', 11, False], ['down', 'A', 12, False], ['down', 'B', 13, False]]]] * N), [[[13], [], 13]] * N)\ncheck('sequence-prefix scenario 9', solve([[['A', 'B', 'C'], 5, [['down', 'A', 10, False], ['down', 'X', 11, False], ['down', 'A', 12, False], ['down', 'B', 13, False], ['down', 'C', 14, False]]]] * N), [[[14], [], 14]] * N)\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":"Offline stipulated event model, not a browser implementation or web standard 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-keyboard-interactions-sequence-prefix-tick-expiry","generated_at":"2026-09-29T14:42:02.183498+00:00","license":"CC0-1.0","python":"3.12.14","seed":1,"split":"open-access"},"relevance":"Controlled keyboard event processing model for debugging application event logic.","repair":"Use the contract transition `if last is not None and now-last>timeout: buffer=[]; last=None` at the tick expiry fault site; preserve the other state transitions.","root_cause":"A timer expires a valid exact-boundary sequence or uses absolute time.","sha256":"593643a7ee67a600efa11bde532affb5f22520904760ff877b9e78035562463c","title":"Overlapping keyboard sequence matcher: A timer expires a valid exact-boundary sequence or uses absolute time · case 01","variant":1,"variant_policy":"Five numbered records share a model and may reuse boundary fixtures.","verification":{"attempt":{"elapsed_ms":51.482,"exit_code":1,"observations":[{"actual":[[[],[],null]],"check":"sequence-prefix scenario 0","expected":[[[],[],null]],"passed":true},{"actual":[[[15],[],15]],"check":"sequence-prefix scenario 1","expected":[[[15],[],15]],"passed":true},{"actual":[[[],[],null]],"check":"sequence-prefix scenario 2","expected":[[[],["A"],10]],"passed":false},{"actual":[[[],[],16]],"check":"sequence-prefix scenario 3","expected":[[[],[],16]],"passed":true},{"actual":[[[],["A"],10]],"check":"sequence-prefix scenario 4","expected":[[[],["A"],10]],"passed":true},{"actual":[[[],[],null]],"check":"sequence-prefix scenario 5","expected":[[[],[],null]],"passed":true},{"actual":[[[12,14],["A"],14]],"check":"sequence-prefix scenario 6","expected":[[[12,14],["A"],14]],"passed":true},{"actual":[[[13,15],["A","B"],15]],"check":"sequence-prefix scenario 7","expected":[[[13,15],["A","B"],15]],"passed":true},{"actual":[[[13],[],13]],"check":"sequence-prefix scenario 8","expected":[[[13],[],13]],"passed":true},{"actual":[[[14],[],14]],"check":"sequence-prefix scenario 9","expected":[[[14],[],14]],"passed":true}],"passed":false,"stderr":"","stdout":"{\"observations\": [{\"check\": \"sequence-prefix scenario 0\", \"actual\": [[[], [], null]], \"expected\": [[[], [], null]], \"passed\": true}, {\"check\": \"sequence-prefix scenario 1\", \"actual\": [[[15], [], 15]], \"expected\": [[[15], [], 15]], \"passed\": true}, {\"check\": \"sequence-prefix scenario 2\", \"actual\": [[[], [], null]], \"expected\": [[[], [\"A\"], 10]], \"passed\": false}, {\"check\": \"sequence-prefix scenario 3\", \"actual\": [[[], [], 16]], \"expected\": [[[], [], 16]], \"passed\": true}, {\"check\": \"sequence-prefix scenario 4\", \"actual\": [[[], [\"A\"], 10]], \"expected\": [[[], [\"A\"], 10]], \"passed\": true}, {\"check\": \"sequence-prefix scenario 5\", \"actual\": [[[], [], null]], \"expected\": [[[], [], null]], \"passed\": true}, {\"check\": \"sequence-prefix scenario 6\", \"actual\": [[[12, 14], [\"A\"], 14]], \"expected\": [[[12, 14], [\"A\"], 14]], \"passed\": true}, {\"check\": \"sequence-prefix scenario 7\", \"actual\": [[[13, 15], [\"A\", \"B\"], 15]], \"expected\": [[[13, 15], [\"A\", \"B\"], 15]], \"passed\": true}, {\"check\": \"sequence-prefix scenario 8\", \"actual\": [[[13], [], 13]], \"expected\": [[[13], [], 13]], \"passed\": true}, {\"check\": \"sequence-prefix scenario 9\", \"actual\": [[[14], [], 14]], \"expected\": [[[14], [], 14]], \"passed\": true}], \"passed\": false}\n"},"broken":{"elapsed_ms":46.533,"exit_code":1,"observations":[{"actual":[[[],[],null]],"check":"sequence-prefix scenario 0","expected":[[[],[],null]],"passed":true},{"actual":[[[15],[],15]],"check":"sequence-prefix scenario 1","expected":[[[15],[],15]],"passed":true},{"actual":[[[],[],null]],"check":"sequence-prefix scenario 2","expected":[[[],["A"],10]],"passed":false},{"actual":[[[],[],16]],"check":"sequence-prefix scenario 3","expected":[[[],[],16]],"passed":true},{"actual":[[[],["A"],10]],"check":"sequence-prefix scenario 4","expected":[[[],["A"],10]],"passed":true},{"actual":[[[],[],null]],"check":"sequence-prefix scenario 5","expected":[[[],[],null]],"passed":true},{"actual":[[[12,14],["A"],14]],"check":"sequence-prefix scenario 6","expected":[[[12,14],["A"],14]],"passed":true},{"actual":[[[13,15],["A","B"],15]],"check":"sequence-prefix scenario 7","expected":[[[13,15],["A","B"],15]],"passed":true},{"actual":[[[13],[],13]],"check":"sequence-prefix scenario 8","expected":[[[13],[],13]],"passed":true},{"actual":[[[14],[],14]],"check":"sequence-prefix scenario 9","expected":[[[14],[],14]],"passed":true}],"passed":false,"stderr":"","stdout":"{\"observations\": [{\"check\": \"sequence-prefix scenario 0\", \"actual\": [[[], [], null]], \"expected\": [[[], [], null]], \"passed\": true}, {\"check\": \"sequence-prefix scenario 1\", \"actual\": [[[15], [], 15]], \"expected\": [[[15], [], 15]], \"passed\": true}, {\"check\": \"sequence-prefix scenario 2\", \"actual\": [[[], [], null]], \"expected\": [[[], [\"A\"], 10]], \"passed\": false}, {\"check\": \"sequence-prefix scenario 3\", \"actual\": [[[], [], 16]], \"expected\": [[[], [], 16]], \"passed\": true}, {\"check\": \"sequence-prefix scenario 4\", \"actual\": [[[], [\"A\"], 10]], \"expected\": [[[], [\"A\"], 10]], \"passed\": true}, {\"check\": \"sequence-prefix scenario 5\", \"actual\": [[[], [], null]], \"expected\": [[[], [], null]], \"passed\": true}, {\"check\": \"sequence-prefix scenario 6\", \"actual\": [[[12, 14], [\"A\"], 14]], \"expected\": [[[12, 14], [\"A\"], 14]], \"passed\": true}, {\"check\": \"sequence-prefix scenario 7\", \"actual\": [[[13, 15], [\"A\", \"B\"], 15]], \"expected\": [[[13, 15], [\"A\", \"B\"], 15]], \"passed\": true}, {\"check\": \"sequence-prefix scenario 8\", \"actual\": [[[13], [], 13]], \"expected\": [[[13], [], 13]], \"passed\": true}, {\"check\": \"sequence-prefix scenario 9\", \"actual\": [[[14], [], 14]], \"expected\": [[[14], [], 14]], \"passed\": true}], \"passed\": false}\n"},"fixed":{"elapsed_ms":44.5,"exit_code":0,"observations":[{"actual":[[[],[],null]],"check":"sequence-prefix scenario 0","expected":[[[],[],null]],"passed":true},{"actual":[[[15],[],15]],"check":"sequence-prefix scenario 1","expected":[[[15],[],15]],"passed":true},{"actual":[[[],["A"],10]],"check":"sequence-prefix scenario 2","expected":[[[],["A"],10]],"passed":true},{"actual":[[[],[],16]],"check":"sequence-prefix scenario 3","expected":[[[],[],16]],"passed":true},{"actual":[[[],["A"],10]],"check":"sequence-prefix scenario 4","expected":[[[],["A"],10]],"passed":true},{"actual":[[[],[],null]],"check":"sequence-prefix scenario 5","expected":[[[],[],null]],"passed":true},{"actual":[[[12,14],["A"],14]],"check":"sequence-prefix scenario 6","expected":[[[12,14],["A"],14]],"passed":true},{"actual":[[[13,15],["A","B"],15]],"check":"sequence-prefix scenario 7","expected":[[[13,15],["A","B"],15]],"passed":true},{"actual":[[[13],[],13]],"check":"sequence-prefix scenario 8","expected":[[[13],[],13]],"passed":true},{"actual":[[[14],[],14]],"check":"sequence-prefix scenario 9","expected":[[[14],[],14]],"passed":true}],"passed":true,"stderr":"","stdout":"{\"observations\": [{\"check\": \"sequence-prefix scenario 0\", \"actual\": [[[], [], null]], \"expected\": [[[], [], null]], \"passed\": true}, {\"check\": \"sequence-prefix scenario 1\", \"actual\": [[[15], [], 15]], \"expected\": [[[15], [], 15]], \"passed\": true}, {\"check\": \"sequence-prefix scenario 2\", \"actual\": [[[], [\"A\"], 10]], \"expected\": [[[], [\"A\"], 10]], \"passed\": true}, {\"check\": \"sequence-prefix scenario 3\", \"actual\": [[[], [], 16]], \"expected\": [[[], [], 16]], \"passed\": true}, {\"check\": \"sequence-prefix scenario 4\", \"actual\": [[[], [\"A\"], 10]], \"expected\": [[[], [\"A\"], 10]], \"passed\": true}, {\"check\": \"sequence-prefix scenario 5\", \"actual\": [[[], [], null]], \"expected\": [[[], [], null]], \"passed\": true}, {\"check\": \"sequence-prefix scenario 6\", \"actual\": [[[12, 14], [\"A\"], 14]], \"expected\": [[[12, 14], [\"A\"], 14]], \"passed\": true}, {\"check\": \"sequence-prefix scenario 7\", \"actual\": [[[13, 15], [\"A\", \"B\"], 15]], \"expected\": [[[13, 15], [\"A\", \"B\"], 15]], \"passed\": true}, {\"check\": \"sequence-prefix scenario 8\", \"actual\": [[[13], [], 13]], \"expected\": [[[13], [], 13]], \"passed\": true}, {\"check\": \"sequence-prefix scenario 9\", \"actual\": [[[14], [], 14]], \"expected\": [[[14], [], 14]], \"passed\": true}], \"passed\": true}\n"}},"verified":true,"visibility":"public"}