{"abstract":"The event trace violates the blur clear rule and produces incorrect keyboard state or command output.","category":"Keyboard interactions","checks":10,"contract":"Events [kind,id,keys]. Initial window is focused. Request replaces pending id and deduplicated requested keys while focused. Grant applies only to current pending id while focused, filters Escape from captured keys, replaces active grant and clears pending. Deny clears only matching pending. Blur clears pending and active; focus restores eligibility; release clears both. Return focused flag, pending [id,keys] or None and active keys. 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-keyboard-lock","failed_approach":"The partial repair changes this transition to focused=False; pending=None, which still violates the model contract on the explicit regression traces.","family":"s3-keyboard-interactions-keyboard-lock-blur-clear","id":"FA-32131","implementations":{"attempt":{"sha256":"5a5f526e8d5df5efc70f8c6fca4bd4aed62b82c2750e218574c9e6a026ce9e25","source":"\"\"\"Failure Map reference implementation. Python standard library only.\"\"\"\nimport json\n\nN = 1\nobservations = []\ndef solve(cases):\n    def run(c):\n        focused=True; pending=None; active=[]\n        for kind,ident,keys in c:\n            if kind=='request' and focused:\n                pending=[ident,sorted(set(keys))]\n            elif kind=='grant' and focused and pending is not None and ident==pending[0]:\n                active=[k for k in pending[1] if k!='Escape']\n                pending=None\n            elif kind=='deny' and pending is not None and ident==pending[0]:\n                pending=None\n            elif kind=='blur':\n                focused=False; pending=None\n            elif kind=='focus': focused=True\n            elif kind=='release': pending=None; active=[]\n        return [focused,pending,active]\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('keyboard-lock scenario 0', solve([[]] * N), [[True, None, []]] * N)\ncheck('keyboard-lock scenario 1', solve([[['request', 1, ['B', 'A', 'A']]]] * N), [[True, [1, ['A', 'B']], []]] * N)\ncheck('keyboard-lock scenario 2', solve([[['request', 1, ['A', 'Escape']], ['grant', 1, []]]] * N), [[True, None, ['A']]] * N)\ncheck('keyboard-lock scenario 3', solve([[['request', 1, ['A']], ['request', 2, ['B']], ['grant', 1, []]]] * N), [[True, [2, ['B']], []]] * N)\ncheck('keyboard-lock scenario 4', solve([[['request', 1, ['A']], ['request', 2, ['B']], ['deny', 1, []]]] * N), [[True, [2, ['B']], []]] * N)\ncheck('keyboard-lock scenario 5', solve([[['request', 1, ['A']], ['grant', 1, []], ['request', 2, ['B']], ['grant', 2, []]]] * N), [[True, None, ['B']]] * N)\ncheck('keyboard-lock scenario 6', solve([[['blur', 0, []], ['request', 1, ['A']]]] * N), [[False, None, []]] * N)\ncheck('keyboard-lock scenario 7', solve([[['request', 1, ['A']], ['grant', 1, []], ['request', 2, ['B']], ['blur', 0, []]]] * N), [[False, None, []]] * N)\ncheck('keyboard-lock scenario 8', solve([[['request', 1, ['A']], ['grant', 1, []], ['request', 2, ['B']], ['release', 0, []]]] * N), [[True, None, []]] * N)\ncheck('keyboard-lock scenario 9', solve([[['request', 1, ['A']], ['deny', 1, []]]] * N), [[True, 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":"bd42bcce8547d36aec8bfa971aca8e1eb95f2aa821aff32d976360eb3b3a0e34","source":"\"\"\"Failure Map reference implementation. Python standard library only.\"\"\"\nimport json\n\nN = 1\nobservations = []\ndef solve(cases):\n    def run(c):\n        focused=True; pending=None; active=[]\n        for kind,ident,keys in c:\n            if kind=='request' and focused:\n                pending=[ident,sorted(set(keys))]\n            elif kind=='grant' and focused and pending is not None and ident==pending[0]:\n                active=[k for k in pending[1] if k!='Escape']\n                pending=None\n            elif kind=='deny' and pending is not None and ident==pending[0]:\n                pending=None\n            elif kind=='blur':\n                focused=False; active=[]\n            elif kind=='focus': focused=True\n            elif kind=='release': pending=None; active=[]\n        return [focused,pending,active]\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('keyboard-lock scenario 0', solve([[]] * N), [[True, None, []]] * N)\ncheck('keyboard-lock scenario 1', solve([[['request', 1, ['B', 'A', 'A']]]] * N), [[True, [1, ['A', 'B']], []]] * N)\ncheck('keyboard-lock scenario 2', solve([[['request', 1, ['A', 'Escape']], ['grant', 1, []]]] * N), [[True, None, ['A']]] * N)\ncheck('keyboard-lock scenario 3', solve([[['request', 1, ['A']], ['request', 2, ['B']], ['grant', 1, []]]] * N), [[True, [2, ['B']], []]] * N)\ncheck('keyboard-lock scenario 4', solve([[['request', 1, ['A']], ['request', 2, ['B']], ['deny', 1, []]]] * N), [[True, [2, ['B']], []]] * N)\ncheck('keyboard-lock scenario 5', solve([[['request', 1, ['A']], ['grant', 1, []], ['request', 2, ['B']], ['grant', 2, []]]] * N), [[True, None, ['B']]] * N)\ncheck('keyboard-lock scenario 6', solve([[['blur', 0, []], ['request', 1, ['A']]]] * N), [[False, None, []]] * N)\ncheck('keyboard-lock scenario 7', solve([[['request', 1, ['A']], ['grant', 1, []], ['request', 2, ['B']], ['blur', 0, []]]] * N), [[False, None, []]] * N)\ncheck('keyboard-lock scenario 8', solve([[['request', 1, ['A']], ['grant', 1, []], ['request', 2, ['B']], ['release', 0, []]]] * N), [[True, None, []]] * N)\ncheck('keyboard-lock scenario 9', solve([[['request', 1, ['A']], ['deny', 1, []]]] * N), [[True, 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":"b38b6aba0b4224b4568c292bb3ec2a021b546e0cd6bcec32ed9896b9e1a892fa","source":"\"\"\"Failure Map reference implementation. Python standard library only.\"\"\"\nimport json\n\nN = 1\nobservations = []\ndef solve(cases):\n    def run(c):\n        focused=True; pending=None; active=[]\n        for kind,ident,keys in c:\n            if kind=='request' and focused:\n                pending=[ident,sorted(set(keys))]\n            elif kind=='grant' and focused and pending is not None and ident==pending[0]:\n                active=[k for k in pending[1] if k!='Escape']\n                pending=None\n            elif kind=='deny' and pending is not None and ident==pending[0]:\n                pending=None\n            elif kind=='blur':\n                focused=False; pending=None; active=[]\n            elif kind=='focus': focused=True\n            elif kind=='release': pending=None; active=[]\n        return [focused,pending,active]\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('keyboard-lock scenario 0', solve([[]] * N), [[True, None, []]] * N)\ncheck('keyboard-lock scenario 1', solve([[['request', 1, ['B', 'A', 'A']]]] * N), [[True, [1, ['A', 'B']], []]] * N)\ncheck('keyboard-lock scenario 2', solve([[['request', 1, ['A', 'Escape']], ['grant', 1, []]]] * N), [[True, None, ['A']]] * N)\ncheck('keyboard-lock scenario 3', solve([[['request', 1, ['A']], ['request', 2, ['B']], ['grant', 1, []]]] * N), [[True, [2, ['B']], []]] * N)\ncheck('keyboard-lock scenario 4', solve([[['request', 1, ['A']], ['request', 2, ['B']], ['deny', 1, []]]] * N), [[True, [2, ['B']], []]] * N)\ncheck('keyboard-lock scenario 5', solve([[['request', 1, ['A']], ['grant', 1, []], ['request', 2, ['B']], ['grant', 2, []]]] * N), [[True, None, ['B']]] * N)\ncheck('keyboard-lock scenario 6', solve([[['blur', 0, []], ['request', 1, ['A']]]] * N), [[False, None, []]] * N)\ncheck('keyboard-lock scenario 7', solve([[['request', 1, ['A']], ['grant', 1, []], ['request', 2, ['B']], ['blur', 0, []]]] * N), [[False, None, []]] * N)\ncheck('keyboard-lock scenario 8', solve([[['request', 1, ['A']], ['grant', 1, []], ['request', 2, ['B']], ['release', 0, []]]] * N), [[True, None, []]] * N)\ncheck('keyboard-lock scenario 9', solve([[['request', 1, ['A']], ['deny', 1, []]]] * N), [[True, 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-keyboard-lock-blur-clear","generated_at":"2026-09-29T14:42:09.055194+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 `focused=False; pending=None; active=[]` at the blur clear fault site; preserve the other state transitions.","root_cause":"Blur revokes only active capture or pending requests, leaving the other live.","sha256":"6649f32d50ccad40c567d116e2ace93cd9f72745f9a995327fe36ce8685a3130","title":"Asynchronous keyboard capture grant lifecycle: Blur revokes only active capture or pending requests, leaving the other live · case 01","variant":1,"variant_policy":"Five numbered records share a model and may reuse boundary fixtures.","verification":{"attempt":{"elapsed_ms":45.901,"exit_code":1,"observations":[{"actual":[[true,null,[]]],"check":"keyboard-lock scenario 0","expected":[[true,null,[]]],"passed":true},{"actual":[[true,[1,["A","B"]],[]]],"check":"keyboard-lock scenario 1","expected":[[true,[1,["A","B"]],[]]],"passed":true},{"actual":[[true,null,["A"]]],"check":"keyboard-lock scenario 2","expected":[[true,null,["A"]]],"passed":true},{"actual":[[true,[2,["B"]],[]]],"check":"keyboard-lock scenario 3","expected":[[true,[2,["B"]],[]]],"passed":true},{"actual":[[true,[2,["B"]],[]]],"check":"keyboard-lock scenario 4","expected":[[true,[2,["B"]],[]]],"passed":true},{"actual":[[true,null,["B"]]],"check":"keyboard-lock scenario 5","expected":[[true,null,["B"]]],"passed":true},{"actual":[[false,null,[]]],"check":"keyboard-lock scenario 6","expected":[[false,null,[]]],"passed":true},{"actual":[[false,null,["A"]]],"check":"keyboard-lock scenario 7","expected":[[false,null,[]]],"passed":false},{"actual":[[true,null,[]]],"check":"keyboard-lock scenario 8","expected":[[true,null,[]]],"passed":true},{"actual":[[true,null,[]]],"check":"keyboard-lock scenario 9","expected":[[true,null,[]]],"passed":true}],"passed":false,"stderr":"","stdout":"{\"observations\": [{\"check\": \"keyboard-lock scenario 0\", \"actual\": [[true, null, []]], \"expected\": [[true, null, []]], \"passed\": true}, {\"check\": \"keyboard-lock scenario 1\", \"actual\": [[true, [1, [\"A\", \"B\"]], []]], \"expected\": [[true, [1, [\"A\", \"B\"]], []]], \"passed\": true}, {\"check\": \"keyboard-lock scenario 2\", \"actual\": [[true, null, [\"A\"]]], \"expected\": [[true, null, [\"A\"]]], \"passed\": true}, {\"check\": \"keyboard-lock scenario 3\", \"actual\": [[true, [2, [\"B\"]], []]], \"expected\": [[true, [2, [\"B\"]], []]], \"passed\": true}, {\"check\": \"keyboard-lock scenario 4\", \"actual\": [[true, [2, [\"B\"]], []]], \"expected\": [[true, [2, [\"B\"]], []]], \"passed\": true}, {\"check\": \"keyboard-lock scenario 5\", \"actual\": [[true, null, [\"B\"]]], \"expected\": [[true, null, [\"B\"]]], \"passed\": true}, {\"check\": \"keyboard-lock scenario 6\", \"actual\": [[false, null, []]], \"expected\": [[false, null, []]], \"passed\": true}, {\"check\": \"keyboard-lock scenario 7\", \"actual\": [[false, null, [\"A\"]]], \"expected\": [[false, null, []]], \"passed\": false}, {\"check\": \"keyboard-lock scenario 8\", \"actual\": [[true, null, []]], \"expected\": [[true, null, []]], \"passed\": true}, {\"check\": \"keyboard-lock scenario 9\", \"actual\": [[true, null, []]], \"expected\": [[true, null, []]], \"passed\": true}], \"passed\": false}\n"},"broken":{"elapsed_ms":44.798,"exit_code":1,"observations":[{"actual":[[true,null,[]]],"check":"keyboard-lock scenario 0","expected":[[true,null,[]]],"passed":true},{"actual":[[true,[1,["A","B"]],[]]],"check":"keyboard-lock scenario 1","expected":[[true,[1,["A","B"]],[]]],"passed":true},{"actual":[[true,null,["A"]]],"check":"keyboard-lock scenario 2","expected":[[true,null,["A"]]],"passed":true},{"actual":[[true,[2,["B"]],[]]],"check":"keyboard-lock scenario 3","expected":[[true,[2,["B"]],[]]],"passed":true},{"actual":[[true,[2,["B"]],[]]],"check":"keyboard-lock scenario 4","expected":[[true,[2,["B"]],[]]],"passed":true},{"actual":[[true,null,["B"]]],"check":"keyboard-lock scenario 5","expected":[[true,null,["B"]]],"passed":true},{"actual":[[false,null,[]]],"check":"keyboard-lock scenario 6","expected":[[false,null,[]]],"passed":true},{"actual":[[false,[2,["B"]],[]]],"check":"keyboard-lock scenario 7","expected":[[false,null,[]]],"passed":false},{"actual":[[true,null,[]]],"check":"keyboard-lock scenario 8","expected":[[true,null,[]]],"passed":true},{"actual":[[true,null,[]]],"check":"keyboard-lock scenario 9","expected":[[true,null,[]]],"passed":true}],"passed":false,"stderr":"","stdout":"{\"observations\": [{\"check\": \"keyboard-lock scenario 0\", \"actual\": [[true, null, []]], \"expected\": [[true, null, []]], \"passed\": true}, {\"check\": \"keyboard-lock scenario 1\", \"actual\": [[true, [1, [\"A\", \"B\"]], []]], \"expected\": [[true, [1, [\"A\", \"B\"]], []]], \"passed\": true}, {\"check\": \"keyboard-lock scenario 2\", \"actual\": [[true, null, [\"A\"]]], \"expected\": [[true, null, [\"A\"]]], \"passed\": true}, {\"check\": \"keyboard-lock scenario 3\", \"actual\": [[true, [2, [\"B\"]], []]], \"expected\": [[true, [2, [\"B\"]], []]], \"passed\": true}, {\"check\": \"keyboard-lock scenario 4\", \"actual\": [[true, [2, [\"B\"]], []]], \"expected\": [[true, [2, [\"B\"]], []]], \"passed\": true}, {\"check\": \"keyboard-lock scenario 5\", \"actual\": [[true, null, [\"B\"]]], \"expected\": [[true, null, [\"B\"]]], \"passed\": true}, {\"check\": \"keyboard-lock scenario 6\", \"actual\": [[false, null, []]], \"expected\": [[false, null, []]], \"passed\": true}, {\"check\": \"keyboard-lock scenario 7\", \"actual\": [[false, [2, [\"B\"]], []]], \"expected\": [[false, null, []]], \"passed\": false}, {\"check\": \"keyboard-lock scenario 8\", \"actual\": [[true, null, []]], \"expected\": [[true, null, []]], \"passed\": true}, {\"check\": \"keyboard-lock scenario 9\", \"actual\": [[true, null, []]], \"expected\": [[true, null, []]], \"passed\": true}], \"passed\": false}\n"},"fixed":{"elapsed_ms":45.598,"exit_code":0,"observations":[{"actual":[[true,null,[]]],"check":"keyboard-lock scenario 0","expected":[[true,null,[]]],"passed":true},{"actual":[[true,[1,["A","B"]],[]]],"check":"keyboard-lock scenario 1","expected":[[true,[1,["A","B"]],[]]],"passed":true},{"actual":[[true,null,["A"]]],"check":"keyboard-lock scenario 2","expected":[[true,null,["A"]]],"passed":true},{"actual":[[true,[2,["B"]],[]]],"check":"keyboard-lock scenario 3","expected":[[true,[2,["B"]],[]]],"passed":true},{"actual":[[true,[2,["B"]],[]]],"check":"keyboard-lock scenario 4","expected":[[true,[2,["B"]],[]]],"passed":true},{"actual":[[true,null,["B"]]],"check":"keyboard-lock scenario 5","expected":[[true,null,["B"]]],"passed":true},{"actual":[[false,null,[]]],"check":"keyboard-lock scenario 6","expected":[[false,null,[]]],"passed":true},{"actual":[[false,null,[]]],"check":"keyboard-lock scenario 7","expected":[[false,null,[]]],"passed":true},{"actual":[[true,null,[]]],"check":"keyboard-lock scenario 8","expected":[[true,null,[]]],"passed":true},{"actual":[[true,null,[]]],"check":"keyboard-lock scenario 9","expected":[[true,null,[]]],"passed":true}],"passed":true,"stderr":"","stdout":"{\"observations\": [{\"check\": \"keyboard-lock scenario 0\", \"actual\": [[true, null, []]], \"expected\": [[true, null, []]], \"passed\": true}, {\"check\": \"keyboard-lock scenario 1\", \"actual\": [[true, [1, [\"A\", \"B\"]], []]], \"expected\": [[true, [1, [\"A\", \"B\"]], []]], \"passed\": true}, {\"check\": \"keyboard-lock scenario 2\", \"actual\": [[true, null, [\"A\"]]], \"expected\": [[true, null, [\"A\"]]], \"passed\": true}, {\"check\": \"keyboard-lock scenario 3\", \"actual\": [[true, [2, [\"B\"]], []]], \"expected\": [[true, [2, [\"B\"]], []]], \"passed\": true}, {\"check\": \"keyboard-lock scenario 4\", \"actual\": [[true, [2, [\"B\"]], []]], \"expected\": [[true, [2, [\"B\"]], []]], \"passed\": true}, {\"check\": \"keyboard-lock scenario 5\", \"actual\": [[true, null, [\"B\"]]], \"expected\": [[true, null, [\"B\"]]], \"passed\": true}, {\"check\": \"keyboard-lock scenario 6\", \"actual\": [[false, null, []]], \"expected\": [[false, null, []]], \"passed\": true}, {\"check\": \"keyboard-lock scenario 7\", \"actual\": [[false, null, []]], \"expected\": [[false, null, []]], \"passed\": true}, {\"check\": \"keyboard-lock scenario 8\", \"actual\": [[true, null, []]], \"expected\": [[true, null, []]], \"passed\": true}, {\"check\": \"keyboard-lock scenario 9\", \"actual\": [[true, null, []]], \"expected\": [[true, null, []]], \"passed\": true}], \"passed\": true}\n"}},"verified":true,"visibility":"public"}