FA-78226 / Subtitle cue timing / Open access
Karaoke syllable timing: empty syllable time · case 01
Syllables after a pause marker highlight too early.
ROOT CAUSE
Empty syllables do not advance the running time.
VERIFIED REPAIR
Advance time for every tag, including empty syllables.
Unsuccessful approach: Skipping whitespace-only syllables still loses their pause duration.
Case contract
Karaoke text is a sequence of {\k|\K|\kf|\ko<cs>}syllable with durations in centiseconds. Syllable i starts at cue start plus the sum of all previous durations (empty syllables still consume time). Syllables starting at or after the cue end are dropped; others are clipped to the cue end. Output [syllable,start_ms,end_ms].
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
import re
N = 1
observations = []
def solve(cue, text):
cs,ce=cue
out=[]
t=cs
for m in re.finditer(r'\{\\(kf|ko|k|K)(\d+)\}([^{]*)',text):
d=int(m.group(2))*10
syl=m.group(3)
if syl and t<ce:
out.append([syl,t,min(t+d,ce)])
t+=d if syl else 0
return out
def check(label, actual, expected):
observations.append({"check": label, "actual": actual, "expected": expected, "passed": actual == expected})
fixtures = [[('regression: empty syllable time', [[1000, 1800], '{\\ko50}{\\kf25}{\\k50} '], [[' ', 1750, 1800]]), ('regression variant: empty syllable time', [[0, 2000], '{\\ko50}{\\k50}la'], [['la', 500, 1000]]), ('partial repair probe: empty syllable time', [[1000, 3000], '{\\kf50}{\\k25}Hel'], [['Hel', 1500, 1750]]), ('partial repair variant: empty syllable time', [[0, 500], '{\\kf10}{\\ko25} {\\k10}o '], [[' ', 100, 350], ['o ', 350, 450]]), ('boundary control', [[0, 1000], '{\\k50}Hel{\\k50}lo'], [['Hel', 0, 500], ['lo', 500, 1000]]), ('boundary control', [[0, 100], '{\\ko10}x{\\k1}y'], [['x', 0, 100]]), ('normal control', [[0, 300], '{\\k20}a{\\kf20}b'], [['a', 0, 200], ['b', 200, 300]]), ('normal control', [[0, 2000], '{\\K25}la{\\ko25}Hel{\\K0}Hel{\\ko25}'], [['la', 0, 250], ['Hel', 250, 500], ['Hel', 500, 500]]), ('normal control', [[0, 300], '{\\k10}la{\\k5}la{\\k50}lo{\\ko25}lo'], [['la', 0, 100], ['la', 100, 150], ['lo', 150, 300]])], [('regression: empty syllable time', [[1000, 3000], '{\\kf50}{\\k25}Hel'], [['Hel', 1500, 1750]]), ('regression variant: empty syllable time', [[0, 500], '{\\kf10}{\\ko25} {\\k10}o '], [[' ', 100, 350], ['o ', 350, 450]]), ('partial repair probe: empty syllable time', [[1000, 1500], '{\\ko5} {\\ko25}{\\k5}o {\\k0} '], [[' ', 1000, 1050], ['o ', 1300, 1350], [' ', 1350, 1350]]), ('partial repair variant: empty syllable time', [[0, 100], '{\\ko10}{\\kf0}o {\\kf0} {\\kf30}lo'], []), ('boundary control', [[0, 300], '{\\k20}a{\\kf20}b'], [['a', 0, 200], ['b', 200, 300]]), ('boundary control', [[0, 1000], '{\\k50}Hel{\\k50}lo'], [['Hel', 0, 500], ['lo', 500, 1000]]), ('normal control', [[0, 300], '{\\ko25}la{\\k25}o {\\kf5}la'], [['la', 0, 250], ['o ', 250, 300]]), ('normal control', [[0, 800], '{\\kf25}o '], [['o ', 0, 250]]), ('normal control', [[0, 500], '{\\ko30}Hel{\\K5}Hel{\\k50}lo{\\K30}{\\k30}lo'], [['Hel', 0, 300], ['Hel', 300, 350], ['lo', 350, 500]])], [('regression: empty syllable time', [[1000, 1500], '{\\ko5} {\\ko25}{\\k5}o {\\k0} '], [[' ', 1000, 1050], ['o ', 1300, 1350], [' ', 1350, 1350]]), ('regression variant: empty syllable time', [[0, 100], '{\\ko10}{\\kf0}o {\\kf0} {\\kf30}lo'], []), ('partial repair probe: empty syllable time', [[1000, 1100], '{\\k0}Hel{\\K10} {\\k5}o {\\k5} {\\k10}'], [['Hel', 1000, 1000], [' ', 1000, 1100]]), ('partial repair variant: empty syllable time', [[0, 100], '{\\kf0}{\\k30} {\\k0}o {\\ko5}Hel{\\k10} '], [[' ', 0, 100]]), ('boundary control', [[0, 200], '{\\k20}a{\\k10}{\\k5}b'], [['a', 0, 200]]), ('boundary control', [[0, 300], '{\\k20}a{\\kf20}b'], [['a', 0, 200], ['b', 200, 300]]), ('normal control', [[0, 300], '{\\kf5}lo{\\k5} '], [['lo', 0, 50], [' ', 50, 100]]), ('normal control', [[1000, 1800], '{\\k25}la{\\ko5}la{\\K5} '], [['la', 1000, 1250], ['la', 1250, 1300], [' ', 1300, 1350]]), ('normal control', [[1000, 1800], '{\\k0}Hel{\\ko0}Hel{\\K25}o '], [['Hel', 1000, 1000], ['Hel', 1000, 1000], ['o ', 1000, 1250]])], [('regression: empty syllable time', [[1000, 3000], '{\\k30}{\\ko0}Hel{\\kf50}la'], [['Hel', 1300, 1300], ['la', 1300, 1800]]), ('regression variant: empty syllable time', [[1000, 1800], '{\\k0}la{\\k30}{\\k0}lo{\\ko30}lo'], [['la', 1000, 1000], ['lo', 1300, 1300], ['lo', 1300, 1600]]), ('partial repair probe: empty syllable time', [[0, 500], '{\\kf30}Hel{\\k50} {\\k0}lo'], [['Hel', 0, 300], [' ', 300, 500]]), ('partial repair variant: empty syllable time', [[0, 300], '{\\kf10}{\\kf25}la{\\K10}{\\ko10}o {\\K0}o '], [['la', 100, 300]]), ('boundary control', [[0, 100], '{\\ko10}x{\\k1}y'], [['x', 0, 100]]), ('boundary control', [[0, 200], '{\\k20}a{\\k10}{\\k5}b'], [['a', 0, 200]]), ('normal control', [[1000, 1300], '{\\K50}la{\\ko30}Hel{\\k50}Hel{\\K25} '], [['la', 1000, 1300]]), ('normal control', [[1000, 1500], '{\\k5}lo{\\K30}o '], [['lo', 1000, 1050], ['o ', 1050, 1350]]), ('normal control', [[1000, 1500], '{\\k0}{\\kf5}lo{\\K25} '], [['lo', 1000, 1050], [' ', 1050, 1300]])], [('regression: empty syllable time', [[0, 800], '{\\k5}{\\k0} {\\k10}o {\\kf30}Hel{\\kf30}Hel'], [[' ', 50, 50], ['o ', 50, 150], ['Hel', 150, 450], ['Hel', 450, 750]]), ('regression variant: empty syllable time', [[0, 300], '{\\kf10}{\\kf25}la{\\K10}{\\ko10}o {\\K0}o '], [['la', 100, 300]]), ('partial repair probe: empty syllable time', [[1000, 3000], '{\\k30}{\\ko0}Hel{\\kf50}la'], [['Hel', 1300, 1300], ['la', 1300, 1800]]), ('partial repair variant: empty syllable time', [[1000, 1100], '{\\k50}{\\kf50}Hel{\\kf50}lo{\\k30}la{\\K50}Hel'], []), ('boundary control', [[0, 1000], '{\\k50}Hel{\\k50}lo'], [['Hel', 0, 500], ['lo', 500, 1000]]), ('boundary control', [[0, 100], '{\\ko10}x{\\k1}y'], [['x', 0, 100]]), ('normal control', [[1000, 1800], '{\\K25}'], []), ('normal control', [[1000, 3000], '{\\ko5}Hel{\\K50}la{\\k0} {\\kf5}lo'], [['Hel', 1000, 1050], ['la', 1050, 1550], [' ', 1550, 1550], ['lo', 1550, 1600]]), ('normal control', [[0, 500], '{\\k0}o '], [['o ', 0, 0]])]]
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 fixture | Actual | Expected | Outcome |
|---|---|---|---|
| regression: empty syllable time | [[' ', 1000, 1500]] | [[' ', 1750, 1800]] | Failed |
| regression variant: empty syllable time | [['la', 0, 500]] | [['la', 500, 1000]] | Failed |
| partial repair probe: empty syllable time | [['Hel', 1000, 1250]] | [['Hel', 1500, 1750]] | Failed |
| partial repair variant: empty syllable time | [[' ', 0, 250], ['o ', 250, 350]] | [[' ', 100, 350], ['o ', 350, 450]] | Failed |
| boundary control | [['Hel', 0, 500], ['lo', 500, 1000]] | [['Hel', 0, 500], ['lo', 500, 1000]] | Passed |
| boundary control | [['x', 0, 100]] | [['x', 0, 100]] | Passed |
| normal control | [['a', 0, 200], ['b', 200, 300]] | [['a', 0, 200], ['b', 200, 300]] | Passed |
| normal control | [['la', 0, 250], ['Hel', 250, 500], ['Hel', 500, 500]] | [['la', 0, 250], ['Hel', 250, 500], ['Hel', 500, 500]] | Passed |
| normal control | [['la', 0, 100], ['la', 100, 150], ['lo', 150, 300]] | [['la', 0, 100], ['la', 100, 150], ['lo', 150, 300]] | Passed |
SHA-256 / a11c4c568b21ba4dbaa7d0e81523fd09b6a533eef8fbfa3ec9087dbd4b3fab9f
2 / The unsuccessful fix
Exit 1"""Failure Map reference implementation. Python standard library only."""
import json
import re
N = 1
observations = []
def solve(cue, text):
cs,ce=cue
out=[]
t=cs
for m in re.finditer(r'\{\\(kf|ko|k|K)(\d+)\}([^{]*)',text):
d=int(m.group(2))*10
syl=m.group(3)
if syl and t<ce:
out.append([syl,t,min(t+d,ce)])
t+=d if syl.strip() else 0
return out
def check(label, actual, expected):
observations.append({"check": label, "actual": actual, "expected": expected, "passed": actual == expected})
fixtures = [[('regression: empty syllable time', [[1000, 1800], '{\\ko50}{\\kf25}{\\k50} '], [[' ', 1750, 1800]]), ('regression variant: empty syllable time', [[0, 2000], '{\\ko50}{\\k50}la'], [['la', 500, 1000]]), ('partial repair probe: empty syllable time', [[1000, 3000], '{\\kf50}{\\k25}Hel'], [['Hel', 1500, 1750]]), ('partial repair variant: empty syllable time', [[0, 500], '{\\kf10}{\\ko25} {\\k10}o '], [[' ', 100, 350], ['o ', 350, 450]]), ('boundary control', [[0, 1000], '{\\k50}Hel{\\k50}lo'], [['Hel', 0, 500], ['lo', 500, 1000]]), ('boundary control', [[0, 100], '{\\ko10}x{\\k1}y'], [['x', 0, 100]]), ('normal control', [[0, 300], '{\\k20}a{\\kf20}b'], [['a', 0, 200], ['b', 200, 300]]), ('normal control', [[0, 2000], '{\\K25}la{\\ko25}Hel{\\K0}Hel{\\ko25}'], [['la', 0, 250], ['Hel', 250, 500], ['Hel', 500, 500]]), ('normal control', [[0, 300], '{\\k10}la{\\k5}la{\\k50}lo{\\ko25}lo'], [['la', 0, 100], ['la', 100, 150], ['lo', 150, 300]])], [('regression: empty syllable time', [[1000, 3000], '{\\kf50}{\\k25}Hel'], [['Hel', 1500, 1750]]), ('regression variant: empty syllable time', [[0, 500], '{\\kf10}{\\ko25} {\\k10}o '], [[' ', 100, 350], ['o ', 350, 450]]), ('partial repair probe: empty syllable time', [[1000, 1500], '{\\ko5} {\\ko25}{\\k5}o {\\k0} '], [[' ', 1000, 1050], ['o ', 1300, 1350], [' ', 1350, 1350]]), ('partial repair variant: empty syllable time', [[0, 100], '{\\ko10}{\\kf0}o {\\kf0} {\\kf30}lo'], []), ('boundary control', [[0, 300], '{\\k20}a{\\kf20}b'], [['a', 0, 200], ['b', 200, 300]]), ('boundary control', [[0, 1000], '{\\k50}Hel{\\k50}lo'], [['Hel', 0, 500], ['lo', 500, 1000]]), ('normal control', [[0, 300], '{\\ko25}la{\\k25}o {\\kf5}la'], [['la', 0, 250], ['o ', 250, 300]]), ('normal control', [[0, 800], '{\\kf25}o '], [['o ', 0, 250]]), ('normal control', [[0, 500], '{\\ko30}Hel{\\K5}Hel{\\k50}lo{\\K30}{\\k30}lo'], [['Hel', 0, 300], ['Hel', 300, 350], ['lo', 350, 500]])], [('regression: empty syllable time', [[1000, 1500], '{\\ko5} {\\ko25}{\\k5}o {\\k0} '], [[' ', 1000, 1050], ['o ', 1300, 1350], [' ', 1350, 1350]]), ('regression variant: empty syllable time', [[0, 100], '{\\ko10}{\\kf0}o {\\kf0} {\\kf30}lo'], []), ('partial repair probe: empty syllable time', [[1000, 1100], '{\\k0}Hel{\\K10} {\\k5}o {\\k5} {\\k10}'], [['Hel', 1000, 1000], [' ', 1000, 1100]]), ('partial repair variant: empty syllable time', [[0, 100], '{\\kf0}{\\k30} {\\k0}o {\\ko5}Hel{\\k10} '], [[' ', 0, 100]]), ('boundary control', [[0, 200], '{\\k20}a{\\k10}{\\k5}b'], [['a', 0, 200]]), ('boundary control', [[0, 300], '{\\k20}a{\\kf20}b'], [['a', 0, 200], ['b', 200, 300]]), ('normal control', [[0, 300], '{\\kf5}lo{\\k5} '], [['lo', 0, 50], [' ', 50, 100]]), ('normal control', [[1000, 1800], '{\\k25}la{\\ko5}la{\\K5} '], [['la', 1000, 1250], ['la', 1250, 1300], [' ', 1300, 1350]]), ('normal control', [[1000, 1800], '{\\k0}Hel{\\ko0}Hel{\\K25}o '], [['Hel', 1000, 1000], ['Hel', 1000, 1000], ['o ', 1000, 1250]])], [('regression: empty syllable time', [[1000, 3000], '{\\k30}{\\ko0}Hel{\\kf50}la'], [['Hel', 1300, 1300], ['la', 1300, 1800]]), ('regression variant: empty syllable time', [[1000, 1800], '{\\k0}la{\\k30}{\\k0}lo{\\ko30}lo'], [['la', 1000, 1000], ['lo', 1300, 1300], ['lo', 1300, 1600]]), ('partial repair probe: empty syllable time', [[0, 500], '{\\kf30}Hel{\\k50} {\\k0}lo'], [['Hel', 0, 300], [' ', 300, 500]]), ('partial repair variant: empty syllable time', [[0, 300], '{\\kf10}{\\kf25}la{\\K10}{\\ko10}o {\\K0}o '], [['la', 100, 300]]), ('boundary control', [[0, 100], '{\\ko10}x{\\k1}y'], [['x', 0, 100]]), ('boundary control', [[0, 200], '{\\k20}a{\\k10}{\\k5}b'], [['a', 0, 200]]), ('normal control', [[1000, 1300], '{\\K50}la{\\ko30}Hel{\\k50}Hel{\\K25} '], [['la', 1000, 1300]]), ('normal control', [[1000, 1500], '{\\k5}lo{\\K30}o '], [['lo', 1000, 1050], ['o ', 1050, 1350]]), ('normal control', [[1000, 1500], '{\\k0}{\\kf5}lo{\\K25} '], [['lo', 1000, 1050], [' ', 1050, 1300]])], [('regression: empty syllable time', [[0, 800], '{\\k5}{\\k0} {\\k10}o {\\kf30}Hel{\\kf30}Hel'], [[' ', 50, 50], ['o ', 50, 150], ['Hel', 150, 450], ['Hel', 450, 750]]), ('regression variant: empty syllable time', [[0, 300], '{\\kf10}{\\kf25}la{\\K10}{\\ko10}o {\\K0}o '], [['la', 100, 300]]), ('partial repair probe: empty syllable time', [[1000, 3000], '{\\k30}{\\ko0}Hel{\\kf50}la'], [['Hel', 1300, 1300], ['la', 1300, 1800]]), ('partial repair variant: empty syllable time', [[1000, 1100], '{\\k50}{\\kf50}Hel{\\kf50}lo{\\k30}la{\\K50}Hel'], []), ('boundary control', [[0, 1000], '{\\k50}Hel{\\k50}lo'], [['Hel', 0, 500], ['lo', 500, 1000]]), ('boundary control', [[0, 100], '{\\ko10}x{\\k1}y'], [['x', 0, 100]]), ('normal control', [[1000, 1800], '{\\K25}'], []), ('normal control', [[1000, 3000], '{\\ko5}Hel{\\K50}la{\\k0} {\\kf5}lo'], [['Hel', 1000, 1050], ['la', 1050, 1550], [' ', 1550, 1550], ['lo', 1550, 1600]]), ('normal control', [[0, 500], '{\\k0}o '], [['o ', 0, 0]])]]
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 fixture | Actual | Expected | Outcome |
|---|---|---|---|
| regression: empty syllable time | [[' ', 1000, 1500]] | [[' ', 1750, 1800]] | Failed |
| regression variant: empty syllable time | [['la', 0, 500]] | [['la', 500, 1000]] | Failed |
| partial repair probe: empty syllable time | [['Hel', 1000, 1250]] | [['Hel', 1500, 1750]] | Failed |
| partial repair variant: empty syllable time | [[' ', 0, 250], ['o ', 0, 100]] | [[' ', 100, 350], ['o ', 350, 450]] | Failed |
| boundary control | [['Hel', 0, 500], ['lo', 500, 1000]] | [['Hel', 0, 500], ['lo', 500, 1000]] | Passed |
| boundary control | [['x', 0, 100]] | [['x', 0, 100]] | Passed |
| normal control | [['a', 0, 200], ['b', 200, 300]] | [['a', 0, 200], ['b', 200, 300]] | Passed |
| normal control | [['la', 0, 250], ['Hel', 250, 500], ['Hel', 500, 500]] | [['la', 0, 250], ['Hel', 250, 500], ['Hel', 500, 500]] | Passed |
| normal control | [['la', 0, 100], ['la', 100, 150], ['lo', 150, 300]] | [['la', 0, 100], ['la', 100, 150], ['lo', 150, 300]] | Passed |
SHA-256 / 00697def6b565c0e63db78d2a0ee5db51dd69e4d8adc41d83445e145e106aeaa
3 / The verified repair
Exit 0"""Failure Map reference implementation. Python standard library only."""
import json
import re
N = 1
observations = []
def solve(cue, text):
cs,ce=cue
out=[]
t=cs
for m in re.finditer(r'\{\\(kf|ko|k|K)(\d+)\}([^{]*)',text):
d=int(m.group(2))*10
syl=m.group(3)
if syl and t<ce:
out.append([syl,t,min(t+d,ce)])
t+=d
return out
def check(label, actual, expected):
observations.append({"check": label, "actual": actual, "expected": expected, "passed": actual == expected})
fixtures = [[('regression: empty syllable time', [[1000, 1800], '{\\ko50}{\\kf25}{\\k50} '], [[' ', 1750, 1800]]), ('regression variant: empty syllable time', [[0, 2000], '{\\ko50}{\\k50}la'], [['la', 500, 1000]]), ('partial repair probe: empty syllable time', [[1000, 3000], '{\\kf50}{\\k25}Hel'], [['Hel', 1500, 1750]]), ('partial repair variant: empty syllable time', [[0, 500], '{\\kf10}{\\ko25} {\\k10}o '], [[' ', 100, 350], ['o ', 350, 450]]), ('boundary control', [[0, 1000], '{\\k50}Hel{\\k50}lo'], [['Hel', 0, 500], ['lo', 500, 1000]]), ('boundary control', [[0, 100], '{\\ko10}x{\\k1}y'], [['x', 0, 100]]), ('normal control', [[0, 300], '{\\k20}a{\\kf20}b'], [['a', 0, 200], ['b', 200, 300]]), ('normal control', [[0, 2000], '{\\K25}la{\\ko25}Hel{\\K0}Hel{\\ko25}'], [['la', 0, 250], ['Hel', 250, 500], ['Hel', 500, 500]]), ('normal control', [[0, 300], '{\\k10}la{\\k5}la{\\k50}lo{\\ko25}lo'], [['la', 0, 100], ['la', 100, 150], ['lo', 150, 300]])], [('regression: empty syllable time', [[1000, 3000], '{\\kf50}{\\k25}Hel'], [['Hel', 1500, 1750]]), ('regression variant: empty syllable time', [[0, 500], '{\\kf10}{\\ko25} {\\k10}o '], [[' ', 100, 350], ['o ', 350, 450]]), ('partial repair probe: empty syllable time', [[1000, 1500], '{\\ko5} {\\ko25}{\\k5}o {\\k0} '], [[' ', 1000, 1050], ['o ', 1300, 1350], [' ', 1350, 1350]]), ('partial repair variant: empty syllable time', [[0, 100], '{\\ko10}{\\kf0}o {\\kf0} {\\kf30}lo'], []), ('boundary control', [[0, 300], '{\\k20}a{\\kf20}b'], [['a', 0, 200], ['b', 200, 300]]), ('boundary control', [[0, 1000], '{\\k50}Hel{\\k50}lo'], [['Hel', 0, 500], ['lo', 500, 1000]]), ('normal control', [[0, 300], '{\\ko25}la{\\k25}o {\\kf5}la'], [['la', 0, 250], ['o ', 250, 300]]), ('normal control', [[0, 800], '{\\kf25}o '], [['o ', 0, 250]]), ('normal control', [[0, 500], '{\\ko30}Hel{\\K5}Hel{\\k50}lo{\\K30}{\\k30}lo'], [['Hel', 0, 300], ['Hel', 300, 350], ['lo', 350, 500]])], [('regression: empty syllable time', [[1000, 1500], '{\\ko5} {\\ko25}{\\k5}o {\\k0} '], [[' ', 1000, 1050], ['o ', 1300, 1350], [' ', 1350, 1350]]), ('regression variant: empty syllable time', [[0, 100], '{\\ko10}{\\kf0}o {\\kf0} {\\kf30}lo'], []), ('partial repair probe: empty syllable time', [[1000, 1100], '{\\k0}Hel{\\K10} {\\k5}o {\\k5} {\\k10}'], [['Hel', 1000, 1000], [' ', 1000, 1100]]), ('partial repair variant: empty syllable time', [[0, 100], '{\\kf0}{\\k30} {\\k0}o {\\ko5}Hel{\\k10} '], [[' ', 0, 100]]), ('boundary control', [[0, 200], '{\\k20}a{\\k10}{\\k5}b'], [['a', 0, 200]]), ('boundary control', [[0, 300], '{\\k20}a{\\kf20}b'], [['a', 0, 200], ['b', 200, 300]]), ('normal control', [[0, 300], '{\\kf5}lo{\\k5} '], [['lo', 0, 50], [' ', 50, 100]]), ('normal control', [[1000, 1800], '{\\k25}la{\\ko5}la{\\K5} '], [['la', 1000, 1250], ['la', 1250, 1300], [' ', 1300, 1350]]), ('normal control', [[1000, 1800], '{\\k0}Hel{\\ko0}Hel{\\K25}o '], [['Hel', 1000, 1000], ['Hel', 1000, 1000], ['o ', 1000, 1250]])], [('regression: empty syllable time', [[1000, 3000], '{\\k30}{\\ko0}Hel{\\kf50}la'], [['Hel', 1300, 1300], ['la', 1300, 1800]]), ('regression variant: empty syllable time', [[1000, 1800], '{\\k0}la{\\k30}{\\k0}lo{\\ko30}lo'], [['la', 1000, 1000], ['lo', 1300, 1300], ['lo', 1300, 1600]]), ('partial repair probe: empty syllable time', [[0, 500], '{\\kf30}Hel{\\k50} {\\k0}lo'], [['Hel', 0, 300], [' ', 300, 500]]), ('partial repair variant: empty syllable time', [[0, 300], '{\\kf10}{\\kf25}la{\\K10}{\\ko10}o {\\K0}o '], [['la', 100, 300]]), ('boundary control', [[0, 100], '{\\ko10}x{\\k1}y'], [['x', 0, 100]]), ('boundary control', [[0, 200], '{\\k20}a{\\k10}{\\k5}b'], [['a', 0, 200]]), ('normal control', [[1000, 1300], '{\\K50}la{\\ko30}Hel{\\k50}Hel{\\K25} '], [['la', 1000, 1300]]), ('normal control', [[1000, 1500], '{\\k5}lo{\\K30}o '], [['lo', 1000, 1050], ['o ', 1050, 1350]]), ('normal control', [[1000, 1500], '{\\k0}{\\kf5}lo{\\K25} '], [['lo', 1000, 1050], [' ', 1050, 1300]])], [('regression: empty syllable time', [[0, 800], '{\\k5}{\\k0} {\\k10}o {\\kf30}Hel{\\kf30}Hel'], [[' ', 50, 50], ['o ', 50, 150], ['Hel', 150, 450], ['Hel', 450, 750]]), ('regression variant: empty syllable time', [[0, 300], '{\\kf10}{\\kf25}la{\\K10}{\\ko10}o {\\K0}o '], [['la', 100, 300]]), ('partial repair probe: empty syllable time', [[1000, 3000], '{\\k30}{\\ko0}Hel{\\kf50}la'], [['Hel', 1300, 1300], ['la', 1300, 1800]]), ('partial repair variant: empty syllable time', [[1000, 1100], '{\\k50}{\\kf50}Hel{\\kf50}lo{\\k30}la{\\K50}Hel'], []), ('boundary control', [[0, 1000], '{\\k50}Hel{\\k50}lo'], [['Hel', 0, 500], ['lo', 500, 1000]]), ('boundary control', [[0, 100], '{\\ko10}x{\\k1}y'], [['x', 0, 100]]), ('normal control', [[1000, 1800], '{\\K25}'], []), ('normal control', [[1000, 3000], '{\\ko5}Hel{\\K50}la{\\k0} {\\kf5}lo'], [['Hel', 1000, 1050], ['la', 1050, 1550], [' ', 1550, 1550], ['lo', 1550, 1600]]), ('normal control', [[0, 500], '{\\k0}o '], [['o ', 0, 0]])]]
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 fixture | Actual | Expected | Outcome |
|---|---|---|---|
| regression: empty syllable time | [[' ', 1750, 1800]] | [[' ', 1750, 1800]] | Passed |
| regression variant: empty syllable time | [['la', 500, 1000]] | [['la', 500, 1000]] | Passed |
| partial repair probe: empty syllable time | [['Hel', 1500, 1750]] | [['Hel', 1500, 1750]] | Passed |
| partial repair variant: empty syllable time | [[' ', 100, 350], ['o ', 350, 450]] | [[' ', 100, 350], ['o ', 350, 450]] | Passed |
| boundary control | [['Hel', 0, 500], ['lo', 500, 1000]] | [['Hel', 0, 500], ['lo', 500, 1000]] | Passed |
| boundary control | [['x', 0, 100]] | [['x', 0, 100]] | Passed |
| normal control | [['a', 0, 200], ['b', 200, 300]] | [['a', 0, 200], ['b', 200, 300]] | Passed |
| normal control | [['la', 0, 250], ['Hel', 250, 500], ['Hel', 500, 500]] | [['la', 0, 250], ['Hel', 250, 500], ['Hel', 500, 500]] | Passed |
| normal control | [['la', 0, 100], ['la', 100, 150], ['lo', 150, 300]] | [['la', 0, 100], ['la', 100, 150], ['lo', 150, 300]] | Passed |
SHA-256 / 58859661022f36aac358dbc1dc0fbf098bc40da4aebe21214f35414bc156906c
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:33.364761+00:00.
Case digest / 1af4129681438a853529483550178cd00b6824b6d902f30e0414db53d121abba