{"abstract":"The event trace violates the input 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.","contract_signature":"cases","evaluation_group":"s3-keyboard-sequence-prefix","failed_approach":"The partial repair changes this transition to if last is not None and now>timeout: buffer=[], which still violates the model contract on the explicit regression traces.","family":"s3-keyboard-interactions-sequence-prefix-input-expiry","id":"FA-31456","implementations":{"attempt":{"sha256":"583bb30b9352923a06e3c3cbaa7e37752e251bea82f8a4f77f323cf99b63bb9b","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>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":"5dd326b0d61d2dc7c19f73eab081860b4d3df3b66c167e95134b32e60d5c511c","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-input-expiry","generated_at":"2026-09-29T14:42:02.567274+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.","root_cause":"An arriving key expires a prefix at the wrong timeout boundary.","sha256":"de504ed5d8adbb5ce3ad77fd31c08fcdff3b92d3ebcbe29d8f69ec23bfabc35d","title":"Overlapping keyboard sequence matcher: An arriving key expires a prefix at the wrong timeout boundary · 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.589,"exit_code":1,"observations":[{"actual":[[[],[],null]],"check":"sequence-prefix scenario 0","expected":[[[],[],null]],"passed":true},{"actual":[[[],[],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":[[[],["A"],14]],"check":"sequence-prefix scenario 6","expected":[[[12,14],["A"],14]],"passed":false},{"actual":[[[],[],15]],"check":"sequence-prefix scenario 7","expected":[[[13,15],["A","B"],15]],"passed":false},{"actual":[[[],[],13]],"check":"sequence-prefix scenario 8","expected":[[[13],[],13]],"passed":false},{"actual":[[[],[],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\": [[[], [], 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\": [[[], [\"A\"], 14]], \"expected\": [[[12, 14], [\"A\"], 14]], \"passed\": false}, {\"check\": \"sequence-prefix scenario 7\", \"actual\": [[[], [], 15]], \"expected\": [[[13, 15], [\"A\", \"B\"], 15]], \"passed\": false}, {\"check\": \"sequence-prefix scenario 8\", \"actual\": [[[], [], 13]], \"expected\": [[[13], [], 13]], \"passed\": false}, {\"check\": \"sequence-prefix scenario 9\", \"actual\": [[[], [], 14]], \"expected\": [[[14], [], 14]], \"passed\": false}], \"passed\": false}\n"},"broken":{"elapsed_ms":45.357,"exit_code":1,"observations":[{"actual":[[[],[],null]],"check":"sequence-prefix scenario 0","expected":[[[],[],null]],"passed":true},{"actual":[[[],[],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":[[[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]], \"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\": [[[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"}},"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."}}