{"abstract":"Slow-motion events are a frame short on the record side.","category":"Broadcast timecode arithmetic","checks":9,"contract":"event [src_in, src_out, rec_in, speed_percent] with non-drop labels at fps; src_out is exclusive and may cross midnight. Record duration = source frames * 100 / |speed| rounded half up (reverse speeds use the magnitude; speed 0 returns None). Return [record_out label (exclusive, wrapped at 24 h), record duration].","contract_signature":"event, fps","evaluation_group":"w2-broadcast-timecode-arithmetic-edl-speed-event","failed_approach":"Half-to-even rounding still shortens some exact half-frame durations.","family":"w2-broadcast-timecode-arithmetic-edl-speed-event-duration-rounding","id":"FA-78496","implementations":{"attempt":{"sha256":"ec5f3bfcadcb2553ec0e05d06a9c8b98baba591abcafd84e0ad14fc228c762ad","source":"\"\"\"Failure Map reference implementation. Python standard library only.\"\"\"\nimport json\n\nN = 1\nobservations = []\ndef solve(event, fps):\n    def fr(t):\n        h,m,s,f=map(int,t.split(':'))\n        return ((h*60+m)*60+s)*fps+f\n    def tc(n):\n        n%=86400*fps\n        return '%02d:%02d:%02d:%02d'%(n//(3600*fps),n//(60*fps)%60,n//fps%60,n%fps)\n    src_in,src_out,rec_in,speed=event\n    if speed==0:\n        return None\n    sp=abs(speed)\n    dur=(fr(src_out)-fr(src_in))%(86400*fps)\n    rec=round(dur*100/sp)\n    return [tc(fr(rec_in)+rec),rec]\ndef check(label, actual, expected):\n    observations.append({\"check\": label, \"actual\": actual, \"expected\": expected, \"passed\": actual == expected})\nfixtures = [[('regression: duration rounding', [['00:00:00:00', '00:00:00:03', '00:00:00:00', 200], 30], ['00:00:00:02', 2]), ('regression variant: duration rounding', [['00:29:00:12', '23:29:59:12', '00:59:01:00', 33], 25], ['22:43:48:22', 6277197]), ('partial repair probe: duration rounding', [['10:29:59:24', '10:00:00:12', '23:29:59:01', -200], 25], ['11:14:59:08', 1057507]), ('partial repair variant: duration rounding', [['01:59:01:24', '10:00:30:24', '23:29:30:01', 200], 25], ['03:30:14:14', 361113]), ('boundary control', [['01:00:00:00', '01:00:01:00', '10:00:00:00', 50], 25], ['10:00:02:00', 50]), ('boundary control', [['23:59:59:00', '00:00:01:00', '00:00:00:00', 100], 25], ['00:00:02:00', 50]), ('normal control', [['00:01:59:01', '23:00:00:00', '23:00:01:12', 33], 25], ['20:35:49:21', 6263709]), ('normal control', [['00:29:01:12', '10:00:59:01', '23:00:59:01', -100], 24], ['08:32:56:14', 823621]), ('normal control', [['01:59:30:12', '23:00:01:24', '23:00:30:01', 100], 25], ['20:01:01:13', 1890787])], [('regression: duration rounding', [['10:01:00:12', '00:00:01:00', '23:29:30:24', 200], 25], ['06:29:01:06', 629257]), ('regression variant: duration rounding', [['10:29:59:24', '01:00:01:24', '00:59:01:24', 75], 25], ['20:19:04:16', 1740067]), ('partial repair probe: duration rounding', [['10:00:30:00', '10:01:00:29', '23:00:01:00', -200], 30], ['23:00:16:15', 465]), ('partial repair variant: duration rounding', [['00:00:01:12', '00:01:59:01', '01:00:01:23', -200], 24], ['01:01:00:18', 1411]), ('boundary control', [['23:59:59:00', '00:00:01:00', '00:00:00:00', 100], 25], ['00:00:02:00', 50]), ('boundary control', [['01:00:00:00', '01:00:01:00', '10:00:00:00', 50], 25], ['10:00:02:00', 50]), ('normal control', [['23:01:01:01', '01:59:01:29', '23:59:01:01', 250], 30], ['01:10:13:12', 128171]), ('normal control', [['23:01:01:00', '00:00:30:23', '01:01:30:01', 100], 24], ['02:01:00:00', 85679]), ('normal control', [['10:59:00:23', '00:00:30:00', '23:00:30:00', -50], 24], ['01:03:28:02', 2250674])], [('regression: duration rounding', [['23:01:00:00', '01:01:00:23', '01:00:30:12', 75], 24], ['03:40:31:19', 230431]), ('regression variant: duration rounding', [['23:29:01:00', '23:59:00:23', '23:29:59:01', -200], 24], ['23:44:59:01', 21600]), ('partial repair probe: duration rounding', [['23:00:59:00', '00:01:59:01', '23:00:59:01', 200], 30], ['23:31:29:02', 54901]), ('partial repair variant: duration rounding', [['10:59:30:00', '01:59:00:29', '23:59:59:00', 200], 30], ['07:29:44:15', 809565]), ('boundary control', [['01:00:00:00', '01:00:01:00', '10:00:00:00', 50], 25], ['10:00:02:00', 50]), ('boundary control', [['23:59:59:00', '00:00:01:00', '00:00:00:00', 100], 25], ['00:00:02:00', 50]), ('normal control', [['23:29:00:00', '23:59:00:23', '00:59:00:01', 0], 24], None), ('normal control', [['23:59:30:01', '00:00:01:01', '00:59:01:00', 75], 24], ['00:59:42:08', 992]), ('normal control', [['10:00:30:01', '23:00:00:01', '23:29:01:01', 100], 30], ['12:28:31:01', 1403100])], [('regression: duration rounding', [['01:59:30:00', '00:59:01:01', '23:29:59:00', 200], 30], ['10:59:44:16', 1241566]), ('regression variant: duration rounding', [['10:59:00:01', '10:29:59:00', '00:01:30:00', 150], 25], ['15:42:09:08', 1410983]), ('partial repair probe: duration rounding', [['10:59:30:00', '00:00:00:01', '00:59:00:23', -200], 24], ['07:29:16:00', 561961]), ('partial repair variant: duration rounding', [['23:00:59:01', '01:29:01:00', '23:01:59:12', -200], 25], ['00:16:00:12', 111025]), ('boundary control', [['23:59:59:00', '00:00:01:00', '00:00:00:00', 100], 25], ['00:00:02:00', 50]), ('boundary control', [['01:00:00:00', '01:00:01:00', '10:00:00:00', 50], 25], ['10:00:02:00', 50]), ('normal control', [['00:29:59:01', '01:59:30:24', '00:01:59:12', 200], 25], ['00:46:45:11', 67149]), ('normal control', [['01:01:30:01', '10:59:01:01', '23:59:59:01', 100], 25], ['09:57:30:01', 896275]), ('normal control', [['00:29:59:12', '00:59:01:12', '01:29:00:12', 75], 24], ['02:07:43:04', 55744])], [('regression: duration rounding', [['10:29:30:23', '23:59:59:00', '00:59:30:01', -200], 24], ['07:44:44:02', 583537]), ('regression variant: duration rounding', [['10:01:30:12', '01:00:00:12', '00:59:59:01', 33], 25], ['22:22:42:17', 4084091]), ('partial repair probe: duration rounding', [['00:00:59:01', '10:00:01:00', '00:00:30:12', -200], 25], ['05:00:01:12', 449275]), ('partial repair variant: duration rounding', [['01:29:30:00', '23:01:30:01', '23:00:30:29', -200], 30], ['09:46:31:00', 1162801]), ('boundary control', [['01:00:00:00', '01:00:01:00', '10:00:00:00', 50], 25], ['10:00:02:00', 50]), ('boundary control', [['23:59:59:00', '00:00:01:00', '00:00:00:00', 100], 25], ['00:00:02:00', 50]), ('normal control', [['01:00:59:24', '00:00:01:00', '00:59:59:01', -50], 25], ['22:58:01:03', 4137052]), ('normal control', [['23:00:01:00', '10:01:59:01', '01:00:30:24', 0], 25], None), ('normal control', [['00:01:59:23', '00:01:30:23', '23:59:00:12', -50], 24], ['23:58:02:12', 4145808])]]\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":"d84b4089e3bb0ab7316b361a77a29b44723509553138fb146fcf86d05c344e53","source":"\"\"\"Failure Map reference implementation. Python standard library only.\"\"\"\nimport json\n\nN = 1\nobservations = []\ndef solve(event, fps):\n    def fr(t):\n        h,m,s,f=map(int,t.split(':'))\n        return ((h*60+m)*60+s)*fps+f\n    def tc(n):\n        n%=86400*fps\n        return '%02d:%02d:%02d:%02d'%(n//(3600*fps),n//(60*fps)%60,n//fps%60,n%fps)\n    src_in,src_out,rec_in,speed=event\n    if speed==0:\n        return None\n    sp=abs(speed)\n    dur=(fr(src_out)-fr(src_in))%(86400*fps)\n    rec=dur*100//sp\n    return [tc(fr(rec_in)+rec),rec]\ndef check(label, actual, expected):\n    observations.append({\"check\": label, \"actual\": actual, \"expected\": expected, \"passed\": actual == expected})\nfixtures = [[('regression: duration rounding', [['00:00:00:00', '00:00:00:03', '00:00:00:00', 200], 30], ['00:00:00:02', 2]), ('regression variant: duration rounding', [['00:29:00:12', '23:29:59:12', '00:59:01:00', 33], 25], ['22:43:48:22', 6277197]), ('partial repair probe: duration rounding', [['10:29:59:24', '10:00:00:12', '23:29:59:01', -200], 25], ['11:14:59:08', 1057507]), ('partial repair variant: duration rounding', [['01:59:01:24', '10:00:30:24', '23:29:30:01', 200], 25], ['03:30:14:14', 361113]), ('boundary control', [['01:00:00:00', '01:00:01:00', '10:00:00:00', 50], 25], ['10:00:02:00', 50]), ('boundary control', [['23:59:59:00', '00:00:01:00', '00:00:00:00', 100], 25], ['00:00:02:00', 50]), ('normal control', [['00:01:59:01', '23:00:00:00', '23:00:01:12', 33], 25], ['20:35:49:21', 6263709]), ('normal control', [['00:29:01:12', '10:00:59:01', '23:00:59:01', -100], 24], ['08:32:56:14', 823621]), ('normal control', [['01:59:30:12', '23:00:01:24', '23:00:30:01', 100], 25], ['20:01:01:13', 1890787])], [('regression: duration rounding', [['10:01:00:12', '00:00:01:00', '23:29:30:24', 200], 25], ['06:29:01:06', 629257]), ('regression variant: duration rounding', [['10:29:59:24', '01:00:01:24', '00:59:01:24', 75], 25], ['20:19:04:16', 1740067]), ('partial repair probe: duration rounding', [['10:00:30:00', '10:01:00:29', '23:00:01:00', -200], 30], ['23:00:16:15', 465]), ('partial repair variant: duration rounding', [['00:00:01:12', '00:01:59:01', '01:00:01:23', -200], 24], ['01:01:00:18', 1411]), ('boundary control', [['23:59:59:00', '00:00:01:00', '00:00:00:00', 100], 25], ['00:00:02:00', 50]), ('boundary control', [['01:00:00:00', '01:00:01:00', '10:00:00:00', 50], 25], ['10:00:02:00', 50]), ('normal control', [['23:01:01:01', '01:59:01:29', '23:59:01:01', 250], 30], ['01:10:13:12', 128171]), ('normal control', [['23:01:01:00', '00:00:30:23', '01:01:30:01', 100], 24], ['02:01:00:00', 85679]), ('normal control', [['10:59:00:23', '00:00:30:00', '23:00:30:00', -50], 24], ['01:03:28:02', 2250674])], [('regression: duration rounding', [['23:01:00:00', '01:01:00:23', '01:00:30:12', 75], 24], ['03:40:31:19', 230431]), ('regression variant: duration rounding', [['23:29:01:00', '23:59:00:23', '23:29:59:01', -200], 24], ['23:44:59:01', 21600]), ('partial repair probe: duration rounding', [['23:00:59:00', '00:01:59:01', '23:00:59:01', 200], 30], ['23:31:29:02', 54901]), ('partial repair variant: duration rounding', [['10:59:30:00', '01:59:00:29', '23:59:59:00', 200], 30], ['07:29:44:15', 809565]), ('boundary control', [['01:00:00:00', '01:00:01:00', '10:00:00:00', 50], 25], ['10:00:02:00', 50]), ('boundary control', [['23:59:59:00', '00:00:01:00', '00:00:00:00', 100], 25], ['00:00:02:00', 50]), ('normal control', [['23:29:00:00', '23:59:00:23', '00:59:00:01', 0], 24], None), ('normal control', [['23:59:30:01', '00:00:01:01', '00:59:01:00', 75], 24], ['00:59:42:08', 992]), ('normal control', [['10:00:30:01', '23:00:00:01', '23:29:01:01', 100], 30], ['12:28:31:01', 1403100])], [('regression: duration rounding', [['01:59:30:00', '00:59:01:01', '23:29:59:00', 200], 30], ['10:59:44:16', 1241566]), ('regression variant: duration rounding', [['10:59:00:01', '10:29:59:00', '00:01:30:00', 150], 25], ['15:42:09:08', 1410983]), ('partial repair probe: duration rounding', [['10:59:30:00', '00:00:00:01', '00:59:00:23', -200], 24], ['07:29:16:00', 561961]), ('partial repair variant: duration rounding', [['23:00:59:01', '01:29:01:00', '23:01:59:12', -200], 25], ['00:16:00:12', 111025]), ('boundary control', [['23:59:59:00', '00:00:01:00', '00:00:00:00', 100], 25], ['00:00:02:00', 50]), ('boundary control', [['01:00:00:00', '01:00:01:00', '10:00:00:00', 50], 25], ['10:00:02:00', 50]), ('normal control', [['00:29:59:01', '01:59:30:24', '00:01:59:12', 200], 25], ['00:46:45:11', 67149]), ('normal control', [['01:01:30:01', '10:59:01:01', '23:59:59:01', 100], 25], ['09:57:30:01', 896275]), ('normal control', [['00:29:59:12', '00:59:01:12', '01:29:00:12', 75], 24], ['02:07:43:04', 55744])], [('regression: duration rounding', [['10:29:30:23', '23:59:59:00', '00:59:30:01', -200], 24], ['07:44:44:02', 583537]), ('regression variant: duration rounding', [['10:01:30:12', '01:00:00:12', '00:59:59:01', 33], 25], ['22:22:42:17', 4084091]), ('partial repair probe: duration rounding', [['00:00:59:01', '10:00:01:00', '00:00:30:12', -200], 25], ['05:00:01:12', 449275]), ('partial repair variant: duration rounding', [['01:29:30:00', '23:01:30:01', '23:00:30:29', -200], 30], ['09:46:31:00', 1162801]), ('boundary control', [['01:00:00:00', '01:00:01:00', '10:00:00:00', 50], 25], ['10:00:02:00', 50]), ('boundary control', [['23:59:59:00', '00:00:01:00', '00:00:00:00', 100], 25], ['00:00:02:00', 50]), ('normal control', [['01:00:59:24', '00:00:01:00', '00:59:59:01', -50], 25], ['22:58:01:03', 4137052]), ('normal control', [['23:00:01:00', '10:01:59:01', '01:00:30:24', 0], 25], None), ('normal control', [['00:01:59:23', '00:01:30:23', '23:59:00:12', -50], 24], ['23:58:02:12', 4145808])]]\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 SMPTE or any broadcast 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-broadcast-timecode-arithmetic-edl-speed-event-duration-rounding","generated_at":"2026-09-29T14:49:35.915431+00:00","license":"CC0-1.0","python":"3.12.14","seed":1,"split":"open-access"},"relevance":"Timecode arithmetic errors misplace edits, commercial breaks and captions against the broadcast clock.","root_cause":"The record duration is floored.","sha256":"5e5a7ed02f96dbc7822b6c611fb394050eb810c283164e00d02d395bbe5325f9","title":"EDL speed-change record out: duration rounding · case 01","variant":1,"variant_policy":"Five numbered records share a model and may reuse boundary fixtures.","verified":true,"visibility":"public","verification":{"attempt":{"elapsed_ms":39.845,"exit_code":1,"observations":[{"actual":["00:00:00:02",2],"check":"regression: duration rounding","expected":["00:00:00:02",2],"passed":true},{"actual":["22:43:48:22",6277197],"check":"regression variant: duration rounding","expected":["22:43:48:22",6277197],"passed":true},{"actual":["11:14:59:07",1057506],"check":"partial repair probe: duration rounding","expected":["11:14:59:08",1057507],"passed":false},{"actual":["03:30:14:13",361112],"check":"partial repair variant: duration rounding","expected":["03:30:14:14",361113],"passed":false},{"actual":["10:00:02:00",50],"check":"boundary control","expected":["10:00:02:00",50],"passed":true},{"actual":["00:00:02:00",50],"check":"boundary control","expected":["00:00:02:00",50],"passed":true},{"actual":["20:35:49:21",6263709],"check":"normal control","expected":["20:35:49:21",6263709],"passed":true},{"actual":["08:32:56:14",823621],"check":"normal control","expected":["08:32:56:14",823621],"passed":true},{"actual":["20:01:01:13",1890787],"check":"normal control","expected":["20:01:01:13",1890787],"passed":true}],"passed":false,"stderr":"","stdout":"{\"observations\": [{\"check\": \"regression: duration rounding\", \"actual\": [\"00:00:00:02\", 2], \"expected\": [\"00:00:00:02\", 2], \"passed\": true}, {\"check\": \"regression variant: duration rounding\", \"actual\": [\"22:43:48:22\", 6277197], \"expected\": [\"22:43:48:22\", 6277197], \"passed\": true}, {\"check\": \"partial repair probe: duration rounding\", \"actual\": [\"11:14:59:07\", 1057506], \"expected\": [\"11:14:59:08\", 1057507], \"passed\": false}, {\"check\": \"partial repair variant: duration rounding\", \"actual\": [\"03:30:14:13\", 361112], \"expected\": [\"03:30:14:14\", 361113], \"passed\": false}, {\"check\": \"boundary control\", \"actual\": [\"10:00:02:00\", 50], \"expected\": [\"10:00:02:00\", 50], \"passed\": true}, {\"check\": \"boundary control\", \"actual\": [\"00:00:02:00\", 50], \"expected\": [\"00:00:02:00\", 50], \"passed\": true}, {\"check\": \"normal control\", \"actual\": [\"20:35:49:21\", 6263709], \"expected\": [\"20:35:49:21\", 6263709], \"passed\": true}, {\"check\": \"normal control\", \"actual\": [\"08:32:56:14\", 823621], \"expected\": [\"08:32:56:14\", 823621], \"passed\": true}, {\"check\": \"normal control\", \"actual\": [\"20:01:01:13\", 1890787], \"expected\": [\"20:01:01:13\", 1890787], \"passed\": true}], \"passed\": false}\n"},"broken":{"elapsed_ms":38.355,"exit_code":1,"observations":[{"actual":["00:00:00:01",1],"check":"regression: duration rounding","expected":["00:00:00:02",2],"passed":false},{"actual":["22:43:48:21",6277196],"check":"regression variant: duration rounding","expected":["22:43:48:22",6277197],"passed":false},{"actual":["11:14:59:07",1057506],"check":"partial repair probe: duration rounding","expected":["11:14:59:08",1057507],"passed":false},{"actual":["03:30:14:13",361112],"check":"partial repair variant: duration rounding","expected":["03:30:14:14",361113],"passed":false},{"actual":["10:00:02:00",50],"check":"boundary control","expected":["10:00:02:00",50],"passed":true},{"actual":["00:00:02:00",50],"check":"boundary control","expected":["00:00:02:00",50],"passed":true},{"actual":["20:35:49:21",6263709],"check":"normal control","expected":["20:35:49:21",6263709],"passed":true},{"actual":["08:32:56:14",823621],"check":"normal control","expected":["08:32:56:14",823621],"passed":true},{"actual":["20:01:01:13",1890787],"check":"normal control","expected":["20:01:01:13",1890787],"passed":true}],"passed":false,"stderr":"","stdout":"{\"observations\": [{\"check\": \"regression: duration rounding\", \"actual\": [\"00:00:00:01\", 1], \"expected\": [\"00:00:00:02\", 2], \"passed\": false}, {\"check\": \"regression variant: duration rounding\", \"actual\": [\"22:43:48:21\", 6277196], \"expected\": [\"22:43:48:22\", 6277197], \"passed\": false}, {\"check\": \"partial repair probe: duration rounding\", \"actual\": [\"11:14:59:07\", 1057506], \"expected\": [\"11:14:59:08\", 1057507], \"passed\": false}, {\"check\": \"partial repair variant: duration rounding\", \"actual\": [\"03:30:14:13\", 361112], \"expected\": [\"03:30:14:14\", 361113], \"passed\": false}, {\"check\": \"boundary control\", \"actual\": [\"10:00:02:00\", 50], \"expected\": [\"10:00:02:00\", 50], \"passed\": true}, {\"check\": \"boundary control\", \"actual\": [\"00:00:02:00\", 50], \"expected\": [\"00:00:02:00\", 50], \"passed\": true}, {\"check\": \"normal control\", \"actual\": [\"20:35:49:21\", 6263709], \"expected\": [\"20:35:49:21\", 6263709], \"passed\": true}, {\"check\": \"normal control\", \"actual\": [\"08:32:56:14\", 823621], \"expected\": [\"08:32:56:14\", 823621], \"passed\": true}, {\"check\": \"normal control\", \"actual\": [\"20:01:01:13\", 1890787], \"expected\": [\"20:01:01:13\", 1890787], \"passed\": true}], \"passed\": false}\n"}},"member_only":{"stages":["fixed"],"fields":["implementations.fixed","verification.fixed","harness","repair"],"note":"The verified repair, its recorded checks, the repair description, and the scoring harness are available to members."}}