FAILURE MAP
← Case archive

FA-77906 / Subtitle cue timing / Open access

Partial subtitle resync from a point: resort after partial shift · case 01

After a negative partial resync, cue numbers no longer follow display order.

Verified by executionVariant 1 · 9 checks per implementationDownload source bundle ↓JSON ↗

ROOT CAUSE

The list is not re-sorted, although shifting only later cues can reorder them.

VERIFIED REPAIR

Sort the surviving cues by start then end before numbering.

Unsuccessful approach: Sorting by end time alone misorders overlapping cues whose starts differ.

Case contract

Cues [start,end,text] (sorted by start) whose start is at or after from_ms are shifted by offset ms (start and end). A cue whose end becomes <= 0 is dropped; a negative start is clamped to 0 without moving its end. The result is re-sorted by (start,end) and numbered from 1 as [n,start,end,text].

Why this case matters

Subtitle timing defects shift, hide or overlap captions that viewers depend on for comprehension and accessibility.

1 / The failure

Exit 1
"""Failure Map reference implementation. Python standard library only."""
import json

N = 1
observations = []
def solve(cues, offset, from_ms):
    out=[]
    for start,end,text in cues:
        if start>=from_ms:
            start+=offset
            end+=offset
        if end<=0:
            continue
        if start<0:
            start=0
        out.append([start,end,text])
    out=out
    return [[i+1]+c for i,c in enumerate(out)]
def check(label, actual, expected):
    observations.append({"check": label, "actual": actual, "expected": expected, "passed": actual == expected})
fixtures = [[('regression: resort after partial shift', [[[400, 600, 'c'], [400, 1200, 'd'], [2900, 3100, 'b'], [5100, 5101, 'a']], -3000, 5100], [[1, 400, 600, 'c'], [2, 400, 1200, 'd'], [3, 2100, 2101, 'a'], [4, 2900, 3100, 'b']]), ('regression variant: resort after partial shift', [[[2500, 4000, 'a'], [4000, 5500, 'b'], [5000, 5001, 'e']], -1200, 5000], [[1, 2500, 4000, 'a'], [2, 3800, 3801, 'e'], [3, 4000, 5500, 'b']]), ('partial repair probe: resort after partial shift', [[[400, 401, 'e'], [2900, 3700, 'd'], [5400, 5401, 'd'], [6600, 9600, 'e'], [8600, 8601, 'a']], 250, 1518], [[1, 400, 401, 'e'], [2, 3150, 3950, 'd'], [3, 5650, 5651, 'd'], [4, 6850, 9850, 'e'], [5, 8850, 8851, 'a']]), ('partial repair variant: resort after partial shift', [[[500, 3500, 'c'], [2700, 2701, 'a'], [4700, 6200, 'c']], 1000, 4700], [[1, 500, 3500, 'c'], [2, 2700, 2701, 'a'], [3, 5700, 7200, 'c']]), ('boundary control', [[[1000, 2000, 'a'], [3000, 4000, 'b']], -1500, 0], [[1, 0, 500, 'a'], [2, 1500, 2500, 'b']]), ('boundary control', [[[100, 200, 'x']], 50, 100], [[1, 150, 250, 'x']]), ('normal control', [[[150, 151, 'd'], [200, 400, 'e']], 1000, 3319], [[1, 150, 151, 'd'], [2, 200, 400, 'e']]), ('normal control', [[[400, 1200, 'e']], -1200, 0], []), ('normal control', [[[3000, 6000, 'd']], -1200, 6000], [[1, 3000, 6000, 'd']])], [('regression: resort after partial shift', [[[2300, 3800, 'd'], [3550, 6550, 'a'], [4250, 7250, 'e'], [6450, 6650, 'e'], [9350, 10150, 'd']], -3000, 9350], [[1, 2300, 3800, 'd'], [2, 3550, 6550, 'a'], [3, 4250, 7250, 'e'], [4, 6350, 7150, 'd'], [5, 6450, 6650, 'e']]), ('regression variant: resort after partial shift', [[[4500, 4501, 'd'], [4900, 6400, 'e'], [4900, 5700, 'e'], [6900, 7700, 'd']], -1200, 6900], [[1, 4500, 4501, 'd'], [2, 4900, 5700, 'e'], [3, 4900, 6400, 'e'], [4, 5700, 6500, 'd']]), ('partial repair probe: resort after partial shift', [[[3000, 3001, 'a'], [3500, 3501, 'c'], [4750, 7750, 'c'], [6150, 6350, 'a'], [7550, 7750, 'c']], 250, 7550], [[1, 3000, 3001, 'a'], [2, 3500, 3501, 'c'], [3, 4750, 7750, 'c'], [4, 6150, 6350, 'a'], [5, 7800, 8000, 'c']]), ('partial repair variant: resort after partial shift', [[[400, 600, 'a'], [3300, 6300, 'b'], [3600, 4400, 'b']], -300, 0], [[1, 100, 300, 'a'], [2, 3000, 6000, 'b'], [3, 3300, 4100, 'b']]), ('boundary control', [[[100, 200, 'x']], 50, 100], [[1, 150, 250, 'x']]), ('boundary control', [[[1000, 2000, 'a'], [3000, 4000, 'b']], -1500, 0], [[1, 0, 500, 'a'], [2, 1500, 2500, 'b']]), ('normal control', [[[300, 500, 'd']], -1200, 500], [[1, 300, 500, 'd']]), ('normal control', [[[3000, 3800, 'c'], [3700, 6700, 'd']], -1200, 3000], [[1, 1800, 2600, 'c'], [2, 2500, 5500, 'd']]), ('normal control', [[[1100, 1300, 'c'], [3600, 3601, 'c']], -1200, 1100], [[1, 0, 100, 'c'], [2, 2400, 2401, 'c']])], [('regression: resort after partial shift', [[[-200, 2800, 'b'], [0, 1500, 'd']], 250, 2098], [[1, 0, 1500, 'd'], [2, 0, 2800, 'b']]), ('regression variant: resort after partial shift', [[[550, 2050, 'd'], [1950, 3450, 'e']], -3000, 1950], [[1, 0, 450, 'e'], [2, 550, 2050, 'd']]), ('partial repair probe: resort after partial shift', [[[1100, 1900, 'b'], [2650, 4150, 'c'], [2700, 2900, 'a'], [3100, 3300, 'e']], 4000, 1100], [[1, 5100, 5900, 'b'], [2, 6650, 8150, 'c'], [3, 6700, 6900, 'a'], [4, 7100, 7300, 'e']]), ('partial repair variant: resort after partial shift', [[[500, 3500, 'c'], [3000, 3800, 'a'], [3050, 6050, 'c'], [3800, 4600, 'd'], [4250, 7250, 'd']], -3000, 6050], [[1, 500, 3500, 'c'], [2, 3000, 3800, 'a'], [3, 3050, 6050, 'c'], [4, 3800, 4600, 'd'], [5, 4250, 7250, 'd']]), ('boundary control', [[[1000, 2000, 'a'], [3000, 4000, 'b']], -1500, 0], [[1, 0, 500, 'a'], [2, 1500, 2500, 'b']]), ('boundary control', [[[100, 200, 'x']], 50, 100], [[1, 150, 250, 'x']]), ('normal control', [[[2050, 2051, 'c'], [2500, 2700, 'e']], -1200, 2050], [[1, 850, 851, 'c'], [2, 1300, 1500, 'e']]), ('normal control', [[[2050, 2051, 'c'], [2050, 2250, 'c']], -1200, 1309], [[1, 850, 851, 'c'], [2, 850, 1050, 'c']]), ('normal control', [[[0, 800, 'b'], [2500, 3300, 'c']], 4000, 0], [[1, 4000, 4800, 'b'], [2, 6500, 7300, 'c']])], [('regression: resort after partial shift', [[[2050, 2850, 'c'], [2550, 4050, 'e'], [3000, 3001, 'c'], [4950, 5750, 'a']], -3000, 2050], [[1, 0, 1, 'c'], [2, 0, 1050, 'e'], [3, 1950, 2750, 'a']]), ('regression variant: resort after partial shift', [[[400, 1200, 'b'], [400, 401, 'a'], [3300, 3500, 'a'], [4500, 5300, 'b']], -300, 3500], [[1, 400, 401, 'a'], [2, 400, 1200, 'b'], [3, 3300, 3500, 'a'], [4, 4200, 5000, 'b']]), ('partial repair probe: resort after partial shift', [[[2300, 5300, 'c'], [3300, 4800, 'e']], -1200, 813], [[1, 1100, 4100, 'c'], [2, 2100, 3600, 'e']]), ('partial repair variant: resort after partial shift', [[[500, 2000, 'c'], [3000, 4500, 'e'], [4200, 4201, 'e'], [5700, 8700, 'c']], -300, 0], [[1, 200, 1700, 'c'], [2, 2700, 4200, 'e'], [3, 3900, 3901, 'e'], [4, 5400, 8400, 'c']]), ('boundary control', [[[100, 200, 'x']], 50, 100], [[1, 150, 250, 'x']]), ('boundary control', [[[1000, 2000, 'a'], [3000, 4000, 'b']], -1500, 0], [[1, 0, 500, 'a'], [2, 1500, 2500, 'b']]), ('normal control', [[[900, 1100, 'a'], [1100, 1101, 'a'], [1100, 2600, 'b'], [1200, 4200, 'a']], -800, 900], [[1, 100, 300, 'a'], [2, 300, 301, 'a'], [3, 300, 1800, 'b'], [4, 400, 3400, 'a']]), ('normal control', [[[1100, 1900, 'd'], [4000, 4200, 'd']], -800, 1100], [[1, 300, 1100, 'd'], [2, 3200, 3400, 'd']]), ('normal control', [[[2300, 2500, 'e']], -3000, 2500], [[1, 2300, 2500, 'e']])], [('regression: resort after partial shift', [[[300, 3300, 'a'], [800, 2300, 'e'], [800, 1600, 'e'], [1050, 1250, 'b'], [1250, 2050, 'a']], 1000, 2404], [[1, 300, 3300, 'a'], [2, 800, 1600, 'e'], [3, 800, 2300, 'e'], [4, 1050, 1250, 'b'], [5, 1250, 2050, 'a']]), ('regression variant: resort after partial shift', [[[1000, 2500, 'b'], [2400, 5400, 'b'], [2400, 2401, 'b'], [2900, 2901, 'a']], 1000, 2900], [[1, 1000, 2500, 'b'], [2, 2400, 2401, 'b'], [3, 2400, 5400, 'b'], [4, 3900, 3901, 'a']]), ('partial repair probe: resort after partial shift', [[[2300, 3800, 'd'], [3550, 6550, 'a'], [4250, 7250, 'e'], [6450, 6650, 'e'], [9350, 10150, 'd']], -3000, 9350], [[1, 2300, 3800, 'd'], [2, 3550, 6550, 'a'], [3, 4250, 7250, 'e'], [4, 6350, 7150, 'd'], [5, 6450, 6650, 'e']]), ('partial repair variant: resort after partial shift', [[[800, 3800, 'a'], [1100, 1101, 'e'], [1550, 2350, 'b'], [2000, 2200, 'd'], [2450, 5450, 'c']], 250, 2350], [[1, 800, 3800, 'a'], [2, 1100, 1101, 'e'], [3, 1550, 2350, 'b'], [4, 2000, 2200, 'd'], [5, 2700, 5700, 'c']]), ('boundary control', [[[1000, 2000, 'a'], [3000, 4000, 'b']], -1500, 0], [[1, 0, 500, 'a'], [2, 1500, 2500, 'b']]), ('boundary control', [[[100, 200, 'x']], 50, 100], [[1, 150, 250, 'x']]), ('normal control', [[[2300, 3100, 'e'], [3000, 3200, 'd'], [4200, 4400, 'e'], [4400, 5900, 'e'], [4600, 7600, 'a']], -300, 2300], [[1, 2000, 2800, 'e'], [2, 2700, 2900, 'd'], [3, 3900, 4100, 'e'], [4, 4100, 5600, 'e'], [5, 4300, 7300, 'a']]), ('normal control', [[[0, 1500, 'c'], [300, 500, 'b'], [3200, 3201, 'e']], -800, 0], [[1, 0, 700, 'c'], [2, 2400, 2401, 'e']]), ('normal control', [[[400, 600, 'c'], [2900, 2901, 'c'], [3350, 3550, 'b']], 250, 2901], [[1, 400, 600, 'c'], [2, 2900, 2901, 'c'], [3, 3600, 3800, 'b']])]]
for label, args, expected in fixtures[N-1]:
    check(label, 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 fixtureActualExpectedOutcome
regression: resort after partial shift[[1, 400, 600, 'c'], [2, 400, 1200, 'd'], [3, 2900, 3100, 'b'], [4, 2100, 2101, 'a']][[1, 400, 600, 'c'], [2, 400, 1200, 'd'], [3, 2100, 2101, 'a'], [4, 2900, 3100, 'b']]Failed
regression variant: resort after partial shift[[1, 2500, 4000, 'a'], [2, 4000, 5500, 'b'], [3, 3800, 3801, 'e']][[1, 2500, 4000, 'a'], [2, 3800, 3801, 'e'], [3, 4000, 5500, 'b']]Failed
partial repair probe: resort after partial shift[[1, 400, 401, 'e'], [2, 3150, 3950, 'd'], [3, 5650, 5651, 'd'], [4, 6850, 9850, 'e'], [5, 8850, 8851, 'a']][[1, 400, 401, 'e'], [2, 3150, 3950, 'd'], [3, 5650, 5651, 'd'], [4, 6850, 9850, 'e'], [5, 8850, 8851, 'a']]Passed
partial repair variant: resort after partial shift[[1, 500, 3500, 'c'], [2, 2700, 2701, 'a'], [3, 5700, 7200, 'c']][[1, 500, 3500, 'c'], [2, 2700, 2701, 'a'], [3, 5700, 7200, 'c']]Passed
boundary control[[1, 0, 500, 'a'], [2, 1500, 2500, 'b']][[1, 0, 500, 'a'], [2, 1500, 2500, 'b']]Passed
boundary control[[1, 150, 250, 'x']][[1, 150, 250, 'x']]Passed
normal control[[1, 150, 151, 'd'], [2, 200, 400, 'e']][[1, 150, 151, 'd'], [2, 200, 400, 'e']]Passed
normal control[][]Passed
normal control[[1, 3000, 6000, 'd']][[1, 3000, 6000, 'd']]Passed

SHA-256 / daf1d40318c51ed91a7a8771009802ecf0d6923744771ab53a0d3ab4e15a404e

2 / The unsuccessful fix

Exit 1
"""Failure Map reference implementation. Python standard library only."""
import json

N = 1
observations = []
def solve(cues, offset, from_ms):
    out=[]
    for start,end,text in cues:
        if start>=from_ms:
            start+=offset
            end+=offset
        if end<=0:
            continue
        if start<0:
            start=0
        out.append([start,end,text])
    out.sort(key=lambda c:c[1])
    return [[i+1]+c for i,c in enumerate(out)]
def check(label, actual, expected):
    observations.append({"check": label, "actual": actual, "expected": expected, "passed": actual == expected})
fixtures = [[('regression: resort after partial shift', [[[400, 600, 'c'], [400, 1200, 'd'], [2900, 3100, 'b'], [5100, 5101, 'a']], -3000, 5100], [[1, 400, 600, 'c'], [2, 400, 1200, 'd'], [3, 2100, 2101, 'a'], [4, 2900, 3100, 'b']]), ('regression variant: resort after partial shift', [[[2500, 4000, 'a'], [4000, 5500, 'b'], [5000, 5001, 'e']], -1200, 5000], [[1, 2500, 4000, 'a'], [2, 3800, 3801, 'e'], [3, 4000, 5500, 'b']]), ('partial repair probe: resort after partial shift', [[[400, 401, 'e'], [2900, 3700, 'd'], [5400, 5401, 'd'], [6600, 9600, 'e'], [8600, 8601, 'a']], 250, 1518], [[1, 400, 401, 'e'], [2, 3150, 3950, 'd'], [3, 5650, 5651, 'd'], [4, 6850, 9850, 'e'], [5, 8850, 8851, 'a']]), ('partial repair variant: resort after partial shift', [[[500, 3500, 'c'], [2700, 2701, 'a'], [4700, 6200, 'c']], 1000, 4700], [[1, 500, 3500, 'c'], [2, 2700, 2701, 'a'], [3, 5700, 7200, 'c']]), ('boundary control', [[[1000, 2000, 'a'], [3000, 4000, 'b']], -1500, 0], [[1, 0, 500, 'a'], [2, 1500, 2500, 'b']]), ('boundary control', [[[100, 200, 'x']], 50, 100], [[1, 150, 250, 'x']]), ('normal control', [[[150, 151, 'd'], [200, 400, 'e']], 1000, 3319], [[1, 150, 151, 'd'], [2, 200, 400, 'e']]), ('normal control', [[[400, 1200, 'e']], -1200, 0], []), ('normal control', [[[3000, 6000, 'd']], -1200, 6000], [[1, 3000, 6000, 'd']])], [('regression: resort after partial shift', [[[2300, 3800, 'd'], [3550, 6550, 'a'], [4250, 7250, 'e'], [6450, 6650, 'e'], [9350, 10150, 'd']], -3000, 9350], [[1, 2300, 3800, 'd'], [2, 3550, 6550, 'a'], [3, 4250, 7250, 'e'], [4, 6350, 7150, 'd'], [5, 6450, 6650, 'e']]), ('regression variant: resort after partial shift', [[[4500, 4501, 'd'], [4900, 6400, 'e'], [4900, 5700, 'e'], [6900, 7700, 'd']], -1200, 6900], [[1, 4500, 4501, 'd'], [2, 4900, 5700, 'e'], [3, 4900, 6400, 'e'], [4, 5700, 6500, 'd']]), ('partial repair probe: resort after partial shift', [[[3000, 3001, 'a'], [3500, 3501, 'c'], [4750, 7750, 'c'], [6150, 6350, 'a'], [7550, 7750, 'c']], 250, 7550], [[1, 3000, 3001, 'a'], [2, 3500, 3501, 'c'], [3, 4750, 7750, 'c'], [4, 6150, 6350, 'a'], [5, 7800, 8000, 'c']]), ('partial repair variant: resort after partial shift', [[[400, 600, 'a'], [3300, 6300, 'b'], [3600, 4400, 'b']], -300, 0], [[1, 100, 300, 'a'], [2, 3000, 6000, 'b'], [3, 3300, 4100, 'b']]), ('boundary control', [[[100, 200, 'x']], 50, 100], [[1, 150, 250, 'x']]), ('boundary control', [[[1000, 2000, 'a'], [3000, 4000, 'b']], -1500, 0], [[1, 0, 500, 'a'], [2, 1500, 2500, 'b']]), ('normal control', [[[300, 500, 'd']], -1200, 500], [[1, 300, 500, 'd']]), ('normal control', [[[3000, 3800, 'c'], [3700, 6700, 'd']], -1200, 3000], [[1, 1800, 2600, 'c'], [2, 2500, 5500, 'd']]), ('normal control', [[[1100, 1300, 'c'], [3600, 3601, 'c']], -1200, 1100], [[1, 0, 100, 'c'], [2, 2400, 2401, 'c']])], [('regression: resort after partial shift', [[[-200, 2800, 'b'], [0, 1500, 'd']], 250, 2098], [[1, 0, 1500, 'd'], [2, 0, 2800, 'b']]), ('regression variant: resort after partial shift', [[[550, 2050, 'd'], [1950, 3450, 'e']], -3000, 1950], [[1, 0, 450, 'e'], [2, 550, 2050, 'd']]), ('partial repair probe: resort after partial shift', [[[1100, 1900, 'b'], [2650, 4150, 'c'], [2700, 2900, 'a'], [3100, 3300, 'e']], 4000, 1100], [[1, 5100, 5900, 'b'], [2, 6650, 8150, 'c'], [3, 6700, 6900, 'a'], [4, 7100, 7300, 'e']]), ('partial repair variant: resort after partial shift', [[[500, 3500, 'c'], [3000, 3800, 'a'], [3050, 6050, 'c'], [3800, 4600, 'd'], [4250, 7250, 'd']], -3000, 6050], [[1, 500, 3500, 'c'], [2, 3000, 3800, 'a'], [3, 3050, 6050, 'c'], [4, 3800, 4600, 'd'], [5, 4250, 7250, 'd']]), ('boundary control', [[[1000, 2000, 'a'], [3000, 4000, 'b']], -1500, 0], [[1, 0, 500, 'a'], [2, 1500, 2500, 'b']]), ('boundary control', [[[100, 200, 'x']], 50, 100], [[1, 150, 250, 'x']]), ('normal control', [[[2050, 2051, 'c'], [2500, 2700, 'e']], -1200, 2050], [[1, 850, 851, 'c'], [2, 1300, 1500, 'e']]), ('normal control', [[[2050, 2051, 'c'], [2050, 2250, 'c']], -1200, 1309], [[1, 850, 851, 'c'], [2, 850, 1050, 'c']]), ('normal control', [[[0, 800, 'b'], [2500, 3300, 'c']], 4000, 0], [[1, 4000, 4800, 'b'], [2, 6500, 7300, 'c']])], [('regression: resort after partial shift', [[[2050, 2850, 'c'], [2550, 4050, 'e'], [3000, 3001, 'c'], [4950, 5750, 'a']], -3000, 2050], [[1, 0, 1, 'c'], [2, 0, 1050, 'e'], [3, 1950, 2750, 'a']]), ('regression variant: resort after partial shift', [[[400, 1200, 'b'], [400, 401, 'a'], [3300, 3500, 'a'], [4500, 5300, 'b']], -300, 3500], [[1, 400, 401, 'a'], [2, 400, 1200, 'b'], [3, 3300, 3500, 'a'], [4, 4200, 5000, 'b']]), ('partial repair probe: resort after partial shift', [[[2300, 5300, 'c'], [3300, 4800, 'e']], -1200, 813], [[1, 1100, 4100, 'c'], [2, 2100, 3600, 'e']]), ('partial repair variant: resort after partial shift', [[[500, 2000, 'c'], [3000, 4500, 'e'], [4200, 4201, 'e'], [5700, 8700, 'c']], -300, 0], [[1, 200, 1700, 'c'], [2, 2700, 4200, 'e'], [3, 3900, 3901, 'e'], [4, 5400, 8400, 'c']]), ('boundary control', [[[100, 200, 'x']], 50, 100], [[1, 150, 250, 'x']]), ('boundary control', [[[1000, 2000, 'a'], [3000, 4000, 'b']], -1500, 0], [[1, 0, 500, 'a'], [2, 1500, 2500, 'b']]), ('normal control', [[[900, 1100, 'a'], [1100, 1101, 'a'], [1100, 2600, 'b'], [1200, 4200, 'a']], -800, 900], [[1, 100, 300, 'a'], [2, 300, 301, 'a'], [3, 300, 1800, 'b'], [4, 400, 3400, 'a']]), ('normal control', [[[1100, 1900, 'd'], [4000, 4200, 'd']], -800, 1100], [[1, 300, 1100, 'd'], [2, 3200, 3400, 'd']]), ('normal control', [[[2300, 2500, 'e']], -3000, 2500], [[1, 2300, 2500, 'e']])], [('regression: resort after partial shift', [[[300, 3300, 'a'], [800, 2300, 'e'], [800, 1600, 'e'], [1050, 1250, 'b'], [1250, 2050, 'a']], 1000, 2404], [[1, 300, 3300, 'a'], [2, 800, 1600, 'e'], [3, 800, 2300, 'e'], [4, 1050, 1250, 'b'], [5, 1250, 2050, 'a']]), ('regression variant: resort after partial shift', [[[1000, 2500, 'b'], [2400, 5400, 'b'], [2400, 2401, 'b'], [2900, 2901, 'a']], 1000, 2900], [[1, 1000, 2500, 'b'], [2, 2400, 2401, 'b'], [3, 2400, 5400, 'b'], [4, 3900, 3901, 'a']]), ('partial repair probe: resort after partial shift', [[[2300, 3800, 'd'], [3550, 6550, 'a'], [4250, 7250, 'e'], [6450, 6650, 'e'], [9350, 10150, 'd']], -3000, 9350], [[1, 2300, 3800, 'd'], [2, 3550, 6550, 'a'], [3, 4250, 7250, 'e'], [4, 6350, 7150, 'd'], [5, 6450, 6650, 'e']]), ('partial repair variant: resort after partial shift', [[[800, 3800, 'a'], [1100, 1101, 'e'], [1550, 2350, 'b'], [2000, 2200, 'd'], [2450, 5450, 'c']], 250, 2350], [[1, 800, 3800, 'a'], [2, 1100, 1101, 'e'], [3, 1550, 2350, 'b'], [4, 2000, 2200, 'd'], [5, 2700, 5700, 'c']]), ('boundary control', [[[1000, 2000, 'a'], [3000, 4000, 'b']], -1500, 0], [[1, 0, 500, 'a'], [2, 1500, 2500, 'b']]), ('boundary control', [[[100, 200, 'x']], 50, 100], [[1, 150, 250, 'x']]), ('normal control', [[[2300, 3100, 'e'], [3000, 3200, 'd'], [4200, 4400, 'e'], [4400, 5900, 'e'], [4600, 7600, 'a']], -300, 2300], [[1, 2000, 2800, 'e'], [2, 2700, 2900, 'd'], [3, 3900, 4100, 'e'], [4, 4100, 5600, 'e'], [5, 4300, 7300, 'a']]), ('normal control', [[[0, 1500, 'c'], [300, 500, 'b'], [3200, 3201, 'e']], -800, 0], [[1, 0, 700, 'c'], [2, 2400, 2401, 'e']]), ('normal control', [[[400, 600, 'c'], [2900, 2901, 'c'], [3350, 3550, 'b']], 250, 2901], [[1, 400, 600, 'c'], [2, 2900, 2901, 'c'], [3, 3600, 3800, 'b']])]]
for label, args, expected in fixtures[N-1]:
    check(label, 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 fixtureActualExpectedOutcome
regression: resort after partial shift[[1, 400, 600, 'c'], [2, 400, 1200, 'd'], [3, 2100, 2101, 'a'], [4, 2900, 3100, 'b']][[1, 400, 600, 'c'], [2, 400, 1200, 'd'], [3, 2100, 2101, 'a'], [4, 2900, 3100, 'b']]Passed
regression variant: resort after partial shift[[1, 3800, 3801, 'e'], [2, 2500, 4000, 'a'], [3, 4000, 5500, 'b']][[1, 2500, 4000, 'a'], [2, 3800, 3801, 'e'], [3, 4000, 5500, 'b']]Failed
partial repair probe: resort after partial shift[[1, 400, 401, 'e'], [2, 3150, 3950, 'd'], [3, 5650, 5651, 'd'], [4, 8850, 8851, 'a'], [5, 6850, 9850, 'e']][[1, 400, 401, 'e'], [2, 3150, 3950, 'd'], [3, 5650, 5651, 'd'], [4, 6850, 9850, 'e'], [5, 8850, 8851, 'a']]Failed
partial repair variant: resort after partial shift[[1, 2700, 2701, 'a'], [2, 500, 3500, 'c'], [3, 5700, 7200, 'c']][[1, 500, 3500, 'c'], [2, 2700, 2701, 'a'], [3, 5700, 7200, 'c']]Failed
boundary control[[1, 0, 500, 'a'], [2, 1500, 2500, 'b']][[1, 0, 500, 'a'], [2, 1500, 2500, 'b']]Passed
boundary control[[1, 150, 250, 'x']][[1, 150, 250, 'x']]Passed
normal control[[1, 150, 151, 'd'], [2, 200, 400, 'e']][[1, 150, 151, 'd'], [2, 200, 400, 'e']]Passed
normal control[][]Passed
normal control[[1, 3000, 6000, 'd']][[1, 3000, 6000, 'd']]Passed

SHA-256 / ff2bd64fb8d27bffd7dbf0a24245e3a7341f3c483ad67d1fc4d1a29c294deda8

3 / The verified repair

Exit 0
"""Failure Map reference implementation. Python standard library only."""
import json

N = 1
observations = []
def solve(cues, offset, from_ms):
    out=[]
    for start,end,text in cues:
        if start>=from_ms:
            start+=offset
            end+=offset
        if end<=0:
            continue
        if start<0:
            start=0
        out.append([start,end,text])
    out.sort(key=lambda c:(c[0],c[1]))
    return [[i+1]+c for i,c in enumerate(out)]
def check(label, actual, expected):
    observations.append({"check": label, "actual": actual, "expected": expected, "passed": actual == expected})
fixtures = [[('regression: resort after partial shift', [[[400, 600, 'c'], [400, 1200, 'd'], [2900, 3100, 'b'], [5100, 5101, 'a']], -3000, 5100], [[1, 400, 600, 'c'], [2, 400, 1200, 'd'], [3, 2100, 2101, 'a'], [4, 2900, 3100, 'b']]), ('regression variant: resort after partial shift', [[[2500, 4000, 'a'], [4000, 5500, 'b'], [5000, 5001, 'e']], -1200, 5000], [[1, 2500, 4000, 'a'], [2, 3800, 3801, 'e'], [3, 4000, 5500, 'b']]), ('partial repair probe: resort after partial shift', [[[400, 401, 'e'], [2900, 3700, 'd'], [5400, 5401, 'd'], [6600, 9600, 'e'], [8600, 8601, 'a']], 250, 1518], [[1, 400, 401, 'e'], [2, 3150, 3950, 'd'], [3, 5650, 5651, 'd'], [4, 6850, 9850, 'e'], [5, 8850, 8851, 'a']]), ('partial repair variant: resort after partial shift', [[[500, 3500, 'c'], [2700, 2701, 'a'], [4700, 6200, 'c']], 1000, 4700], [[1, 500, 3500, 'c'], [2, 2700, 2701, 'a'], [3, 5700, 7200, 'c']]), ('boundary control', [[[1000, 2000, 'a'], [3000, 4000, 'b']], -1500, 0], [[1, 0, 500, 'a'], [2, 1500, 2500, 'b']]), ('boundary control', [[[100, 200, 'x']], 50, 100], [[1, 150, 250, 'x']]), ('normal control', [[[150, 151, 'd'], [200, 400, 'e']], 1000, 3319], [[1, 150, 151, 'd'], [2, 200, 400, 'e']]), ('normal control', [[[400, 1200, 'e']], -1200, 0], []), ('normal control', [[[3000, 6000, 'd']], -1200, 6000], [[1, 3000, 6000, 'd']])], [('regression: resort after partial shift', [[[2300, 3800, 'd'], [3550, 6550, 'a'], [4250, 7250, 'e'], [6450, 6650, 'e'], [9350, 10150, 'd']], -3000, 9350], [[1, 2300, 3800, 'd'], [2, 3550, 6550, 'a'], [3, 4250, 7250, 'e'], [4, 6350, 7150, 'd'], [5, 6450, 6650, 'e']]), ('regression variant: resort after partial shift', [[[4500, 4501, 'd'], [4900, 6400, 'e'], [4900, 5700, 'e'], [6900, 7700, 'd']], -1200, 6900], [[1, 4500, 4501, 'd'], [2, 4900, 5700, 'e'], [3, 4900, 6400, 'e'], [4, 5700, 6500, 'd']]), ('partial repair probe: resort after partial shift', [[[3000, 3001, 'a'], [3500, 3501, 'c'], [4750, 7750, 'c'], [6150, 6350, 'a'], [7550, 7750, 'c']], 250, 7550], [[1, 3000, 3001, 'a'], [2, 3500, 3501, 'c'], [3, 4750, 7750, 'c'], [4, 6150, 6350, 'a'], [5, 7800, 8000, 'c']]), ('partial repair variant: resort after partial shift', [[[400, 600, 'a'], [3300, 6300, 'b'], [3600, 4400, 'b']], -300, 0], [[1, 100, 300, 'a'], [2, 3000, 6000, 'b'], [3, 3300, 4100, 'b']]), ('boundary control', [[[100, 200, 'x']], 50, 100], [[1, 150, 250, 'x']]), ('boundary control', [[[1000, 2000, 'a'], [3000, 4000, 'b']], -1500, 0], [[1, 0, 500, 'a'], [2, 1500, 2500, 'b']]), ('normal control', [[[300, 500, 'd']], -1200, 500], [[1, 300, 500, 'd']]), ('normal control', [[[3000, 3800, 'c'], [3700, 6700, 'd']], -1200, 3000], [[1, 1800, 2600, 'c'], [2, 2500, 5500, 'd']]), ('normal control', [[[1100, 1300, 'c'], [3600, 3601, 'c']], -1200, 1100], [[1, 0, 100, 'c'], [2, 2400, 2401, 'c']])], [('regression: resort after partial shift', [[[-200, 2800, 'b'], [0, 1500, 'd']], 250, 2098], [[1, 0, 1500, 'd'], [2, 0, 2800, 'b']]), ('regression variant: resort after partial shift', [[[550, 2050, 'd'], [1950, 3450, 'e']], -3000, 1950], [[1, 0, 450, 'e'], [2, 550, 2050, 'd']]), ('partial repair probe: resort after partial shift', [[[1100, 1900, 'b'], [2650, 4150, 'c'], [2700, 2900, 'a'], [3100, 3300, 'e']], 4000, 1100], [[1, 5100, 5900, 'b'], [2, 6650, 8150, 'c'], [3, 6700, 6900, 'a'], [4, 7100, 7300, 'e']]), ('partial repair variant: resort after partial shift', [[[500, 3500, 'c'], [3000, 3800, 'a'], [3050, 6050, 'c'], [3800, 4600, 'd'], [4250, 7250, 'd']], -3000, 6050], [[1, 500, 3500, 'c'], [2, 3000, 3800, 'a'], [3, 3050, 6050, 'c'], [4, 3800, 4600, 'd'], [5, 4250, 7250, 'd']]), ('boundary control', [[[1000, 2000, 'a'], [3000, 4000, 'b']], -1500, 0], [[1, 0, 500, 'a'], [2, 1500, 2500, 'b']]), ('boundary control', [[[100, 200, 'x']], 50, 100], [[1, 150, 250, 'x']]), ('normal control', [[[2050, 2051, 'c'], [2500, 2700, 'e']], -1200, 2050], [[1, 850, 851, 'c'], [2, 1300, 1500, 'e']]), ('normal control', [[[2050, 2051, 'c'], [2050, 2250, 'c']], -1200, 1309], [[1, 850, 851, 'c'], [2, 850, 1050, 'c']]), ('normal control', [[[0, 800, 'b'], [2500, 3300, 'c']], 4000, 0], [[1, 4000, 4800, 'b'], [2, 6500, 7300, 'c']])], [('regression: resort after partial shift', [[[2050, 2850, 'c'], [2550, 4050, 'e'], [3000, 3001, 'c'], [4950, 5750, 'a']], -3000, 2050], [[1, 0, 1, 'c'], [2, 0, 1050, 'e'], [3, 1950, 2750, 'a']]), ('regression variant: resort after partial shift', [[[400, 1200, 'b'], [400, 401, 'a'], [3300, 3500, 'a'], [4500, 5300, 'b']], -300, 3500], [[1, 400, 401, 'a'], [2, 400, 1200, 'b'], [3, 3300, 3500, 'a'], [4, 4200, 5000, 'b']]), ('partial repair probe: resort after partial shift', [[[2300, 5300, 'c'], [3300, 4800, 'e']], -1200, 813], [[1, 1100, 4100, 'c'], [2, 2100, 3600, 'e']]), ('partial repair variant: resort after partial shift', [[[500, 2000, 'c'], [3000, 4500, 'e'], [4200, 4201, 'e'], [5700, 8700, 'c']], -300, 0], [[1, 200, 1700, 'c'], [2, 2700, 4200, 'e'], [3, 3900, 3901, 'e'], [4, 5400, 8400, 'c']]), ('boundary control', [[[100, 200, 'x']], 50, 100], [[1, 150, 250, 'x']]), ('boundary control', [[[1000, 2000, 'a'], [3000, 4000, 'b']], -1500, 0], [[1, 0, 500, 'a'], [2, 1500, 2500, 'b']]), ('normal control', [[[900, 1100, 'a'], [1100, 1101, 'a'], [1100, 2600, 'b'], [1200, 4200, 'a']], -800, 900], [[1, 100, 300, 'a'], [2, 300, 301, 'a'], [3, 300, 1800, 'b'], [4, 400, 3400, 'a']]), ('normal control', [[[1100, 1900, 'd'], [4000, 4200, 'd']], -800, 1100], [[1, 300, 1100, 'd'], [2, 3200, 3400, 'd']]), ('normal control', [[[2300, 2500, 'e']], -3000, 2500], [[1, 2300, 2500, 'e']])], [('regression: resort after partial shift', [[[300, 3300, 'a'], [800, 2300, 'e'], [800, 1600, 'e'], [1050, 1250, 'b'], [1250, 2050, 'a']], 1000, 2404], [[1, 300, 3300, 'a'], [2, 800, 1600, 'e'], [3, 800, 2300, 'e'], [4, 1050, 1250, 'b'], [5, 1250, 2050, 'a']]), ('regression variant: resort after partial shift', [[[1000, 2500, 'b'], [2400, 5400, 'b'], [2400, 2401, 'b'], [2900, 2901, 'a']], 1000, 2900], [[1, 1000, 2500, 'b'], [2, 2400, 2401, 'b'], [3, 2400, 5400, 'b'], [4, 3900, 3901, 'a']]), ('partial repair probe: resort after partial shift', [[[2300, 3800, 'd'], [3550, 6550, 'a'], [4250, 7250, 'e'], [6450, 6650, 'e'], [9350, 10150, 'd']], -3000, 9350], [[1, 2300, 3800, 'd'], [2, 3550, 6550, 'a'], [3, 4250, 7250, 'e'], [4, 6350, 7150, 'd'], [5, 6450, 6650, 'e']]), ('partial repair variant: resort after partial shift', [[[800, 3800, 'a'], [1100, 1101, 'e'], [1550, 2350, 'b'], [2000, 2200, 'd'], [2450, 5450, 'c']], 250, 2350], [[1, 800, 3800, 'a'], [2, 1100, 1101, 'e'], [3, 1550, 2350, 'b'], [4, 2000, 2200, 'd'], [5, 2700, 5700, 'c']]), ('boundary control', [[[1000, 2000, 'a'], [3000, 4000, 'b']], -1500, 0], [[1, 0, 500, 'a'], [2, 1500, 2500, 'b']]), ('boundary control', [[[100, 200, 'x']], 50, 100], [[1, 150, 250, 'x']]), ('normal control', [[[2300, 3100, 'e'], [3000, 3200, 'd'], [4200, 4400, 'e'], [4400, 5900, 'e'], [4600, 7600, 'a']], -300, 2300], [[1, 2000, 2800, 'e'], [2, 2700, 2900, 'd'], [3, 3900, 4100, 'e'], [4, 4100, 5600, 'e'], [5, 4300, 7300, 'a']]), ('normal control', [[[0, 1500, 'c'], [300, 500, 'b'], [3200, 3201, 'e']], -800, 0], [[1, 0, 700, 'c'], [2, 2400, 2401, 'e']]), ('normal control', [[[400, 600, 'c'], [2900, 2901, 'c'], [3350, 3550, 'b']], 250, 2901], [[1, 400, 600, 'c'], [2, 2900, 2901, 'c'], [3, 3600, 3800, 'b']])]]
for label, args, expected in fixtures[N-1]:
    check(label, 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 fixtureActualExpectedOutcome
regression: resort after partial shift[[1, 400, 600, 'c'], [2, 400, 1200, 'd'], [3, 2100, 2101, 'a'], [4, 2900, 3100, 'b']][[1, 400, 600, 'c'], [2, 400, 1200, 'd'], [3, 2100, 2101, 'a'], [4, 2900, 3100, 'b']]Passed
regression variant: resort after partial shift[[1, 2500, 4000, 'a'], [2, 3800, 3801, 'e'], [3, 4000, 5500, 'b']][[1, 2500, 4000, 'a'], [2, 3800, 3801, 'e'], [3, 4000, 5500, 'b']]Passed
partial repair probe: resort after partial shift[[1, 400, 401, 'e'], [2, 3150, 3950, 'd'], [3, 5650, 5651, 'd'], [4, 6850, 9850, 'e'], [5, 8850, 8851, 'a']][[1, 400, 401, 'e'], [2, 3150, 3950, 'd'], [3, 5650, 5651, 'd'], [4, 6850, 9850, 'e'], [5, 8850, 8851, 'a']]Passed
partial repair variant: resort after partial shift[[1, 500, 3500, 'c'], [2, 2700, 2701, 'a'], [3, 5700, 7200, 'c']][[1, 500, 3500, 'c'], [2, 2700, 2701, 'a'], [3, 5700, 7200, 'c']]Passed
boundary control[[1, 0, 500, 'a'], [2, 1500, 2500, 'b']][[1, 0, 500, 'a'], [2, 1500, 2500, 'b']]Passed
boundary control[[1, 150, 250, 'x']][[1, 150, 250, 'x']]Passed
normal control[[1, 150, 151, 'd'], [2, 200, 400, 'e']][[1, 150, 151, 'd'], [2, 200, 400, 'e']]Passed
normal control[][]Passed
normal control[[1, 3000, 6000, 'd']][[1, 3000, 6000, 'd']]Passed

SHA-256 / f49a851e6377bc17a45acea69346e3047aae1a79bbbc0efa0d31c89981933a12

Verification & scope

A deterministic bounded teaching model with a stipulated toy contract; it does not claim conformance to any subtitle standard. 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:49:30.105678+00:00.

Case digest / 4e6510943f26d383abd58bac061d7e0be8acf26774875703acb8ae2817949c29