FAILURE MAP
← Case archive

FA-78111 / Subtitle cue timing / Open access

Adjacent duplicate cue merging: blank cue guard · case 01

Consecutive blank spacer cues are fused into one long empty cue.

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

ROOT CAUSE

The merge condition does not require nonempty normalized text.

VERIFIED REPAIR

Never merge cues whose normalized text is empty.

Unsuccessful approach: Testing the raw text treats whitespace-only cues as nonempty and still merges them.

Case contract

Walk cues [start,end,text] in order. Text is normalized by collapsing whitespace runs to single spaces and trimming. A cue whose normalized text is nonempty and equal to the previous output cue text, starting at most max_gap after that cue ends (overlaps included), is merged: the output end becomes the later of the two ends. Output cues carry normalized 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, max_gap):
    out=[]
    for s,e,t in cues:
        norm=' '.join(t.split())
        if out and out[-1][2]==norm and s-out[-1][1]<=max_gap:
            out[-1][1]=max(out[-1][1],e)
            continue
        out.append([s,e,norm])
    return out
def check(label, actual, expected):
    observations.append({"check": label, "actual": actual, "expected": expected, "passed": actual == expected})
fixtures = [[('regression: blank cue guard', [[[0, 100, ' '], [100, 200, ' ']], 0], [[0, 100, ''], [100, 200, '']]), ('regression variant: blank cue guard', [[[500, 600, '  '], [701, 1701, 'Yes sir'], [1800, 2800, ''], [2900, 3000, ''], [2700, 2800, 'Yes '], [2100, 2200, 'Yes sir']], 100], [[500, 600, ''], [701, 1701, 'Yes sir'], [1800, 2800, ''], [2900, 3000, ''], [2700, 2800, 'Yes'], [2100, 2200, 'Yes sir']]), ('partial repair probe: blank cue guard', [[[0, 1000, 'Yes'], [999, 1099, 'Yes'], [1098, 1198, ' Yes'], [498, 1498, ''], [1497, 1597, '  ']], 0], [[0, 1198, 'Yes'], [498, 1498, ''], [1497, 1597, '']]), ('partial repair variant: blank cue guard', [[[0, 1000, 'Yes'], [300, 800, '  '], [500, 1000, '  '], [1000, 2000, 'Go now'], [2000, 2100, 'Yes  sir'], [1400, 1900, ' Yes']], 0], [[0, 1000, 'Yes'], [300, 800, ''], [500, 1000, ''], [1000, 2000, 'Go now'], [2000, 2100, 'Yes sir'], [1400, 1900, 'Yes']]), ('boundary control', [[[0, 500, 'Yes'], [540, 900, 'Yes']], 40], [[0, 900, 'Yes']]), ('boundary control', [[[0, 500, 'Yes'], [100, 300, 'Yes']], 0], [[0, 500, 'Yes']]), ('normal control', [[[0, 100, 'A'], [150, 200, 'A']], 40], [[0, 100, 'A'], [150, 200, 'A']]), ('normal control', [[[0, 100, 'Go\nnow'], [100, 1100, 'Yes'], [1200, 1700, 'Yes'], [1799, 1899, 'No'], [1599, 2099, 'Go\nnow']], 100], [[0, 100, 'Go now'], [100, 1700, 'Yes'], [1799, 1899, 'No'], [1599, 2099, 'Go now']]), ('normal control', [[[0, 500, 'Yes '], [600, 1600, ' Yes'], [1300, 1800, 'Yes '], [1900, 2400, 'Yes '], [2100, 2200, 'Yes  sir']], 100], [[0, 2400, 'Yes'], [2100, 2200, 'Yes sir']])], [('regression: blank cue guard', [[[0, 500, '  '], [499, 1499, ''], [1500, 1600, 'Yes'], [1599, 2599, 'Yes sir'], [1899, 2399, 'No']], 0], [[0, 500, ''], [499, 1499, ''], [1500, 1600, 'Yes'], [1599, 2599, 'Yes sir'], [1899, 2399, 'No']]), ('regression variant: blank cue guard', [[[0, 500, 'No'], [600, 700, 'Go\nnow'], [400, 1400, ''], [1499, 2499, '  '], [2199, 2299, 'Yes  sir']], 100], [[0, 500, 'No'], [600, 700, 'Go now'], [400, 1400, ''], [1499, 2499, ''], [2199, 2299, 'Yes sir']]), ('partial repair probe: blank cue guard', [[[0, 500, 'Yes '], [900, 1900, '  '], [1999, 2999, '  '], [2699, 3699, 'No'], [3800, 4800, 'Go now']], 100], [[0, 500, 'Yes'], [900, 1900, ''], [1999, 2999, ''], [2699, 3699, 'No'], [3800, 4800, 'Go now']]), ('partial repair variant: blank cue guard', [[[500, 600, ''], [600, 1100, '  '], [1101, 2101, ' Yes'], [2100, 2600, '  ']], 0], [[500, 600, ''], [600, 1100, ''], [1101, 2101, 'Yes'], [2100, 2600, '']]), ('boundary control', [[[0, 500, 'Yes'], [100, 300, 'Yes']], 0], [[0, 500, 'Yes']]), ('boundary control', [[[0, 100, 'A'], [150, 200, 'A']], 40], [[0, 100, 'A'], [150, 200, 'A']]), ('normal control', [[[500, 1000, ' Yes'], [300, 400, ''], [400, 1400, 'Yes sir'], [1401, 1501, 'No'], [801, 1301, 'Yes sir']], 0], [[500, 1000, 'Yes'], [300, 400, ''], [400, 1400, 'Yes sir'], [1401, 1501, 'No'], [801, 1301, 'Yes sir']]), ('normal control', [[[500, 1000, '  '], [1400, 2400, 'Yes sir'], [2400, 2500, 'Yes '], [2900, 3000, 'Yes sir'], [3000, 3100, 'Yes'], [3100, 3600, 'No']], 0], [[500, 1000, ''], [1400, 2400, 'Yes sir'], [2400, 2500, 'Yes'], [2900, 3000, 'Yes sir'], [3000, 3100, 'Yes'], [3100, 3600, 'No']]), ('normal control', [[[500, 600, 'Go\nnow'], [1000, 2000, 'Yes sir']], 100], [[500, 600, 'Go now'], [1000, 2000, 'Yes sir']])], [('regression: blank cue guard', [[[500, 1000, 'No'], [1099, 1599, 'Go now'], [1700, 1800, '  '], [1899, 1999, '']], 100], [[500, 1000, 'No'], [1099, 1599, 'Go now'], [1700, 1800, ''], [1899, 1999, '']]), ('regression variant: blank cue guard', [[[0, 500, 'Go\nnow'], [200, 700, '  '], [700, 1200, ''], [1239, 1739, ' Yes']], 40], [[0, 500, 'Go now'], [200, 700, ''], [700, 1200, ''], [1239, 1739, 'Yes']]), ('partial repair probe: blank cue guard', [[[0, 100, '  '], [140, 240, '  '], [281, 1281, ' Yes'], [581, 1581, '']], 40], [[0, 100, ''], [140, 240, ''], [281, 1281, 'Yes'], [581, 1581, '']]), ('partial repair variant: blank cue guard', [[[0, 500, '  '], [-200, 800, '  '], [1200, 1300, 'Yes']], 40], [[0, 500, ''], [-200, 800, ''], [1200, 1300, 'Yes']]), ('boundary control', [[[0, 100, 'A'], [150, 200, 'A']], 40], [[0, 100, 'A'], [150, 200, 'A']]), ('boundary control', [[[0, 500, 'Yes'], [540, 900, 'Yes']], 40], [[0, 900, 'Yes']]), ('normal control', [[[0, 500, 'Yes  sir'], [-200, -100, '  '], [1, 101, 'Go\nnow'], [501, 601, 'Yes'], [700, 1700, 'Go now']], 100], [[0, 500, 'Yes sir'], [-200, -100, ''], [1, 101, 'Go now'], [501, 601, 'Yes'], [700, 1700, 'Go now']]), ('normal control', [[[500, 1000, 'Yes'], [1001, 1501, 'Yes sir'], [1901, 2401, '  '], [2401, 3401, 'Go\nnow'], [3402, 3502, 'No']], 0], [[500, 1000, 'Yes'], [1001, 1501, 'Yes sir'], [1901, 2401, ''], [2401, 3401, 'Go now'], [3402, 3502, 'No']]), ('normal control', [[[0, 500, ' Yes'], [900, 1900, 'Yes '], [2300, 2800, 'Go now'], [3200, 3700, ' Yes'], [3799, 4799, 'Yes'], [4799, 4899, '  ']], 100], [[0, 500, 'Yes'], [900, 1900, 'Yes'], [2300, 2800, 'Go now'], [3200, 4799, 'Yes'], [4799, 4899, '']])], [('regression: blank cue guard', [[[0, 500, 'Go now'], [-200, -100, ''], [-61, 439, ''], [478, 578, 'Yes sir'], [619, 1119, 'Go now'], [1119, 2119, 'Yes ']], 40], [[0, 500, 'Go now'], [-200, -100, ''], [-61, 439, ''], [478, 578, 'Yes sir'], [619, 1119, 'Go now'], [1119, 2119, 'Yes']]), ('regression variant: blank cue guard', [[[0, 100, ''], [-200, 800, ''], [799, 1299, 'No'], [599, 1599, 'No'], [1600, 1700, '']], 0], [[0, 100, ''], [-200, 800, ''], [799, 1599, 'No'], [1600, 1700, '']]), ('partial repair probe: blank cue guard', [[[500, 600, 'Yes'], [600, 1600, 'No'], [1300, 1800, '  '], [1800, 1900, '  '], [1900, 2400, '  ']], 40], [[500, 600, 'Yes'], [600, 1600, 'No'], [1300, 1800, ''], [1800, 1900, ''], [1900, 2400, '']]), ('partial repair variant: blank cue guard', [[[0, 500, ''], [500, 1500, '  ']], 40], [[0, 500, ''], [500, 1500, '']]), ('boundary control', [[[0, 500, 'Yes'], [540, 900, 'Yes']], 40], [[0, 900, 'Yes']]), ('boundary control', [[[0, 500, 'Yes'], [100, 300, 'Yes']], 0], [[0, 500, 'Yes']]), ('normal control', [[[500, 1500, ' Yes'], [1600, 2100, 'Yes sir'], [1400, 2400, 'Yes '], [2501, 3001, 'Go\nnow']], 100], [[500, 1500, 'Yes'], [1600, 2100, 'Yes sir'], [1400, 2400, 'Yes'], [2501, 3001, 'Go now']]), ('normal control', [[[0, 500, 'Go\nnow'], [200, 700, 'Yes sir'], [801, 1801, 'Go\nnow'], [1901, 2401, 'Yes  sir'], [1701, 1801, 'Yes ']], 100], [[0, 500, 'Go now'], [200, 700, 'Yes sir'], [801, 1801, 'Go now'], [1901, 2401, 'Yes sir'], [1701, 1801, 'Yes']]), ('normal control', [[[0, 1000, 'Yes'], [1041, 1141, 'Yes sir'], [1541, 2041, 'Yes  sir'], [2082, 3082, 'Yes']], 40], [[0, 1000, 'Yes'], [1041, 1141, 'Yes sir'], [1541, 2041, 'Yes sir'], [2082, 3082, 'Yes']])], [('regression: blank cue guard', [[[0, 500, ''], [600, 700, '']], 100], [[0, 500, ''], [600, 700, '']]), ('regression variant: blank cue guard', [[[0, 100, 'Yes'], [201, 1201, 'Go\nnow'], [901, 1901, ''], [2301, 2801, '  '], [2801, 2901, '']], 100], [[0, 100, 'Yes'], [201, 1201, 'Go now'], [901, 1901, ''], [2301, 2801, ''], [2801, 2901, '']]), ('partial repair probe: blank cue guard', [[[0, 1000, '  '], [1000, 1500, ''], [1200, 2200, '  '], [1900, 2900, 'Go\nnow'], [2900, 3900, '  ']], 100], [[0, 1000, ''], [1000, 1500, ''], [1200, 2200, ''], [1900, 2900, 'Go now'], [2900, 3900, '']]), ('partial repair variant: blank cue guard', [[[500, 1000, ''], [300, 1300, 'Go now'], [1700, 2200, ''], [1500, 2000, '  ']], 100], [[500, 1000, ''], [300, 1300, 'Go now'], [1700, 2200, ''], [1500, 2000, '']]), ('boundary control', [[[0, 500, 'Yes'], [100, 300, 'Yes']], 0], [[0, 500, 'Yes']]), ('boundary control', [[[0, 100, 'A'], [150, 200, 'A']], 40], [[0, 100, 'A'], [150, 200, 'A']]), ('normal control', [[[500, 1500, 'Go now'], [1900, 2400, 'Yes '], [2800, 3800, 'No'], [3800, 4800, 'Yes sir'], [4801, 5801, 'Yes  sir'], [5501, 5601, ' Yes']], 0], [[500, 1500, 'Go now'], [1900, 2400, 'Yes'], [2800, 3800, 'No'], [3800, 4800, 'Yes sir'], [4801, 5801, 'Yes sir'], [5501, 5601, 'Yes']]), ('normal control', [[[500, 1500, 'Yes'], [1539, 2039, 'Yes ']], 40], [[500, 2039, 'Yes']]), ('normal control', [[[500, 1000, ' Yes'], [1041, 2041, 'No'], [1341, 1841, 'Yes '], [1881, 2881, ' Yes'], [2922, 3922, 'Yes ']], 40], [[500, 1000, 'Yes'], [1041, 2041, 'No'], [1341, 2881, 'Yes'], [2922, 3922, 'Yes']])]]
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: blank cue guard[[0, 200, '']][[0, 100, ''], [100, 200, '']]Failed
regression variant: blank cue guard[[500, 600, ''], [701, 1701, 'Yes sir'], [1800, 3000, ''], [2700, 2800, 'Yes'], [2100, 2200, 'Yes sir']][[500, 600, ''], [701, 1701, 'Yes sir'], [1800, 2800, ''], [2900, 3000, ''], [2700, 2800, 'Yes'], [2100, 2200, 'Yes sir']]Failed
partial repair probe: blank cue guard[[0, 1198, 'Yes'], [498, 1597, '']][[0, 1198, 'Yes'], [498, 1498, ''], [1497, 1597, '']]Failed
partial repair variant: blank cue guard[[0, 1000, 'Yes'], [300, 1000, ''], [1000, 2000, 'Go now'], [2000, 2100, 'Yes sir'], [1400, 1900, 'Yes']][[0, 1000, 'Yes'], [300, 800, ''], [500, 1000, ''], [1000, 2000, 'Go now'], [2000, 2100, 'Yes sir'], [1400, 1900, 'Yes']]Failed
boundary control[[0, 900, 'Yes']][[0, 900, 'Yes']]Passed
boundary control[[0, 500, 'Yes']][[0, 500, 'Yes']]Passed
normal control[[0, 100, 'A'], [150, 200, 'A']][[0, 100, 'A'], [150, 200, 'A']]Passed
normal control[[0, 100, 'Go now'], [100, 1700, 'Yes'], [1799, 1899, 'No'], [1599, 2099, 'Go now']][[0, 100, 'Go now'], [100, 1700, 'Yes'], [1799, 1899, 'No'], [1599, 2099, 'Go now']]Passed
normal control[[0, 2400, 'Yes'], [2100, 2200, 'Yes sir']][[0, 2400, 'Yes'], [2100, 2200, 'Yes sir']]Passed

SHA-256 / 7ff50bddc6cc0288eec4ab8c2581cb599529b6f6a5bdc4a86f0b96a342bcd47b

2 / The unsuccessful fix

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

N = 1
observations = []
def solve(cues, max_gap):
    out=[]
    for s,e,t in cues:
        norm=' '.join(t.split())
        if out and t and out[-1][2]==norm and s-out[-1][1]<=max_gap:
            out[-1][1]=max(out[-1][1],e)
            continue
        out.append([s,e,norm])
    return out
def check(label, actual, expected):
    observations.append({"check": label, "actual": actual, "expected": expected, "passed": actual == expected})
fixtures = [[('regression: blank cue guard', [[[0, 100, ' '], [100, 200, ' ']], 0], [[0, 100, ''], [100, 200, '']]), ('regression variant: blank cue guard', [[[500, 600, '  '], [701, 1701, 'Yes sir'], [1800, 2800, ''], [2900, 3000, ''], [2700, 2800, 'Yes '], [2100, 2200, 'Yes sir']], 100], [[500, 600, ''], [701, 1701, 'Yes sir'], [1800, 2800, ''], [2900, 3000, ''], [2700, 2800, 'Yes'], [2100, 2200, 'Yes sir']]), ('partial repair probe: blank cue guard', [[[0, 1000, 'Yes'], [999, 1099, 'Yes'], [1098, 1198, ' Yes'], [498, 1498, ''], [1497, 1597, '  ']], 0], [[0, 1198, 'Yes'], [498, 1498, ''], [1497, 1597, '']]), ('partial repair variant: blank cue guard', [[[0, 1000, 'Yes'], [300, 800, '  '], [500, 1000, '  '], [1000, 2000, 'Go now'], [2000, 2100, 'Yes  sir'], [1400, 1900, ' Yes']], 0], [[0, 1000, 'Yes'], [300, 800, ''], [500, 1000, ''], [1000, 2000, 'Go now'], [2000, 2100, 'Yes sir'], [1400, 1900, 'Yes']]), ('boundary control', [[[0, 500, 'Yes'], [540, 900, 'Yes']], 40], [[0, 900, 'Yes']]), ('boundary control', [[[0, 500, 'Yes'], [100, 300, 'Yes']], 0], [[0, 500, 'Yes']]), ('normal control', [[[0, 100, 'A'], [150, 200, 'A']], 40], [[0, 100, 'A'], [150, 200, 'A']]), ('normal control', [[[0, 100, 'Go\nnow'], [100, 1100, 'Yes'], [1200, 1700, 'Yes'], [1799, 1899, 'No'], [1599, 2099, 'Go\nnow']], 100], [[0, 100, 'Go now'], [100, 1700, 'Yes'], [1799, 1899, 'No'], [1599, 2099, 'Go now']]), ('normal control', [[[0, 500, 'Yes '], [600, 1600, ' Yes'], [1300, 1800, 'Yes '], [1900, 2400, 'Yes '], [2100, 2200, 'Yes  sir']], 100], [[0, 2400, 'Yes'], [2100, 2200, 'Yes sir']])], [('regression: blank cue guard', [[[0, 500, '  '], [499, 1499, ''], [1500, 1600, 'Yes'], [1599, 2599, 'Yes sir'], [1899, 2399, 'No']], 0], [[0, 500, ''], [499, 1499, ''], [1500, 1600, 'Yes'], [1599, 2599, 'Yes sir'], [1899, 2399, 'No']]), ('regression variant: blank cue guard', [[[0, 500, 'No'], [600, 700, 'Go\nnow'], [400, 1400, ''], [1499, 2499, '  '], [2199, 2299, 'Yes  sir']], 100], [[0, 500, 'No'], [600, 700, 'Go now'], [400, 1400, ''], [1499, 2499, ''], [2199, 2299, 'Yes sir']]), ('partial repair probe: blank cue guard', [[[0, 500, 'Yes '], [900, 1900, '  '], [1999, 2999, '  '], [2699, 3699, 'No'], [3800, 4800, 'Go now']], 100], [[0, 500, 'Yes'], [900, 1900, ''], [1999, 2999, ''], [2699, 3699, 'No'], [3800, 4800, 'Go now']]), ('partial repair variant: blank cue guard', [[[500, 600, ''], [600, 1100, '  '], [1101, 2101, ' Yes'], [2100, 2600, '  ']], 0], [[500, 600, ''], [600, 1100, ''], [1101, 2101, 'Yes'], [2100, 2600, '']]), ('boundary control', [[[0, 500, 'Yes'], [100, 300, 'Yes']], 0], [[0, 500, 'Yes']]), ('boundary control', [[[0, 100, 'A'], [150, 200, 'A']], 40], [[0, 100, 'A'], [150, 200, 'A']]), ('normal control', [[[500, 1000, ' Yes'], [300, 400, ''], [400, 1400, 'Yes sir'], [1401, 1501, 'No'], [801, 1301, 'Yes sir']], 0], [[500, 1000, 'Yes'], [300, 400, ''], [400, 1400, 'Yes sir'], [1401, 1501, 'No'], [801, 1301, 'Yes sir']]), ('normal control', [[[500, 1000, '  '], [1400, 2400, 'Yes sir'], [2400, 2500, 'Yes '], [2900, 3000, 'Yes sir'], [3000, 3100, 'Yes'], [3100, 3600, 'No']], 0], [[500, 1000, ''], [1400, 2400, 'Yes sir'], [2400, 2500, 'Yes'], [2900, 3000, 'Yes sir'], [3000, 3100, 'Yes'], [3100, 3600, 'No']]), ('normal control', [[[500, 600, 'Go\nnow'], [1000, 2000, 'Yes sir']], 100], [[500, 600, 'Go now'], [1000, 2000, 'Yes sir']])], [('regression: blank cue guard', [[[500, 1000, 'No'], [1099, 1599, 'Go now'], [1700, 1800, '  '], [1899, 1999, '']], 100], [[500, 1000, 'No'], [1099, 1599, 'Go now'], [1700, 1800, ''], [1899, 1999, '']]), ('regression variant: blank cue guard', [[[0, 500, 'Go\nnow'], [200, 700, '  '], [700, 1200, ''], [1239, 1739, ' Yes']], 40], [[0, 500, 'Go now'], [200, 700, ''], [700, 1200, ''], [1239, 1739, 'Yes']]), ('partial repair probe: blank cue guard', [[[0, 100, '  '], [140, 240, '  '], [281, 1281, ' Yes'], [581, 1581, '']], 40], [[0, 100, ''], [140, 240, ''], [281, 1281, 'Yes'], [581, 1581, '']]), ('partial repair variant: blank cue guard', [[[0, 500, '  '], [-200, 800, '  '], [1200, 1300, 'Yes']], 40], [[0, 500, ''], [-200, 800, ''], [1200, 1300, 'Yes']]), ('boundary control', [[[0, 100, 'A'], [150, 200, 'A']], 40], [[0, 100, 'A'], [150, 200, 'A']]), ('boundary control', [[[0, 500, 'Yes'], [540, 900, 'Yes']], 40], [[0, 900, 'Yes']]), ('normal control', [[[0, 500, 'Yes  sir'], [-200, -100, '  '], [1, 101, 'Go\nnow'], [501, 601, 'Yes'], [700, 1700, 'Go now']], 100], [[0, 500, 'Yes sir'], [-200, -100, ''], [1, 101, 'Go now'], [501, 601, 'Yes'], [700, 1700, 'Go now']]), ('normal control', [[[500, 1000, 'Yes'], [1001, 1501, 'Yes sir'], [1901, 2401, '  '], [2401, 3401, 'Go\nnow'], [3402, 3502, 'No']], 0], [[500, 1000, 'Yes'], [1001, 1501, 'Yes sir'], [1901, 2401, ''], [2401, 3401, 'Go now'], [3402, 3502, 'No']]), ('normal control', [[[0, 500, ' Yes'], [900, 1900, 'Yes '], [2300, 2800, 'Go now'], [3200, 3700, ' Yes'], [3799, 4799, 'Yes'], [4799, 4899, '  ']], 100], [[0, 500, 'Yes'], [900, 1900, 'Yes'], [2300, 2800, 'Go now'], [3200, 4799, 'Yes'], [4799, 4899, '']])], [('regression: blank cue guard', [[[0, 500, 'Go now'], [-200, -100, ''], [-61, 439, ''], [478, 578, 'Yes sir'], [619, 1119, 'Go now'], [1119, 2119, 'Yes ']], 40], [[0, 500, 'Go now'], [-200, -100, ''], [-61, 439, ''], [478, 578, 'Yes sir'], [619, 1119, 'Go now'], [1119, 2119, 'Yes']]), ('regression variant: blank cue guard', [[[0, 100, ''], [-200, 800, ''], [799, 1299, 'No'], [599, 1599, 'No'], [1600, 1700, '']], 0], [[0, 100, ''], [-200, 800, ''], [799, 1599, 'No'], [1600, 1700, '']]), ('partial repair probe: blank cue guard', [[[500, 600, 'Yes'], [600, 1600, 'No'], [1300, 1800, '  '], [1800, 1900, '  '], [1900, 2400, '  ']], 40], [[500, 600, 'Yes'], [600, 1600, 'No'], [1300, 1800, ''], [1800, 1900, ''], [1900, 2400, '']]), ('partial repair variant: blank cue guard', [[[0, 500, ''], [500, 1500, '  ']], 40], [[0, 500, ''], [500, 1500, '']]), ('boundary control', [[[0, 500, 'Yes'], [540, 900, 'Yes']], 40], [[0, 900, 'Yes']]), ('boundary control', [[[0, 500, 'Yes'], [100, 300, 'Yes']], 0], [[0, 500, 'Yes']]), ('normal control', [[[500, 1500, ' Yes'], [1600, 2100, 'Yes sir'], [1400, 2400, 'Yes '], [2501, 3001, 'Go\nnow']], 100], [[500, 1500, 'Yes'], [1600, 2100, 'Yes sir'], [1400, 2400, 'Yes'], [2501, 3001, 'Go now']]), ('normal control', [[[0, 500, 'Go\nnow'], [200, 700, 'Yes sir'], [801, 1801, 'Go\nnow'], [1901, 2401, 'Yes  sir'], [1701, 1801, 'Yes ']], 100], [[0, 500, 'Go now'], [200, 700, 'Yes sir'], [801, 1801, 'Go now'], [1901, 2401, 'Yes sir'], [1701, 1801, 'Yes']]), ('normal control', [[[0, 1000, 'Yes'], [1041, 1141, 'Yes sir'], [1541, 2041, 'Yes  sir'], [2082, 3082, 'Yes']], 40], [[0, 1000, 'Yes'], [1041, 1141, 'Yes sir'], [1541, 2041, 'Yes sir'], [2082, 3082, 'Yes']])], [('regression: blank cue guard', [[[0, 500, ''], [600, 700, '']], 100], [[0, 500, ''], [600, 700, '']]), ('regression variant: blank cue guard', [[[0, 100, 'Yes'], [201, 1201, 'Go\nnow'], [901, 1901, ''], [2301, 2801, '  '], [2801, 2901, '']], 100], [[0, 100, 'Yes'], [201, 1201, 'Go now'], [901, 1901, ''], [2301, 2801, ''], [2801, 2901, '']]), ('partial repair probe: blank cue guard', [[[0, 1000, '  '], [1000, 1500, ''], [1200, 2200, '  '], [1900, 2900, 'Go\nnow'], [2900, 3900, '  ']], 100], [[0, 1000, ''], [1000, 1500, ''], [1200, 2200, ''], [1900, 2900, 'Go now'], [2900, 3900, '']]), ('partial repair variant: blank cue guard', [[[500, 1000, ''], [300, 1300, 'Go now'], [1700, 2200, ''], [1500, 2000, '  ']], 100], [[500, 1000, ''], [300, 1300, 'Go now'], [1700, 2200, ''], [1500, 2000, '']]), ('boundary control', [[[0, 500, 'Yes'], [100, 300, 'Yes']], 0], [[0, 500, 'Yes']]), ('boundary control', [[[0, 100, 'A'], [150, 200, 'A']], 40], [[0, 100, 'A'], [150, 200, 'A']]), ('normal control', [[[500, 1500, 'Go now'], [1900, 2400, 'Yes '], [2800, 3800, 'No'], [3800, 4800, 'Yes sir'], [4801, 5801, 'Yes  sir'], [5501, 5601, ' Yes']], 0], [[500, 1500, 'Go now'], [1900, 2400, 'Yes'], [2800, 3800, 'No'], [3800, 4800, 'Yes sir'], [4801, 5801, 'Yes sir'], [5501, 5601, 'Yes']]), ('normal control', [[[500, 1500, 'Yes'], [1539, 2039, 'Yes ']], 40], [[500, 2039, 'Yes']]), ('normal control', [[[500, 1000, ' Yes'], [1041, 2041, 'No'], [1341, 1841, 'Yes '], [1881, 2881, ' Yes'], [2922, 3922, 'Yes ']], 40], [[500, 1000, 'Yes'], [1041, 2041, 'No'], [1341, 2881, 'Yes'], [2922, 3922, 'Yes']])]]
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: blank cue guard[[0, 200, '']][[0, 100, ''], [100, 200, '']]Failed
regression variant: blank cue guard[[500, 600, ''], [701, 1701, 'Yes sir'], [1800, 2800, ''], [2900, 3000, ''], [2700, 2800, 'Yes'], [2100, 2200, 'Yes sir']][[500, 600, ''], [701, 1701, 'Yes sir'], [1800, 2800, ''], [2900, 3000, ''], [2700, 2800, 'Yes'], [2100, 2200, 'Yes sir']]Passed
partial repair probe: blank cue guard[[0, 1198, 'Yes'], [498, 1597, '']][[0, 1198, 'Yes'], [498, 1498, ''], [1497, 1597, '']]Failed
partial repair variant: blank cue guard[[0, 1000, 'Yes'], [300, 1000, ''], [1000, 2000, 'Go now'], [2000, 2100, 'Yes sir'], [1400, 1900, 'Yes']][[0, 1000, 'Yes'], [300, 800, ''], [500, 1000, ''], [1000, 2000, 'Go now'], [2000, 2100, 'Yes sir'], [1400, 1900, 'Yes']]Failed
boundary control[[0, 900, 'Yes']][[0, 900, 'Yes']]Passed
boundary control[[0, 500, 'Yes']][[0, 500, 'Yes']]Passed
normal control[[0, 100, 'A'], [150, 200, 'A']][[0, 100, 'A'], [150, 200, 'A']]Passed
normal control[[0, 100, 'Go now'], [100, 1700, 'Yes'], [1799, 1899, 'No'], [1599, 2099, 'Go now']][[0, 100, 'Go now'], [100, 1700, 'Yes'], [1799, 1899, 'No'], [1599, 2099, 'Go now']]Passed
normal control[[0, 2400, 'Yes'], [2100, 2200, 'Yes sir']][[0, 2400, 'Yes'], [2100, 2200, 'Yes sir']]Passed

SHA-256 / 8b882406ad404d0b4556621981a9bf55b614ebdb37bf5ce00aad4d7c02534f9f

3 / The verified repair

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

N = 1
observations = []
def solve(cues, max_gap):
    out=[]
    for s,e,t in cues:
        norm=' '.join(t.split())
        if out and norm and out[-1][2]==norm and s-out[-1][1]<=max_gap:
            out[-1][1]=max(out[-1][1],e)
            continue
        out.append([s,e,norm])
    return out
def check(label, actual, expected):
    observations.append({"check": label, "actual": actual, "expected": expected, "passed": actual == expected})
fixtures = [[('regression: blank cue guard', [[[0, 100, ' '], [100, 200, ' ']], 0], [[0, 100, ''], [100, 200, '']]), ('regression variant: blank cue guard', [[[500, 600, '  '], [701, 1701, 'Yes sir'], [1800, 2800, ''], [2900, 3000, ''], [2700, 2800, 'Yes '], [2100, 2200, 'Yes sir']], 100], [[500, 600, ''], [701, 1701, 'Yes sir'], [1800, 2800, ''], [2900, 3000, ''], [2700, 2800, 'Yes'], [2100, 2200, 'Yes sir']]), ('partial repair probe: blank cue guard', [[[0, 1000, 'Yes'], [999, 1099, 'Yes'], [1098, 1198, ' Yes'], [498, 1498, ''], [1497, 1597, '  ']], 0], [[0, 1198, 'Yes'], [498, 1498, ''], [1497, 1597, '']]), ('partial repair variant: blank cue guard', [[[0, 1000, 'Yes'], [300, 800, '  '], [500, 1000, '  '], [1000, 2000, 'Go now'], [2000, 2100, 'Yes  sir'], [1400, 1900, ' Yes']], 0], [[0, 1000, 'Yes'], [300, 800, ''], [500, 1000, ''], [1000, 2000, 'Go now'], [2000, 2100, 'Yes sir'], [1400, 1900, 'Yes']]), ('boundary control', [[[0, 500, 'Yes'], [540, 900, 'Yes']], 40], [[0, 900, 'Yes']]), ('boundary control', [[[0, 500, 'Yes'], [100, 300, 'Yes']], 0], [[0, 500, 'Yes']]), ('normal control', [[[0, 100, 'A'], [150, 200, 'A']], 40], [[0, 100, 'A'], [150, 200, 'A']]), ('normal control', [[[0, 100, 'Go\nnow'], [100, 1100, 'Yes'], [1200, 1700, 'Yes'], [1799, 1899, 'No'], [1599, 2099, 'Go\nnow']], 100], [[0, 100, 'Go now'], [100, 1700, 'Yes'], [1799, 1899, 'No'], [1599, 2099, 'Go now']]), ('normal control', [[[0, 500, 'Yes '], [600, 1600, ' Yes'], [1300, 1800, 'Yes '], [1900, 2400, 'Yes '], [2100, 2200, 'Yes  sir']], 100], [[0, 2400, 'Yes'], [2100, 2200, 'Yes sir']])], [('regression: blank cue guard', [[[0, 500, '  '], [499, 1499, ''], [1500, 1600, 'Yes'], [1599, 2599, 'Yes sir'], [1899, 2399, 'No']], 0], [[0, 500, ''], [499, 1499, ''], [1500, 1600, 'Yes'], [1599, 2599, 'Yes sir'], [1899, 2399, 'No']]), ('regression variant: blank cue guard', [[[0, 500, 'No'], [600, 700, 'Go\nnow'], [400, 1400, ''], [1499, 2499, '  '], [2199, 2299, 'Yes  sir']], 100], [[0, 500, 'No'], [600, 700, 'Go now'], [400, 1400, ''], [1499, 2499, ''], [2199, 2299, 'Yes sir']]), ('partial repair probe: blank cue guard', [[[0, 500, 'Yes '], [900, 1900, '  '], [1999, 2999, '  '], [2699, 3699, 'No'], [3800, 4800, 'Go now']], 100], [[0, 500, 'Yes'], [900, 1900, ''], [1999, 2999, ''], [2699, 3699, 'No'], [3800, 4800, 'Go now']]), ('partial repair variant: blank cue guard', [[[500, 600, ''], [600, 1100, '  '], [1101, 2101, ' Yes'], [2100, 2600, '  ']], 0], [[500, 600, ''], [600, 1100, ''], [1101, 2101, 'Yes'], [2100, 2600, '']]), ('boundary control', [[[0, 500, 'Yes'], [100, 300, 'Yes']], 0], [[0, 500, 'Yes']]), ('boundary control', [[[0, 100, 'A'], [150, 200, 'A']], 40], [[0, 100, 'A'], [150, 200, 'A']]), ('normal control', [[[500, 1000, ' Yes'], [300, 400, ''], [400, 1400, 'Yes sir'], [1401, 1501, 'No'], [801, 1301, 'Yes sir']], 0], [[500, 1000, 'Yes'], [300, 400, ''], [400, 1400, 'Yes sir'], [1401, 1501, 'No'], [801, 1301, 'Yes sir']]), ('normal control', [[[500, 1000, '  '], [1400, 2400, 'Yes sir'], [2400, 2500, 'Yes '], [2900, 3000, 'Yes sir'], [3000, 3100, 'Yes'], [3100, 3600, 'No']], 0], [[500, 1000, ''], [1400, 2400, 'Yes sir'], [2400, 2500, 'Yes'], [2900, 3000, 'Yes sir'], [3000, 3100, 'Yes'], [3100, 3600, 'No']]), ('normal control', [[[500, 600, 'Go\nnow'], [1000, 2000, 'Yes sir']], 100], [[500, 600, 'Go now'], [1000, 2000, 'Yes sir']])], [('regression: blank cue guard', [[[500, 1000, 'No'], [1099, 1599, 'Go now'], [1700, 1800, '  '], [1899, 1999, '']], 100], [[500, 1000, 'No'], [1099, 1599, 'Go now'], [1700, 1800, ''], [1899, 1999, '']]), ('regression variant: blank cue guard', [[[0, 500, 'Go\nnow'], [200, 700, '  '], [700, 1200, ''], [1239, 1739, ' Yes']], 40], [[0, 500, 'Go now'], [200, 700, ''], [700, 1200, ''], [1239, 1739, 'Yes']]), ('partial repair probe: blank cue guard', [[[0, 100, '  '], [140, 240, '  '], [281, 1281, ' Yes'], [581, 1581, '']], 40], [[0, 100, ''], [140, 240, ''], [281, 1281, 'Yes'], [581, 1581, '']]), ('partial repair variant: blank cue guard', [[[0, 500, '  '], [-200, 800, '  '], [1200, 1300, 'Yes']], 40], [[0, 500, ''], [-200, 800, ''], [1200, 1300, 'Yes']]), ('boundary control', [[[0, 100, 'A'], [150, 200, 'A']], 40], [[0, 100, 'A'], [150, 200, 'A']]), ('boundary control', [[[0, 500, 'Yes'], [540, 900, 'Yes']], 40], [[0, 900, 'Yes']]), ('normal control', [[[0, 500, 'Yes  sir'], [-200, -100, '  '], [1, 101, 'Go\nnow'], [501, 601, 'Yes'], [700, 1700, 'Go now']], 100], [[0, 500, 'Yes sir'], [-200, -100, ''], [1, 101, 'Go now'], [501, 601, 'Yes'], [700, 1700, 'Go now']]), ('normal control', [[[500, 1000, 'Yes'], [1001, 1501, 'Yes sir'], [1901, 2401, '  '], [2401, 3401, 'Go\nnow'], [3402, 3502, 'No']], 0], [[500, 1000, 'Yes'], [1001, 1501, 'Yes sir'], [1901, 2401, ''], [2401, 3401, 'Go now'], [3402, 3502, 'No']]), ('normal control', [[[0, 500, ' Yes'], [900, 1900, 'Yes '], [2300, 2800, 'Go now'], [3200, 3700, ' Yes'], [3799, 4799, 'Yes'], [4799, 4899, '  ']], 100], [[0, 500, 'Yes'], [900, 1900, 'Yes'], [2300, 2800, 'Go now'], [3200, 4799, 'Yes'], [4799, 4899, '']])], [('regression: blank cue guard', [[[0, 500, 'Go now'], [-200, -100, ''], [-61, 439, ''], [478, 578, 'Yes sir'], [619, 1119, 'Go now'], [1119, 2119, 'Yes ']], 40], [[0, 500, 'Go now'], [-200, -100, ''], [-61, 439, ''], [478, 578, 'Yes sir'], [619, 1119, 'Go now'], [1119, 2119, 'Yes']]), ('regression variant: blank cue guard', [[[0, 100, ''], [-200, 800, ''], [799, 1299, 'No'], [599, 1599, 'No'], [1600, 1700, '']], 0], [[0, 100, ''], [-200, 800, ''], [799, 1599, 'No'], [1600, 1700, '']]), ('partial repair probe: blank cue guard', [[[500, 600, 'Yes'], [600, 1600, 'No'], [1300, 1800, '  '], [1800, 1900, '  '], [1900, 2400, '  ']], 40], [[500, 600, 'Yes'], [600, 1600, 'No'], [1300, 1800, ''], [1800, 1900, ''], [1900, 2400, '']]), ('partial repair variant: blank cue guard', [[[0, 500, ''], [500, 1500, '  ']], 40], [[0, 500, ''], [500, 1500, '']]), ('boundary control', [[[0, 500, 'Yes'], [540, 900, 'Yes']], 40], [[0, 900, 'Yes']]), ('boundary control', [[[0, 500, 'Yes'], [100, 300, 'Yes']], 0], [[0, 500, 'Yes']]), ('normal control', [[[500, 1500, ' Yes'], [1600, 2100, 'Yes sir'], [1400, 2400, 'Yes '], [2501, 3001, 'Go\nnow']], 100], [[500, 1500, 'Yes'], [1600, 2100, 'Yes sir'], [1400, 2400, 'Yes'], [2501, 3001, 'Go now']]), ('normal control', [[[0, 500, 'Go\nnow'], [200, 700, 'Yes sir'], [801, 1801, 'Go\nnow'], [1901, 2401, 'Yes  sir'], [1701, 1801, 'Yes ']], 100], [[0, 500, 'Go now'], [200, 700, 'Yes sir'], [801, 1801, 'Go now'], [1901, 2401, 'Yes sir'], [1701, 1801, 'Yes']]), ('normal control', [[[0, 1000, 'Yes'], [1041, 1141, 'Yes sir'], [1541, 2041, 'Yes  sir'], [2082, 3082, 'Yes']], 40], [[0, 1000, 'Yes'], [1041, 1141, 'Yes sir'], [1541, 2041, 'Yes sir'], [2082, 3082, 'Yes']])], [('regression: blank cue guard', [[[0, 500, ''], [600, 700, '']], 100], [[0, 500, ''], [600, 700, '']]), ('regression variant: blank cue guard', [[[0, 100, 'Yes'], [201, 1201, 'Go\nnow'], [901, 1901, ''], [2301, 2801, '  '], [2801, 2901, '']], 100], [[0, 100, 'Yes'], [201, 1201, 'Go now'], [901, 1901, ''], [2301, 2801, ''], [2801, 2901, '']]), ('partial repair probe: blank cue guard', [[[0, 1000, '  '], [1000, 1500, ''], [1200, 2200, '  '], [1900, 2900, 'Go\nnow'], [2900, 3900, '  ']], 100], [[0, 1000, ''], [1000, 1500, ''], [1200, 2200, ''], [1900, 2900, 'Go now'], [2900, 3900, '']]), ('partial repair variant: blank cue guard', [[[500, 1000, ''], [300, 1300, 'Go now'], [1700, 2200, ''], [1500, 2000, '  ']], 100], [[500, 1000, ''], [300, 1300, 'Go now'], [1700, 2200, ''], [1500, 2000, '']]), ('boundary control', [[[0, 500, 'Yes'], [100, 300, 'Yes']], 0], [[0, 500, 'Yes']]), ('boundary control', [[[0, 100, 'A'], [150, 200, 'A']], 40], [[0, 100, 'A'], [150, 200, 'A']]), ('normal control', [[[500, 1500, 'Go now'], [1900, 2400, 'Yes '], [2800, 3800, 'No'], [3800, 4800, 'Yes sir'], [4801, 5801, 'Yes  sir'], [5501, 5601, ' Yes']], 0], [[500, 1500, 'Go now'], [1900, 2400, 'Yes'], [2800, 3800, 'No'], [3800, 4800, 'Yes sir'], [4801, 5801, 'Yes sir'], [5501, 5601, 'Yes']]), ('normal control', [[[500, 1500, 'Yes'], [1539, 2039, 'Yes ']], 40], [[500, 2039, 'Yes']]), ('normal control', [[[500, 1000, ' Yes'], [1041, 2041, 'No'], [1341, 1841, 'Yes '], [1881, 2881, ' Yes'], [2922, 3922, 'Yes ']], 40], [[500, 1000, 'Yes'], [1041, 2041, 'No'], [1341, 2881, 'Yes'], [2922, 3922, 'Yes']])]]
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: blank cue guard[[0, 100, ''], [100, 200, '']][[0, 100, ''], [100, 200, '']]Passed
regression variant: blank cue guard[[500, 600, ''], [701, 1701, 'Yes sir'], [1800, 2800, ''], [2900, 3000, ''], [2700, 2800, 'Yes'], [2100, 2200, 'Yes sir']][[500, 600, ''], [701, 1701, 'Yes sir'], [1800, 2800, ''], [2900, 3000, ''], [2700, 2800, 'Yes'], [2100, 2200, 'Yes sir']]Passed
partial repair probe: blank cue guard[[0, 1198, 'Yes'], [498, 1498, ''], [1497, 1597, '']][[0, 1198, 'Yes'], [498, 1498, ''], [1497, 1597, '']]Passed
partial repair variant: blank cue guard[[0, 1000, 'Yes'], [300, 800, ''], [500, 1000, ''], [1000, 2000, 'Go now'], [2000, 2100, 'Yes sir'], [1400, 1900, 'Yes']][[0, 1000, 'Yes'], [300, 800, ''], [500, 1000, ''], [1000, 2000, 'Go now'], [2000, 2100, 'Yes sir'], [1400, 1900, 'Yes']]Passed
boundary control[[0, 900, 'Yes']][[0, 900, 'Yes']]Passed
boundary control[[0, 500, 'Yes']][[0, 500, 'Yes']]Passed
normal control[[0, 100, 'A'], [150, 200, 'A']][[0, 100, 'A'], [150, 200, 'A']]Passed
normal control[[0, 100, 'Go now'], [100, 1700, 'Yes'], [1799, 1899, 'No'], [1599, 2099, 'Go now']][[0, 100, 'Go now'], [100, 1700, 'Yes'], [1799, 1899, 'No'], [1599, 2099, 'Go now']]Passed
normal control[[0, 2400, 'Yes'], [2100, 2200, 'Yes sir']][[0, 2400, 'Yes'], [2100, 2200, 'Yes sir']]Passed

SHA-256 / 31398aef0753a1508c7ce48ab3e309b8cd666ce8d8067c66fde980e1b38d58b0

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:32.103015+00:00.

Case digest / 64a803b740dd55f04655bed0e347def712f0b7c7d8db728814211355e9f005bd