{"abstract":"Repeated lines that differ only by a trailing space are shown as separate flickering cues.","category":"Subtitle cue timing","checks":9,"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.","evaluation_group":"w2-subtitle-cue-timing-duplicate-merge","failed_approach":"Trimming alone still treats doubled inner spaces as different text.","family":"w2-subtitle-cue-timing-duplicate-merge-text-normalization","id":"FA-78091","implementations":{"attempt":{"sha256":"b444a9dc3f5a0929c10b1cef9dd7ec72e6022676d2145e24288794f50ef470c0","source":"\"\"\"Failure Map reference implementation. Python standard library only.\"\"\"\nimport json\n\nN = 1\nobservations = []\ndef solve(cues, max_gap):\n    out=[]\n    for s,e,t in cues:\n        norm=t.strip()\n        if out and norm and out[-1][2]==norm and s-out[-1][1]<=max_gap:\n            out[-1][1]=max(out[-1][1],e)\n            continue\n        out.append([s,e,norm])\n    return out\ndef check(label, actual, expected):\n    observations.append({\"check\": label, \"actual\": actual, \"expected\": expected, \"passed\": actual == expected})\nfixtures = [[('regression: text normalization', [[[0, 100, ' '], [100, 200, ' ']], 0], [[0, 100, ''], [100, 200, '']]), ('regression variant: text normalization', [[[0, 1000, 'Yes  sir'], [1000, 1100, ''], [800, 900, 'Yes sir']], 100], [[0, 1000, 'Yes sir'], [1000, 1100, ''], [800, 900, 'Yes sir']]), ('partial repair probe: text normalization', [[[0, 500, 'Yes '], [600, 1600, ' Yes'], [1300, 1800, 'Yes '], [1900, 2400, 'Yes '], [2100, 2200, 'Yes  sir']], 100], [[0, 2400, 'Yes'], [2100, 2200, 'Yes sir']]), ('partial repair variant: text normalization', [[[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']]), ('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', [[[500, 1000, ''], [1000, 1100, 'Go now']], 100], [[500, 1000, ''], [1000, 1100, 'Go now']]), ('normal control', [[[500, 1500, ''], [1200, 1300, 'Yes']], 0], [[500, 1500, ''], [1200, 1300, 'Yes']])], [('regression: text normalization', [[[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']]), ('regression variant: text normalization', [[[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']]), ('partial repair probe: text normalization', [[[0, 1000, 'Yes  sir'], [1000, 1100, ''], [800, 900, 'Yes sir']], 100], [[0, 1000, 'Yes sir'], [1000, 1100, ''], [800, 900, 'Yes sir']]), ('partial repair variant: text normalization', [[[0, 100, 'Go\\nnow'], [-200, 800, '  '], [800, 1300, 'Yes sir'], [1301, 1401, ''], [1801, 1901, 'Yes ']], 0], [[0, 100, 'Go now'], [-200, 800, ''], [800, 1300, 'Yes sir'], [1301, 1401, ''], [1801, 1901, 'Yes']]), ('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', [[[0, 1000, 'Yes'], [1041, 2041, ''], [2041, 2541, 'No']], 40], [[0, 1000, 'Yes'], [1041, 2041, ''], [2041, 2541, 'No']]), ('normal control', [[[500, 1500, 'No']], 40], [[500, 1500, 'No']]), ('normal control', [[[500, 1500, '']], 0], [[500, 1500, '']])], [('regression: text normalization', [[[500, 1000, 'No'], [1101, 1601, 'Yes  sir']], 100], [[500, 1000, 'No'], [1101, 1601, 'Yes sir']]), ('regression variant: text normalization', [[[500, 600, 'Yes  sir'], [699, 1199, 'Go\\nnow'], [1299, 2299, 'Yes '], [1999, 2999, 'Yes  sir']], 100], [[500, 600, 'Yes sir'], [699, 1199, 'Go now'], [1299, 2299, 'Yes'], [1999, 2999, 'Yes sir']]), ('partial repair probe: text normalization', [[[500, 600, 'Go\\nnow'], [1000, 2000, 'Yes sir']], 100], [[500, 600, 'Go now'], [1000, 2000, 'Yes sir']]), ('partial repair variant: text normalization', [[[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']]), ('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, ''], [600, 700, '']], 100], [[0, 500, ''], [600, 700, '']]), ('normal control', [[[0, 1000, ''], [700, 1200, 'No']], 40], [[0, 1000, ''], [700, 1200, 'No']]), ('normal control', [[[0, 500, 'Yes']], 100], [[0, 500, 'Yes']])], [('regression: text normalization', [[[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 variant: text normalization', [[[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']]), ('partial repair probe: text normalization', [[[500, 600, 'Go\\nnow'], [1000, 2000, 'Yes sir']], 100], [[500, 600, 'Go now'], [1000, 2000, 'Yes sir']]), ('partial repair variant: text normalization', [[[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']]), ('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, 'No'], [199, 299, 'No']], 100], [[0, 299, 'No']]), ('normal control', [[[500, 1500, 'Yes']], 100], [[500, 1500, 'Yes']]), ('normal control', [[[0, 100, 'Yes sir'], [500, 1500, 'No'], [1599, 2099, ''], [1799, 2299, 'Yes sir'], [2400, 2500, 'Yes sir'], [1800, 2800, 'Yes sir']], 100], [[0, 100, 'Yes sir'], [500, 1500, 'No'], [1599, 2099, ''], [1799, 2299, 'Yes sir'], [2400, 2800, 'Yes sir']])], [('regression: text normalization', [[[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']]), ('regression variant: text normalization', [[[500, 1000, 'No'], [1099, 1599, 'Go now'], [1700, 1800, '  '], [1899, 1999, '']], 100], [[500, 1000, 'No'], [1099, 1599, 'Go now'], [1700, 1800, ''], [1899, 1999, '']]), ('partial repair probe: text normalization', [[[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']]), ('partial repair variant: text normalization', [[[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']]), ('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, 600, 'Go now']], 0], [[500, 600, 'Go now']]), ('normal control', [[[500, 1000, 'Go now']], 40], [[500, 1000, 'Go now']]), ('normal control', [[[0, 100, 'Yes']], 100], [[0, 100, 'Yes']])]]\nfor label, args, expected in fixtures[N-1]:\n    check(label, solve(*args), expected)\nprint(json.dumps({\"observations\": observations, \"passed\": all(x[\"passed\"] for x in observations)}, ensure_ascii=False))\nraise SystemExit(0 if all(x[\"passed\"] for x in observations) else 1)\n"},"broken":{"sha256":"96646f3b53980440b04aef47fb4d2b7584008b855b30010286adf322ff6ebfb8","source":"\"\"\"Failure Map reference implementation. Python standard library only.\"\"\"\nimport json\n\nN = 1\nobservations = []\ndef solve(cues, max_gap):\n    out=[]\n    for s,e,t in cues:\n        norm=t\n        if out and norm and out[-1][2]==norm and s-out[-1][1]<=max_gap:\n            out[-1][1]=max(out[-1][1],e)\n            continue\n        out.append([s,e,norm])\n    return out\ndef check(label, actual, expected):\n    observations.append({\"check\": label, \"actual\": actual, \"expected\": expected, \"passed\": actual == expected})\nfixtures = [[('regression: text normalization', [[[0, 100, ' '], [100, 200, ' ']], 0], [[0, 100, ''], [100, 200, '']]), ('regression variant: text normalization', [[[0, 1000, 'Yes  sir'], [1000, 1100, ''], [800, 900, 'Yes sir']], 100], [[0, 1000, 'Yes sir'], [1000, 1100, ''], [800, 900, 'Yes sir']]), ('partial repair probe: text normalization', [[[0, 500, 'Yes '], [600, 1600, ' Yes'], [1300, 1800, 'Yes '], [1900, 2400, 'Yes '], [2100, 2200, 'Yes  sir']], 100], [[0, 2400, 'Yes'], [2100, 2200, 'Yes sir']]), ('partial repair variant: text normalization', [[[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']]), ('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', [[[500, 1000, ''], [1000, 1100, 'Go now']], 100], [[500, 1000, ''], [1000, 1100, 'Go now']]), ('normal control', [[[500, 1500, ''], [1200, 1300, 'Yes']], 0], [[500, 1500, ''], [1200, 1300, 'Yes']])], [('regression: text normalization', [[[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']]), ('regression variant: text normalization', [[[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']]), ('partial repair probe: text normalization', [[[0, 1000, 'Yes  sir'], [1000, 1100, ''], [800, 900, 'Yes sir']], 100], [[0, 1000, 'Yes sir'], [1000, 1100, ''], [800, 900, 'Yes sir']]), ('partial repair variant: text normalization', [[[0, 100, 'Go\\nnow'], [-200, 800, '  '], [800, 1300, 'Yes sir'], [1301, 1401, ''], [1801, 1901, 'Yes ']], 0], [[0, 100, 'Go now'], [-200, 800, ''], [800, 1300, 'Yes sir'], [1301, 1401, ''], [1801, 1901, 'Yes']]), ('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', [[[0, 1000, 'Yes'], [1041, 2041, ''], [2041, 2541, 'No']], 40], [[0, 1000, 'Yes'], [1041, 2041, ''], [2041, 2541, 'No']]), ('normal control', [[[500, 1500, 'No']], 40], [[500, 1500, 'No']]), ('normal control', [[[500, 1500, '']], 0], [[500, 1500, '']])], [('regression: text normalization', [[[500, 1000, 'No'], [1101, 1601, 'Yes  sir']], 100], [[500, 1000, 'No'], [1101, 1601, 'Yes sir']]), ('regression variant: text normalization', [[[500, 600, 'Yes  sir'], [699, 1199, 'Go\\nnow'], [1299, 2299, 'Yes '], [1999, 2999, 'Yes  sir']], 100], [[500, 600, 'Yes sir'], [699, 1199, 'Go now'], [1299, 2299, 'Yes'], [1999, 2999, 'Yes sir']]), ('partial repair probe: text normalization', [[[500, 600, 'Go\\nnow'], [1000, 2000, 'Yes sir']], 100], [[500, 600, 'Go now'], [1000, 2000, 'Yes sir']]), ('partial repair variant: text normalization', [[[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']]), ('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, ''], [600, 700, '']], 100], [[0, 500, ''], [600, 700, '']]), ('normal control', [[[0, 1000, ''], [700, 1200, 'No']], 40], [[0, 1000, ''], [700, 1200, 'No']]), ('normal control', [[[0, 500, 'Yes']], 100], [[0, 500, 'Yes']])], [('regression: text normalization', [[[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 variant: text normalization', [[[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']]), ('partial repair probe: text normalization', [[[500, 600, 'Go\\nnow'], [1000, 2000, 'Yes sir']], 100], [[500, 600, 'Go now'], [1000, 2000, 'Yes sir']]), ('partial repair variant: text normalization', [[[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']]), ('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, 'No'], [199, 299, 'No']], 100], [[0, 299, 'No']]), ('normal control', [[[500, 1500, 'Yes']], 100], [[500, 1500, 'Yes']]), ('normal control', [[[0, 100, 'Yes sir'], [500, 1500, 'No'], [1599, 2099, ''], [1799, 2299, 'Yes sir'], [2400, 2500, 'Yes sir'], [1800, 2800, 'Yes sir']], 100], [[0, 100, 'Yes sir'], [500, 1500, 'No'], [1599, 2099, ''], [1799, 2299, 'Yes sir'], [2400, 2800, 'Yes sir']])], [('regression: text normalization', [[[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']]), ('regression variant: text normalization', [[[500, 1000, 'No'], [1099, 1599, 'Go now'], [1700, 1800, '  '], [1899, 1999, '']], 100], [[500, 1000, 'No'], [1099, 1599, 'Go now'], [1700, 1800, ''], [1899, 1999, '']]), ('partial repair probe: text normalization', [[[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']]), ('partial repair variant: text normalization', [[[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']]), ('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, 600, 'Go now']], 0], [[500, 600, 'Go now']]), ('normal control', [[[500, 1000, 'Go now']], 40], [[500, 1000, 'Go now']]), ('normal control', [[[0, 100, 'Yes']], 100], [[0, 100, 'Yes']])]]\nfor label, args, expected in fixtures[N-1]:\n    check(label, solve(*args), expected)\nprint(json.dumps({\"observations\": observations, \"passed\": all(x[\"passed\"] for x in observations)}, ensure_ascii=False))\nraise SystemExit(0 if all(x[\"passed\"] for x in observations) else 1)\n"},"fixed":{"sha256":"146953bf65a3b24ecadc8a3fba348896d42c778d898c248eaa28da17606fac12","source":"\"\"\"Failure Map reference implementation. Python standard library only.\"\"\"\nimport json\n\nN = 1\nobservations = []\ndef solve(cues, max_gap):\n    out=[]\n    for s,e,t in cues:\n        norm=' '.join(t.split())\n        if out and norm and out[-1][2]==norm and s-out[-1][1]<=max_gap:\n            out[-1][1]=max(out[-1][1],e)\n            continue\n        out.append([s,e,norm])\n    return out\ndef check(label, actual, expected):\n    observations.append({\"check\": label, \"actual\": actual, \"expected\": expected, \"passed\": actual == expected})\nfixtures = [[('regression: text normalization', [[[0, 100, ' '], [100, 200, ' ']], 0], [[0, 100, ''], [100, 200, '']]), ('regression variant: text normalization', [[[0, 1000, 'Yes  sir'], [1000, 1100, ''], [800, 900, 'Yes sir']], 100], [[0, 1000, 'Yes sir'], [1000, 1100, ''], [800, 900, 'Yes sir']]), ('partial repair probe: text normalization', [[[0, 500, 'Yes '], [600, 1600, ' Yes'], [1300, 1800, 'Yes '], [1900, 2400, 'Yes '], [2100, 2200, 'Yes  sir']], 100], [[0, 2400, 'Yes'], [2100, 2200, 'Yes sir']]), ('partial repair variant: text normalization', [[[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']]), ('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', [[[500, 1000, ''], [1000, 1100, 'Go now']], 100], [[500, 1000, ''], [1000, 1100, 'Go now']]), ('normal control', [[[500, 1500, ''], [1200, 1300, 'Yes']], 0], [[500, 1500, ''], [1200, 1300, 'Yes']])], [('regression: text normalization', [[[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']]), ('regression variant: text normalization', [[[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']]), ('partial repair probe: text normalization', [[[0, 1000, 'Yes  sir'], [1000, 1100, ''], [800, 900, 'Yes sir']], 100], [[0, 1000, 'Yes sir'], [1000, 1100, ''], [800, 900, 'Yes sir']]), ('partial repair variant: text normalization', [[[0, 100, 'Go\\nnow'], [-200, 800, '  '], [800, 1300, 'Yes sir'], [1301, 1401, ''], [1801, 1901, 'Yes ']], 0], [[0, 100, 'Go now'], [-200, 800, ''], [800, 1300, 'Yes sir'], [1301, 1401, ''], [1801, 1901, 'Yes']]), ('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', [[[0, 1000, 'Yes'], [1041, 2041, ''], [2041, 2541, 'No']], 40], [[0, 1000, 'Yes'], [1041, 2041, ''], [2041, 2541, 'No']]), ('normal control', [[[500, 1500, 'No']], 40], [[500, 1500, 'No']]), ('normal control', [[[500, 1500, '']], 0], [[500, 1500, '']])], [('regression: text normalization', [[[500, 1000, 'No'], [1101, 1601, 'Yes  sir']], 100], [[500, 1000, 'No'], [1101, 1601, 'Yes sir']]), ('regression variant: text normalization', [[[500, 600, 'Yes  sir'], [699, 1199, 'Go\\nnow'], [1299, 2299, 'Yes '], [1999, 2999, 'Yes  sir']], 100], [[500, 600, 'Yes sir'], [699, 1199, 'Go now'], [1299, 2299, 'Yes'], [1999, 2999, 'Yes sir']]), ('partial repair probe: text normalization', [[[500, 600, 'Go\\nnow'], [1000, 2000, 'Yes sir']], 100], [[500, 600, 'Go now'], [1000, 2000, 'Yes sir']]), ('partial repair variant: text normalization', [[[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']]), ('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, ''], [600, 700, '']], 100], [[0, 500, ''], [600, 700, '']]), ('normal control', [[[0, 1000, ''], [700, 1200, 'No']], 40], [[0, 1000, ''], [700, 1200, 'No']]), ('normal control', [[[0, 500, 'Yes']], 100], [[0, 500, 'Yes']])], [('regression: text normalization', [[[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 variant: text normalization', [[[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']]), ('partial repair probe: text normalization', [[[500, 600, 'Go\\nnow'], [1000, 2000, 'Yes sir']], 100], [[500, 600, 'Go now'], [1000, 2000, 'Yes sir']]), ('partial repair variant: text normalization', [[[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']]), ('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, 'No'], [199, 299, 'No']], 100], [[0, 299, 'No']]), ('normal control', [[[500, 1500, 'Yes']], 100], [[500, 1500, 'Yes']]), ('normal control', [[[0, 100, 'Yes sir'], [500, 1500, 'No'], [1599, 2099, ''], [1799, 2299, 'Yes sir'], [2400, 2500, 'Yes sir'], [1800, 2800, 'Yes sir']], 100], [[0, 100, 'Yes sir'], [500, 1500, 'No'], [1599, 2099, ''], [1799, 2299, 'Yes sir'], [2400, 2800, 'Yes sir']])], [('regression: text normalization', [[[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']]), ('regression variant: text normalization', [[[500, 1000, 'No'], [1099, 1599, 'Go now'], [1700, 1800, '  '], [1899, 1999, '']], 100], [[500, 1000, 'No'], [1099, 1599, 'Go now'], [1700, 1800, ''], [1899, 1999, '']]), ('partial repair probe: text normalization', [[[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']]), ('partial repair variant: text normalization', [[[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']]), ('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, 600, 'Go now']], 0], [[500, 600, 'Go now']]), ('normal control', [[[500, 1000, 'Go now']], 40], [[500, 1000, 'Go now']]), ('normal control', [[[0, 100, 'Yes']], 100], [[0, 100, 'Yes']])]]\nfor label, args, expected in fixtures[N-1]:\n    check(label, solve(*args), expected)\nprint(json.dumps({\"observations\": observations, \"passed\": all(x[\"passed\"] for x in observations)}, ensure_ascii=False))\nraise SystemExit(0 if all(x[\"passed\"] for x in observations) else 1)\n"}},"limitations":"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.","method":"Deterministic executable model with adversarial boundary fixtures.","provenance":{"created_by":"Failure Map","dependencies":"Python standard library","family":"w2-subtitle-cue-timing-duplicate-merge-text-normalization","generated_at":"2026-09-29T14:49:32.057813+00:00","license":"CC0-1.0","python":"3.12.14","seed":1,"split":"open-access"},"relevance":"Subtitle timing defects shift, hide or overlap captions that viewers depend on for comprehension and accessibility.","repair":"Collapse whitespace runs and trim before comparing.","root_cause":"Texts are compared raw, so incidental whitespace prevents merging.","sha256":"1ab7d7551957752cb0d34b0fb8f3db9da7b08c8b9077d28f4354760ee7866b48","title":"Adjacent duplicate cue merging: text normalization · case 01","variant":1,"variant_policy":"Five numbered records share a model and may reuse boundary fixtures.","verification":{"attempt":{"elapsed_ms":45.628,"exit_code":1,"observations":[{"actual":[[0,100,""],[100,200,""]],"check":"regression: text normalization","expected":[[0,100,""],[100,200,""]],"passed":true},{"actual":[[0,1000,"Yes  sir"],[1000,1100,""],[800,900,"Yes sir"]],"check":"regression variant: text normalization","expected":[[0,1000,"Yes sir"],[1000,1100,""],[800,900,"Yes sir"]],"passed":false},{"actual":[[0,2400,"Yes"],[2100,2200,"Yes  sir"]],"check":"partial repair probe: text normalization","expected":[[0,2400,"Yes"],[2100,2200,"Yes sir"]],"passed":false},{"actual":[[500,1500,"Yes"],[1600,2100,"Yes sir"],[1400,2400,"Yes"],[2501,3001,"Go\nnow"]],"check":"partial repair variant: text normalization","expected":[[500,1500,"Yes"],[1600,2100,"Yes sir"],[1400,2400,"Yes"],[2501,3001,"Go now"]],"passed":false},{"actual":[[0,900,"Yes"]],"check":"boundary control","expected":[[0,900,"Yes"]],"passed":true},{"actual":[[0,500,"Yes"]],"check":"boundary control","expected":[[0,500,"Yes"]],"passed":true},{"actual":[[0,100,"A"],[150,200,"A"]],"check":"normal control","expected":[[0,100,"A"],[150,200,"A"]],"passed":true},{"actual":[[500,1000,""],[1000,1100,"Go now"]],"check":"normal control","expected":[[500,1000,""],[1000,1100,"Go now"]],"passed":true},{"actual":[[500,1500,""],[1200,1300,"Yes"]],"check":"normal control","expected":[[500,1500,""],[1200,1300,"Yes"]],"passed":true}],"passed":false,"stderr":"","stdout":"{\"observations\": [{\"check\": \"regression: text normalization\", \"actual\": [[0, 100, \"\"], [100, 200, \"\"]], \"expected\": [[0, 100, \"\"], [100, 200, \"\"]], \"passed\": true}, {\"check\": \"regression variant: text normalization\", \"actual\": [[0, 1000, \"Yes  sir\"], [1000, 1100, \"\"], [800, 900, \"Yes sir\"]], \"expected\": [[0, 1000, \"Yes sir\"], [1000, 1100, \"\"], [800, 900, \"Yes sir\"]], \"passed\": false}, {\"check\": \"partial repair probe: text normalization\", \"actual\": [[0, 2400, \"Yes\"], [2100, 2200, \"Yes  sir\"]], \"expected\": [[0, 2400, \"Yes\"], [2100, 2200, \"Yes sir\"]], \"passed\": false}, {\"check\": \"partial repair variant: text normalization\", \"actual\": [[500, 1500, \"Yes\"], [1600, 2100, \"Yes sir\"], [1400, 2400, \"Yes\"], [2501, 3001, \"Go\\nnow\"]], \"expected\": [[500, 1500, \"Yes\"], [1600, 2100, \"Yes sir\"], [1400, 2400, \"Yes\"], [2501, 3001, \"Go now\"]], \"passed\": false}, {\"check\": \"boundary control\", \"actual\": [[0, 900, \"Yes\"]], \"expected\": [[0, 900, \"Yes\"]], \"passed\": true}, {\"check\": \"boundary control\", \"actual\": [[0, 500, \"Yes\"]], \"expected\": [[0, 500, \"Yes\"]], \"passed\": true}, {\"check\": \"normal control\", \"actual\": [[0, 100, \"A\"], [150, 200, \"A\"]], \"expected\": [[0, 100, \"A\"], [150, 200, \"A\"]], \"passed\": true}, {\"check\": \"normal control\", \"actual\": [[500, 1000, \"\"], [1000, 1100, \"Go now\"]], \"expected\": [[500, 1000, \"\"], [1000, 1100, \"Go now\"]], \"passed\": true}, {\"check\": \"normal control\", \"actual\": [[500, 1500, \"\"], [1200, 1300, \"Yes\"]], \"expected\": [[500, 1500, \"\"], [1200, 1300, \"Yes\"]], \"passed\": true}], \"passed\": false}\n"},"broken":{"elapsed_ms":42.397,"exit_code":1,"observations":[{"actual":[[0,200," "]],"check":"regression: text normalization","expected":[[0,100,""],[100,200,""]],"passed":false},{"actual":[[0,1000,"Yes  sir"],[1000,1100,""],[800,900,"Yes sir"]],"check":"regression variant: text normalization","expected":[[0,1000,"Yes sir"],[1000,1100,""],[800,900,"Yes sir"]],"passed":false},{"actual":[[0,500,"Yes "],[600,1600," Yes"],[1300,2400,"Yes "],[2100,2200,"Yes  sir"]],"check":"partial repair probe: text normalization","expected":[[0,2400,"Yes"],[2100,2200,"Yes sir"]],"passed":false},{"actual":[[500,1500," Yes"],[1600,2100,"Yes sir"],[1400,2400,"Yes "],[2501,3001,"Go\nnow"]],"check":"partial repair variant: text normalization","expected":[[500,1500,"Yes"],[1600,2100,"Yes sir"],[1400,2400,"Yes"],[2501,3001,"Go now"]],"passed":false},{"actual":[[0,900,"Yes"]],"check":"boundary control","expected":[[0,900,"Yes"]],"passed":true},{"actual":[[0,500,"Yes"]],"check":"boundary control","expected":[[0,500,"Yes"]],"passed":true},{"actual":[[0,100,"A"],[150,200,"A"]],"check":"normal control","expected":[[0,100,"A"],[150,200,"A"]],"passed":true},{"actual":[[500,1000,""],[1000,1100,"Go now"]],"check":"normal control","expected":[[500,1000,""],[1000,1100,"Go now"]],"passed":true},{"actual":[[500,1500,""],[1200,1300,"Yes"]],"check":"normal control","expected":[[500,1500,""],[1200,1300,"Yes"]],"passed":true}],"passed":false,"stderr":"","stdout":"{\"observations\": [{\"check\": \"regression: text normalization\", \"actual\": [[0, 200, \" \"]], \"expected\": [[0, 100, \"\"], [100, 200, \"\"]], \"passed\": false}, {\"check\": \"regression variant: text normalization\", \"actual\": [[0, 1000, \"Yes  sir\"], [1000, 1100, \"\"], [800, 900, \"Yes sir\"]], \"expected\": [[0, 1000, \"Yes sir\"], [1000, 1100, \"\"], [800, 900, \"Yes sir\"]], \"passed\": false}, {\"check\": \"partial repair probe: text normalization\", \"actual\": [[0, 500, \"Yes \"], [600, 1600, \" Yes\"], [1300, 2400, \"Yes \"], [2100, 2200, \"Yes  sir\"]], \"expected\": [[0, 2400, \"Yes\"], [2100, 2200, \"Yes sir\"]], \"passed\": false}, {\"check\": \"partial repair variant: text normalization\", \"actual\": [[500, 1500, \" Yes\"], [1600, 2100, \"Yes sir\"], [1400, 2400, \"Yes \"], [2501, 3001, \"Go\\nnow\"]], \"expected\": [[500, 1500, \"Yes\"], [1600, 2100, \"Yes sir\"], [1400, 2400, \"Yes\"], [2501, 3001, \"Go now\"]], \"passed\": false}, {\"check\": \"boundary control\", \"actual\": [[0, 900, \"Yes\"]], \"expected\": [[0, 900, \"Yes\"]], \"passed\": true}, {\"check\": \"boundary control\", \"actual\": [[0, 500, \"Yes\"]], \"expected\": [[0, 500, \"Yes\"]], \"passed\": true}, {\"check\": \"normal control\", \"actual\": [[0, 100, \"A\"], [150, 200, \"A\"]], \"expected\": [[0, 100, \"A\"], [150, 200, \"A\"]], \"passed\": true}, {\"check\": \"normal control\", \"actual\": [[500, 1000, \"\"], [1000, 1100, \"Go now\"]], \"expected\": [[500, 1000, \"\"], [1000, 1100, \"Go now\"]], \"passed\": true}, {\"check\": \"normal control\", \"actual\": [[500, 1500, \"\"], [1200, 1300, \"Yes\"]], \"expected\": [[500, 1500, \"\"], [1200, 1300, \"Yes\"]], \"passed\": true}], \"passed\": false}\n"},"fixed":{"elapsed_ms":41.028,"exit_code":0,"observations":[{"actual":[[0,100,""],[100,200,""]],"check":"regression: text normalization","expected":[[0,100,""],[100,200,""]],"passed":true},{"actual":[[0,1000,"Yes sir"],[1000,1100,""],[800,900,"Yes sir"]],"check":"regression variant: text normalization","expected":[[0,1000,"Yes sir"],[1000,1100,""],[800,900,"Yes sir"]],"passed":true},{"actual":[[0,2400,"Yes"],[2100,2200,"Yes sir"]],"check":"partial repair probe: text normalization","expected":[[0,2400,"Yes"],[2100,2200,"Yes sir"]],"passed":true},{"actual":[[500,1500,"Yes"],[1600,2100,"Yes sir"],[1400,2400,"Yes"],[2501,3001,"Go now"]],"check":"partial repair variant: text normalization","expected":[[500,1500,"Yes"],[1600,2100,"Yes sir"],[1400,2400,"Yes"],[2501,3001,"Go now"]],"passed":true},{"actual":[[0,900,"Yes"]],"check":"boundary control","expected":[[0,900,"Yes"]],"passed":true},{"actual":[[0,500,"Yes"]],"check":"boundary control","expected":[[0,500,"Yes"]],"passed":true},{"actual":[[0,100,"A"],[150,200,"A"]],"check":"normal control","expected":[[0,100,"A"],[150,200,"A"]],"passed":true},{"actual":[[500,1000,""],[1000,1100,"Go now"]],"check":"normal control","expected":[[500,1000,""],[1000,1100,"Go now"]],"passed":true},{"actual":[[500,1500,""],[1200,1300,"Yes"]],"check":"normal control","expected":[[500,1500,""],[1200,1300,"Yes"]],"passed":true}],"passed":true,"stderr":"","stdout":"{\"observations\": [{\"check\": \"regression: text normalization\", \"actual\": [[0, 100, \"\"], [100, 200, \"\"]], \"expected\": [[0, 100, \"\"], [100, 200, \"\"]], \"passed\": true}, {\"check\": \"regression variant: text normalization\", \"actual\": [[0, 1000, \"Yes sir\"], [1000, 1100, \"\"], [800, 900, \"Yes sir\"]], \"expected\": [[0, 1000, \"Yes sir\"], [1000, 1100, \"\"], [800, 900, \"Yes sir\"]], \"passed\": true}, {\"check\": \"partial repair probe: text normalization\", \"actual\": [[0, 2400, \"Yes\"], [2100, 2200, \"Yes sir\"]], \"expected\": [[0, 2400, \"Yes\"], [2100, 2200, \"Yes sir\"]], \"passed\": true}, {\"check\": \"partial repair variant: text normalization\", \"actual\": [[500, 1500, \"Yes\"], [1600, 2100, \"Yes sir\"], [1400, 2400, \"Yes\"], [2501, 3001, \"Go now\"]], \"expected\": [[500, 1500, \"Yes\"], [1600, 2100, \"Yes sir\"], [1400, 2400, \"Yes\"], [2501, 3001, \"Go now\"]], \"passed\": true}, {\"check\": \"boundary control\", \"actual\": [[0, 900, \"Yes\"]], \"expected\": [[0, 900, \"Yes\"]], \"passed\": true}, {\"check\": \"boundary control\", \"actual\": [[0, 500, \"Yes\"]], \"expected\": [[0, 500, \"Yes\"]], \"passed\": true}, {\"check\": \"normal control\", \"actual\": [[0, 100, \"A\"], [150, 200, \"A\"]], \"expected\": [[0, 100, \"A\"], [150, 200, \"A\"]], \"passed\": true}, {\"check\": \"normal control\", \"actual\": [[500, 1000, \"\"], [1000, 1100, \"Go now\"]], \"expected\": [[500, 1000, \"\"], [1000, 1100, \"Go now\"]], \"passed\": true}, {\"check\": \"normal control\", \"actual\": [[500, 1500, \"\"], [1200, 1300, \"Yes\"]], \"expected\": [[500, 1500, \"\"], [1200, 1300, \"Yes\"]], \"passed\": true}], \"passed\": true}\n"}},"verified":true,"visibility":"public"}