FA-78596 / Broadcast timecode arithmetic / Open access
Non-drop label to wall clock at pulled-down rates: label to ms rounding · case 01
Elapsed times are a millisecond early for many frames.
ROOT CAUSE
The millisecond conversion is floored.
VERIFIED REPAIR
Round the elapsed time half up.
Unsuccessful approach: Float rounding with half-to-even disagrees at exact halves.
Case contract
Rates "23.976", "29.97", "59.94" run at nominal*1000/1001 frames per second while labels count nominal frames per second (non-drop). mode "to_ms": label to elapsed milliseconds, rounded half up. mode "to_tc": milliseconds to the nearest frame (half up), formatted as a non-drop label wrapping at 24 hours.
Why this case matters
Timecode arithmetic errors misplace edits, commercial breaks and captions against the broadcast clock.
1 / The failure
Exit 1"""Failure Map reference implementation. Python standard library only."""
import json
N = 1
observations = []
def solve(value, rate, mode):
nominal={'23.976':24,'29.97':30,'59.94':60,'24':24,'25':25,'30':30}[rate]
den=1001 if '.' in rate else 1000
num=nominal*1000
if mode=='to_ms':
h,m,s,f=map(int,value.split(':'))
n=((h*60+m)*60+s)*nominal+f
return n*1000*den//num
n=(2*value*num+1000*den)//(2000*den)
return '%02d:%02d:%02d:%02d'%(n//(3600*nominal)%24,n//(60*nominal)%60,n//nominal%60,n%nominal)
def check(label, actual, expected):
observations.append({"check": label, "actual": actual, "expected": expected, "passed": actual == expected})
fixtures = [[('regression: label to ms rounding', ['00:00:00:01', '23.976', 'to_ms'], 42), ('regression variant: label to ms rounding', ['01:01:00:01', '23.976', 'to_ms'], 3663702), ('partial repair probe: label to ms rounding', ['01:00:00:12', '23.976', 'to_ms'], 3604101), ('partial repair variant: label to ms rounding', ['23:01:01:45', '29.97', 'to_ms'], 82945363), ('boundary control', ['01:00:00:00', '29.97', 'to_ms'], 3603600), ('boundary control', [3600000, '29.97', 'to_tc'], '00:59:56:12'), ('normal control', ['00:00:00:01', '25', 'to_ms'], 40), ('normal control', [1, '24', 'to_tc'], '00:00:00:00'), ('normal control', [1020, '24', 'to_tc'], '00:00:01:00')], [('regression: label to ms rounding', ['10:59:00:45', '23.976', 'to_ms'], 39581417), ('regression variant: label to ms rounding', ['01:01:00:15', '29.97', 'to_ms'], 3664161), ('partial repair probe: label to ms rounding', ['23:00:59:45', '29.97', 'to_ms'], 82943361), ('partial repair variant: label to ms rounding', ['01:01:01:45', '29.97', 'to_ms'], 3666163), ('boundary control', [3600000, '29.97', 'to_tc'], '00:59:56:12'), ('boundary control', ['00:00:00:01', '25', 'to_ms'], 40), ('normal control', ['10:00:01:24', '25', 'to_ms'], 36001960), ('normal control', [250, '59.94', 'to_tc'], '00:00:00:15'), ('normal control', ['01:01:01:36', '30', 'to_ms'], 3662200)], [('regression: label to ms rounding', ['01:01:01:15', '23.976', 'to_ms'], 3665287), ('regression variant: label to ms rounding', ['01:01:00:29', '29.97', 'to_ms'], 3664628), ('partial repair probe: label to ms rounding', ['23:01:59:45', '29.97', 'to_ms'], 83003421), ('partial repair variant: label to ms rounding', ['01:01:59:45', '29.97', 'to_ms'], 3724221), ('boundary control', ['00:00:00:01', '25', 'to_ms'], 40), ('boundary control', ['01:00:00:00', '29.97', 'to_ms'], 3603600), ('normal control', ['23:59:59:15', '59.94', 'to_ms'], 86485649), ('normal control', ['10:00:01:06', '30', 'to_ms'], 36001200), ('normal control', ['10:59:59:36', '30', 'to_ms'], 39600200)], [('regression: label to ms rounding', ['10:59:00:36', '59.94', 'to_ms'], 39580141), ('regression variant: label to ms rounding', ['00:01:01:01', '23.976', 'to_ms'], 61103), ('partial repair probe: label to ms rounding', ['23:01:00:15', '29.97', 'to_ms'], 82943361), ('partial repair variant: label to ms rounding', ['01:01:00:15', '29.97', 'to_ms'], 3664161), ('boundary control', ['01:00:00:00', '29.97', 'to_ms'], 3603600), ('boundary control', [3600000, '29.97', 'to_tc'], '00:59:56:12'), ('normal control', [0, '23.976', 'to_tc'], '00:00:00:00'), ('normal control', [100, '23.976', 'to_tc'], '00:00:00:02'), ('normal control', [100, '59.94', 'to_tc'], '00:00:00:06')], [('regression: label to ms rounding', ['00:01:01:15', '23.976', 'to_ms'], 61687), ('regression variant: label to ms rounding', ['10:01:00:15', '23.976', 'to_ms'], 36096686), ('partial repair probe: label to ms rounding', ['00:00:01:36', '23.976', 'to_ms'], 2503), ('partial repair variant: label to ms rounding', ['00:01:01:36', '23.976', 'to_ms'], 62563), ('boundary control', [3600000, '29.97', 'to_tc'], '00:59:56:12'), ('boundary control', ['00:00:00:01', '25', 'to_ms'], 40), ('normal control', ['10:00:01:15', '30', 'to_ms'], 36001500), ('normal control', [250, '24', 'to_tc'], '00:00:00:06'), ('normal control', [3603600, '29.97', 'to_tc'], '01:00:00:00')]]
for label, args, expected in fixtures[N-1]:
check(label, solve(*args), expected)
print(json.dumps({"observations": observations, "passed": all(x["passed"] for x in observations)}, ensure_ascii=False))
raise SystemExit(0 if all(x["passed"] for x in observations) else 1)
| Boundary fixture | Actual | Expected | Outcome |
|---|---|---|---|
| regression: label to ms rounding | 41 | 42 | Failed |
| regression variant: label to ms rounding | 3663701 | 3663702 | Failed |
| partial repair probe: label to ms rounding | 3604100 | 3604101 | Failed |
| partial repair variant: label to ms rounding | 82945362 | 82945363 | Failed |
| boundary control | 3603600 | 3603600 | Passed |
| boundary control | 00:59:56:12 | 00:59:56:12 | Passed |
| normal control | 40 | 40 | Passed |
| normal control | 00:00:00:00 | 00:00:00:00 | Passed |
| normal control | 00:00:01:00 | 00:00:01:00 | Passed |
SHA-256 / 5a0e54cab7c537a67bad43d05a83c6be34ef9356964caaeaa38bad153430c1df
2 / The unsuccessful fix
Exit 1"""Failure Map reference implementation. Python standard library only."""
import json
N = 1
observations = []
def solve(value, rate, mode):
nominal={'23.976':24,'29.97':30,'59.94':60,'24':24,'25':25,'30':30}[rate]
den=1001 if '.' in rate else 1000
num=nominal*1000
if mode=='to_ms':
h,m,s,f=map(int,value.split(':'))
n=((h*60+m)*60+s)*nominal+f
return round(n*1000*den/num)
n=(2*value*num+1000*den)//(2000*den)
return '%02d:%02d:%02d:%02d'%(n//(3600*nominal)%24,n//(60*nominal)%60,n//nominal%60,n%nominal)
def check(label, actual, expected):
observations.append({"check": label, "actual": actual, "expected": expected, "passed": actual == expected})
fixtures = [[('regression: label to ms rounding', ['00:00:00:01', '23.976', 'to_ms'], 42), ('regression variant: label to ms rounding', ['01:01:00:01', '23.976', 'to_ms'], 3663702), ('partial repair probe: label to ms rounding', ['01:00:00:12', '23.976', 'to_ms'], 3604101), ('partial repair variant: label to ms rounding', ['23:01:01:45', '29.97', 'to_ms'], 82945363), ('boundary control', ['01:00:00:00', '29.97', 'to_ms'], 3603600), ('boundary control', [3600000, '29.97', 'to_tc'], '00:59:56:12'), ('normal control', ['00:00:00:01', '25', 'to_ms'], 40), ('normal control', [1, '24', 'to_tc'], '00:00:00:00'), ('normal control', [1020, '24', 'to_tc'], '00:00:01:00')], [('regression: label to ms rounding', ['10:59:00:45', '23.976', 'to_ms'], 39581417), ('regression variant: label to ms rounding', ['01:01:00:15', '29.97', 'to_ms'], 3664161), ('partial repair probe: label to ms rounding', ['23:00:59:45', '29.97', 'to_ms'], 82943361), ('partial repair variant: label to ms rounding', ['01:01:01:45', '29.97', 'to_ms'], 3666163), ('boundary control', [3600000, '29.97', 'to_tc'], '00:59:56:12'), ('boundary control', ['00:00:00:01', '25', 'to_ms'], 40), ('normal control', ['10:00:01:24', '25', 'to_ms'], 36001960), ('normal control', [250, '59.94', 'to_tc'], '00:00:00:15'), ('normal control', ['01:01:01:36', '30', 'to_ms'], 3662200)], [('regression: label to ms rounding', ['01:01:01:15', '23.976', 'to_ms'], 3665287), ('regression variant: label to ms rounding', ['01:01:00:29', '29.97', 'to_ms'], 3664628), ('partial repair probe: label to ms rounding', ['23:01:59:45', '29.97', 'to_ms'], 83003421), ('partial repair variant: label to ms rounding', ['01:01:59:45', '29.97', 'to_ms'], 3724221), ('boundary control', ['00:00:00:01', '25', 'to_ms'], 40), ('boundary control', ['01:00:00:00', '29.97', 'to_ms'], 3603600), ('normal control', ['23:59:59:15', '59.94', 'to_ms'], 86485649), ('normal control', ['10:00:01:06', '30', 'to_ms'], 36001200), ('normal control', ['10:59:59:36', '30', 'to_ms'], 39600200)], [('regression: label to ms rounding', ['10:59:00:36', '59.94', 'to_ms'], 39580141), ('regression variant: label to ms rounding', ['00:01:01:01', '23.976', 'to_ms'], 61103), ('partial repair probe: label to ms rounding', ['23:01:00:15', '29.97', 'to_ms'], 82943361), ('partial repair variant: label to ms rounding', ['01:01:00:15', '29.97', 'to_ms'], 3664161), ('boundary control', ['01:00:00:00', '29.97', 'to_ms'], 3603600), ('boundary control', [3600000, '29.97', 'to_tc'], '00:59:56:12'), ('normal control', [0, '23.976', 'to_tc'], '00:00:00:00'), ('normal control', [100, '23.976', 'to_tc'], '00:00:00:02'), ('normal control', [100, '59.94', 'to_tc'], '00:00:00:06')], [('regression: label to ms rounding', ['00:01:01:15', '23.976', 'to_ms'], 61687), ('regression variant: label to ms rounding', ['10:01:00:15', '23.976', 'to_ms'], 36096686), ('partial repair probe: label to ms rounding', ['00:00:01:36', '23.976', 'to_ms'], 2503), ('partial repair variant: label to ms rounding', ['00:01:01:36', '23.976', 'to_ms'], 62563), ('boundary control', [3600000, '29.97', 'to_tc'], '00:59:56:12'), ('boundary control', ['00:00:00:01', '25', 'to_ms'], 40), ('normal control', ['10:00:01:15', '30', 'to_ms'], 36001500), ('normal control', [250, '24', 'to_tc'], '00:00:00:06'), ('normal control', [3603600, '29.97', 'to_tc'], '01:00:00:00')]]
for label, args, expected in fixtures[N-1]:
check(label, solve(*args), expected)
print(json.dumps({"observations": observations, "passed": all(x["passed"] for x in observations)}, ensure_ascii=False))
raise SystemExit(0 if all(x["passed"] for x in observations) else 1)
| Boundary fixture | Actual | Expected | Outcome |
|---|---|---|---|
| regression: label to ms rounding | 42 | 42 | Passed |
| regression variant: label to ms rounding | 3663702 | 3663702 | Passed |
| partial repair probe: label to ms rounding | 3604100 | 3604101 | Failed |
| partial repair variant: label to ms rounding | 82945362 | 82945363 | Failed |
| boundary control | 3603600 | 3603600 | Passed |
| boundary control | 00:59:56:12 | 00:59:56:12 | Passed |
| normal control | 40 | 40 | Passed |
| normal control | 00:00:00:00 | 00:00:00:00 | Passed |
| normal control | 00:00:01:00 | 00:00:01:00 | Passed |
SHA-256 / 7cabd61643b2fcbac4803caf6c4109e4c86124c07604588ae35c9e051565609b
3 / The verified repair
Exit 0"""Failure Map reference implementation. Python standard library only."""
import json
N = 1
observations = []
def solve(value, rate, mode):
nominal={'23.976':24,'29.97':30,'59.94':60,'24':24,'25':25,'30':30}[rate]
den=1001 if '.' in rate else 1000
num=nominal*1000
if mode=='to_ms':
h,m,s,f=map(int,value.split(':'))
n=((h*60+m)*60+s)*nominal+f
return (2*n*1000*den+num)//(2*num)
n=(2*value*num+1000*den)//(2000*den)
return '%02d:%02d:%02d:%02d'%(n//(3600*nominal)%24,n//(60*nominal)%60,n//nominal%60,n%nominal)
def check(label, actual, expected):
observations.append({"check": label, "actual": actual, "expected": expected, "passed": actual == expected})
fixtures = [[('regression: label to ms rounding', ['00:00:00:01', '23.976', 'to_ms'], 42), ('regression variant: label to ms rounding', ['01:01:00:01', '23.976', 'to_ms'], 3663702), ('partial repair probe: label to ms rounding', ['01:00:00:12', '23.976', 'to_ms'], 3604101), ('partial repair variant: label to ms rounding', ['23:01:01:45', '29.97', 'to_ms'], 82945363), ('boundary control', ['01:00:00:00', '29.97', 'to_ms'], 3603600), ('boundary control', [3600000, '29.97', 'to_tc'], '00:59:56:12'), ('normal control', ['00:00:00:01', '25', 'to_ms'], 40), ('normal control', [1, '24', 'to_tc'], '00:00:00:00'), ('normal control', [1020, '24', 'to_tc'], '00:00:01:00')], [('regression: label to ms rounding', ['10:59:00:45', '23.976', 'to_ms'], 39581417), ('regression variant: label to ms rounding', ['01:01:00:15', '29.97', 'to_ms'], 3664161), ('partial repair probe: label to ms rounding', ['23:00:59:45', '29.97', 'to_ms'], 82943361), ('partial repair variant: label to ms rounding', ['01:01:01:45', '29.97', 'to_ms'], 3666163), ('boundary control', [3600000, '29.97', 'to_tc'], '00:59:56:12'), ('boundary control', ['00:00:00:01', '25', 'to_ms'], 40), ('normal control', ['10:00:01:24', '25', 'to_ms'], 36001960), ('normal control', [250, '59.94', 'to_tc'], '00:00:00:15'), ('normal control', ['01:01:01:36', '30', 'to_ms'], 3662200)], [('regression: label to ms rounding', ['01:01:01:15', '23.976', 'to_ms'], 3665287), ('regression variant: label to ms rounding', ['01:01:00:29', '29.97', 'to_ms'], 3664628), ('partial repair probe: label to ms rounding', ['23:01:59:45', '29.97', 'to_ms'], 83003421), ('partial repair variant: label to ms rounding', ['01:01:59:45', '29.97', 'to_ms'], 3724221), ('boundary control', ['00:00:00:01', '25', 'to_ms'], 40), ('boundary control', ['01:00:00:00', '29.97', 'to_ms'], 3603600), ('normal control', ['23:59:59:15', '59.94', 'to_ms'], 86485649), ('normal control', ['10:00:01:06', '30', 'to_ms'], 36001200), ('normal control', ['10:59:59:36', '30', 'to_ms'], 39600200)], [('regression: label to ms rounding', ['10:59:00:36', '59.94', 'to_ms'], 39580141), ('regression variant: label to ms rounding', ['00:01:01:01', '23.976', 'to_ms'], 61103), ('partial repair probe: label to ms rounding', ['23:01:00:15', '29.97', 'to_ms'], 82943361), ('partial repair variant: label to ms rounding', ['01:01:00:15', '29.97', 'to_ms'], 3664161), ('boundary control', ['01:00:00:00', '29.97', 'to_ms'], 3603600), ('boundary control', [3600000, '29.97', 'to_tc'], '00:59:56:12'), ('normal control', [0, '23.976', 'to_tc'], '00:00:00:00'), ('normal control', [100, '23.976', 'to_tc'], '00:00:00:02'), ('normal control', [100, '59.94', 'to_tc'], '00:00:00:06')], [('regression: label to ms rounding', ['00:01:01:15', '23.976', 'to_ms'], 61687), ('regression variant: label to ms rounding', ['10:01:00:15', '23.976', 'to_ms'], 36096686), ('partial repair probe: label to ms rounding', ['00:00:01:36', '23.976', 'to_ms'], 2503), ('partial repair variant: label to ms rounding', ['00:01:01:36', '23.976', 'to_ms'], 62563), ('boundary control', [3600000, '29.97', 'to_tc'], '00:59:56:12'), ('boundary control', ['00:00:00:01', '25', 'to_ms'], 40), ('normal control', ['10:00:01:15', '30', 'to_ms'], 36001500), ('normal control', [250, '24', 'to_tc'], '00:00:00:06'), ('normal control', [3603600, '29.97', 'to_tc'], '01:00:00:00')]]
for label, args, expected in fixtures[N-1]:
check(label, solve(*args), expected)
print(json.dumps({"observations": observations, "passed": all(x["passed"] for x in observations)}, ensure_ascii=False))
raise SystemExit(0 if all(x["passed"] for x in observations) else 1)
| Boundary fixture | Actual | Expected | Outcome |
|---|---|---|---|
| regression: label to ms rounding | 42 | 42 | Passed |
| regression variant: label to ms rounding | 3663702 | 3663702 | Passed |
| partial repair probe: label to ms rounding | 3604101 | 3604101 | Passed |
| partial repair variant: label to ms rounding | 82945363 | 82945363 | Passed |
| boundary control | 3603600 | 3603600 | Passed |
| boundary control | 00:59:56:12 | 00:59:56:12 | Passed |
| normal control | 40 | 40 | Passed |
| normal control | 00:00:00:00 | 00:00:00:00 | Passed |
| normal control | 00:00:01:00 | 00:00:01:00 | Passed |
SHA-256 / 618796a274abb964045e14f3f0c780a211cd150633b57651e46f47e727edd8c5
Verification & scope
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.
Observations recorded using Python 3.12.14 at 2026-09-29T14:49:36.649897+00:00.
Case digest / ee021db99acce970c865dc3672f128ee34babba61fc80234e901abc730f85934