FA-81686 / MIDI event timing / Open access
Loop-region playback event firing: loop length counted inclusively · case 01
Each loop pass is one tick too long, so events drift later on every repetition.
ROOT CAUSE
The loop length adds one as if both ends were inclusive.
VERIFIED REPAIR
Restore the loop length step so that it reads `L = le - ls`.
Unsuccessful approach: Using the loop end as the length ignores the loop start.
Case contract
Input [loop_start, loop_end, events, from_tick, to_tick]. Playback runs over playback ticks p in [from, to). Song position is p while p < loop_end, afterwards loop_start + (p - loop_end) mod (loop_end - loop_start). Every event whose song tick equals the song position fires as [p, event_tick]. Requires 0 <= loop_start < loop_end and 0 <= from < loop_end, else 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) != 5:
return None
ls, le, events, start, stop = x
if not 0 <= ls < le or start >= le or start < 0:
return None
L = le - ls + 1
hits = []
for p in range(start, stop):
song = p if p < le else ls + (p - le) % L
for e in sorted(events):
if e == song:
hits.append([p, e])
return hits
def check(label, actual, expected):
observations.append({"check": label, "actual": actual, "expected": expected, "passed": actual == expected})
fixtures = [[([4, 8, [4, 6], 0, 16], [[4, 4], [6, 6], [8, 4], [10, 6], [12, 4], [14, 6]]), ([4, 8, [7], 0, 20], [[7, 7], [11, 7], [15, 7], [19, 7]]), ([2, 6, [0, 2, 5], 0, 14], [[0, 0], [2, 2], [5, 5], [6, 2], [9, 5], [10, 2], [13, 5]]), ([4, 8, [4], 8, 9], None), ([4, 8, [4], 9, 10], None), ([4, 8, [4], 3, 12], [[4, 4], [8, 4]]), ([5, 5, [5], 0, 5], None), ([4, 8, [4], -1, 4], None)], [([4, 8, [4, 6], 0, 16], [[4, 4], [6, 6], [8, 4], [10, 6], [12, 4], [14, 6]]), ([4, 8, [8], 0, 16], []), ([4, 8, [7], 0, 20], [[7, 7], [11, 7], [15, 7], [19, 7]]), ([2, 6, [0, 2, 5], 0, 14], [[0, 0], [2, 2], [5, 5], [6, 2], [9, 5], [10, 2], [13, 5]]), ([0, 4, [0, 3], 0, 10], [[0, 0], [3, 3], [4, 0], [7, 3], [8, 0]]), ([4, 8, [1, 5], 6, 14], [[9, 5], [13, 5]]), ([5, 5, [5], 0, 5], None), ([4, 8, [4], -1, 4], None)], [([4, 8, [8], 0, 16], []), ([4, 8, [7], 0, 20], [[7, 7], [11, 7], [15, 7], [19, 7]]), ([2, 6, [0, 2, 5], 0, 14], [[0, 0], [2, 2], [5, 5], [6, 2], [9, 5], [10, 2], [13, 5]]), ([0, 4, [0, 3], 0, 10], [[0, 0], [3, 3], [4, 0], [7, 3], [8, 0]]), ([4, 8, [1, 5], 6, 14], [[9, 5], [13, 5]]), ([3, 5, [3, 4, 5], 0, 12], [[3, 3], [4, 4], [5, 3], [6, 4], [7, 3], [8, 4], [9, 3], [10, 4], [11, 3]]), ([10, 20, [12, 19], 15, 40], [[19, 19], [22, 12], [29, 19], [32, 12], [39, 19]]), ([1, 9, [1, 8], 0, 20], [[1, 1], [8, 8], [9, 1], [16, 8], [17, 1]])], [([2, 6, [0, 2, 5], 0, 14], [[0, 0], [2, 2], [5, 5], [6, 2], [9, 5], [10, 2], [13, 5]]), ([0, 4, [0, 3], 0, 10], [[0, 0], [3, 3], [4, 0], [7, 3], [8, 0]]), ([4, 8, [1, 5], 6, 14], [[9, 5], [13, 5]]), ([3, 5, [3, 4, 5], 0, 12], [[3, 3], [4, 4], [5, 3], [6, 4], [7, 3], [8, 4], [9, 3], [10, 4], [11, 3]]), ([4, 8, [4], 8, 9], None), ([4, 8, [4], 9, 10], None), ([10, 20, [12, 19], 15, 40], [[19, 19], [22, 12], [29, 19], [32, 12], [39, 19]]), ([1, 9, [1, 8], 0, 20], [[1, 1], [8, 8], [9, 1], [16, 8], [17, 1]])], [([0, 4, [0, 3], 0, 10], [[0, 0], [3, 3], [4, 0], [7, 3], [8, 0]]), ([4, 8, [1, 5], 6, 14], [[9, 5], [13, 5]]), ([3, 5, [3, 4, 5], 0, 12], [[3, 3], [4, 4], [5, 3], [6, 4], [7, 3], [8, 4], [9, 3], [10, 4], [11, 3]]), ([4, 8, [4], 8, 9], None), ([4, 8, [4], 9, 10], None), ([4, 8, [4], 3, 12], [[4, 4], [8, 4]]), ([10, 20, [12, 19], 15, 40], [[19, 19], [22, 12], [29, 19], [32, 12], [39, 19]]), ([1, 9, [1, 8], 0, 20], [[1, 1], [8, 8], [9, 1], [16, 8], [17, 1]])]]
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 | [[4, 4], [6, 6], [8, 4], [10, 6], [13, 4], [15, 6]] | [[4, 4], [6, 6], [8, 4], [10, 6], [12, 4], [14, 6]] | Failed |
| oracle 1 | [[7, 7], [11, 7], [16, 7]] | [[7, 7], [11, 7], [15, 7], [19, 7]] | Failed |
| oracle 2 | [[0, 0], [2, 2], [5, 5], [6, 2], [9, 5], [11, 2]] | [[0, 0], [2, 2], [5, 5], [6, 2], [9, 5], [10, 2], [13, 5]] | Failed |
| oracle 3 | None | None | Passed |
| oracle 4 | None | None | Passed |
| oracle 5 | [[4, 4], [8, 4]] | [[4, 4], [8, 4]] | Passed |
| oracle 6 | None | None | Passed |
| oracle 7 | None | None | Passed |
SHA-256 / bb2324b128b4beba290515282d9b819169309dd1de627566b5877f1d89a84de4
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) != 5:
return None
ls, le, events, start, stop = x
if not 0 <= ls < le or start >= le or start < 0:
return None
L = le
hits = []
for p in range(start, stop):
song = p if p < le else ls + (p - le) % L
for e in sorted(events):
if e == song:
hits.append([p, e])
return hits
def check(label, actual, expected):
observations.append({"check": label, "actual": actual, "expected": expected, "passed": actual == expected})
fixtures = [[([4, 8, [4, 6], 0, 16], [[4, 4], [6, 6], [8, 4], [10, 6], [12, 4], [14, 6]]), ([4, 8, [7], 0, 20], [[7, 7], [11, 7], [15, 7], [19, 7]]), ([2, 6, [0, 2, 5], 0, 14], [[0, 0], [2, 2], [5, 5], [6, 2], [9, 5], [10, 2], [13, 5]]), ([4, 8, [4], 8, 9], None), ([4, 8, [4], 9, 10], None), ([4, 8, [4], 3, 12], [[4, 4], [8, 4]]), ([5, 5, [5], 0, 5], None), ([4, 8, [4], -1, 4], None)], [([4, 8, [4, 6], 0, 16], [[4, 4], [6, 6], [8, 4], [10, 6], [12, 4], [14, 6]]), ([4, 8, [8], 0, 16], []), ([4, 8, [7], 0, 20], [[7, 7], [11, 7], [15, 7], [19, 7]]), ([2, 6, [0, 2, 5], 0, 14], [[0, 0], [2, 2], [5, 5], [6, 2], [9, 5], [10, 2], [13, 5]]), ([0, 4, [0, 3], 0, 10], [[0, 0], [3, 3], [4, 0], [7, 3], [8, 0]]), ([4, 8, [1, 5], 6, 14], [[9, 5], [13, 5]]), ([5, 5, [5], 0, 5], None), ([4, 8, [4], -1, 4], None)], [([4, 8, [8], 0, 16], []), ([4, 8, [7], 0, 20], [[7, 7], [11, 7], [15, 7], [19, 7]]), ([2, 6, [0, 2, 5], 0, 14], [[0, 0], [2, 2], [5, 5], [6, 2], [9, 5], [10, 2], [13, 5]]), ([0, 4, [0, 3], 0, 10], [[0, 0], [3, 3], [4, 0], [7, 3], [8, 0]]), ([4, 8, [1, 5], 6, 14], [[9, 5], [13, 5]]), ([3, 5, [3, 4, 5], 0, 12], [[3, 3], [4, 4], [5, 3], [6, 4], [7, 3], [8, 4], [9, 3], [10, 4], [11, 3]]), ([10, 20, [12, 19], 15, 40], [[19, 19], [22, 12], [29, 19], [32, 12], [39, 19]]), ([1, 9, [1, 8], 0, 20], [[1, 1], [8, 8], [9, 1], [16, 8], [17, 1]])], [([2, 6, [0, 2, 5], 0, 14], [[0, 0], [2, 2], [5, 5], [6, 2], [9, 5], [10, 2], [13, 5]]), ([0, 4, [0, 3], 0, 10], [[0, 0], [3, 3], [4, 0], [7, 3], [8, 0]]), ([4, 8, [1, 5], 6, 14], [[9, 5], [13, 5]]), ([3, 5, [3, 4, 5], 0, 12], [[3, 3], [4, 4], [5, 3], [6, 4], [7, 3], [8, 4], [9, 3], [10, 4], [11, 3]]), ([4, 8, [4], 8, 9], None), ([4, 8, [4], 9, 10], None), ([10, 20, [12, 19], 15, 40], [[19, 19], [22, 12], [29, 19], [32, 12], [39, 19]]), ([1, 9, [1, 8], 0, 20], [[1, 1], [8, 8], [9, 1], [16, 8], [17, 1]])], [([0, 4, [0, 3], 0, 10], [[0, 0], [3, 3], [4, 0], [7, 3], [8, 0]]), ([4, 8, [1, 5], 6, 14], [[9, 5], [13, 5]]), ([3, 5, [3, 4, 5], 0, 12], [[3, 3], [4, 4], [5, 3], [6, 4], [7, 3], [8, 4], [9, 3], [10, 4], [11, 3]]), ([4, 8, [4], 8, 9], None), ([4, 8, [4], 9, 10], None), ([4, 8, [4], 3, 12], [[4, 4], [8, 4]]), ([10, 20, [12, 19], 15, 40], [[19, 19], [22, 12], [29, 19], [32, 12], [39, 19]]), ([1, 9, [1, 8], 0, 20], [[1, 1], [8, 8], [9, 1], [16, 8], [17, 1]])]]
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 | [[4, 4], [6, 6], [8, 4], [10, 6]] | [[4, 4], [6, 6], [8, 4], [10, 6], [12, 4], [14, 6]] | Failed |
| oracle 1 | [[7, 7], [11, 7], [19, 7]] | [[7, 7], [11, 7], [15, 7], [19, 7]] | Failed |
| oracle 2 | [[0, 0], [2, 2], [5, 5], [6, 2], [9, 5], [12, 2]] | [[0, 0], [2, 2], [5, 5], [6, 2], [9, 5], [10, 2], [13, 5]] | Failed |
| oracle 3 | None | None | Passed |
| oracle 4 | None | None | Passed |
| oracle 5 | [[4, 4], [8, 4]] | [[4, 4], [8, 4]] | Passed |
| oracle 6 | None | None | Passed |
| oracle 7 | None | None | Passed |
SHA-256 / a431a947d48b1832d4f9b5c87da7bebee5ea2c4d27f2db1683952c77cb7d3a20
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) != 5:
return None
ls, le, events, start, stop = x
if not 0 <= ls < le or start >= le or start < 0:
return None
L = le - ls
hits = []
for p in range(start, stop):
song = p if p < le else ls + (p - le) % L
for e in sorted(events):
if e == song:
hits.append([p, e])
return hits
def check(label, actual, expected):
observations.append({"check": label, "actual": actual, "expected": expected, "passed": actual == expected})
fixtures = [[([4, 8, [4, 6], 0, 16], [[4, 4], [6, 6], [8, 4], [10, 6], [12, 4], [14, 6]]), ([4, 8, [7], 0, 20], [[7, 7], [11, 7], [15, 7], [19, 7]]), ([2, 6, [0, 2, 5], 0, 14], [[0, 0], [2, 2], [5, 5], [6, 2], [9, 5], [10, 2], [13, 5]]), ([4, 8, [4], 8, 9], None), ([4, 8, [4], 9, 10], None), ([4, 8, [4], 3, 12], [[4, 4], [8, 4]]), ([5, 5, [5], 0, 5], None), ([4, 8, [4], -1, 4], None)], [([4, 8, [4, 6], 0, 16], [[4, 4], [6, 6], [8, 4], [10, 6], [12, 4], [14, 6]]), ([4, 8, [8], 0, 16], []), ([4, 8, [7], 0, 20], [[7, 7], [11, 7], [15, 7], [19, 7]]), ([2, 6, [0, 2, 5], 0, 14], [[0, 0], [2, 2], [5, 5], [6, 2], [9, 5], [10, 2], [13, 5]]), ([0, 4, [0, 3], 0, 10], [[0, 0], [3, 3], [4, 0], [7, 3], [8, 0]]), ([4, 8, [1, 5], 6, 14], [[9, 5], [13, 5]]), ([5, 5, [5], 0, 5], None), ([4, 8, [4], -1, 4], None)], [([4, 8, [8], 0, 16], []), ([4, 8, [7], 0, 20], [[7, 7], [11, 7], [15, 7], [19, 7]]), ([2, 6, [0, 2, 5], 0, 14], [[0, 0], [2, 2], [5, 5], [6, 2], [9, 5], [10, 2], [13, 5]]), ([0, 4, [0, 3], 0, 10], [[0, 0], [3, 3], [4, 0], [7, 3], [8, 0]]), ([4, 8, [1, 5], 6, 14], [[9, 5], [13, 5]]), ([3, 5, [3, 4, 5], 0, 12], [[3, 3], [4, 4], [5, 3], [6, 4], [7, 3], [8, 4], [9, 3], [10, 4], [11, 3]]), ([10, 20, [12, 19], 15, 40], [[19, 19], [22, 12], [29, 19], [32, 12], [39, 19]]), ([1, 9, [1, 8], 0, 20], [[1, 1], [8, 8], [9, 1], [16, 8], [17, 1]])], [([2, 6, [0, 2, 5], 0, 14], [[0, 0], [2, 2], [5, 5], [6, 2], [9, 5], [10, 2], [13, 5]]), ([0, 4, [0, 3], 0, 10], [[0, 0], [3, 3], [4, 0], [7, 3], [8, 0]]), ([4, 8, [1, 5], 6, 14], [[9, 5], [13, 5]]), ([3, 5, [3, 4, 5], 0, 12], [[3, 3], [4, 4], [5, 3], [6, 4], [7, 3], [8, 4], [9, 3], [10, 4], [11, 3]]), ([4, 8, [4], 8, 9], None), ([4, 8, [4], 9, 10], None), ([10, 20, [12, 19], 15, 40], [[19, 19], [22, 12], [29, 19], [32, 12], [39, 19]]), ([1, 9, [1, 8], 0, 20], [[1, 1], [8, 8], [9, 1], [16, 8], [17, 1]])], [([0, 4, [0, 3], 0, 10], [[0, 0], [3, 3], [4, 0], [7, 3], [8, 0]]), ([4, 8, [1, 5], 6, 14], [[9, 5], [13, 5]]), ([3, 5, [3, 4, 5], 0, 12], [[3, 3], [4, 4], [5, 3], [6, 4], [7, 3], [8, 4], [9, 3], [10, 4], [11, 3]]), ([4, 8, [4], 8, 9], None), ([4, 8, [4], 9, 10], None), ([4, 8, [4], 3, 12], [[4, 4], [8, 4]]), ([10, 20, [12, 19], 15, 40], [[19, 19], [22, 12], [29, 19], [32, 12], [39, 19]]), ([1, 9, [1, 8], 0, 20], [[1, 1], [8, 8], [9, 1], [16, 8], [17, 1]])]]
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 | [[4, 4], [6, 6], [8, 4], [10, 6], [12, 4], [14, 6]] | [[4, 4], [6, 6], [8, 4], [10, 6], [12, 4], [14, 6]] | Passed |
| oracle 1 | [[7, 7], [11, 7], [15, 7], [19, 7]] | [[7, 7], [11, 7], [15, 7], [19, 7]] | Passed |
| oracle 2 | [[0, 0], [2, 2], [5, 5], [6, 2], [9, 5], [10, 2], [13, 5]] | [[0, 0], [2, 2], [5, 5], [6, 2], [9, 5], [10, 2], [13, 5]] | Passed |
| oracle 3 | None | None | Passed |
| oracle 4 | None | None | Passed |
| oracle 5 | [[4, 4], [8, 4]] | [[4, 4], [8, 4]] | Passed |
| oracle 6 | None | None | Passed |
| oracle 7 | None | None | Passed |
SHA-256 / 08fe9088276f6f48237542f5753cb548b13684f555ba917a5f86705f6be0e823
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:05.120022+00:00.
Case digest / 349c53c9233cc520c3cf445dbe77546417c3ae7e6175e1633360e075236ab343