{"abstract":"The event trace violates the new character rule and produces incorrect keyboard state or command output.","category":"Keyboard interactions","checks":10,"contract":"Case [map,window,events]. Map maps keys to nonempty character strings. Events [kind,value,time]. Valid press cycles the pending same-key character before deadline, otherwise commits previous and starts new. Tick at or past deadline commits. Backspace cancels pending character before deleting committed text. Space commits pending then adds space; cancel drops pending only. Unknown press is ignored. Return committed text and pending [key,index,deadline] or None. 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-multi-tap-keypad","failed_approach":"The partial repair changes this transition to pending=[value,0,window], which still violates the model contract on the explicit regression traces.","family":"s3-keyboard-interactions-multi-tap-keypad-new-character","id":"FA-31966","implementations":{"attempt":{"sha256":"94adee5be97cdaa7b088aafc0006e0f5bac48658a8407c5393971364dbb9ecdf","source":"\"\"\"Failure Map reference implementation. Python standard library only.\"\"\"\nimport json\n\nN = 1\nobservations = []\ndef solve(cases):\n    def run(c):\n        mapping,window,events=c\n        text=''; pending=None\n        for kind,value,now in events:\n            if kind=='press' and value in mapping:\n                if pending is not None and now>=pending[2]:\n                    text+=mapping[pending[0]][pending[1]]; pending=None\n                if pending is not None and pending[0]==value:\n                    pending[1]=(pending[1]+1)%len(mapping[value])\n                    pending[2]=now+window\n                else:\n                    if pending is not None: text+=mapping[pending[0]][pending[1]]\n                    pending=[value,0,window]\n            elif kind=='tick' and pending is not None and now>=pending[2]:\n                text+=mapping[pending[0]][pending[1]]; pending=None\n            elif kind=='backspace':\n                if pending is not None: pending=None\n                else: text=text[:-1]\n            elif kind=='space':\n                if pending is not None: text+=mapping[pending[0]][pending[1]]\n                pending=None; text+=' '\n            elif kind=='cancel': pending=None\n        return [text,pending]\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('multi-tap-keypad scenario 0', solve([[{'2': 'abc', '3': 'de'}, 5, [['press', '2', 10], ['press', '2', 11]]]] * N), [['', ['2', 1, 16]]] * N)\ncheck('multi-tap-keypad scenario 1', solve([[{'2': 'abc', '3': 'de'}, 5, []]] * N), [['', None]] * N)\ncheck('multi-tap-keypad scenario 2', solve([[{'2': 'abc', '3': 'de'}, 5, [['press', '2', 10], ['press', '2', 11], ['press', '2', 12], ['press', '2', 13], ['tick', '', 18]]]] * N), [['a', None]] * N)\ncheck('multi-tap-keypad scenario 3', solve([[{'2': 'abc', '3': 'de'}, 5, [['press', '2', 10], ['press', '2', 15]]]] * N), [['a', ['2', 0, 20]]] * N)\ncheck('multi-tap-keypad scenario 4', solve([[{'2': 'abc', '3': 'de'}, 5, [['press', '2', 10], ['press', '3', 12], ['tick', '', 17]]]] * N), [['ad', None]] * N)\ncheck('multi-tap-keypad scenario 5', solve([[{'2': 'abc', '3': 'de'}, 5, [['press', '2', 10], ['tick', '', 12]]]] * N), [['', ['2', 0, 15]]] * N)\ncheck('multi-tap-keypad scenario 6', solve([[{'2': 'abc', '3': 'de'}, 5, [['press', '2', 10], ['tick', '', 15], ['press', '3', 16], ['backspace', '', 17]]]] * N), [['a', None]] * N)\ncheck('multi-tap-keypad scenario 7', solve([[{'2': 'abc', '3': 'de'}, 5, [['press', '2', 10], ['press', '3', 11], ['space', '', 12], ['backspace', '', 13]]]] * N), [['ad', None]] * N)\ncheck('multi-tap-keypad scenario 8', solve([[{'2': 'abc', '3': 'de'}, 5, [['press', '2', 10], ['space', '', 12]]]] * N), [['a ', None]] * N)\ncheck('multi-tap-keypad scenario 9', solve([[{'2': 'abc', '3': 'de'}, 5, [['press', '?', 10], ['backspace', '', 11]]]] * N), [['', None]] * 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":"1b5188044f9aaeb32883d688a638b1735dd8a93d2ab86fdaf68da73b92ce844f","source":"\"\"\"Failure Map reference implementation. Python standard library only.\"\"\"\nimport json\n\nN = 1\nobservations = []\ndef solve(cases):\n    def run(c):\n        mapping,window,events=c\n        text=''; pending=None\n        for kind,value,now in events:\n            if kind=='press' and value in mapping:\n                if pending is not None and now>=pending[2]:\n                    text+=mapping[pending[0]][pending[1]]; pending=None\n                if pending is not None and pending[0]==value:\n                    pending[1]=(pending[1]+1)%len(mapping[value])\n                    pending[2]=now+window\n                else:\n                    if pending is not None: text+=mapping[pending[0]][pending[1]]\n                    pending=[value,len(mapping[value])-1,now+window]\n            elif kind=='tick' and pending is not None and now>=pending[2]:\n                text+=mapping[pending[0]][pending[1]]; pending=None\n            elif kind=='backspace':\n                if pending is not None: pending=None\n                else: text=text[:-1]\n            elif kind=='space':\n                if pending is not None: text+=mapping[pending[0]][pending[1]]\n                pending=None; text+=' '\n            elif kind=='cancel': pending=None\n        return [text,pending]\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('multi-tap-keypad scenario 0', solve([[{'2': 'abc', '3': 'de'}, 5, [['press', '2', 10], ['press', '2', 11]]]] * N), [['', ['2', 1, 16]]] * N)\ncheck('multi-tap-keypad scenario 1', solve([[{'2': 'abc', '3': 'de'}, 5, []]] * N), [['', None]] * N)\ncheck('multi-tap-keypad scenario 2', solve([[{'2': 'abc', '3': 'de'}, 5, [['press', '2', 10], ['press', '2', 11], ['press', '2', 12], ['press', '2', 13], ['tick', '', 18]]]] * N), [['a', None]] * N)\ncheck('multi-tap-keypad scenario 3', solve([[{'2': 'abc', '3': 'de'}, 5, [['press', '2', 10], ['press', '2', 15]]]] * N), [['a', ['2', 0, 20]]] * N)\ncheck('multi-tap-keypad scenario 4', solve([[{'2': 'abc', '3': 'de'}, 5, [['press', '2', 10], ['press', '3', 12], ['tick', '', 17]]]] * N), [['ad', None]] * N)\ncheck('multi-tap-keypad scenario 5', solve([[{'2': 'abc', '3': 'de'}, 5, [['press', '2', 10], ['tick', '', 12]]]] * N), [['', ['2', 0, 15]]] * N)\ncheck('multi-tap-keypad scenario 6', solve([[{'2': 'abc', '3': 'de'}, 5, [['press', '2', 10], ['tick', '', 15], ['press', '3', 16], ['backspace', '', 17]]]] * N), [['a', None]] * N)\ncheck('multi-tap-keypad scenario 7', solve([[{'2': 'abc', '3': 'de'}, 5, [['press', '2', 10], ['press', '3', 11], ['space', '', 12], ['backspace', '', 13]]]] * N), [['ad', None]] * N)\ncheck('multi-tap-keypad scenario 8', solve([[{'2': 'abc', '3': 'de'}, 5, [['press', '2', 10], ['space', '', 12]]]] * N), [['a ', None]] * N)\ncheck('multi-tap-keypad scenario 9', solve([[{'2': 'abc', '3': 'de'}, 5, [['press', '?', 10], ['backspace', '', 11]]]] * N), [['', None]] * 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":"c49828b5f5b1fdde51b61f28e886a77027aacc96eaa33b82489764363e23d433","source":"\"\"\"Failure Map reference implementation. Python standard library only.\"\"\"\nimport json\n\nN = 1\nobservations = []\ndef solve(cases):\n    def run(c):\n        mapping,window,events=c\n        text=''; pending=None\n        for kind,value,now in events:\n            if kind=='press' and value in mapping:\n                if pending is not None and now>=pending[2]:\n                    text+=mapping[pending[0]][pending[1]]; pending=None\n                if pending is not None and pending[0]==value:\n                    pending[1]=(pending[1]+1)%len(mapping[value])\n                    pending[2]=now+window\n                else:\n                    if pending is not None: text+=mapping[pending[0]][pending[1]]\n                    pending=[value,0,now+window]\n            elif kind=='tick' and pending is not None and now>=pending[2]:\n                text+=mapping[pending[0]][pending[1]]; pending=None\n            elif kind=='backspace':\n                if pending is not None: pending=None\n                else: text=text[:-1]\n            elif kind=='space':\n                if pending is not None: text+=mapping[pending[0]][pending[1]]\n                pending=None; text+=' '\n            elif kind=='cancel': pending=None\n        return [text,pending]\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('multi-tap-keypad scenario 0', solve([[{'2': 'abc', '3': 'de'}, 5, [['press', '2', 10], ['press', '2', 11]]]] * N), [['', ['2', 1, 16]]] * N)\ncheck('multi-tap-keypad scenario 1', solve([[{'2': 'abc', '3': 'de'}, 5, []]] * N), [['', None]] * N)\ncheck('multi-tap-keypad scenario 2', solve([[{'2': 'abc', '3': 'de'}, 5, [['press', '2', 10], ['press', '2', 11], ['press', '2', 12], ['press', '2', 13], ['tick', '', 18]]]] * N), [['a', None]] * N)\ncheck('multi-tap-keypad scenario 3', solve([[{'2': 'abc', '3': 'de'}, 5, [['press', '2', 10], ['press', '2', 15]]]] * N), [['a', ['2', 0, 20]]] * N)\ncheck('multi-tap-keypad scenario 4', solve([[{'2': 'abc', '3': 'de'}, 5, [['press', '2', 10], ['press', '3', 12], ['tick', '', 17]]]] * N), [['ad', None]] * N)\ncheck('multi-tap-keypad scenario 5', solve([[{'2': 'abc', '3': 'de'}, 5, [['press', '2', 10], ['tick', '', 12]]]] * N), [['', ['2', 0, 15]]] * N)\ncheck('multi-tap-keypad scenario 6', solve([[{'2': 'abc', '3': 'de'}, 5, [['press', '2', 10], ['tick', '', 15], ['press', '3', 16], ['backspace', '', 17]]]] * N), [['a', None]] * N)\ncheck('multi-tap-keypad scenario 7', solve([[{'2': 'abc', '3': 'de'}, 5, [['press', '2', 10], ['press', '3', 11], ['space', '', 12], ['backspace', '', 13]]]] * N), [['ad', None]] * N)\ncheck('multi-tap-keypad scenario 8', solve([[{'2': 'abc', '3': 'de'}, 5, [['press', '2', 10], ['space', '', 12]]]] * N), [['a ', None]] * N)\ncheck('multi-tap-keypad scenario 9', solve([[{'2': 'abc', '3': 'de'}, 5, [['press', '?', 10], ['backspace', '', 11]]]] * N), [['', None]] * 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-multi-tap-keypad-new-character","generated_at":"2026-09-29T14:42:07.383201+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 `pending=[value,0,now+window]` at the new character fault site; preserve the other state transitions.","root_cause":"A newly selected keypad key starts on its last character or an absolute deadline.","sha256":"9419f93c458954e4c6cef11fb3a050ee740c81fee67bea4f5b2da5b2ac876ce0","title":"Multi-tap keyboard character commit timing: A newly selected keypad key starts on its last character or an absolute deadline · case 01","variant":1,"variant_policy":"Five numbered records share a model and may reuse boundary fixtures.","verification":{"attempt":{"elapsed_ms":44.773,"exit_code":1,"observations":[{"actual":[["a",["2",0,5]]],"check":"multi-tap-keypad scenario 0","expected":[["",["2",1,16]]],"passed":false},{"actual":[["",null]],"check":"multi-tap-keypad scenario 1","expected":[["",null]],"passed":true},{"actual":[["aaaa",null]],"check":"multi-tap-keypad scenario 2","expected":[["a",null]],"passed":false},{"actual":[["a",["2",0,5]]],"check":"multi-tap-keypad scenario 3","expected":[["a",["2",0,20]]],"passed":false},{"actual":[["ad",null]],"check":"multi-tap-keypad scenario 4","expected":[["ad",null]],"passed":true},{"actual":[["a",null]],"check":"multi-tap-keypad scenario 5","expected":[["",["2",0,15]]],"passed":false},{"actual":[["a",null]],"check":"multi-tap-keypad scenario 6","expected":[["a",null]],"passed":true},{"actual":[["ad",null]],"check":"multi-tap-keypad scenario 7","expected":[["ad",null]],"passed":true},{"actual":[["a ",null]],"check":"multi-tap-keypad scenario 8","expected":[["a ",null]],"passed":true},{"actual":[["",null]],"check":"multi-tap-keypad scenario 9","expected":[["",null]],"passed":true}],"passed":false,"stderr":"","stdout":"{\"observations\": [{\"check\": \"multi-tap-keypad scenario 0\", \"actual\": [[\"a\", [\"2\", 0, 5]]], \"expected\": [[\"\", [\"2\", 1, 16]]], \"passed\": false}, {\"check\": \"multi-tap-keypad scenario 1\", \"actual\": [[\"\", null]], \"expected\": [[\"\", null]], \"passed\": true}, {\"check\": \"multi-tap-keypad scenario 2\", \"actual\": [[\"aaaa\", null]], \"expected\": [[\"a\", null]], \"passed\": false}, {\"check\": \"multi-tap-keypad scenario 3\", \"actual\": [[\"a\", [\"2\", 0, 5]]], \"expected\": [[\"a\", [\"2\", 0, 20]]], \"passed\": false}, {\"check\": \"multi-tap-keypad scenario 4\", \"actual\": [[\"ad\", null]], \"expected\": [[\"ad\", null]], \"passed\": true}, {\"check\": \"multi-tap-keypad scenario 5\", \"actual\": [[\"a\", null]], \"expected\": [[\"\", [\"2\", 0, 15]]], \"passed\": false}, {\"check\": \"multi-tap-keypad scenario 6\", \"actual\": [[\"a\", null]], \"expected\": [[\"a\", null]], \"passed\": true}, {\"check\": \"multi-tap-keypad scenario 7\", \"actual\": [[\"ad\", null]], \"expected\": [[\"ad\", null]], \"passed\": true}, {\"check\": \"multi-tap-keypad scenario 8\", \"actual\": [[\"a \", null]], \"expected\": [[\"a \", null]], \"passed\": true}, {\"check\": \"multi-tap-keypad scenario 9\", \"actual\": [[\"\", null]], \"expected\": [[\"\", null]], \"passed\": true}], \"passed\": false}\n"},"broken":{"elapsed_ms":45.858,"exit_code":1,"observations":[{"actual":[["",["2",0,16]]],"check":"multi-tap-keypad scenario 0","expected":[["",["2",1,16]]],"passed":false},{"actual":[["",null]],"check":"multi-tap-keypad scenario 1","expected":[["",null]],"passed":true},{"actual":[["c",null]],"check":"multi-tap-keypad scenario 2","expected":[["a",null]],"passed":false},{"actual":[["c",["2",2,20]]],"check":"multi-tap-keypad scenario 3","expected":[["a",["2",0,20]]],"passed":false},{"actual":[["ce",null]],"check":"multi-tap-keypad scenario 4","expected":[["ad",null]],"passed":false},{"actual":[["",["2",2,15]]],"check":"multi-tap-keypad scenario 5","expected":[["",["2",0,15]]],"passed":false},{"actual":[["c",null]],"check":"multi-tap-keypad scenario 6","expected":[["a",null]],"passed":false},{"actual":[["ce",null]],"check":"multi-tap-keypad scenario 7","expected":[["ad",null]],"passed":false},{"actual":[["c ",null]],"check":"multi-tap-keypad scenario 8","expected":[["a ",null]],"passed":false},{"actual":[["",null]],"check":"multi-tap-keypad scenario 9","expected":[["",null]],"passed":true}],"passed":false,"stderr":"","stdout":"{\"observations\": [{\"check\": \"multi-tap-keypad scenario 0\", \"actual\": [[\"\", [\"2\", 0, 16]]], \"expected\": [[\"\", [\"2\", 1, 16]]], \"passed\": false}, {\"check\": \"multi-tap-keypad scenario 1\", \"actual\": [[\"\", null]], \"expected\": [[\"\", null]], \"passed\": true}, {\"check\": \"multi-tap-keypad scenario 2\", \"actual\": [[\"c\", null]], \"expected\": [[\"a\", null]], \"passed\": false}, {\"check\": \"multi-tap-keypad scenario 3\", \"actual\": [[\"c\", [\"2\", 2, 20]]], \"expected\": [[\"a\", [\"2\", 0, 20]]], \"passed\": false}, {\"check\": \"multi-tap-keypad scenario 4\", \"actual\": [[\"ce\", null]], \"expected\": [[\"ad\", null]], \"passed\": false}, {\"check\": \"multi-tap-keypad scenario 5\", \"actual\": [[\"\", [\"2\", 2, 15]]], \"expected\": [[\"\", [\"2\", 0, 15]]], \"passed\": false}, {\"check\": \"multi-tap-keypad scenario 6\", \"actual\": [[\"c\", null]], \"expected\": [[\"a\", null]], \"passed\": false}, {\"check\": \"multi-tap-keypad scenario 7\", \"actual\": [[\"ce\", null]], \"expected\": [[\"ad\", null]], \"passed\": false}, {\"check\": \"multi-tap-keypad scenario 8\", \"actual\": [[\"c \", null]], \"expected\": [[\"a \", null]], \"passed\": false}, {\"check\": \"multi-tap-keypad scenario 9\", \"actual\": [[\"\", null]], \"expected\": [[\"\", null]], \"passed\": true}], \"passed\": false}\n"},"fixed":{"elapsed_ms":41.738,"exit_code":0,"observations":[{"actual":[["",["2",1,16]]],"check":"multi-tap-keypad scenario 0","expected":[["",["2",1,16]]],"passed":true},{"actual":[["",null]],"check":"multi-tap-keypad scenario 1","expected":[["",null]],"passed":true},{"actual":[["a",null]],"check":"multi-tap-keypad scenario 2","expected":[["a",null]],"passed":true},{"actual":[["a",["2",0,20]]],"check":"multi-tap-keypad scenario 3","expected":[["a",["2",0,20]]],"passed":true},{"actual":[["ad",null]],"check":"multi-tap-keypad scenario 4","expected":[["ad",null]],"passed":true},{"actual":[["",["2",0,15]]],"check":"multi-tap-keypad scenario 5","expected":[["",["2",0,15]]],"passed":true},{"actual":[["a",null]],"check":"multi-tap-keypad scenario 6","expected":[["a",null]],"passed":true},{"actual":[["ad",null]],"check":"multi-tap-keypad scenario 7","expected":[["ad",null]],"passed":true},{"actual":[["a ",null]],"check":"multi-tap-keypad scenario 8","expected":[["a ",null]],"passed":true},{"actual":[["",null]],"check":"multi-tap-keypad scenario 9","expected":[["",null]],"passed":true}],"passed":true,"stderr":"","stdout":"{\"observations\": [{\"check\": \"multi-tap-keypad scenario 0\", \"actual\": [[\"\", [\"2\", 1, 16]]], \"expected\": [[\"\", [\"2\", 1, 16]]], \"passed\": true}, {\"check\": \"multi-tap-keypad scenario 1\", \"actual\": [[\"\", null]], \"expected\": [[\"\", null]], \"passed\": true}, {\"check\": \"multi-tap-keypad scenario 2\", \"actual\": [[\"a\", null]], \"expected\": [[\"a\", null]], \"passed\": true}, {\"check\": \"multi-tap-keypad scenario 3\", \"actual\": [[\"a\", [\"2\", 0, 20]]], \"expected\": [[\"a\", [\"2\", 0, 20]]], \"passed\": true}, {\"check\": \"multi-tap-keypad scenario 4\", \"actual\": [[\"ad\", null]], \"expected\": [[\"ad\", null]], \"passed\": true}, {\"check\": \"multi-tap-keypad scenario 5\", \"actual\": [[\"\", [\"2\", 0, 15]]], \"expected\": [[\"\", [\"2\", 0, 15]]], \"passed\": true}, {\"check\": \"multi-tap-keypad scenario 6\", \"actual\": [[\"a\", null]], \"expected\": [[\"a\", null]], \"passed\": true}, {\"check\": \"multi-tap-keypad scenario 7\", \"actual\": [[\"ad\", null]], \"expected\": [[\"ad\", null]], \"passed\": true}, {\"check\": \"multi-tap-keypad scenario 8\", \"actual\": [[\"a \", null]], \"expected\": [[\"a \", null]], \"passed\": true}, {\"check\": \"multi-tap-keypad scenario 9\", \"actual\": [[\"\", null]], \"expected\": [[\"\", null]], \"passed\": true}], \"passed\": true}\n"}},"verified":true,"visibility":"public"}