{"abstract":"Frame offsets at rates that do not divide 1000 lose their fractional milliseconds before rounding.","category":"Subtitle cue timing","checks":9,"contract":"Evaluate a timed-text time expression to integer ms, rounded half up. Offset form <number><metric> with metric h, m, s, ms, f (frames at frame_rate) or t (ticks at tick_rate). Clock form HH:MM:SS with optional .fraction (any digits) or :FF frames (FF < frame_rate). Minutes/seconds above 59 or malformed text give None.","evaluation_group":"w2-subtitle-cue-timing-ttml-time-expression","failed_approach":"Hard-coding 30 frames per second breaks every other frame rate.","family":"w2-subtitle-cue-timing-ttml-time-expression-frame-metric-scale","id":"FA-78196","implementations":{"attempt":{"sha256":"75768c30ef458b48763ca08a001b5ba3e5911c652ffc0754b5c7626787f40c43","source":"\"\"\"Failure Map reference implementation. Python standard library only.\"\"\"\nimport json\nimport math\nimport re\nfrom fractions import Fraction\nN = 1\nobservations = []\ndef solve(expr, frame_rate, tick_rate):\n    m=re.fullmatch(r'(\\d+(?:\\.\\d+)?)(h|ms|m|s|f|t)',expr)\n    if m:\n        v=Fraction(m.group(1))\n        unit=m.group(2)\n        scale={'h':3600000,'m':60000,'s':1000,'ms':1}\n        if unit in scale:\n            x=v*scale[unit]\n        elif unit=='f':\n            x=v*1000/30\n        else:\n            x=v*1000/tick_rate\n        return math.floor(x+Fraction(1,2))\n    m=re.fullmatch(r'(\\d{2,}):(\\d{2}):(\\d{2})(?:\\.(\\d+)|:(\\d{2,}))?',expr)\n    if not m:\n        return None\n    h,mi,se,frac,fr=m.groups()\n    if int(mi)>59 or int(se)>59:\n        return None\n    x=Fraction(int(h)*3600+int(mi)*60+int(se))*1000\n    if frac:\n        x+=Fraction('0.'+frac)*1000\n    if fr:\n        if int(fr)>=frame_rate:\n            return None\n        x+=Fraction(int(fr)*1000,frame_rate)\n    return (x*2+1)//2\ndef check(label, actual, expected):\n    observations.append({\"check\": label, \"actual\": actual, \"expected\": expected, \"passed\": actual == expected})\nfixtures = [[('regression: frame metric scale', ['3f', 16, 1000], 188), ('regression variant: frame metric scale', ['15f', 16, 1000], 938), ('partial repair probe: frame metric scale', ['1.5f', 16, 1000], 94), ('partial repair variant: frame metric scale', ['1f', 40, 90000], 25), ('boundary control', ['10t', 25, 1000], 10), ('boundary control', ['00:00:00:25', 25, 1000], None), ('normal control', ['00:00:01:15', 16, 1000], 1938), ('normal control', ['10:59:59:15', 40, 1000], 39599375), ('normal control', ['01:60:59:30', 50, 10000000], None)], [('regression: frame metric scale', ['1.5f', 16, 1000], 94), ('regression variant: frame metric scale', ['12.25f', 16, 10000000], 766), ('partial repair probe: frame metric scale', ['2f', 24, 3], 83), ('partial repair variant: frame metric scale', ['2f', 16, 1000], 125), ('boundary control', ['00:00:01:15', 16, 1000], 1938), ('boundary control', ['10t', 25, 1000], 10), ('normal control', ['0ms', 16, 90000], 0), ('normal control', ['2t', 30, 3], 667), ('normal control', ['0.001t', 24, 1000], 0)], [('regression: frame metric scale', ['7f', 16, 10000000], 438), ('regression variant: frame metric scale', ['2f', 30, 1000], 67), ('partial repair probe: frame metric scale', ['3f', 50, 3], 60), ('partial repair variant: frame metric scale', ['7f', 16, 90000], 438), ('boundary control', ['00:00:01.0005', 25, 1000], 1001), ('boundary control', ['00:00:01:15', 16, 1000], 1938), ('normal control', ['0f', 24, 90000], 0), ('normal control', ['10:30:00:25', 16, 10000000], None), ('normal control', ['15t', 30, 3], 5000)], [('regression: frame metric scale', ['17f', 30, 90000], 567), ('regression variant: frame metric scale', ['7f', 16, 3], 438), ('partial repair probe: frame metric scale', ['3f', 50, 3], 60), ('partial repair variant: frame metric scale', ['17f', 24, 1000], 708), ('boundary control', ['00:00:00:25', 25, 1000], None), ('boundary control', ['00:00:01.0005', 25, 1000], 1001), ('normal control', ['01:60:05:12', 16, 10000000], None), ('normal control', ['100:30:05:30', 16, 10000000], None), ('normal control', ['1.5t', 16, 3], 500)], [('regression: frame metric scale', ['7f', 16, 90000], 438), ('regression variant: frame metric scale', ['3f', 16, 1000], 188), ('partial repair probe: frame metric scale', ['1f', 50, 90000], 20), ('partial repair variant: frame metric scale', ['15f', 16, 1000], 938), ('boundary control', ['10t', 25, 1000], 10), ('boundary control', ['00:00:00:25', 25, 1000], None), ('normal control', ['10:00:00.25', 16, 3], 36000250), ('normal control', ['2ms', 40, 90000], 2), ('normal control', ['01:30:05:25', 16, 90000], None)]]\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":"3a1e7278ab726f17eddcff98196957ce70f92d557b092f73a9ad591982abfc4a","source":"\"\"\"Failure Map reference implementation. Python standard library only.\"\"\"\nimport json\nimport math\nimport re\nfrom fractions import Fraction\nN = 1\nobservations = []\ndef solve(expr, frame_rate, tick_rate):\n    m=re.fullmatch(r'(\\d+(?:\\.\\d+)?)(h|ms|m|s|f|t)',expr)\n    if m:\n        v=Fraction(m.group(1))\n        unit=m.group(2)\n        scale={'h':3600000,'m':60000,'s':1000,'ms':1}\n        if unit in scale:\n            x=v*scale[unit]\n        elif unit=='f':\n            x=v*1000//frame_rate\n        else:\n            x=v*1000/tick_rate\n        return math.floor(x+Fraction(1,2))\n    m=re.fullmatch(r'(\\d{2,}):(\\d{2}):(\\d{2})(?:\\.(\\d+)|:(\\d{2,}))?',expr)\n    if not m:\n        return None\n    h,mi,se,frac,fr=m.groups()\n    if int(mi)>59 or int(se)>59:\n        return None\n    x=Fraction(int(h)*3600+int(mi)*60+int(se))*1000\n    if frac:\n        x+=Fraction('0.'+frac)*1000\n    if fr:\n        if int(fr)>=frame_rate:\n            return None\n        x+=Fraction(int(fr)*1000,frame_rate)\n    return (x*2+1)//2\ndef check(label, actual, expected):\n    observations.append({\"check\": label, \"actual\": actual, \"expected\": expected, \"passed\": actual == expected})\nfixtures = [[('regression: frame metric scale', ['3f', 16, 1000], 188), ('regression variant: frame metric scale', ['15f', 16, 1000], 938), ('partial repair probe: frame metric scale', ['1.5f', 16, 1000], 94), ('partial repair variant: frame metric scale', ['1f', 40, 90000], 25), ('boundary control', ['10t', 25, 1000], 10), ('boundary control', ['00:00:00:25', 25, 1000], None), ('normal control', ['00:00:01:15', 16, 1000], 1938), ('normal control', ['10:59:59:15', 40, 1000], 39599375), ('normal control', ['01:60:59:30', 50, 10000000], None)], [('regression: frame metric scale', ['1.5f', 16, 1000], 94), ('regression variant: frame metric scale', ['12.25f', 16, 10000000], 766), ('partial repair probe: frame metric scale', ['2f', 24, 3], 83), ('partial repair variant: frame metric scale', ['2f', 16, 1000], 125), ('boundary control', ['00:00:01:15', 16, 1000], 1938), ('boundary control', ['10t', 25, 1000], 10), ('normal control', ['0ms', 16, 90000], 0), ('normal control', ['2t', 30, 3], 667), ('normal control', ['0.001t', 24, 1000], 0)], [('regression: frame metric scale', ['7f', 16, 10000000], 438), ('regression variant: frame metric scale', ['2f', 30, 1000], 67), ('partial repair probe: frame metric scale', ['3f', 50, 3], 60), ('partial repair variant: frame metric scale', ['7f', 16, 90000], 438), ('boundary control', ['00:00:01.0005', 25, 1000], 1001), ('boundary control', ['00:00:01:15', 16, 1000], 1938), ('normal control', ['0f', 24, 90000], 0), ('normal control', ['10:30:00:25', 16, 10000000], None), ('normal control', ['15t', 30, 3], 5000)], [('regression: frame metric scale', ['17f', 30, 90000], 567), ('regression variant: frame metric scale', ['7f', 16, 3], 438), ('partial repair probe: frame metric scale', ['3f', 50, 3], 60), ('partial repair variant: frame metric scale', ['17f', 24, 1000], 708), ('boundary control', ['00:00:00:25', 25, 1000], None), ('boundary control', ['00:00:01.0005', 25, 1000], 1001), ('normal control', ['01:60:05:12', 16, 10000000], None), ('normal control', ['100:30:05:30', 16, 10000000], None), ('normal control', ['1.5t', 16, 3], 500)], [('regression: frame metric scale', ['7f', 16, 90000], 438), ('regression variant: frame metric scale', ['3f', 16, 1000], 188), ('partial repair probe: frame metric scale', ['1f', 50, 90000], 20), ('partial repair variant: frame metric scale', ['15f', 16, 1000], 938), ('boundary control', ['10t', 25, 1000], 10), ('boundary control', ['00:00:00:25', 25, 1000], None), ('normal control', ['10:00:00.25', 16, 3], 36000250), ('normal control', ['2ms', 40, 90000], 2), ('normal control', ['01:30:05:25', 16, 90000], None)]]\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":"a551cd5895fe5f60213b3c77ce1422b9dcb65c21471bf00ae197ffb86cd8d12a","source":"\"\"\"Failure Map reference implementation. Python standard library only.\"\"\"\nimport json\nimport math\nimport re\nfrom fractions import Fraction\nN = 1\nobservations = []\ndef solve(expr, frame_rate, tick_rate):\n    m=re.fullmatch(r'(\\d+(?:\\.\\d+)?)(h|ms|m|s|f|t)',expr)\n    if m:\n        v=Fraction(m.group(1))\n        unit=m.group(2)\n        scale={'h':3600000,'m':60000,'s':1000,'ms':1}\n        if unit in scale:\n            x=v*scale[unit]\n        elif unit=='f':\n            x=v*1000/frame_rate\n        else:\n            x=v*1000/tick_rate\n        return math.floor(x+Fraction(1,2))\n    m=re.fullmatch(r'(\\d{2,}):(\\d{2}):(\\d{2})(?:\\.(\\d+)|:(\\d{2,}))?',expr)\n    if not m:\n        return None\n    h,mi,se,frac,fr=m.groups()\n    if int(mi)>59 or int(se)>59:\n        return None\n    x=Fraction(int(h)*3600+int(mi)*60+int(se))*1000\n    if frac:\n        x+=Fraction('0.'+frac)*1000\n    if fr:\n        if int(fr)>=frame_rate:\n            return None\n        x+=Fraction(int(fr)*1000,frame_rate)\n    return (x*2+1)//2\ndef check(label, actual, expected):\n    observations.append({\"check\": label, \"actual\": actual, \"expected\": expected, \"passed\": actual == expected})\nfixtures = [[('regression: frame metric scale', ['3f', 16, 1000], 188), ('regression variant: frame metric scale', ['15f', 16, 1000], 938), ('partial repair probe: frame metric scale', ['1.5f', 16, 1000], 94), ('partial repair variant: frame metric scale', ['1f', 40, 90000], 25), ('boundary control', ['10t', 25, 1000], 10), ('boundary control', ['00:00:00:25', 25, 1000], None), ('normal control', ['00:00:01:15', 16, 1000], 1938), ('normal control', ['10:59:59:15', 40, 1000], 39599375), ('normal control', ['01:60:59:30', 50, 10000000], None)], [('regression: frame metric scale', ['1.5f', 16, 1000], 94), ('regression variant: frame metric scale', ['12.25f', 16, 10000000], 766), ('partial repair probe: frame metric scale', ['2f', 24, 3], 83), ('partial repair variant: frame metric scale', ['2f', 16, 1000], 125), ('boundary control', ['00:00:01:15', 16, 1000], 1938), ('boundary control', ['10t', 25, 1000], 10), ('normal control', ['0ms', 16, 90000], 0), ('normal control', ['2t', 30, 3], 667), ('normal control', ['0.001t', 24, 1000], 0)], [('regression: frame metric scale', ['7f', 16, 10000000], 438), ('regression variant: frame metric scale', ['2f', 30, 1000], 67), ('partial repair probe: frame metric scale', ['3f', 50, 3], 60), ('partial repair variant: frame metric scale', ['7f', 16, 90000], 438), ('boundary control', ['00:00:01.0005', 25, 1000], 1001), ('boundary control', ['00:00:01:15', 16, 1000], 1938), ('normal control', ['0f', 24, 90000], 0), ('normal control', ['10:30:00:25', 16, 10000000], None), ('normal control', ['15t', 30, 3], 5000)], [('regression: frame metric scale', ['17f', 30, 90000], 567), ('regression variant: frame metric scale', ['7f', 16, 3], 438), ('partial repair probe: frame metric scale', ['3f', 50, 3], 60), ('partial repair variant: frame metric scale', ['17f', 24, 1000], 708), ('boundary control', ['00:00:00:25', 25, 1000], None), ('boundary control', ['00:00:01.0005', 25, 1000], 1001), ('normal control', ['01:60:05:12', 16, 10000000], None), ('normal control', ['100:30:05:30', 16, 10000000], None), ('normal control', ['1.5t', 16, 3], 500)], [('regression: frame metric scale', ['7f', 16, 90000], 438), ('regression variant: frame metric scale', ['3f', 16, 1000], 188), ('partial repair probe: frame metric scale', ['1f', 50, 90000], 20), ('partial repair variant: frame metric scale', ['15f', 16, 1000], 938), ('boundary control', ['10t', 25, 1000], 10), ('boundary control', ['00:00:00:25', 25, 1000], None), ('normal control', ['10:00:00.25', 16, 3], 36000250), ('normal control', ['2ms', 40, 90000], 2), ('normal control', ['01:30:05:25', 16, 90000], None)]]\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-ttml-time-expression-frame-metric-scale","generated_at":"2026-09-29T14:49:33.063988+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":"Keep the exact quotient and round once at the end.","root_cause":"The frame offset uses floor division before the final half-up rounding.","sha256":"f2eae7ddcfd7d9ad58d5fcddd6e498056396bb7711a459cbc9341bdaa834e6c1","title":"Timed-text time expression evaluation: frame metric scale · case 01","variant":1,"variant_policy":"Five numbered records share a model and may reuse boundary fixtures.","verification":{"attempt":{"elapsed_ms":45.638,"exit_code":1,"observations":[{"actual":100,"check":"regression: frame metric scale","expected":188,"passed":false},{"actual":500,"check":"regression variant: frame metric scale","expected":938,"passed":false},{"actual":50,"check":"partial repair probe: frame metric scale","expected":94,"passed":false},{"actual":33,"check":"partial repair variant: frame metric scale","expected":25,"passed":false},{"actual":10,"check":"boundary control","expected":10,"passed":true},{"actual":null,"check":"boundary control","expected":null,"passed":true},{"actual":1938,"check":"normal control","expected":1938,"passed":true},{"actual":39599375,"check":"normal control","expected":39599375,"passed":true},{"actual":null,"check":"normal control","expected":null,"passed":true}],"passed":false,"stderr":"","stdout":"{\"observations\": [{\"check\": \"regression: frame metric scale\", \"actual\": 100, \"expected\": 188, \"passed\": false}, {\"check\": \"regression variant: frame metric scale\", \"actual\": 500, \"expected\": 938, \"passed\": false}, {\"check\": \"partial repair probe: frame metric scale\", \"actual\": 50, \"expected\": 94, \"passed\": false}, {\"check\": \"partial repair variant: frame metric scale\", \"actual\": 33, \"expected\": 25, \"passed\": false}, {\"check\": \"boundary control\", \"actual\": 10, \"expected\": 10, \"passed\": true}, {\"check\": \"boundary control\", \"actual\": null, \"expected\": null, \"passed\": true}, {\"check\": \"normal control\", \"actual\": 1938, \"expected\": 1938, \"passed\": true}, {\"check\": \"normal control\", \"actual\": 39599375, \"expected\": 39599375, \"passed\": true}, {\"check\": \"normal control\", \"actual\": null, \"expected\": null, \"passed\": true}], \"passed\": false}\n"},"broken":{"elapsed_ms":41.118,"exit_code":1,"observations":[{"actual":187,"check":"regression: frame metric scale","expected":188,"passed":false},{"actual":937,"check":"regression variant: frame metric scale","expected":938,"passed":false},{"actual":93,"check":"partial repair probe: frame metric scale","expected":94,"passed":false},{"actual":25,"check":"partial repair variant: frame metric scale","expected":25,"passed":true},{"actual":10,"check":"boundary control","expected":10,"passed":true},{"actual":null,"check":"boundary control","expected":null,"passed":true},{"actual":1938,"check":"normal control","expected":1938,"passed":true},{"actual":39599375,"check":"normal control","expected":39599375,"passed":true},{"actual":null,"check":"normal control","expected":null,"passed":true}],"passed":false,"stderr":"","stdout":"{\"observations\": [{\"check\": \"regression: frame metric scale\", \"actual\": 187, \"expected\": 188, \"passed\": false}, {\"check\": \"regression variant: frame metric scale\", \"actual\": 937, \"expected\": 938, \"passed\": false}, {\"check\": \"partial repair probe: frame metric scale\", \"actual\": 93, \"expected\": 94, \"passed\": false}, {\"check\": \"partial repair variant: frame metric scale\", \"actual\": 25, \"expected\": 25, \"passed\": true}, {\"check\": \"boundary control\", \"actual\": 10, \"expected\": 10, \"passed\": true}, {\"check\": \"boundary control\", \"actual\": null, \"expected\": null, \"passed\": true}, {\"check\": \"normal control\", \"actual\": 1938, \"expected\": 1938, \"passed\": true}, {\"check\": \"normal control\", \"actual\": 39599375, \"expected\": 39599375, \"passed\": true}, {\"check\": \"normal control\", \"actual\": null, \"expected\": null, \"passed\": true}], \"passed\": false}\n"},"fixed":{"elapsed_ms":51.242,"exit_code":0,"observations":[{"actual":188,"check":"regression: frame metric scale","expected":188,"passed":true},{"actual":938,"check":"regression variant: frame metric scale","expected":938,"passed":true},{"actual":94,"check":"partial repair probe: frame metric scale","expected":94,"passed":true},{"actual":25,"check":"partial repair variant: frame metric scale","expected":25,"passed":true},{"actual":10,"check":"boundary control","expected":10,"passed":true},{"actual":null,"check":"boundary control","expected":null,"passed":true},{"actual":1938,"check":"normal control","expected":1938,"passed":true},{"actual":39599375,"check":"normal control","expected":39599375,"passed":true},{"actual":null,"check":"normal control","expected":null,"passed":true}],"passed":true,"stderr":"","stdout":"{\"observations\": [{\"check\": \"regression: frame metric scale\", \"actual\": 188, \"expected\": 188, \"passed\": true}, {\"check\": \"regression variant: frame metric scale\", \"actual\": 938, \"expected\": 938, \"passed\": true}, {\"check\": \"partial repair probe: frame metric scale\", \"actual\": 94, \"expected\": 94, \"passed\": true}, {\"check\": \"partial repair variant: frame metric scale\", \"actual\": 25, \"expected\": 25, \"passed\": true}, {\"check\": \"boundary control\", \"actual\": 10, \"expected\": 10, \"passed\": true}, {\"check\": \"boundary control\", \"actual\": null, \"expected\": null, \"passed\": true}, {\"check\": \"normal control\", \"actual\": 1938, \"expected\": 1938, \"passed\": true}, {\"check\": \"normal control\", \"actual\": 39599375, \"expected\": 39599375, \"passed\": true}, {\"check\": \"normal control\", \"actual\": null, \"expected\": null, \"passed\": true}], \"passed\": true}\n"}},"verified":true,"visibility":"public"}