FA-81491 / MIDI event timing / Open access
Set Tempo meta event to BPM: tempo value read little-endian · case 01
120 BPM (07 A1 20) is read as 2138375 microseconds, about 28 BPM.
ROOT CAUSE
The three tempo bytes are combined least significant first.
VERIFIED REPAIR
Restore the tempo byte order step so that it reads `(x[3] << 16) | (x[4] << 8) | x[5]`.
Unsuccessful approach: Dropping the low byte truncates every tempo to a multiple of 256 microseconds.
Case contract
Input the bytes of a Set Tempo meta event: FF 51 03 followed by a 24-bit big-endian microseconds-per-quarter value (nonzero). Return [microseconds, bpm_x100] where bpm_x100 = 6000000000 / microseconds rounded half up. Anything else returns None.
Why this case matters
MIDI sequencers, file readers and synth drivers depend on exact event ordering and tick/time arithmetic.
1 / The failure
Exit 1"""Failure Map reference implementation. Python standard library only."""
import json
N = 1
observations = []
def solve(x):
if not isinstance(x, list) or len(x) != 6 or x[0] != 0xFF or x[1] != 0x51 or x[2] != 3:
return None
us = (x[5] << 16) | (x[4] << 8) | x[3]
if us == 0:
return None
centi = (12000000000 + us) // (2 * us)
return [us, centi]
def check(label, actual, expected):
observations.append({"check": label, "actual": actual, "expected": expected, "passed": actual == expected})
fixtures = [[([255, 81, 3, 7, 161, 32], [500000, 12000]), ([255, 81, 3, 58, 152, 0], [3840000, 1563]), ([255, 81, 3, 255, 255, 255], [16777215, 358]), ([255, 81, 4, 7, 161, 32], None), ([255, 81, 2, 7, 161, 32], None), ([255, 81, 3, 0, 0, 0], None), ([255, 82, 3, 7, 161, 32], None), ([255, 81, 3, 7, 161], None)], [([255, 81, 3, 7, 161, 32], [500000, 12000]), ([255, 81, 3, 9, 39, 192], [600000, 10000]), ([255, 81, 3, 58, 152, 0], [3840000, 1563]), ([255, 81, 3, 11, 184, 0], [768000, 7813]), ([255, 81, 3, 2, 88, 0], [153600, 39063]), ([255, 82, 3, 7, 161, 32], None), ([255, 81, 3, 7, 161], None), ([255, 81, 3, 6, 26, 128], [400000, 15000])], [([255, 81, 3, 9, 39, 192], [600000, 10000]), ([255, 81, 3, 58, 152, 0], [3840000, 1563]), ([255, 81, 3, 11, 184, 0], [768000, 7813]), ([255, 81, 3, 2, 88, 0], [153600, 39063]), ([255, 81, 3, 0, 0, 1], [1, 6000000000]), ([255, 81, 3, 255, 255, 255], [16777215, 358]), ([255, 81, 3, 6, 26, 128], [400000, 15000]), ([255, 81, 3, 3, 13, 64], [200000, 30000])], [([255, 81, 3, 11, 184, 0], [768000, 7813]), ([255, 81, 3, 2, 88, 0], [153600, 39063]), ([255, 81, 3, 0, 0, 1], [1, 6000000000]), ([255, 81, 3, 255, 255, 255], [16777215, 358]), ([255, 81, 3, 6, 26, 128], [400000, 15000]), ([255, 81, 3, 3, 13, 64], [200000, 30000]), ([255, 81, 3, 0, 3, 232], [1000, 6000000]), ([255, 81, 3, 15, 66, 64], [1000000, 6000])], [([255, 81, 3, 2, 88, 0], [153600, 39063]), ([255, 81, 4, 7, 161, 32], None), ([255, 81, 2, 7, 161, 32], None), ([255, 81, 3, 0, 0, 0], None), ([255, 81, 3, 6, 26, 128], [400000, 15000]), ([255, 81, 3, 3, 13, 64], [200000, 30000]), ([255, 81, 3, 0, 3, 232], [1000, 6000000]), ([255, 81, 3, 15, 66, 64], [1000000, 6000])]]
for i, (args, expected) in enumerate(fixtures[N-1]):
check("oracle %d" % i, solve(args), expected)
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 |
|---|---|---|---|
| oracle 0 | [2138375, 2806] | [500000, 12000] | Failed |
| oracle 1 | [38970, 153965] | [3840000, 1563] | Failed |
| oracle 2 | [16777215, 358] | [16777215, 358] | Passed |
| oracle 3 | None | None | Passed |
| oracle 4 | None | None | Passed |
| oracle 5 | None | None | Passed |
| oracle 6 | None | None | Passed |
| oracle 7 | None | None | Passed |
SHA-256 / f1d8598d0340562da803faa85da37685ad0f82098807de090aabf24554603942
2 / The unsuccessful fix
Exit 1"""Failure Map reference implementation. Python standard library only."""
import json
N = 1
observations = []
def solve(x):
if not isinstance(x, list) or len(x) != 6 or x[0] != 0xFF or x[1] != 0x51 or x[2] != 3:
return None
us = (x[3] << 16) + (x[4] << 8)
if us == 0:
return None
centi = (12000000000 + us) // (2 * us)
return [us, centi]
def check(label, actual, expected):
observations.append({"check": label, "actual": actual, "expected": expected, "passed": actual == expected})
fixtures = [[([255, 81, 3, 7, 161, 32], [500000, 12000]), ([255, 81, 3, 58, 152, 0], [3840000, 1563]), ([255, 81, 3, 255, 255, 255], [16777215, 358]), ([255, 81, 4, 7, 161, 32], None), ([255, 81, 2, 7, 161, 32], None), ([255, 81, 3, 0, 0, 0], None), ([255, 82, 3, 7, 161, 32], None), ([255, 81, 3, 7, 161], None)], [([255, 81, 3, 7, 161, 32], [500000, 12000]), ([255, 81, 3, 9, 39, 192], [600000, 10000]), ([255, 81, 3, 58, 152, 0], [3840000, 1563]), ([255, 81, 3, 11, 184, 0], [768000, 7813]), ([255, 81, 3, 2, 88, 0], [153600, 39063]), ([255, 82, 3, 7, 161, 32], None), ([255, 81, 3, 7, 161], None), ([255, 81, 3, 6, 26, 128], [400000, 15000])], [([255, 81, 3, 9, 39, 192], [600000, 10000]), ([255, 81, 3, 58, 152, 0], [3840000, 1563]), ([255, 81, 3, 11, 184, 0], [768000, 7813]), ([255, 81, 3, 2, 88, 0], [153600, 39063]), ([255, 81, 3, 0, 0, 1], [1, 6000000000]), ([255, 81, 3, 255, 255, 255], [16777215, 358]), ([255, 81, 3, 6, 26, 128], [400000, 15000]), ([255, 81, 3, 3, 13, 64], [200000, 30000])], [([255, 81, 3, 11, 184, 0], [768000, 7813]), ([255, 81, 3, 2, 88, 0], [153600, 39063]), ([255, 81, 3, 0, 0, 1], [1, 6000000000]), ([255, 81, 3, 255, 255, 255], [16777215, 358]), ([255, 81, 3, 6, 26, 128], [400000, 15000]), ([255, 81, 3, 3, 13, 64], [200000, 30000]), ([255, 81, 3, 0, 3, 232], [1000, 6000000]), ([255, 81, 3, 15, 66, 64], [1000000, 6000])], [([255, 81, 3, 2, 88, 0], [153600, 39063]), ([255, 81, 4, 7, 161, 32], None), ([255, 81, 2, 7, 161, 32], None), ([255, 81, 3, 0, 0, 0], None), ([255, 81, 3, 6, 26, 128], [400000, 15000]), ([255, 81, 3, 3, 13, 64], [200000, 30000]), ([255, 81, 3, 0, 3, 232], [1000, 6000000]), ([255, 81, 3, 15, 66, 64], [1000000, 6000])]]
for i, (args, expected) in enumerate(fixtures[N-1]):
check("oracle %d" % i, solve(args), expected)
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 |
|---|---|---|---|
| oracle 0 | [499968, 12001] | [500000, 12000] | Failed |
| oracle 1 | [3840000, 1563] | [3840000, 1563] | Passed |
| oracle 2 | [16776960, 358] | [16777215, 358] | Failed |
| oracle 3 | None | None | Passed |
| oracle 4 | None | None | Passed |
| oracle 5 | None | None | Passed |
| oracle 6 | None | None | Passed |
| oracle 7 | None | None | Passed |
SHA-256 / 1c36726f3335fd69ad726744170775d728021afb8e306e3d4904a32261443bc8
3 / The verified repair
Exit 0"""Failure Map reference implementation. Python standard library only."""
import json
N = 1
observations = []
def solve(x):
if not isinstance(x, list) or len(x) != 6 or x[0] != 0xFF or x[1] != 0x51 or x[2] != 3:
return None
us = (x[3] << 16) | (x[4] << 8) | x[5]
if us == 0:
return None
centi = (12000000000 + us) // (2 * us)
return [us, centi]
def check(label, actual, expected):
observations.append({"check": label, "actual": actual, "expected": expected, "passed": actual == expected})
fixtures = [[([255, 81, 3, 7, 161, 32], [500000, 12000]), ([255, 81, 3, 58, 152, 0], [3840000, 1563]), ([255, 81, 3, 255, 255, 255], [16777215, 358]), ([255, 81, 4, 7, 161, 32], None), ([255, 81, 2, 7, 161, 32], None), ([255, 81, 3, 0, 0, 0], None), ([255, 82, 3, 7, 161, 32], None), ([255, 81, 3, 7, 161], None)], [([255, 81, 3, 7, 161, 32], [500000, 12000]), ([255, 81, 3, 9, 39, 192], [600000, 10000]), ([255, 81, 3, 58, 152, 0], [3840000, 1563]), ([255, 81, 3, 11, 184, 0], [768000, 7813]), ([255, 81, 3, 2, 88, 0], [153600, 39063]), ([255, 82, 3, 7, 161, 32], None), ([255, 81, 3, 7, 161], None), ([255, 81, 3, 6, 26, 128], [400000, 15000])], [([255, 81, 3, 9, 39, 192], [600000, 10000]), ([255, 81, 3, 58, 152, 0], [3840000, 1563]), ([255, 81, 3, 11, 184, 0], [768000, 7813]), ([255, 81, 3, 2, 88, 0], [153600, 39063]), ([255, 81, 3, 0, 0, 1], [1, 6000000000]), ([255, 81, 3, 255, 255, 255], [16777215, 358]), ([255, 81, 3, 6, 26, 128], [400000, 15000]), ([255, 81, 3, 3, 13, 64], [200000, 30000])], [([255, 81, 3, 11, 184, 0], [768000, 7813]), ([255, 81, 3, 2, 88, 0], [153600, 39063]), ([255, 81, 3, 0, 0, 1], [1, 6000000000]), ([255, 81, 3, 255, 255, 255], [16777215, 358]), ([255, 81, 3, 6, 26, 128], [400000, 15000]), ([255, 81, 3, 3, 13, 64], [200000, 30000]), ([255, 81, 3, 0, 3, 232], [1000, 6000000]), ([255, 81, 3, 15, 66, 64], [1000000, 6000])], [([255, 81, 3, 2, 88, 0], [153600, 39063]), ([255, 81, 4, 7, 161, 32], None), ([255, 81, 2, 7, 161, 32], None), ([255, 81, 3, 0, 0, 0], None), ([255, 81, 3, 6, 26, 128], [400000, 15000]), ([255, 81, 3, 3, 13, 64], [200000, 30000]), ([255, 81, 3, 0, 3, 232], [1000, 6000000]), ([255, 81, 3, 15, 66, 64], [1000000, 6000])]]
for i, (args, expected) in enumerate(fixtures[N-1]):
check("oracle %d" % i, solve(args), expected)
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 |
|---|---|---|---|
| oracle 0 | [500000, 12000] | [500000, 12000] | Passed |
| oracle 1 | [3840000, 1563] | [3840000, 1563] | Passed |
| oracle 2 | [16777215, 358] | [16777215, 358] | Passed |
| oracle 3 | None | None | Passed |
| oracle 4 | None | None | Passed |
| oracle 5 | None | None | Passed |
| oracle 6 | None | None | Passed |
| oracle 7 | None | None | Passed |
SHA-256 / dfa8517b1ec43a9e01e6b38b51ed2137a444c8597caf54ca386fdfd881716ae0
Verification & scope
A deterministic bounded teaching model with a stipulated toy contract; it is not a complete Standard MIDI File or MIDI 1.0/2.0 implementation. 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:50:03.472307+00:00.
Case digest / 87f58ceecea8adfa5b12bd4d2816adeb75b7314d1708cfa24f09d37aa7badcfc