{"abstract":"The event trace violates the hold boundary rule and produces incorrect keyboard state or command output.","category":"Keyboard interactions","checks":9,"contract":"Case [dual,tap,modifier,threshold,events]. Events [kind,key,time]. Dual down arms tap; repeated dual downs ignored. A foreign down or threshold tick promotes pending dual into modifier down before forwarding foreign down. Dual up emits tap when pending, modifier up when promoted. Cancel releases a promoted modifier and cancels pending tap. Foreign up is forwarded. Return emitted [phase,key] and pending [start,promoted] 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-dual-role-key","failed_approach":"The partial repair changes this transition to now>=threshold, which still violates the model contract on the explicit regression traces.","family":"s3-keyboard-interactions-dual-role-key-hold-boundary","id":"FA-31806","implementations":{"attempt":{"sha256":"9898b7053220813a128b16c44db3f61b57e8a8c77ecc89e30c10acbb8dec588c","source":"\"\"\"Failure Map reference implementation. Python standard library only.\"\"\"\nimport json\n\nN = 1\nobservations = []\ndef solve(cases):\n    def run(c):\n        dual,tap,modifier,threshold,events=c\n        pending=None; out=[]\n        for kind,key,now in events:\n            if kind=='down' and key==dual:\n                if pending is None: pending=[now,False]\n            elif kind=='down':\n                if pending is not None and not pending[1]:\n                    out.append(['down',modifier]); pending[1]=True\n                out.append(['down',key])\n            elif kind=='tick':\n                if pending is not None and not pending[1] and now>=threshold:\n                    out.append(['down',modifier]); pending[1]=True\n            elif kind=='up' and key==dual:\n                if pending is not None:\n                    if pending[1]: out.append(['up',modifier])\n                    else: out.extend([['down',tap],['up',tap]])\n                    pending=None\n            elif kind=='up': out.append(['up',key])\n            elif kind=='cancel':\n                if pending is not None and pending[1]: out.append(['up',modifier])\n                pending=None\n        return [out,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('dual-role-key scenario 0', solve([['X', 'Escape', 'Control', 5, []]] * N), [[[], None]] * N)\ncheck('dual-role-key scenario 1', solve([['X', 'Escape', 'Control', 5, [['down', 'X', 10], ['up', 'X', 11]]]] * N), [[[['down', 'Escape'], ['up', 'Escape']], None]] * N)\ncheck('dual-role-key scenario 2', solve([['X', 'Escape', 'Control', 5, [['down', 'X', 10], ['down', 'A', 11], ['down', 'B', 12], ['up', 'A', 13], ['up', 'X', 14]]]] * N), [[[['down', 'Control'], ['down', 'A'], ['down', 'B'], ['up', 'A'], ['up', 'Control']], None]] * N)\ncheck('dual-role-key scenario 3', solve([['X', 'Escape', 'Control', 5, [['down', 'X', 10], ['tick', '', 12]]]] * N), [[[], [10, False]]] * N)\ncheck('dual-role-key scenario 4', solve([['X', 'Escape', 'Control', 5, [['down', 'X', 10], ['tick', '', 15], ['tick', '', 16], ['up', 'X', 17]]]] * N), [[[['down', 'Control'], ['up', 'Control']], None]] * N)\ncheck('dual-role-key scenario 5', solve([['X', 'Escape', 'Control', 5, [['down', 'X', 10], ['down', 'X', 13], ['tick', '', 15]]]] * N), [[[['down', 'Control']], [10, True]]] * N)\ncheck('dual-role-key scenario 6', solve([['X', 'Escape', 'Control', 5, [['down', 'X', 10], ['cancel', '', 11]]]] * N), [[[], None]] * N)\ncheck('dual-role-key scenario 7', solve([['X', 'Escape', 'Control', 5, [['down', 'X', 10], ['tick', '', 15], ['cancel', '', 16]]]] * N), [[[['down', 'Control'], ['up', 'Control']], None]] * N)\ncheck('dual-role-key scenario 8', solve([['X', 'Escape', 'Control', 5, [['down', 'A', 10], ['up', 'A', 11]]]] * N), [[[['down', 'A'], ['up', 'A']], 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":"de19067eec4d66271fc6dcebba8ea1a1008c0f3f5cb0ee91cac7e368c633c11a","source":"\"\"\"Failure Map reference implementation. Python standard library only.\"\"\"\nimport json\n\nN = 1\nobservations = []\ndef solve(cases):\n    def run(c):\n        dual,tap,modifier,threshold,events=c\n        pending=None; out=[]\n        for kind,key,now in events:\n            if kind=='down' and key==dual:\n                if pending is None: pending=[now,False]\n            elif kind=='down':\n                if pending is not None and not pending[1]:\n                    out.append(['down',modifier]); pending[1]=True\n                out.append(['down',key])\n            elif kind=='tick':\n                if pending is not None and not pending[1] and now-pending[0]>threshold:\n                    out.append(['down',modifier]); pending[1]=True\n            elif kind=='up' and key==dual:\n                if pending is not None:\n                    if pending[1]: out.append(['up',modifier])\n                    else: out.extend([['down',tap],['up',tap]])\n                    pending=None\n            elif kind=='up': out.append(['up',key])\n            elif kind=='cancel':\n                if pending is not None and pending[1]: out.append(['up',modifier])\n                pending=None\n        return [out,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('dual-role-key scenario 0', solve([['X', 'Escape', 'Control', 5, []]] * N), [[[], None]] * N)\ncheck('dual-role-key scenario 1', solve([['X', 'Escape', 'Control', 5, [['down', 'X', 10], ['up', 'X', 11]]]] * N), [[[['down', 'Escape'], ['up', 'Escape']], None]] * N)\ncheck('dual-role-key scenario 2', solve([['X', 'Escape', 'Control', 5, [['down', 'X', 10], ['down', 'A', 11], ['down', 'B', 12], ['up', 'A', 13], ['up', 'X', 14]]]] * N), [[[['down', 'Control'], ['down', 'A'], ['down', 'B'], ['up', 'A'], ['up', 'Control']], None]] * N)\ncheck('dual-role-key scenario 3', solve([['X', 'Escape', 'Control', 5, [['down', 'X', 10], ['tick', '', 12]]]] * N), [[[], [10, False]]] * N)\ncheck('dual-role-key scenario 4', solve([['X', 'Escape', 'Control', 5, [['down', 'X', 10], ['tick', '', 15], ['tick', '', 16], ['up', 'X', 17]]]] * N), [[[['down', 'Control'], ['up', 'Control']], None]] * N)\ncheck('dual-role-key scenario 5', solve([['X', 'Escape', 'Control', 5, [['down', 'X', 10], ['down', 'X', 13], ['tick', '', 15]]]] * N), [[[['down', 'Control']], [10, True]]] * N)\ncheck('dual-role-key scenario 6', solve([['X', 'Escape', 'Control', 5, [['down', 'X', 10], ['cancel', '', 11]]]] * N), [[[], None]] * N)\ncheck('dual-role-key scenario 7', solve([['X', 'Escape', 'Control', 5, [['down', 'X', 10], ['tick', '', 15], ['cancel', '', 16]]]] * N), [[[['down', 'Control'], ['up', 'Control']], None]] * N)\ncheck('dual-role-key scenario 8', solve([['X', 'Escape', 'Control', 5, [['down', 'A', 10], ['up', 'A', 11]]]] * N), [[[['down', 'A'], ['up', 'A']], 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":"e4ae9417af0a85ce6dd64e5b58c1836d8a021ae82f911ba9c19a8130ed4a1a26","source":"\"\"\"Failure Map reference implementation. Python standard library only.\"\"\"\nimport json\n\nN = 1\nobservations = []\ndef solve(cases):\n    def run(c):\n        dual,tap,modifier,threshold,events=c\n        pending=None; out=[]\n        for kind,key,now in events:\n            if kind=='down' and key==dual:\n                if pending is None: pending=[now,False]\n            elif kind=='down':\n                if pending is not None and not pending[1]:\n                    out.append(['down',modifier]); pending[1]=True\n                out.append(['down',key])\n            elif kind=='tick':\n                if pending is not None and not pending[1] and now-pending[0]>=threshold:\n                    out.append(['down',modifier]); pending[1]=True\n            elif kind=='up' and key==dual:\n                if pending is not None:\n                    if pending[1]: out.append(['up',modifier])\n                    else: out.extend([['down',tap],['up',tap]])\n                    pending=None\n            elif kind=='up': out.append(['up',key])\n            elif kind=='cancel':\n                if pending is not None and pending[1]: out.append(['up',modifier])\n                pending=None\n        return [out,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('dual-role-key scenario 0', solve([['X', 'Escape', 'Control', 5, []]] * N), [[[], None]] * N)\ncheck('dual-role-key scenario 1', solve([['X', 'Escape', 'Control', 5, [['down', 'X', 10], ['up', 'X', 11]]]] * N), [[[['down', 'Escape'], ['up', 'Escape']], None]] * N)\ncheck('dual-role-key scenario 2', solve([['X', 'Escape', 'Control', 5, [['down', 'X', 10], ['down', 'A', 11], ['down', 'B', 12], ['up', 'A', 13], ['up', 'X', 14]]]] * N), [[[['down', 'Control'], ['down', 'A'], ['down', 'B'], ['up', 'A'], ['up', 'Control']], None]] * N)\ncheck('dual-role-key scenario 3', solve([['X', 'Escape', 'Control', 5, [['down', 'X', 10], ['tick', '', 12]]]] * N), [[[], [10, False]]] * N)\ncheck('dual-role-key scenario 4', solve([['X', 'Escape', 'Control', 5, [['down', 'X', 10], ['tick', '', 15], ['tick', '', 16], ['up', 'X', 17]]]] * N), [[[['down', 'Control'], ['up', 'Control']], None]] * N)\ncheck('dual-role-key scenario 5', solve([['X', 'Escape', 'Control', 5, [['down', 'X', 10], ['down', 'X', 13], ['tick', '', 15]]]] * N), [[[['down', 'Control']], [10, True]]] * N)\ncheck('dual-role-key scenario 6', solve([['X', 'Escape', 'Control', 5, [['down', 'X', 10], ['cancel', '', 11]]]] * N), [[[], None]] * N)\ncheck('dual-role-key scenario 7', solve([['X', 'Escape', 'Control', 5, [['down', 'X', 10], ['tick', '', 15], ['cancel', '', 16]]]] * N), [[[['down', 'Control'], ['up', 'Control']], None]] * N)\ncheck('dual-role-key scenario 8', solve([['X', 'Escape', 'Control', 5, [['down', 'A', 10], ['up', 'A', 11]]]] * N), [[[['down', 'A'], ['up', 'A']], 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-dual-role-key-hold-boundary","generated_at":"2026-09-29T14:42:05.753429+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 `now-pending[0]>=threshold` at the hold boundary fault site; preserve the other state transitions.","root_cause":"Dual-role timeout uses an exclusive threshold or the absolute event clock.","sha256":"73a66aca9d0f59fa454a24c854d83f0cd3944c8946137f169a4e49359980a0f1","title":"Tap-hold dual-role keyboard key: Dual-role timeout uses an exclusive threshold or the absolute event clock · case 01","variant":1,"variant_policy":"Five numbered records share a model and may reuse boundary fixtures.","verification":{"attempt":{"elapsed_ms":47.367,"exit_code":1,"observations":[{"actual":[[[],null]],"check":"dual-role-key scenario 0","expected":[[[],null]],"passed":true},{"actual":[[[["down","Escape"],["up","Escape"]],null]],"check":"dual-role-key scenario 1","expected":[[[["down","Escape"],["up","Escape"]],null]],"passed":true},{"actual":[[[["down","Control"],["down","A"],["down","B"],["up","A"],["up","Control"]],null]],"check":"dual-role-key scenario 2","expected":[[[["down","Control"],["down","A"],["down","B"],["up","A"],["up","Control"]],null]],"passed":true},{"actual":[[[["down","Control"]],[10,true]]],"check":"dual-role-key scenario 3","expected":[[[],[10,false]]],"passed":false},{"actual":[[[["down","Control"],["up","Control"]],null]],"check":"dual-role-key scenario 4","expected":[[[["down","Control"],["up","Control"]],null]],"passed":true},{"actual":[[[["down","Control"]],[10,true]]],"check":"dual-role-key scenario 5","expected":[[[["down","Control"]],[10,true]]],"passed":true},{"actual":[[[],null]],"check":"dual-role-key scenario 6","expected":[[[],null]],"passed":true},{"actual":[[[["down","Control"],["up","Control"]],null]],"check":"dual-role-key scenario 7","expected":[[[["down","Control"],["up","Control"]],null]],"passed":true},{"actual":[[[["down","A"],["up","A"]],null]],"check":"dual-role-key scenario 8","expected":[[[["down","A"],["up","A"]],null]],"passed":true}],"passed":false,"stderr":"","stdout":"{\"observations\": [{\"check\": \"dual-role-key scenario 0\", \"actual\": [[[], null]], \"expected\": [[[], null]], \"passed\": true}, {\"check\": \"dual-role-key scenario 1\", \"actual\": [[[[\"down\", \"Escape\"], [\"up\", \"Escape\"]], null]], \"expected\": [[[[\"down\", \"Escape\"], [\"up\", \"Escape\"]], null]], \"passed\": true}, {\"check\": \"dual-role-key scenario 2\", \"actual\": [[[[\"down\", \"Control\"], [\"down\", \"A\"], [\"down\", \"B\"], [\"up\", \"A\"], [\"up\", \"Control\"]], null]], \"expected\": [[[[\"down\", \"Control\"], [\"down\", \"A\"], [\"down\", \"B\"], [\"up\", \"A\"], [\"up\", \"Control\"]], null]], \"passed\": true}, {\"check\": \"dual-role-key scenario 3\", \"actual\": [[[[\"down\", \"Control\"]], [10, true]]], \"expected\": [[[], [10, false]]], \"passed\": false}, {\"check\": \"dual-role-key scenario 4\", \"actual\": [[[[\"down\", \"Control\"], [\"up\", \"Control\"]], null]], \"expected\": [[[[\"down\", \"Control\"], [\"up\", \"Control\"]], null]], \"passed\": true}, {\"check\": \"dual-role-key scenario 5\", \"actual\": [[[[\"down\", \"Control\"]], [10, true]]], \"expected\": [[[[\"down\", \"Control\"]], [10, true]]], \"passed\": true}, {\"check\": \"dual-role-key scenario 6\", \"actual\": [[[], null]], \"expected\": [[[], null]], \"passed\": true}, {\"check\": \"dual-role-key scenario 7\", \"actual\": [[[[\"down\", \"Control\"], [\"up\", \"Control\"]], null]], \"expected\": [[[[\"down\", \"Control\"], [\"up\", \"Control\"]], null]], \"passed\": true}, {\"check\": \"dual-role-key scenario 8\", \"actual\": [[[[\"down\", \"A\"], [\"up\", \"A\"]], null]], \"expected\": [[[[\"down\", \"A\"], [\"up\", \"A\"]], null]], \"passed\": true}], \"passed\": false}\n"},"broken":{"elapsed_ms":49.623,"exit_code":1,"observations":[{"actual":[[[],null]],"check":"dual-role-key scenario 0","expected":[[[],null]],"passed":true},{"actual":[[[["down","Escape"],["up","Escape"]],null]],"check":"dual-role-key scenario 1","expected":[[[["down","Escape"],["up","Escape"]],null]],"passed":true},{"actual":[[[["down","Control"],["down","A"],["down","B"],["up","A"],["up","Control"]],null]],"check":"dual-role-key scenario 2","expected":[[[["down","Control"],["down","A"],["down","B"],["up","A"],["up","Control"]],null]],"passed":true},{"actual":[[[],[10,false]]],"check":"dual-role-key scenario 3","expected":[[[],[10,false]]],"passed":true},{"actual":[[[["down","Control"],["up","Control"]],null]],"check":"dual-role-key scenario 4","expected":[[[["down","Control"],["up","Control"]],null]],"passed":true},{"actual":[[[],[10,false]]],"check":"dual-role-key scenario 5","expected":[[[["down","Control"]],[10,true]]],"passed":false},{"actual":[[[],null]],"check":"dual-role-key scenario 6","expected":[[[],null]],"passed":true},{"actual":[[[],null]],"check":"dual-role-key scenario 7","expected":[[[["down","Control"],["up","Control"]],null]],"passed":false},{"actual":[[[["down","A"],["up","A"]],null]],"check":"dual-role-key scenario 8","expected":[[[["down","A"],["up","A"]],null]],"passed":true}],"passed":false,"stderr":"","stdout":"{\"observations\": [{\"check\": \"dual-role-key scenario 0\", \"actual\": [[[], null]], \"expected\": [[[], null]], \"passed\": true}, {\"check\": \"dual-role-key scenario 1\", \"actual\": [[[[\"down\", \"Escape\"], [\"up\", \"Escape\"]], null]], \"expected\": [[[[\"down\", \"Escape\"], [\"up\", \"Escape\"]], null]], \"passed\": true}, {\"check\": \"dual-role-key scenario 2\", \"actual\": [[[[\"down\", \"Control\"], [\"down\", \"A\"], [\"down\", \"B\"], [\"up\", \"A\"], [\"up\", \"Control\"]], null]], \"expected\": [[[[\"down\", \"Control\"], [\"down\", \"A\"], [\"down\", \"B\"], [\"up\", \"A\"], [\"up\", \"Control\"]], null]], \"passed\": true}, {\"check\": \"dual-role-key scenario 3\", \"actual\": [[[], [10, false]]], \"expected\": [[[], [10, false]]], \"passed\": true}, {\"check\": \"dual-role-key scenario 4\", \"actual\": [[[[\"down\", \"Control\"], [\"up\", \"Control\"]], null]], \"expected\": [[[[\"down\", \"Control\"], [\"up\", \"Control\"]], null]], \"passed\": true}, {\"check\": \"dual-role-key scenario 5\", \"actual\": [[[], [10, false]]], \"expected\": [[[[\"down\", \"Control\"]], [10, true]]], \"passed\": false}, {\"check\": \"dual-role-key scenario 6\", \"actual\": [[[], null]], \"expected\": [[[], null]], \"passed\": true}, {\"check\": \"dual-role-key scenario 7\", \"actual\": [[[], null]], \"expected\": [[[[\"down\", \"Control\"], [\"up\", \"Control\"]], null]], \"passed\": false}, {\"check\": \"dual-role-key scenario 8\", \"actual\": [[[[\"down\", \"A\"], [\"up\", \"A\"]], null]], \"expected\": [[[[\"down\", \"A\"], [\"up\", \"A\"]], null]], \"passed\": true}], \"passed\": false}\n"},"fixed":{"elapsed_ms":50.678,"exit_code":0,"observations":[{"actual":[[[],null]],"check":"dual-role-key scenario 0","expected":[[[],null]],"passed":true},{"actual":[[[["down","Escape"],["up","Escape"]],null]],"check":"dual-role-key scenario 1","expected":[[[["down","Escape"],["up","Escape"]],null]],"passed":true},{"actual":[[[["down","Control"],["down","A"],["down","B"],["up","A"],["up","Control"]],null]],"check":"dual-role-key scenario 2","expected":[[[["down","Control"],["down","A"],["down","B"],["up","A"],["up","Control"]],null]],"passed":true},{"actual":[[[],[10,false]]],"check":"dual-role-key scenario 3","expected":[[[],[10,false]]],"passed":true},{"actual":[[[["down","Control"],["up","Control"]],null]],"check":"dual-role-key scenario 4","expected":[[[["down","Control"],["up","Control"]],null]],"passed":true},{"actual":[[[["down","Control"]],[10,true]]],"check":"dual-role-key scenario 5","expected":[[[["down","Control"]],[10,true]]],"passed":true},{"actual":[[[],null]],"check":"dual-role-key scenario 6","expected":[[[],null]],"passed":true},{"actual":[[[["down","Control"],["up","Control"]],null]],"check":"dual-role-key scenario 7","expected":[[[["down","Control"],["up","Control"]],null]],"passed":true},{"actual":[[[["down","A"],["up","A"]],null]],"check":"dual-role-key scenario 8","expected":[[[["down","A"],["up","A"]],null]],"passed":true}],"passed":true,"stderr":"","stdout":"{\"observations\": [{\"check\": \"dual-role-key scenario 0\", \"actual\": [[[], null]], \"expected\": [[[], null]], \"passed\": true}, {\"check\": \"dual-role-key scenario 1\", \"actual\": [[[[\"down\", \"Escape\"], [\"up\", \"Escape\"]], null]], \"expected\": [[[[\"down\", \"Escape\"], [\"up\", \"Escape\"]], null]], \"passed\": true}, {\"check\": \"dual-role-key scenario 2\", \"actual\": [[[[\"down\", \"Control\"], [\"down\", \"A\"], [\"down\", \"B\"], [\"up\", \"A\"], [\"up\", \"Control\"]], null]], \"expected\": [[[[\"down\", \"Control\"], [\"down\", \"A\"], [\"down\", \"B\"], [\"up\", \"A\"], [\"up\", \"Control\"]], null]], \"passed\": true}, {\"check\": \"dual-role-key scenario 3\", \"actual\": [[[], [10, false]]], \"expected\": [[[], [10, false]]], \"passed\": true}, {\"check\": \"dual-role-key scenario 4\", \"actual\": [[[[\"down\", \"Control\"], [\"up\", \"Control\"]], null]], \"expected\": [[[[\"down\", \"Control\"], [\"up\", \"Control\"]], null]], \"passed\": true}, {\"check\": \"dual-role-key scenario 5\", \"actual\": [[[[\"down\", \"Control\"]], [10, true]]], \"expected\": [[[[\"down\", \"Control\"]], [10, true]]], \"passed\": true}, {\"check\": \"dual-role-key scenario 6\", \"actual\": [[[], null]], \"expected\": [[[], null]], \"passed\": true}, {\"check\": \"dual-role-key scenario 7\", \"actual\": [[[[\"down\", \"Control\"], [\"up\", \"Control\"]], null]], \"expected\": [[[[\"down\", \"Control\"], [\"up\", \"Control\"]], null]], \"passed\": true}, {\"check\": \"dual-role-key scenario 8\", \"actual\": [[[[\"down\", \"A\"], [\"up\", \"A\"]], null]], \"expected\": [[[[\"down\", \"A\"], [\"up\", \"A\"]], null]], \"passed\": true}], \"passed\": true}\n"}},"verified":true,"visibility":"public"}