{"abstract":"The event trace violates the match clock 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 matches.append(len(buffer)), which still violates the model contract on the explicit regression traces.","family":"s3-keyboard-interactions-sequence-prefix-match-clock","id":"FA-31481","implementations":{"attempt":{"sha256":"c7e5fc29aedba6be163a3285daa39147a2b846d175ca5c79bb50748d26159dfc","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(len(buffer))\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":"8ec780872ee865412d63ee96f792c094caee12a74040fc06186e604ff151fd24","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(last-timeout)\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-match-clock","generated_at":"2026-09-29T14:42:02.505206+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 `matches.append(now)` at the match clock fault site; preserve the other state transitions.","root_cause":"A completed key sequence reports a synthetic timestamp instead of the triggering event time.","sha256":"ce70c1f3f1cc86c566f35dbf8fd106d0eef80d89e22c35f7df30a72108384c7a","title":"Overlapping keyboard sequence matcher: A completed key sequence reports a synthetic timestamp instead of the triggering event time · case 01","variant":1,"variant_policy":"Five numbered records share a model and may reuse boundary fixtures.","verification":{"attempt":{"elapsed_ms":37.944,"exit_code":1,"observations":[{"actual":[[[],[],null]],"check":"sequence-prefix scenario 0","expected":[[[],[],null]],"passed":true},{"actual":[[[2],[],15]],"check":"sequence-prefix scenario 1","expected":[[[15],[],15]],"passed":false},{"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":[[[3,3],["A"],14]],"check":"sequence-prefix scenario 6","expected":[[[12,14],["A"],14]],"passed":false},{"actual":[[[4,4],["A","B"],15]],"check":"sequence-prefix scenario 7","expected":[[[13,15],["A","B"],15]],"passed":false},{"actual":[[[3],[],13]],"check":"sequence-prefix scenario 8","expected":[[[13],[],13]],"passed":false},{"actual":[[[3],[],14]],"check":"sequence-prefix scenario 9","expected":[[[14],[],14]],"passed":false}],"passed":false,"stderr":"","stdout":"{\"observations\": [{\"check\": \"sequence-prefix scenario 0\", \"actual\": [[[], [], null]], \"expected\": [[[], [], null]], \"passed\": true}, {\"check\": \"sequence-prefix scenario 1\", \"actual\": [[[2], [], 15]], \"expected\": [[[15], [], 15]], \"passed\": false}, {\"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\": [[[3, 3], [\"A\"], 14]], \"expected\": [[[12, 14], [\"A\"], 14]], \"passed\": false}, {\"check\": \"sequence-prefix scenario 7\", \"actual\": [[[4, 4], [\"A\", \"B\"], 15]], \"expected\": [[[13, 15], [\"A\", \"B\"], 15]], \"passed\": false}, {\"check\": \"sequence-prefix scenario 8\", \"actual\": [[[3], [], 13]], \"expected\": [[[13], [], 13]], \"passed\": false}, {\"check\": \"sequence-prefix scenario 9\", \"actual\": [[[3], [], 14]], \"expected\": [[[14], [], 14]], \"passed\": false}], \"passed\": false}\n"},"broken":{"elapsed_ms":40.971,"exit_code":1,"observations":[{"actual":[[[],[],null]],"check":"sequence-prefix scenario 0","expected":[[[],[],null]],"passed":true},{"actual":[[[10],[],15]],"check":"sequence-prefix scenario 1","expected":[[[15],[],15]],"passed":false},{"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":[[[7,9],["A"],14]],"check":"sequence-prefix scenario 6","expected":[[[12,14],["A"],14]],"passed":false},{"actual":[[[8,10],["A","B"],15]],"check":"sequence-prefix scenario 7","expected":[[[13,15],["A","B"],15]],"passed":false},{"actual":[[[8],[],13]],"check":"sequence-prefix scenario 8","expected":[[[13],[],13]],"passed":false},{"actual":[[[9],[],14]],"check":"sequence-prefix scenario 9","expected":[[[14],[],14]],"passed":false}],"passed":false,"stderr":"","stdout":"{\"observations\": [{\"check\": \"sequence-prefix scenario 0\", \"actual\": [[[], [], null]], \"expected\": [[[], [], null]], \"passed\": true}, {\"check\": \"sequence-prefix scenario 1\", \"actual\": [[[10], [], 15]], \"expected\": [[[15], [], 15]], \"passed\": false}, {\"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\": [[[7, 9], [\"A\"], 14]], \"expected\": [[[12, 14], [\"A\"], 14]], \"passed\": false}, {\"check\": \"sequence-prefix scenario 7\", \"actual\": [[[8, 10], [\"A\", \"B\"], 15]], \"expected\": [[[13, 15], [\"A\", \"B\"], 15]], \"passed\": false}, {\"check\": \"sequence-prefix scenario 8\", \"actual\": [[[8], [], 13]], \"expected\": [[[13], [], 13]], \"passed\": false}, {\"check\": \"sequence-prefix scenario 9\", \"actual\": [[[9], [], 14]], \"expected\": [[[14], [], 14]], \"passed\": false}], \"passed\": false}\n"},"fixed":{"elapsed_ms":42.009,"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"}