{"abstract":"A nine-digit entry is accepted and truncated silently.","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":"Rejecting eight digits refuses a complete HHMMSSFF entry.","family":"w2-broadcast-timecode-arithmetic-entry-normalization-digit-count-limit","id":"FA-78776","implementations":{"attempt":{"sha256":"4a2e61c19b73fd93c6417903a9ac7cdf50ff95082b8f7c7378c3d0d5714c24bd","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: digit count limit', ['123456789', 25], None), ('regression variant: digit count limit', ['123456789', 30], None), ('partial repair probe: digit count limit', ['12345678', 30], '12:34:58:18'), ('partial repair variant: digit count limit', ['12345678', 25], '12:34:59:03'), ('boundary control', ['100', 25], '00:00:01:00'), ('boundary control', ['1.2.3.4', 25], '01:02:03:04'), ('normal control', ['1:2', 25], '00:00:01:02'), ('normal control', ['59.10', 24], '00:00:59:10'), ('normal control', ['59.99', 24], '00:01:03:03')], [('regression: digit count limit', ['123456789', 24], None), ('regression variant: digit count limit', ['123456789', 25], None), ('partial repair probe: digit count limit', ['12345678', 24], '12:34:59:06'), ('partial repair variant: digit count limit', ['12345678', 30], '12:34:58:18'), ('boundary control', ['1:2', 25], '00:00:01:02'), ('boundary control', ['100', 25], '00:00:01:00'), ('normal control', ['100', 30], '00:00:01:00'), ('normal control', ['0:23:23', 24], '00:00:23:23'), ('normal control', ['10', 24], '00:00:00:10')], [('regression: digit count limit', ['123456789', 30], None), ('regression variant: digit count limit', ['123456789', 24], None), ('partial repair probe: digit count limit', ['23595924', 25], '23:59:59:24'), ('partial repair variant: digit count limit', ['12345678', 24], '12:34:59:06'), ('boundary control', ['99', 25], '00:00:03:24'), ('boundary control', ['1:2', 25], '00:00:01:02'), ('normal control', ['100', 24], '00:00:01:00'), ('normal control', ['30', 24], '00:00:01:06'), ('normal control', ['61:59:59:24:0', 25], None)], [('regression: digit count limit', ['123456789', 25], None), ('regression variant: digit count limit', ['123456789', 30], None), ('partial repair probe: digit count limit', ['12345678', 25], '12:34:59:03'), ('partial repair variant: digit count limit', ['23595924', 25], '23:59:59:24'), ('boundary control', ['1.2.3.4', 25], '01:02:03:04'), ('boundary control', ['99', 25], '00:00:03:24'), ('normal control', ['1000', 24], '00:00:10:00'), ('normal control', ['23:30:30', 24], '00:23:31:06'), ('normal control', ['59.2', 24], '00:00:59:02')], [('regression: digit count limit', ['123456789', 24], None), ('regression variant: digit count limit', ['123456789', 25], None), ('partial repair probe: digit count limit', ['12345678', 30], '12:34:58:18'), ('partial repair variant: digit count limit', ['12345678', 25], '12:34:59:03'), ('boundary control', ['100', 25], '00:00:01:00'), ('boundary control', ['1.2.3.4', 25], '01:02:03:04'), ('normal control', ['1:30:10', 30], '00:01:30:10'), ('normal control', ['x1', 25], None), ('normal control', ['59:59:2', 30], '00:59:59:02')]]\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":"e2ea6164f00c000ca6df737ed4c249ce9f6401e18ea2213e17299c20313e2d47","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)>9:\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: digit count limit', ['123456789', 25], None), ('regression variant: digit count limit', ['123456789', 30], None), ('partial repair probe: digit count limit', ['12345678', 30], '12:34:58:18'), ('partial repair variant: digit count limit', ['12345678', 25], '12:34:59:03'), ('boundary control', ['100', 25], '00:00:01:00'), ('boundary control', ['1.2.3.4', 25], '01:02:03:04'), ('normal control', ['1:2', 25], '00:00:01:02'), ('normal control', ['59.10', 24], '00:00:59:10'), ('normal control', ['59.99', 24], '00:01:03:03')], [('regression: digit count limit', ['123456789', 24], None), ('regression variant: digit count limit', ['123456789', 25], None), ('partial repair probe: digit count limit', ['12345678', 24], '12:34:59:06'), ('partial repair variant: digit count limit', ['12345678', 30], '12:34:58:18'), ('boundary control', ['1:2', 25], '00:00:01:02'), ('boundary control', ['100', 25], '00:00:01:00'), ('normal control', ['100', 30], '00:00:01:00'), ('normal control', ['0:23:23', 24], '00:00:23:23'), ('normal control', ['10', 24], '00:00:00:10')], [('regression: digit count limit', ['123456789', 30], None), ('regression variant: digit count limit', ['123456789', 24], None), ('partial repair probe: digit count limit', ['23595924', 25], '23:59:59:24'), ('partial repair variant: digit count limit', ['12345678', 24], '12:34:59:06'), ('boundary control', ['99', 25], '00:00:03:24'), ('boundary control', ['1:2', 25], '00:00:01:02'), ('normal control', ['100', 24], '00:00:01:00'), ('normal control', ['30', 24], '00:00:01:06'), ('normal control', ['61:59:59:24:0', 25], None)], [('regression: digit count limit', ['123456789', 25], None), ('regression variant: digit count limit', ['123456789', 30], None), ('partial repair probe: digit count limit', ['12345678', 25], '12:34:59:03'), ('partial repair variant: digit count limit', ['23595924', 25], '23:59:59:24'), ('boundary control', ['1.2.3.4', 25], '01:02:03:04'), ('boundary control', ['99', 25], '00:00:03:24'), ('normal control', ['1000', 24], '00:00:10:00'), ('normal control', ['23:30:30', 24], '00:23:31:06'), ('normal control', ['59.2', 24], '00:00:59:02')], [('regression: digit count limit', ['123456789', 24], None), ('regression variant: digit count limit', ['123456789', 25], None), ('partial repair probe: digit count limit', ['12345678', 30], '12:34:58:18'), ('partial repair variant: digit count limit', ['12345678', 25], '12:34:59:03'), ('boundary control', ['100', 25], '00:00:01:00'), ('boundary control', ['1.2.3.4', 25], '01:02:03:04'), ('normal control', ['1:30:10', 30], '00:01:30:10'), ('normal control', ['x1', 25], None), ('normal control', ['59:59:2', 30], '00:59:59:02')]]\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":"f7dda46301ac888d94625d6ca2b26b07250a7b9e1c2bb434d1651796a0794235","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: digit count limit', ['123456789', 25], None), ('regression variant: digit count limit', ['123456789', 30], None), ('partial repair probe: digit count limit', ['12345678', 30], '12:34:58:18'), ('partial repair variant: digit count limit', ['12345678', 25], '12:34:59:03'), ('boundary control', ['100', 25], '00:00:01:00'), ('boundary control', ['1.2.3.4', 25], '01:02:03:04'), ('normal control', ['1:2', 25], '00:00:01:02'), ('normal control', ['59.10', 24], '00:00:59:10'), ('normal control', ['59.99', 24], '00:01:03:03')], [('regression: digit count limit', ['123456789', 24], None), ('regression variant: digit count limit', ['123456789', 25], None), ('partial repair probe: digit count limit', ['12345678', 24], '12:34:59:06'), ('partial repair variant: digit count limit', ['12345678', 30], '12:34:58:18'), ('boundary control', ['1:2', 25], '00:00:01:02'), ('boundary control', ['100', 25], '00:00:01:00'), ('normal control', ['100', 30], '00:00:01:00'), ('normal control', ['0:23:23', 24], '00:00:23:23'), ('normal control', ['10', 24], '00:00:00:10')], [('regression: digit count limit', ['123456789', 30], None), ('regression variant: digit count limit', ['123456789', 24], None), ('partial repair probe: digit count limit', ['23595924', 25], '23:59:59:24'), ('partial repair variant: digit count limit', ['12345678', 24], '12:34:59:06'), ('boundary control', ['99', 25], '00:00:03:24'), ('boundary control', ['1:2', 25], '00:00:01:02'), ('normal control', ['100', 24], '00:00:01:00'), ('normal control', ['30', 24], '00:00:01:06'), ('normal control', ['61:59:59:24:0', 25], None)], [('regression: digit count limit', ['123456789', 25], None), ('regression variant: digit count limit', ['123456789', 30], None), ('partial repair probe: digit count limit', ['12345678', 25], '12:34:59:03'), ('partial repair variant: digit count limit', ['23595924', 25], '23:59:59:24'), ('boundary control', ['1.2.3.4', 25], '01:02:03:04'), ('boundary control', ['99', 25], '00:00:03:24'), ('normal control', ['1000', 24], '00:00:10:00'), ('normal control', ['23:30:30', 24], '00:23:31:06'), ('normal control', ['59.2', 24], '00:00:59:02')], [('regression: digit count limit', ['123456789', 24], None), ('regression variant: digit count limit', ['123456789', 25], None), ('partial repair probe: digit count limit', ['12345678', 30], '12:34:58:18'), ('partial repair variant: digit count limit', ['12345678', 25], '12:34:59:03'), ('boundary control', ['100', 25], '00:00:01:00'), ('boundary control', ['1.2.3.4', 25], '01:02:03:04'), ('normal control', ['1:30:10', 30], '00:01:30:10'), ('normal control', ['x1', 25], None), ('normal control', ['59:59:2', 30], '00:59:59:02')]]\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-digit-count-limit","generated_at":"2026-09-29T14:49:38.562161+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":"Allow at most eight digits.","root_cause":"The digit limit allows nine digits.","sha256":"1f4601597e255cbf6a4fddff40bcaac817518530ed9aad7b4ca95f2c0cbf0eeb","title":"Operator timecode entry normalization: digit count limit · case 01","variant":1,"variant_policy":"Five numbered records share a model and may reuse boundary fixtures.","verification":{"attempt":{"elapsed_ms":41.644,"exit_code":1,"observations":[{"actual":null,"check":"regression: digit count limit","expected":null,"passed":true},{"actual":null,"check":"regression variant: digit count limit","expected":null,"passed":true},{"actual":null,"check":"partial repair probe: digit count limit","expected":"12:34:58:18","passed":false},{"actual":null,"check":"partial repair variant: digit count limit","expected":"12:34:59:03","passed":false},{"actual":"00:00:01:00","check":"boundary control","expected":"00:00:01:00","passed":true},{"actual":"01:02:03:04","check":"boundary control","expected":"01:02:03:04","passed":true},{"actual":"00:00:01:02","check":"normal control","expected":"00:00:01:02","passed":true},{"actual":"00:00:59:10","check":"normal control","expected":"00:00:59:10","passed":true},{"actual":"00:01:03:03","check":"normal control","expected":"00:01:03:03","passed":true}],"passed":false,"stderr":"","stdout":"{\"observations\": [{\"check\": \"regression: digit count limit\", \"actual\": null, \"expected\": null, \"passed\": true}, {\"check\": \"regression variant: digit count limit\", \"actual\": null, \"expected\": null, \"passed\": true}, {\"check\": \"partial repair probe: digit count limit\", \"actual\": null, \"expected\": \"12:34:58:18\", \"passed\": false}, {\"check\": \"partial repair variant: digit count limit\", \"actual\": null, \"expected\": \"12:34:59:03\", \"passed\": false}, {\"check\": \"boundary control\", \"actual\": \"00:00:01:00\", \"expected\": \"00:00:01:00\", \"passed\": true}, {\"check\": \"boundary control\", \"actual\": \"01:02:03:04\", \"expected\": \"01:02:03:04\", \"passed\": true}, {\"check\": \"normal control\", \"actual\": \"00:00:01:02\", \"expected\": \"00:00:01:02\", \"passed\": true}, {\"check\": \"normal control\", \"actual\": \"00:00:59:10\", \"expected\": \"00:00:59:10\", \"passed\": true}, {\"check\": \"normal control\", \"actual\": \"00:01:03:03\", \"expected\": \"00:01:03:03\", \"passed\": true}], \"passed\": false}\n"},"broken":{"elapsed_ms":41.068,"exit_code":1,"observations":[{"actual":"12:34:59:03","check":"regression: digit count limit","expected":null,"passed":false},{"actual":"12:34:58:18","check":"regression variant: digit count limit","expected":null,"passed":false},{"actual":"12:34:58:18","check":"partial repair probe: digit count limit","expected":"12:34:58:18","passed":true},{"actual":"12:34:59:03","check":"partial repair variant: digit count limit","expected":"12:34:59:03","passed":true},{"actual":"00:00:01:00","check":"boundary control","expected":"00:00:01:00","passed":true},{"actual":"01:02:03:04","check":"boundary control","expected":"01:02:03:04","passed":true},{"actual":"00:00:01:02","check":"normal control","expected":"00:00:01:02","passed":true},{"actual":"00:00:59:10","check":"normal control","expected":"00:00:59:10","passed":true},{"actual":"00:01:03:03","check":"normal control","expected":"00:01:03:03","passed":true}],"passed":false,"stderr":"","stdout":"{\"observations\": [{\"check\": \"regression: digit count limit\", \"actual\": \"12:34:59:03\", \"expected\": null, \"passed\": false}, {\"check\": \"regression variant: digit count limit\", \"actual\": \"12:34:58:18\", \"expected\": null, \"passed\": false}, {\"check\": \"partial repair probe: digit count limit\", \"actual\": \"12:34:58:18\", \"expected\": \"12:34:58:18\", \"passed\": true}, {\"check\": \"partial repair variant: digit count limit\", \"actual\": \"12:34:59:03\", \"expected\": \"12:34:59:03\", \"passed\": true}, {\"check\": \"boundary control\", \"actual\": \"00:00:01:00\", \"expected\": \"00:00:01:00\", \"passed\": true}, {\"check\": \"boundary control\", \"actual\": \"01:02:03:04\", \"expected\": \"01:02:03:04\", \"passed\": true}, {\"check\": \"normal control\", \"actual\": \"00:00:01:02\", \"expected\": \"00:00:01:02\", \"passed\": true}, {\"check\": \"normal control\", \"actual\": \"00:00:59:10\", \"expected\": \"00:00:59:10\", \"passed\": true}, {\"check\": \"normal control\", \"actual\": \"00:01:03:03\", \"expected\": \"00:01:03:03\", \"passed\": true}], \"passed\": false}\n"},"fixed":{"elapsed_ms":40.52,"exit_code":0,"observations":[{"actual":null,"check":"regression: digit count limit","expected":null,"passed":true},{"actual":null,"check":"regression variant: digit count limit","expected":null,"passed":true},{"actual":"12:34:58:18","check":"partial repair probe: digit count limit","expected":"12:34:58:18","passed":true},{"actual":"12:34:59:03","check":"partial repair variant: digit count limit","expected":"12:34:59:03","passed":true},{"actual":"00:00:01:00","check":"boundary control","expected":"00:00:01:00","passed":true},{"actual":"01:02:03:04","check":"boundary control","expected":"01:02:03:04","passed":true},{"actual":"00:00:01:02","check":"normal control","expected":"00:00:01:02","passed":true},{"actual":"00:00:59:10","check":"normal control","expected":"00:00:59:10","passed":true},{"actual":"00:01:03:03","check":"normal control","expected":"00:01:03:03","passed":true}],"passed":true,"stderr":"","stdout":"{\"observations\": [{\"check\": \"regression: digit count limit\", \"actual\": null, \"expected\": null, \"passed\": true}, {\"check\": \"regression variant: digit count limit\", \"actual\": null, \"expected\": null, \"passed\": true}, {\"check\": \"partial repair probe: digit count limit\", \"actual\": \"12:34:58:18\", \"expected\": \"12:34:58:18\", \"passed\": true}, {\"check\": \"partial repair variant: digit count limit\", \"actual\": \"12:34:59:03\", \"expected\": \"12:34:59:03\", \"passed\": true}, {\"check\": \"boundary control\", \"actual\": \"00:00:01:00\", \"expected\": \"00:00:01:00\", \"passed\": true}, {\"check\": \"boundary control\", \"actual\": \"01:02:03:04\", \"expected\": \"01:02:03:04\", \"passed\": true}, {\"check\": \"normal control\", \"actual\": \"00:00:01:02\", \"expected\": \"00:00:01:02\", \"passed\": true}, {\"check\": \"normal control\", \"actual\": \"00:00:59:10\", \"expected\": \"00:00:59:10\", \"passed\": true}, {\"check\": \"normal control\", \"actual\": \"00:01:03:03\", \"expected\": \"00:01:03:03\", \"passed\": true}], \"passed\": true}\n"}},"verified":true,"visibility":"public"}