FA-31626 / Keyboard interactions / Open access
Keyboard macro deterministic playback scheduler: A recorded release clears unrelated held keys or fails to disarm its key · case 01
The event trace violates the release track rule and produces incorrect keyboard state or command output.
ROOT CAUSE
A recorded release clears unrelated held keys or fails to disarm its key.
VERIFIED REPAIR
Use the contract transition `elif kind=='up': held.discard(key)` at the release track fault site; preserve the other state transitions.
Unsuccessful approach: The partial repair changes this transition to elif kind=='up': pass, which still violates the model contract on the explicit regression traces.
Case contract
Case [records,start,rate_num,rate_den,loops,gap]. Records [kind,key,offset] have ordered nonnegative integer offsets. Positive rational playback speed scales deadlines by floor(offset*den/num). Repeat cycles start after scaled final offset plus gap. End of each cycle synthesizes releases for remaining held keys in sorted order. Return emitted [kind,key,deadline] records. Loops nonnegative; gap positive. Inputs are finite ordered event traces; return the stated deterministic state. Batch entries are independent. N varies the number of independent input transactions.
Why this case matters
Controlled keyboard event processing model for debugging application event logic.
1 / The failure
Exit 1"""Failure Map reference implementation. Python standard library only."""
import json
N = 1
observations = []
def solve(cases):
def run(c):
records,start,num,den,loops,gap=c
out=[]
duration=(records[-1][2]*den//num) if records else 0
for cycle in range(loops):
base=start+cycle*(duration+gap)
held=set()
for kind,key,offset in records:
due=base+offset*den//num
if kind=='down': held.add(key)
elif kind=='up': held.clear()
out.append([kind,key,due])
for key in sorted(held):
out.append(['up',key,base+duration])
return out
return [run(c) for c in cases]
def check(label, actual, expected):
observations.append({"check": label, "actual": actual, "expected": expected, "passed": actual == expected})
check('macro-play scenario 0', solve([[[], 10, 1, 1, 0, 2]] * N), [[]] * N)
check('macro-play scenario 1', solve([[[], 10, 1, 1, 2, 2]] * N), [[]] * N)
check('macro-play scenario 2', solve([[[['down', 'A', 0], ['up', 'A', 3]], 10, 2, 1, 2, 4]] * N), [[['down', 'A', 10], ['up', 'A', 11], ['down', 'A', 15], ['up', 'A', 16]]] * N)
check('macro-play scenario 3', solve([[[['up', 'A', 0]], 10, 1, 1, 1, 2]] * N), [[['up', 'A', 10]]] * N)
check('macro-play scenario 4', solve([[[['down', 'A', 0], ['down', 'B', 1]], 10, 1, 1, 2, 2]] * N), [[['down', 'A', 10], ['down', 'B', 11], ['up', 'A', 11], ['up', 'B', 11], ['down', 'A', 13], ['down', 'B', 14], ['up', 'A', 14], ['up', 'B', 14]]] * N)
check('macro-play scenario 5', solve([[[['down', 'A', 0], ['down', 'A', 1]], 10, 1, 1, 1, 2]] * N), [[['down', 'A', 10], ['down', 'A', 11], ['up', 'A', 11]]] * N)
check('macro-play scenario 6', solve([[[['down', 'A', 0], ['down', 'B', 1], ['up', 'A', 2]], 10, 1, 1, 1, 2]] * N), [[['down', 'A', 10], ['down', 'B', 11], ['up', 'A', 12], ['up', 'B', 12]]] * N)
check('macro-play scenario 7', solve([[[['down', 'A', 1], ['up', 'A', 5]], 10, 3, 2, 2, 2]] * N), [[['down', 'A', 10], ['up', 'A', 13], ['down', 'A', 15], ['up', 'A', 18]]] * N)
check('macro-play scenario 8', solve([[[['down', 'A', 0], ['up', 'A', 2]], 10, 1, 1, 0, 2]] * N), [[]] * N)
print(json.dumps({"observations": observations, "passed": all(x["passed"] for x in observations)}, ensure_ascii=False))
raise SystemExit(0 if all(x["passed"] for x in observations) else 1)
| Boundary fixture | Actual | Expected | Outcome |
|---|---|---|---|
| macro-play scenario 0 | [[]] | [[]] | Passed |
| macro-play scenario 1 | [[]] | [[]] | Passed |
| macro-play scenario 2 | [[['down', 'A', 10], ['up', 'A', 11], ['down', 'A', 15], ['up', 'A', 16]]] | [[['down', 'A', 10], ['up', 'A', 11], ['down', 'A', 15], ['up', 'A', 16]]] | Passed |
| macro-play scenario 3 | [[['up', 'A', 10]]] | [[['up', 'A', 10]]] | Passed |
| macro-play scenario 4 | [[['down', 'A', 10], ['down', 'B', 11], ['up', 'A', 11], ['up', 'B', 11], ['down', 'A', 13], ['down', 'B', 14], ['up', 'A', 14], ['up', 'B', 14]]] | [[['down', 'A', 10], ['down', 'B', 11], ['up', 'A', 11], ['up', 'B', 11], ['down', 'A', 13], ['down', 'B', 14], ['up', 'A', 14], ['up', 'B', 14]]] | Passed |
| macro-play scenario 5 | [[['down', 'A', 10], ['down', 'A', 11], ['up', 'A', 11]]] | [[['down', 'A', 10], ['down', 'A', 11], ['up', 'A', 11]]] | Passed |
| macro-play scenario 6 | [[['down', 'A', 10], ['down', 'B', 11], ['up', 'A', 12]]] | [[['down', 'A', 10], ['down', 'B', 11], ['up', 'A', 12], ['up', 'B', 12]]] | Failed |
| macro-play scenario 7 | [[['down', 'A', 10], ['up', 'A', 13], ['down', 'A', 15], ['up', 'A', 18]]] | [[['down', 'A', 10], ['up', 'A', 13], ['down', 'A', 15], ['up', 'A', 18]]] | Passed |
| macro-play scenario 8 | [[]] | [[]] | Passed |
SHA-256 / 1ba10e645d64c86d26c52ebf549d8bcf9473fffd5c5b6728549235b4470df030
2 / The unsuccessful fix
Exit 1"""Failure Map reference implementation. Python standard library only."""
import json
N = 1
observations = []
def solve(cases):
def run(c):
records,start,num,den,loops,gap=c
out=[]
duration=(records[-1][2]*den//num) if records else 0
for cycle in range(loops):
base=start+cycle*(duration+gap)
held=set()
for kind,key,offset in records:
due=base+offset*den//num
if kind=='down': held.add(key)
elif kind=='up': pass
out.append([kind,key,due])
for key in sorted(held):
out.append(['up',key,base+duration])
return out
return [run(c) for c in cases]
def check(label, actual, expected):
observations.append({"check": label, "actual": actual, "expected": expected, "passed": actual == expected})
check('macro-play scenario 0', solve([[[], 10, 1, 1, 0, 2]] * N), [[]] * N)
check('macro-play scenario 1', solve([[[], 10, 1, 1, 2, 2]] * N), [[]] * N)
check('macro-play scenario 2', solve([[[['down', 'A', 0], ['up', 'A', 3]], 10, 2, 1, 2, 4]] * N), [[['down', 'A', 10], ['up', 'A', 11], ['down', 'A', 15], ['up', 'A', 16]]] * N)
check('macro-play scenario 3', solve([[[['up', 'A', 0]], 10, 1, 1, 1, 2]] * N), [[['up', 'A', 10]]] * N)
check('macro-play scenario 4', solve([[[['down', 'A', 0], ['down', 'B', 1]], 10, 1, 1, 2, 2]] * N), [[['down', 'A', 10], ['down', 'B', 11], ['up', 'A', 11], ['up', 'B', 11], ['down', 'A', 13], ['down', 'B', 14], ['up', 'A', 14], ['up', 'B', 14]]] * N)
check('macro-play scenario 5', solve([[[['down', 'A', 0], ['down', 'A', 1]], 10, 1, 1, 1, 2]] * N), [[['down', 'A', 10], ['down', 'A', 11], ['up', 'A', 11]]] * N)
check('macro-play scenario 6', solve([[[['down', 'A', 0], ['down', 'B', 1], ['up', 'A', 2]], 10, 1, 1, 1, 2]] * N), [[['down', 'A', 10], ['down', 'B', 11], ['up', 'A', 12], ['up', 'B', 12]]] * N)
check('macro-play scenario 7', solve([[[['down', 'A', 1], ['up', 'A', 5]], 10, 3, 2, 2, 2]] * N), [[['down', 'A', 10], ['up', 'A', 13], ['down', 'A', 15], ['up', 'A', 18]]] * N)
check('macro-play scenario 8', solve([[[['down', 'A', 0], ['up', 'A', 2]], 10, 1, 1, 0, 2]] * N), [[]] * N)
print(json.dumps({"observations": observations, "passed": all(x["passed"] for x in observations)}, ensure_ascii=False))
raise SystemExit(0 if all(x["passed"] for x in observations) else 1)
| Boundary fixture | Actual | Expected | Outcome |
|---|---|---|---|
| macro-play scenario 0 | [[]] | [[]] | Passed |
| macro-play scenario 1 | [[]] | [[]] | Passed |
| macro-play scenario 2 | [[['down', 'A', 10], ['up', 'A', 11], ['up', 'A', 11], ['down', 'A', 15], ['up', 'A', 16], ['up', 'A', 16]]] | [[['down', 'A', 10], ['up', 'A', 11], ['down', 'A', 15], ['up', 'A', 16]]] | Failed |
| macro-play scenario 3 | [[['up', 'A', 10]]] | [[['up', 'A', 10]]] | Passed |
| macro-play scenario 4 | [[['down', 'A', 10], ['down', 'B', 11], ['up', 'A', 11], ['up', 'B', 11], ['down', 'A', 13], ['down', 'B', 14], ['up', 'A', 14], ['up', 'B', 14]]] | [[['down', 'A', 10], ['down', 'B', 11], ['up', 'A', 11], ['up', 'B', 11], ['down', 'A', 13], ['down', 'B', 14], ['up', 'A', 14], ['up', 'B', 14]]] | Passed |
| macro-play scenario 5 | [[['down', 'A', 10], ['down', 'A', 11], ['up', 'A', 11]]] | [[['down', 'A', 10], ['down', 'A', 11], ['up', 'A', 11]]] | Passed |
| macro-play scenario 6 | [[['down', 'A', 10], ['down', 'B', 11], ['up', 'A', 12], ['up', 'A', 12], ['up', 'B', 12]]] | [[['down', 'A', 10], ['down', 'B', 11], ['up', 'A', 12], ['up', 'B', 12]]] | Failed |
| macro-play scenario 7 | [[['down', 'A', 10], ['up', 'A', 13], ['up', 'A', 13], ['down', 'A', 15], ['up', 'A', 18], ['up', 'A', 18]]] | [[['down', 'A', 10], ['up', 'A', 13], ['down', 'A', 15], ['up', 'A', 18]]] | Failed |
| macro-play scenario 8 | [[]] | [[]] | Passed |
SHA-256 / 240ba3d657ad62ef11ebc798411400857622c83ae84a2759e18ab4c5f7b1b071
3 / The verified repair
Exit 0"""Failure Map reference implementation. Python standard library only."""
import json
N = 1
observations = []
def solve(cases):
def run(c):
records,start,num,den,loops,gap=c
out=[]
duration=(records[-1][2]*den//num) if records else 0
for cycle in range(loops):
base=start+cycle*(duration+gap)
held=set()
for kind,key,offset in records:
due=base+offset*den//num
if kind=='down': held.add(key)
elif kind=='up': held.discard(key)
out.append([kind,key,due])
for key in sorted(held):
out.append(['up',key,base+duration])
return out
return [run(c) for c in cases]
def check(label, actual, expected):
observations.append({"check": label, "actual": actual, "expected": expected, "passed": actual == expected})
check('macro-play scenario 0', solve([[[], 10, 1, 1, 0, 2]] * N), [[]] * N)
check('macro-play scenario 1', solve([[[], 10, 1, 1, 2, 2]] * N), [[]] * N)
check('macro-play scenario 2', solve([[[['down', 'A', 0], ['up', 'A', 3]], 10, 2, 1, 2, 4]] * N), [[['down', 'A', 10], ['up', 'A', 11], ['down', 'A', 15], ['up', 'A', 16]]] * N)
check('macro-play scenario 3', solve([[[['up', 'A', 0]], 10, 1, 1, 1, 2]] * N), [[['up', 'A', 10]]] * N)
check('macro-play scenario 4', solve([[[['down', 'A', 0], ['down', 'B', 1]], 10, 1, 1, 2, 2]] * N), [[['down', 'A', 10], ['down', 'B', 11], ['up', 'A', 11], ['up', 'B', 11], ['down', 'A', 13], ['down', 'B', 14], ['up', 'A', 14], ['up', 'B', 14]]] * N)
check('macro-play scenario 5', solve([[[['down', 'A', 0], ['down', 'A', 1]], 10, 1, 1, 1, 2]] * N), [[['down', 'A', 10], ['down', 'A', 11], ['up', 'A', 11]]] * N)
check('macro-play scenario 6', solve([[[['down', 'A', 0], ['down', 'B', 1], ['up', 'A', 2]], 10, 1, 1, 1, 2]] * N), [[['down', 'A', 10], ['down', 'B', 11], ['up', 'A', 12], ['up', 'B', 12]]] * N)
check('macro-play scenario 7', solve([[[['down', 'A', 1], ['up', 'A', 5]], 10, 3, 2, 2, 2]] * N), [[['down', 'A', 10], ['up', 'A', 13], ['down', 'A', 15], ['up', 'A', 18]]] * N)
check('macro-play scenario 8', solve([[[['down', 'A', 0], ['up', 'A', 2]], 10, 1, 1, 0, 2]] * N), [[]] * N)
print(json.dumps({"observations": observations, "passed": all(x["passed"] for x in observations)}, ensure_ascii=False))
raise SystemExit(0 if all(x["passed"] for x in observations) else 1)
| Boundary fixture | Actual | Expected | Outcome |
|---|---|---|---|
| macro-play scenario 0 | [[]] | [[]] | Passed |
| macro-play scenario 1 | [[]] | [[]] | Passed |
| macro-play scenario 2 | [[['down', 'A', 10], ['up', 'A', 11], ['down', 'A', 15], ['up', 'A', 16]]] | [[['down', 'A', 10], ['up', 'A', 11], ['down', 'A', 15], ['up', 'A', 16]]] | Passed |
| macro-play scenario 3 | [[['up', 'A', 10]]] | [[['up', 'A', 10]]] | Passed |
| macro-play scenario 4 | [[['down', 'A', 10], ['down', 'B', 11], ['up', 'A', 11], ['up', 'B', 11], ['down', 'A', 13], ['down', 'B', 14], ['up', 'A', 14], ['up', 'B', 14]]] | [[['down', 'A', 10], ['down', 'B', 11], ['up', 'A', 11], ['up', 'B', 11], ['down', 'A', 13], ['down', 'B', 14], ['up', 'A', 14], ['up', 'B', 14]]] | Passed |
| macro-play scenario 5 | [[['down', 'A', 10], ['down', 'A', 11], ['up', 'A', 11]]] | [[['down', 'A', 10], ['down', 'A', 11], ['up', 'A', 11]]] | Passed |
| macro-play scenario 6 | [[['down', 'A', 10], ['down', 'B', 11], ['up', 'A', 12], ['up', 'B', 12]]] | [[['down', 'A', 10], ['down', 'B', 11], ['up', 'A', 12], ['up', 'B', 12]]] | Passed |
| macro-play scenario 7 | [[['down', 'A', 10], ['up', 'A', 13], ['down', 'A', 15], ['up', 'A', 18]]] | [[['down', 'A', 10], ['up', 'A', 13], ['down', 'A', 15], ['up', 'A', 18]]] | Passed |
| macro-play scenario 8 | [[]] | [[]] | Passed |
SHA-256 / e98c652512720bf6ad76c0d28a67659954e8bf958fa9ff26aa3ec79247e9df5c
Verification & scope
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.
Observations recorded using Python 3.12.14 at 2026-09-29T14:42:03.963750+00:00.
Case digest / a09eb4967716dd6e0ddf5928b84f70bbd31e45561c0cb4f2cf75342aacd69f88