FA-78401 / Broadcast timecode arithmetic / Open access
Drop-frame 29.97 label to frame count: nonexistent label check · case 01
Valid labels such as 00:01:05;00 are refused.
ROOT CAUSE
The dropped-label test ignores the seconds field.
VERIFIED REPAIR
Only labels ;00 and ;01 at second 00 of non-tenth minutes are missing.
Unsuccessful approach: Exempting only minute 0 wrongly rejects labels at minutes 10, 20, 30, 40 and 50.
Case contract
Parse HH:MM:SS;FF drop-frame 29.97 labels (the last separator may be ";", "," or "."). Labels ;00 and ;01 at second 00 of minutes not divisible by 10 do not exist and return None, as do out-of-range fields (hours 0-23, frames 0-29). Frame count = nominal 30 fps count minus 2 per elapsed minute except every tenth minute.
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
import re
N = 1
observations = []
def solve(tc):
m=re.fullmatch(r'(\d{2}):(\d{2}):(\d{2})[;,.](\d{2})',tc)
if not m:
return None
h,mi,s,f=map(int,m.groups())
if h>23 or mi>59 or s>59:
return None
if f>29:
return None
if f<2 and mi%10!=0:
return None
tm=h*60+mi
return (tm*60+s)*30+f-2*(tm-tm//10)
def check(label, actual, expected):
observations.append({"check": label, "actual": actual, "expected": expected, "passed": actual == expected})
fixtures = [[('regression: nonexistent label check', ['00:01:59;01'], 3569), ('regression variant: nonexistent label check', ['23:09:01.01'], 2497729), ('partial repair probe: nonexistent label check', ['23:10:00;00'], 2499498), ('partial repair variant: nonexistent label check', ['00:10:00;00'], 17982), ('boundary control', ['00:01:00;02'], 1800), ('boundary control', ['00:00:59;29'], 1799), ('normal control', ['00:01:00;00'], None), ('normal control', ['23:59:59;29'], 2589407), ('normal control', ['23:00:00.02'], 2481518)], [('regression: nonexistent label check', ['23:11:59;00'], 2503066), ('regression variant: nonexistent label check', ['23:09:59.00'], 2499468), ('partial repair probe: nonexistent label check', ['01:10:00;01'], 125875), ('partial repair variant: nonexistent label check', ['23:20:00,00'], 2517480), ('boundary control', ['00:01:00;00'], None), ('boundary control', ['23:59:59;29'], 2589407), ('normal control', ['24:00:00:31'], None), ('normal control', ['09:11:60.03'], None), ('normal control', ['09:59:01.03'], 1077153)], [('regression: nonexistent label check', ['09:11:59,01'], 992579), ('regression variant: nonexistent label check', ['09:01:59;00'], 974596), ('partial repair probe: nonexistent label check', ['23:10:00,01'], 2499499), ('partial repair variant: nonexistent label check', ['23:10:00;00'], 2499498), ('boundary control', ['01:00:00;00'], 107892), ('boundary control', ['00:01:00;02'], 1800), ('normal control', ['24:20:59,31'], None), ('normal control', ['00:01:01;03'], 1831), ('normal control', ['23:60:00.01'], None)], [('regression: nonexistent label check', ['01:01:59,00'], 111460), ('regression variant: nonexistent label check', ['01:11:59;01'], 129443), ('partial repair probe: nonexistent label check', ['00:20:00,00'], 35964), ('partial repair variant: nonexistent label check', ['01:10:00;01'], 125875), ('boundary control', ['00:00:59;29'], 1799), ('boundary control', ['00:01:00;00'], None), ('normal control', ['01:11:59:31'], None), ('normal control', ['00:20:60;03'], None), ('normal control', ['01:20:60;00'], None)], [('regression: nonexistent label check', ['01:11:01.00'], 127702), ('regression variant: nonexistent label check', ['09:01:01;01'], 972857), ('partial repair probe: nonexistent label check', ['23:10:00,00'], 2499498), ('partial repair variant: nonexistent label check', ['23:10:00,01'], 2499499), ('boundary control', ['23:59:59;29'], 2589407), ('boundary control', ['01:00:00;00'], 107892), ('normal control', ['09:00:01.02'], 971060), ('normal control', ['01:11:01;30'], None), ('normal control', ['01:59:01;29'], 214043)]]
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: nonexistent label check | None | 3569 | Failed |
| regression variant: nonexistent label check | None | 2497729 | Failed |
| partial repair probe: nonexistent label check | 2499498 | 2499498 | Passed |
| partial repair variant: nonexistent label check | 17982 | 17982 | Passed |
| boundary control | 1800 | 1800 | Passed |
| boundary control | 1799 | 1799 | Passed |
| normal control | None | None | Passed |
| normal control | 2589407 | 2589407 | Passed |
| normal control | 2481518 | 2481518 | Passed |
SHA-256 / 745fef8025219083455586aa4d5ec77a783647c89be3e246e6b81267ee320ee9
2 / The unsuccessful fix
Exit 1"""Failure Map reference implementation. Python standard library only."""
import json
import re
N = 1
observations = []
def solve(tc):
m=re.fullmatch(r'(\d{2}):(\d{2}):(\d{2})[;,.](\d{2})',tc)
if not m:
return None
h,mi,s,f=map(int,m.groups())
if h>23 or mi>59 or s>59:
return None
if f>29:
return None
if s==0 and f<2 and mi!=0:
return None
tm=h*60+mi
return (tm*60+s)*30+f-2*(tm-tm//10)
def check(label, actual, expected):
observations.append({"check": label, "actual": actual, "expected": expected, "passed": actual == expected})
fixtures = [[('regression: nonexistent label check', ['00:01:59;01'], 3569), ('regression variant: nonexistent label check', ['23:09:01.01'], 2497729), ('partial repair probe: nonexistent label check', ['23:10:00;00'], 2499498), ('partial repair variant: nonexistent label check', ['00:10:00;00'], 17982), ('boundary control', ['00:01:00;02'], 1800), ('boundary control', ['00:00:59;29'], 1799), ('normal control', ['00:01:00;00'], None), ('normal control', ['23:59:59;29'], 2589407), ('normal control', ['23:00:00.02'], 2481518)], [('regression: nonexistent label check', ['23:11:59;00'], 2503066), ('regression variant: nonexistent label check', ['23:09:59.00'], 2499468), ('partial repair probe: nonexistent label check', ['01:10:00;01'], 125875), ('partial repair variant: nonexistent label check', ['23:20:00,00'], 2517480), ('boundary control', ['00:01:00;00'], None), ('boundary control', ['23:59:59;29'], 2589407), ('normal control', ['24:00:00:31'], None), ('normal control', ['09:11:60.03'], None), ('normal control', ['09:59:01.03'], 1077153)], [('regression: nonexistent label check', ['09:11:59,01'], 992579), ('regression variant: nonexistent label check', ['09:01:59;00'], 974596), ('partial repair probe: nonexistent label check', ['23:10:00,01'], 2499499), ('partial repair variant: nonexistent label check', ['23:10:00;00'], 2499498), ('boundary control', ['01:00:00;00'], 107892), ('boundary control', ['00:01:00;02'], 1800), ('normal control', ['24:20:59,31'], None), ('normal control', ['00:01:01;03'], 1831), ('normal control', ['23:60:00.01'], None)], [('regression: nonexistent label check', ['01:01:59,00'], 111460), ('regression variant: nonexistent label check', ['01:11:59;01'], 129443), ('partial repair probe: nonexistent label check', ['00:20:00,00'], 35964), ('partial repair variant: nonexistent label check', ['01:10:00;01'], 125875), ('boundary control', ['00:00:59;29'], 1799), ('boundary control', ['00:01:00;00'], None), ('normal control', ['01:11:59:31'], None), ('normal control', ['00:20:60;03'], None), ('normal control', ['01:20:60;00'], None)], [('regression: nonexistent label check', ['01:11:01.00'], 127702), ('regression variant: nonexistent label check', ['09:01:01;01'], 972857), ('partial repair probe: nonexistent label check', ['23:10:00,00'], 2499498), ('partial repair variant: nonexistent label check', ['23:10:00,01'], 2499499), ('boundary control', ['23:59:59;29'], 2589407), ('boundary control', ['01:00:00;00'], 107892), ('normal control', ['09:00:01.02'], 971060), ('normal control', ['01:11:01;30'], None), ('normal control', ['01:59:01;29'], 214043)]]
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: nonexistent label check | 3569 | 3569 | Passed |
| regression variant: nonexistent label check | 2497729 | 2497729 | Passed |
| partial repair probe: nonexistent label check | None | 2499498 | Failed |
| partial repair variant: nonexistent label check | None | 17982 | Failed |
| boundary control | 1800 | 1800 | Passed |
| boundary control | 1799 | 1799 | Passed |
| normal control | None | None | Passed |
| normal control | 2589407 | 2589407 | Passed |
| normal control | 2481518 | 2481518 | Passed |
SHA-256 / 819e97fe1a56f5822e547d5c205d398a8a326e35a65eeefddb198eec152b2c6d
3 / The verified repair
Exit 0"""Failure Map reference implementation. Python standard library only."""
import json
import re
N = 1
observations = []
def solve(tc):
m=re.fullmatch(r'(\d{2}):(\d{2}):(\d{2})[;,.](\d{2})',tc)
if not m:
return None
h,mi,s,f=map(int,m.groups())
if h>23 or mi>59 or s>59:
return None
if f>29:
return None
if s==0 and f<2 and mi%10!=0:
return None
tm=h*60+mi
return (tm*60+s)*30+f-2*(tm-tm//10)
def check(label, actual, expected):
observations.append({"check": label, "actual": actual, "expected": expected, "passed": actual == expected})
fixtures = [[('regression: nonexistent label check', ['00:01:59;01'], 3569), ('regression variant: nonexistent label check', ['23:09:01.01'], 2497729), ('partial repair probe: nonexistent label check', ['23:10:00;00'], 2499498), ('partial repair variant: nonexistent label check', ['00:10:00;00'], 17982), ('boundary control', ['00:01:00;02'], 1800), ('boundary control', ['00:00:59;29'], 1799), ('normal control', ['00:01:00;00'], None), ('normal control', ['23:59:59;29'], 2589407), ('normal control', ['23:00:00.02'], 2481518)], [('regression: nonexistent label check', ['23:11:59;00'], 2503066), ('regression variant: nonexistent label check', ['23:09:59.00'], 2499468), ('partial repair probe: nonexistent label check', ['01:10:00;01'], 125875), ('partial repair variant: nonexistent label check', ['23:20:00,00'], 2517480), ('boundary control', ['00:01:00;00'], None), ('boundary control', ['23:59:59;29'], 2589407), ('normal control', ['24:00:00:31'], None), ('normal control', ['09:11:60.03'], None), ('normal control', ['09:59:01.03'], 1077153)], [('regression: nonexistent label check', ['09:11:59,01'], 992579), ('regression variant: nonexistent label check', ['09:01:59;00'], 974596), ('partial repair probe: nonexistent label check', ['23:10:00,01'], 2499499), ('partial repair variant: nonexistent label check', ['23:10:00;00'], 2499498), ('boundary control', ['01:00:00;00'], 107892), ('boundary control', ['00:01:00;02'], 1800), ('normal control', ['24:20:59,31'], None), ('normal control', ['00:01:01;03'], 1831), ('normal control', ['23:60:00.01'], None)], [('regression: nonexistent label check', ['01:01:59,00'], 111460), ('regression variant: nonexistent label check', ['01:11:59;01'], 129443), ('partial repair probe: nonexistent label check', ['00:20:00,00'], 35964), ('partial repair variant: nonexistent label check', ['01:10:00;01'], 125875), ('boundary control', ['00:00:59;29'], 1799), ('boundary control', ['00:01:00;00'], None), ('normal control', ['01:11:59:31'], None), ('normal control', ['00:20:60;03'], None), ('normal control', ['01:20:60;00'], None)], [('regression: nonexistent label check', ['01:11:01.00'], 127702), ('regression variant: nonexistent label check', ['09:01:01;01'], 972857), ('partial repair probe: nonexistent label check', ['23:10:00,00'], 2499498), ('partial repair variant: nonexistent label check', ['23:10:00,01'], 2499499), ('boundary control', ['23:59:59;29'], 2589407), ('boundary control', ['01:00:00;00'], 107892), ('normal control', ['09:00:01.02'], 971060), ('normal control', ['01:11:01;30'], None), ('normal control', ['01:59:01;29'], 214043)]]
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: nonexistent label check | 3569 | 3569 | Passed |
| regression variant: nonexistent label check | 2497729 | 2497729 | Passed |
| partial repair probe: nonexistent label check | 2499498 | 2499498 | Passed |
| partial repair variant: nonexistent label check | 17982 | 17982 | Passed |
| boundary control | 1800 | 1800 | Passed |
| boundary control | 1799 | 1799 | Passed |
| normal control | None | None | Passed |
| normal control | 2589407 | 2589407 | Passed |
| normal control | 2481518 | 2481518 | Passed |
SHA-256 / 8027f211f8930922403c9998c2b052c590c51afe988cd9ae3ab2e7c0bb4fd4a8
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:34.771918+00:00.
Case digest / f816565b3e38e327209c3735bb4bcc028d35d805ba5e6589b470179ce0c04af0