{"abstract":"Typing 1:2 gives one hour and two minutes instead of one second and two frames.","category":"Broadcast timecode arithmetic","checks":9,"contract":"Normalize typed timecode. Separators \":\", \";\" and \".\" are equivalent. With separators, up to four numeric fields fill from the right (frames last). Without separators, up to eight digits are right-aligned into HH MM SS FF pairs. Field overflow carries through the total frame count, which wraps at 24 hours. Invalid entry returns None.","evaluation_group":"w2-broadcast-timecode-arithmetic-entry-normalization","failed_approach":"Keeping only the last field as frames still places the others from the left.","family":"w2-broadcast-timecode-arithmetic-entry-normalization-field-fill-side","id":"FA-78781","implementations":{"attempt":{"sha256":"8b6eb9b82673385efcff9f49d71dc03a84099371ddf147774288900c869a5a71","source":"\"\"\"Failure Map reference implementation. Python standard library only.\"\"\"\nimport json\n\nN = 1\nobservations = []\ndef solve(s, fps):\n    s=s.replace(';',':').replace('.',':')\n    if ':' in s:\n        parts=s.split(':')\n        if len(parts)>4 or not all(p.isdigit() for p in parts):\n            return None\n        vals=[int(p) for p in parts[:-1]]+[0]*(4-len(parts))+[int(parts[-1])]\n    else:\n        if not s.isdigit() or len(s)>8:\n            return None\n        d=s.zfill(8)\n        vals=[int(d[i:i+2]) for i in range(0,8,2)]\n    h,m,sec,f=vals\n    n=((h*60+m)*60+sec)*fps+f\n    n%=86400*fps\n    return '%02d:%02d:%02d:%02d'%(n//(3600*fps),n//(60*fps)%60,n//fps%60,n%fps)\ndef check(label, actual, expected):\n    observations.append({\"check\": label, \"actual\": actual, \"expected\": expected, \"passed\": actual == expected})\nfixtures = [[('regression: field fill side', ['1:2', 25], '00:00:01:02'), ('regression variant: field fill side', ['99.24.0', 24], '01:39:24:00'), ('partial repair probe: field fill side', ['59.99', 24], '00:01:03:03'), ('partial repair variant: field fill side', ['1:30:10', 30], '00:01:30:10'), ('boundary control', ['100', 25], '00:00:01:00'), ('boundary control', ['23595924', 25], '23:59:59:24'), ('normal control', ['99', 25], '00:00:03:24'), ('normal control', ['99', 24], '00:00:04:03'), ('normal control', ['100', 30], '00:00:01:00')], [('regression: field fill side', ['59.10', 24], '00:00:59:10'), ('regression variant: field fill side', ['23:30:30', 24], '00:23:31:06'), ('partial repair probe: field fill side', ['0:23:23', 24], '00:00:23:23'), ('partial repair variant: field fill side', ['59:59:2', 30], '00:59:59:02'), ('boundary control', ['99', 25], '00:00:03:24'), ('boundary control', ['100', 25], '00:00:01:00'), ('normal control', ['5959', 24], '00:01:01:11'), ('normal control', ['', 25], None), ('normal control', ['10000', 25], '00:01:00:00')], [('regression: field fill side', ['59.99', 24], '00:01:03:03'), ('regression variant: field fill side', ['59.23.99', 30], '00:59:26:09'), ('partial repair probe: field fill side', ['59:23', 24], '00:00:59:23'), ('partial repair variant: field fill side', ['23;1;1', 25], '00:23:01:01'), ('boundary control', ['1.2.3.4', 25], '01:02:03:04'), ('boundary control', ['99', 25], '00:00:03:24'), ('normal control', ['30', 24], '00:00:01:06'), ('normal control', ['1000', 24], '00:00:10:00'), ('normal control', ['2:23:61:99', 25], '02:24:04:24')], [('regression: field fill side', ['0:23:23', 24], '00:00:23:23'), ('regression variant: field fill side', ['59.2', 24], '00:00:59:02'), ('partial repair probe: field fill side', ['99.24.0', 24], '01:39:24:00'), ('partial repair variant: field fill side', ['10:30', 30], '00:00:11:00'), ('boundary control', ['23595924', 25], '23:59:59:24'), ('boundary control', ['1.2.3.4', 25], '01:02:03:04'), ('normal control', ['123456', 25], '00:12:36:06'), ('normal control', ['123456789', 25], None), ('normal control', ['x1', 24], None)], [('regression: field fill side', ['59:23', 24], '00:00:59:23'), ('regression variant: field fill side', ['1:30:10', 30], '00:01:30:10'), ('partial repair probe: field fill side', ['23:30:30', 24], '00:23:31:06'), ('partial repair variant: field fill side', ['23:59', 25], '00:00:25:09'), ('boundary control', ['100', 25], '00:00:01:00'), ('boundary control', ['23595924', 25], '23:59:59:24'), ('normal control', ['0:61:99:1:0', 30], None), ('normal control', ['59:23:23:10:10', 30], None), ('normal control', ['59.99.23.24', 24], '12:39:24:00')]]\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":"ebfd4d3ea645f5e38ffe64591d31f305891918cf71f96f20294c758faeb85a3e","source":"\"\"\"Failure Map reference implementation. Python standard library only.\"\"\"\nimport json\n\nN = 1\nobservations = []\ndef solve(s, fps):\n    s=s.replace(';',':').replace('.',':')\n    if ':' in s:\n        parts=s.split(':')\n        if len(parts)>4 or not all(p.isdigit() for p in parts):\n            return None\n        vals=[int(p) for p in parts]+[0]*(4-len(parts))\n    else:\n        if not s.isdigit() or len(s)>8:\n            return None\n        d=s.zfill(8)\n        vals=[int(d[i:i+2]) for i in range(0,8,2)]\n    h,m,sec,f=vals\n    n=((h*60+m)*60+sec)*fps+f\n    n%=86400*fps\n    return '%02d:%02d:%02d:%02d'%(n//(3600*fps),n//(60*fps)%60,n//fps%60,n%fps)\ndef check(label, actual, expected):\n    observations.append({\"check\": label, \"actual\": actual, \"expected\": expected, \"passed\": actual == expected})\nfixtures = [[('regression: field fill side', ['1:2', 25], '00:00:01:02'), ('regression variant: field fill side', ['99.24.0', 24], '01:39:24:00'), ('partial repair probe: field fill side', ['59.99', 24], '00:01:03:03'), ('partial repair variant: field fill side', ['1:30:10', 30], '00:01:30:10'), ('boundary control', ['100', 25], '00:00:01:00'), ('boundary control', ['23595924', 25], '23:59:59:24'), ('normal control', ['99', 25], '00:00:03:24'), ('normal control', ['99', 24], '00:00:04:03'), ('normal control', ['100', 30], '00:00:01:00')], [('regression: field fill side', ['59.10', 24], '00:00:59:10'), ('regression variant: field fill side', ['23:30:30', 24], '00:23:31:06'), ('partial repair probe: field fill side', ['0:23:23', 24], '00:00:23:23'), ('partial repair variant: field fill side', ['59:59:2', 30], '00:59:59:02'), ('boundary control', ['99', 25], '00:00:03:24'), ('boundary control', ['100', 25], '00:00:01:00'), ('normal control', ['5959', 24], '00:01:01:11'), ('normal control', ['', 25], None), ('normal control', ['10000', 25], '00:01:00:00')], [('regression: field fill side', ['59.99', 24], '00:01:03:03'), ('regression variant: field fill side', ['59.23.99', 30], '00:59:26:09'), ('partial repair probe: field fill side', ['59:23', 24], '00:00:59:23'), ('partial repair variant: field fill side', ['23;1;1', 25], '00:23:01:01'), ('boundary control', ['1.2.3.4', 25], '01:02:03:04'), ('boundary control', ['99', 25], '00:00:03:24'), ('normal control', ['30', 24], '00:00:01:06'), ('normal control', ['1000', 24], '00:00:10:00'), ('normal control', ['2:23:61:99', 25], '02:24:04:24')], [('regression: field fill side', ['0:23:23', 24], '00:00:23:23'), ('regression variant: field fill side', ['59.2', 24], '00:00:59:02'), ('partial repair probe: field fill side', ['99.24.0', 24], '01:39:24:00'), ('partial repair variant: field fill side', ['10:30', 30], '00:00:11:00'), ('boundary control', ['23595924', 25], '23:59:59:24'), ('boundary control', ['1.2.3.4', 25], '01:02:03:04'), ('normal control', ['123456', 25], '00:12:36:06'), ('normal control', ['123456789', 25], None), ('normal control', ['x1', 24], None)], [('regression: field fill side', ['59:23', 24], '00:00:59:23'), ('regression variant: field fill side', ['1:30:10', 30], '00:01:30:10'), ('partial repair probe: field fill side', ['23:30:30', 24], '00:23:31:06'), ('partial repair variant: field fill side', ['23:59', 25], '00:00:25:09'), ('boundary control', ['100', 25], '00:00:01:00'), ('boundary control', ['23595924', 25], '23:59:59:24'), ('normal control', ['0:61:99:1:0', 30], None), ('normal control', ['59:23:23:10:10', 30], None), ('normal control', ['59.99.23.24', 24], '12:39:24:00')]]\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":"63a450d184ec9e3836bf11e98d833692641d80d47120afbc9e5f5fb9ee148ed4","source":"\"\"\"Failure Map reference implementation. Python standard library only.\"\"\"\nimport json\n\nN = 1\nobservations = []\ndef solve(s, fps):\n    s=s.replace(';',':').replace('.',':')\n    if ':' in s:\n        parts=s.split(':')\n        if len(parts)>4 or not all(p.isdigit() for p in parts):\n            return None\n        vals=[0]*(4-len(parts))+[int(p) for p in parts]\n    else:\n        if not s.isdigit() or len(s)>8:\n            return None\n        d=s.zfill(8)\n        vals=[int(d[i:i+2]) for i in range(0,8,2)]\n    h,m,sec,f=vals\n    n=((h*60+m)*60+sec)*fps+f\n    n%=86400*fps\n    return '%02d:%02d:%02d:%02d'%(n//(3600*fps),n//(60*fps)%60,n//fps%60,n%fps)\ndef check(label, actual, expected):\n    observations.append({\"check\": label, \"actual\": actual, \"expected\": expected, \"passed\": actual == expected})\nfixtures = [[('regression: field fill side', ['1:2', 25], '00:00:01:02'), ('regression variant: field fill side', ['99.24.0', 24], '01:39:24:00'), ('partial repair probe: field fill side', ['59.99', 24], '00:01:03:03'), ('partial repair variant: field fill side', ['1:30:10', 30], '00:01:30:10'), ('boundary control', ['100', 25], '00:00:01:00'), ('boundary control', ['23595924', 25], '23:59:59:24'), ('normal control', ['99', 25], '00:00:03:24'), ('normal control', ['99', 24], '00:00:04:03'), ('normal control', ['100', 30], '00:00:01:00')], [('regression: field fill side', ['59.10', 24], '00:00:59:10'), ('regression variant: field fill side', ['23:30:30', 24], '00:23:31:06'), ('partial repair probe: field fill side', ['0:23:23', 24], '00:00:23:23'), ('partial repair variant: field fill side', ['59:59:2', 30], '00:59:59:02'), ('boundary control', ['99', 25], '00:00:03:24'), ('boundary control', ['100', 25], '00:00:01:00'), ('normal control', ['5959', 24], '00:01:01:11'), ('normal control', ['', 25], None), ('normal control', ['10000', 25], '00:01:00:00')], [('regression: field fill side', ['59.99', 24], '00:01:03:03'), ('regression variant: field fill side', ['59.23.99', 30], '00:59:26:09'), ('partial repair probe: field fill side', ['59:23', 24], '00:00:59:23'), ('partial repair variant: field fill side', ['23;1;1', 25], '00:23:01:01'), ('boundary control', ['1.2.3.4', 25], '01:02:03:04'), ('boundary control', ['99', 25], '00:00:03:24'), ('normal control', ['30', 24], '00:00:01:06'), ('normal control', ['1000', 24], '00:00:10:00'), ('normal control', ['2:23:61:99', 25], '02:24:04:24')], [('regression: field fill side', ['0:23:23', 24], '00:00:23:23'), ('regression variant: field fill side', ['59.2', 24], '00:00:59:02'), ('partial repair probe: field fill side', ['99.24.0', 24], '01:39:24:00'), ('partial repair variant: field fill side', ['10:30', 30], '00:00:11:00'), ('boundary control', ['23595924', 25], '23:59:59:24'), ('boundary control', ['1.2.3.4', 25], '01:02:03:04'), ('normal control', ['123456', 25], '00:12:36:06'), ('normal control', ['123456789', 25], None), ('normal control', ['x1', 24], None)], [('regression: field fill side', ['59:23', 24], '00:00:59:23'), ('regression variant: field fill side', ['1:30:10', 30], '00:01:30:10'), ('partial repair probe: field fill side', ['23:30:30', 24], '00:23:31:06'), ('partial repair variant: field fill side', ['23:59', 25], '00:00:25:09'), ('boundary control', ['100', 25], '00:00:01:00'), ('boundary control', ['23595924', 25], '23:59:59:24'), ('normal control', ['0:61:99:1:0', 30], None), ('normal control', ['59:23:23:10:10', 30], None), ('normal control', ['59.99.23.24', 24], '12:39:24:00')]]\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-entry-normalization-field-fill-side","generated_at":"2026-09-29T14:49:38.607521+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.","repair":"Fill separated fields from the right, frames last.","root_cause":"Separated fields are filled from the left.","sha256":"531eb3b188fa9d2b4cc4e74741fb3f17876169f9702ff8cee2e173e64a7f32af","title":"Operator timecode entry normalization: field fill side · case 01","variant":1,"variant_policy":"Five numbered records share a model and may reuse boundary fixtures.","verification":{"attempt":{"elapsed_ms":41.327,"exit_code":1,"observations":[{"actual":"01:00:00:02","check":"regression: field fill side","expected":"00:00:01:02","passed":false},{"actual":"03:24:00:00","check":"regression variant: field fill side","expected":"01:39:24:00","passed":false},{"actual":"11:00:04:03","check":"partial repair probe: field fill side","expected":"00:01:03:03","passed":false},{"actual":"01:30:00:10","check":"partial repair variant: field fill side","expected":"00:01:30:10","passed":false},{"actual":"00:00:01:00","check":"boundary control","expected":"00:00:01:00","passed":true},{"actual":"23:59:59:24","check":"boundary control","expected":"23:59:59:24","passed":true},{"actual":"00:00:03:24","check":"normal control","expected":"00:00:03:24","passed":true},{"actual":"00:00:04:03","check":"normal control","expected":"00:00:04:03","passed":true},{"actual":"00:00:01:00","check":"normal control","expected":"00:00:01:00","passed":true}],"passed":false,"stderr":"","stdout":"{\"observations\": [{\"check\": \"regression: field fill side\", \"actual\": \"01:00:00:02\", \"expected\": \"00:00:01:02\", \"passed\": false}, {\"check\": \"regression variant: field fill side\", \"actual\": \"03:24:00:00\", \"expected\": \"01:39:24:00\", \"passed\": false}, {\"check\": \"partial repair probe: field fill side\", \"actual\": \"11:00:04:03\", \"expected\": \"00:01:03:03\", \"passed\": false}, {\"check\": \"partial repair variant: field fill side\", \"actual\": \"01:30:00:10\", \"expected\": \"00:01:30:10\", \"passed\": false}, {\"check\": \"boundary control\", \"actual\": \"00:00:01:00\", \"expected\": \"00:00:01:00\", \"passed\": true}, {\"check\": \"boundary control\", \"actual\": \"23:59:59:24\", \"expected\": \"23:59:59:24\", \"passed\": true}, {\"check\": \"normal control\", \"actual\": \"00:00:03:24\", \"expected\": \"00:00:03:24\", \"passed\": true}, {\"check\": \"normal control\", \"actual\": \"00:00:04:03\", \"expected\": \"00:00:04:03\", \"passed\": true}, {\"check\": \"normal control\", \"actual\": \"00:00:01:00\", \"expected\": \"00:00:01:00\", \"passed\": true}], \"passed\": false}\n"},"broken":{"elapsed_ms":41.723,"exit_code":1,"observations":[{"actual":"01:02:00:00","check":"regression: field fill side","expected":"00:00:01:02","passed":false},{"actual":"03:24:00:00","check":"regression variant: field fill side","expected":"01:39:24:00","passed":false},{"actual":"12:39:00:00","check":"partial repair probe: field fill side","expected":"00:01:03:03","passed":false},{"actual":"01:30:10:00","check":"partial repair variant: field fill side","expected":"00:01:30:10","passed":false},{"actual":"00:00:01:00","check":"boundary control","expected":"00:00:01:00","passed":true},{"actual":"23:59:59:24","check":"boundary control","expected":"23:59:59:24","passed":true},{"actual":"00:00:03:24","check":"normal control","expected":"00:00:03:24","passed":true},{"actual":"00:00:04:03","check":"normal control","expected":"00:00:04:03","passed":true},{"actual":"00:00:01:00","check":"normal control","expected":"00:00:01:00","passed":true}],"passed":false,"stderr":"","stdout":"{\"observations\": [{\"check\": \"regression: field fill side\", \"actual\": \"01:02:00:00\", \"expected\": \"00:00:01:02\", \"passed\": false}, {\"check\": \"regression variant: field fill side\", \"actual\": \"03:24:00:00\", \"expected\": \"01:39:24:00\", \"passed\": false}, {\"check\": \"partial repair probe: field fill side\", \"actual\": \"12:39:00:00\", \"expected\": \"00:01:03:03\", \"passed\": false}, {\"check\": \"partial repair variant: field fill side\", \"actual\": \"01:30:10:00\", \"expected\": \"00:01:30:10\", \"passed\": false}, {\"check\": \"boundary control\", \"actual\": \"00:00:01:00\", \"expected\": \"00:00:01:00\", \"passed\": true}, {\"check\": \"boundary control\", \"actual\": \"23:59:59:24\", \"expected\": \"23:59:59:24\", \"passed\": true}, {\"check\": \"normal control\", \"actual\": \"00:00:03:24\", \"expected\": \"00:00:03:24\", \"passed\": true}, {\"check\": \"normal control\", \"actual\": \"00:00:04:03\", \"expected\": \"00:00:04:03\", \"passed\": true}, {\"check\": \"normal control\", \"actual\": \"00:00:01:00\", \"expected\": \"00:00:01:00\", \"passed\": true}], \"passed\": false}\n"},"fixed":{"elapsed_ms":41.122,"exit_code":0,"observations":[{"actual":"00:00:01:02","check":"regression: field fill side","expected":"00:00:01:02","passed":true},{"actual":"01:39:24:00","check":"regression variant: field fill side","expected":"01:39:24:00","passed":true},{"actual":"00:01:03:03","check":"partial repair probe: field fill side","expected":"00:01:03:03","passed":true},{"actual":"00:01:30:10","check":"partial repair variant: field fill side","expected":"00:01:30:10","passed":true},{"actual":"00:00:01:00","check":"boundary control","expected":"00:00:01:00","passed":true},{"actual":"23:59:59:24","check":"boundary control","expected":"23:59:59:24","passed":true},{"actual":"00:00:03:24","check":"normal control","expected":"00:00:03:24","passed":true},{"actual":"00:00:04:03","check":"normal control","expected":"00:00:04:03","passed":true},{"actual":"00:00:01:00","check":"normal control","expected":"00:00:01:00","passed":true}],"passed":true,"stderr":"","stdout":"{\"observations\": [{\"check\": \"regression: field fill side\", \"actual\": \"00:00:01:02\", \"expected\": \"00:00:01:02\", \"passed\": true}, {\"check\": \"regression variant: field fill side\", \"actual\": \"01:39:24:00\", \"expected\": \"01:39:24:00\", \"passed\": true}, {\"check\": \"partial repair probe: field fill side\", \"actual\": \"00:01:03:03\", \"expected\": \"00:01:03:03\", \"passed\": true}, {\"check\": \"partial repair variant: field fill side\", \"actual\": \"00:01:30:10\", \"expected\": \"00:01:30:10\", \"passed\": true}, {\"check\": \"boundary control\", \"actual\": \"00:00:01:00\", \"expected\": \"00:00:01:00\", \"passed\": true}, {\"check\": \"boundary control\", \"actual\": \"23:59:59:24\", \"expected\": \"23:59:59:24\", \"passed\": true}, {\"check\": \"normal control\", \"actual\": \"00:00:03:24\", \"expected\": \"00:00:03:24\", \"passed\": true}, {\"check\": \"normal control\", \"actual\": \"00:00:04:03\", \"expected\": \"00:00:04:03\", \"passed\": true}, {\"check\": \"normal control\", \"actual\": \"00:00:01:00\", \"expected\": \"00:00:01:00\", \"passed\": true}], \"passed\": true}\n"}},"verified":true,"visibility":"public"}