FA-78436 / Broadcast timecode arithmetic / Open access
Frame count to drop-frame 29.97 label: drop separator · case 01
Drop-frame labels are indistinguishable from non-drop labels downstream.
ROOT CAUSE
The label is written with a colon before the frame field.
VERIFIED REPAIR
Write the drop-frame semicolon before the frame field.
Unsuccessful approach: The period spelling is not the separator the contract requires.
Case contract
Convert a non-negative frame count (negative counts return None; counts wrap to the 2589408-frame drop-frame day) to an HH:MM:SS;FF 29.97 drop-frame label: 18 labels are skipped per 10-minute block of 17982 frames, and labels ;00/;01 are skipped at each minute not divisible by ten.
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(frames):
if frames<0:
return None
frames%=2589408
d,mrem=divmod(frames,17982)
add=18*d
if mrem>=2:
add+=2*((mrem-2)//1798)
n=frames+add
ff=n%30
ss=n//30%60
mm=n//1800%60
hh=n//108000
return '%02d:%02d:%02d:%02d'%(hh,mm,ss,ff)
def check(label, actual, expected):
observations.append({"check": label, "actual": actual, "expected": expected, "passed": actual == expected})
fixtures = [[('regression: drop separator', [1800], '00:01:00;02'), ('regression variant: drop separator', [107891], '00:59:59;29'), ('partial repair probe: drop separator', [1799], '00:00:59;29'), ('partial repair variant: drop separator', [683315], '06:19:59;29'), ('boundary control', [-1], None), ('normal control', [-2], None), ('normal control', [-464827], None), ('normal control', [-1153089], None)], [('regression: drop separator', [17982], '00:10:00;00'), ('regression variant: drop separator', [2589407], '23:59:59;29'), ('partial repair probe: drop separator', [107892], '01:00:00;00'), ('partial repair variant: drop separator', [5138128], '23:37:22;12'), ('boundary control', [-1], None), ('normal control', [-180902], None), ('normal control', [-1007831], None), ('normal control', [-2704966], None)], [('regression: drop separator', [1799], '00:00:59;29'), ('regression variant: drop separator', [52594], '00:29:14;28'), ('partial repair probe: drop separator', [0], '00:00:00;00'), ('partial repair variant: drop separator', [2589408], '00:00:00;00'), ('boundary control', [-1], None), ('normal control', [-1440574], None), ('normal control', [-2414851], None), ('normal control', [-1406281], None)], [('regression: drop separator', [107892], '01:00:00;00'), ('regression variant: drop separator', [3372691], '07:15:35;17'), ('partial repair probe: drop separator', [107891], '00:59:59;29'), ('partial repair variant: drop separator', [703099], '06:31:00;03'), ('boundary control', [-1], None), ('normal control', [-1130649], None), ('normal control', [-2542944], None), ('normal control', [-1108369], None)], [('regression: drop separator', [0], '00:00:00;00'), ('regression variant: drop separator', [683315], '06:19:59;29'), ('partial repair probe: drop separator', [2589407], '23:59:59;29'), ('partial repair variant: drop separator', [916013], '08:29:24;11'), ('boundary control', [-1], None), ('normal control', [-2], None), ('normal control', [-745831], None), ('normal control', [-1976708], None)]]
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: drop separator | 00:01:00:02 | 00:01:00;02 | Failed |
| regression variant: drop separator | 00:59:59:29 | 00:59:59;29 | Failed |
| partial repair probe: drop separator | 00:00:59:29 | 00:00:59;29 | Failed |
| partial repair variant: drop separator | 06:19:59:29 | 06:19:59;29 | Failed |
| boundary control | None | None | Passed |
| normal control | None | None | Passed |
| normal control | None | None | Passed |
| normal control | None | None | Passed |
SHA-256 / 1e4161d2fba9b581e66efdad727a2627051c7a9fd14151326e6e7238a787cd36
2 / The unsuccessful fix
Exit 1"""Failure Map reference implementation. Python standard library only."""
import json
N = 1
observations = []
def solve(frames):
if frames<0:
return None
frames%=2589408
d,mrem=divmod(frames,17982)
add=18*d
if mrem>=2:
add+=2*((mrem-2)//1798)
n=frames+add
ff=n%30
ss=n//30%60
mm=n//1800%60
hh=n//108000
return '%02d:%02d:%02d.%02d'%(hh,mm,ss,ff)
def check(label, actual, expected):
observations.append({"check": label, "actual": actual, "expected": expected, "passed": actual == expected})
fixtures = [[('regression: drop separator', [1800], '00:01:00;02'), ('regression variant: drop separator', [107891], '00:59:59;29'), ('partial repair probe: drop separator', [1799], '00:00:59;29'), ('partial repair variant: drop separator', [683315], '06:19:59;29'), ('boundary control', [-1], None), ('normal control', [-2], None), ('normal control', [-464827], None), ('normal control', [-1153089], None)], [('regression: drop separator', [17982], '00:10:00;00'), ('regression variant: drop separator', [2589407], '23:59:59;29'), ('partial repair probe: drop separator', [107892], '01:00:00;00'), ('partial repair variant: drop separator', [5138128], '23:37:22;12'), ('boundary control', [-1], None), ('normal control', [-180902], None), ('normal control', [-1007831], None), ('normal control', [-2704966], None)], [('regression: drop separator', [1799], '00:00:59;29'), ('regression variant: drop separator', [52594], '00:29:14;28'), ('partial repair probe: drop separator', [0], '00:00:00;00'), ('partial repair variant: drop separator', [2589408], '00:00:00;00'), ('boundary control', [-1], None), ('normal control', [-1440574], None), ('normal control', [-2414851], None), ('normal control', [-1406281], None)], [('regression: drop separator', [107892], '01:00:00;00'), ('regression variant: drop separator', [3372691], '07:15:35;17'), ('partial repair probe: drop separator', [107891], '00:59:59;29'), ('partial repair variant: drop separator', [703099], '06:31:00;03'), ('boundary control', [-1], None), ('normal control', [-1130649], None), ('normal control', [-2542944], None), ('normal control', [-1108369], None)], [('regression: drop separator', [0], '00:00:00;00'), ('regression variant: drop separator', [683315], '06:19:59;29'), ('partial repair probe: drop separator', [2589407], '23:59:59;29'), ('partial repair variant: drop separator', [916013], '08:29:24;11'), ('boundary control', [-1], None), ('normal control', [-2], None), ('normal control', [-745831], None), ('normal control', [-1976708], None)]]
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: drop separator | 00:01:00.02 | 00:01:00;02 | Failed |
| regression variant: drop separator | 00:59:59.29 | 00:59:59;29 | Failed |
| partial repair probe: drop separator | 00:00:59.29 | 00:00:59;29 | Failed |
| partial repair variant: drop separator | 06:19:59.29 | 06:19:59;29 | Failed |
| boundary control | None | None | Passed |
| normal control | None | None | Passed |
| normal control | None | None | Passed |
| normal control | None | None | Passed |
SHA-256 / e2e846b8767238830522106e8298a86c77a10430a1bc6d7277064d19a270753d
3 / The verified repair
Exit 0"""Failure Map reference implementation. Python standard library only."""
import json
N = 1
observations = []
def solve(frames):
if frames<0:
return None
frames%=2589408
d,mrem=divmod(frames,17982)
add=18*d
if mrem>=2:
add+=2*((mrem-2)//1798)
n=frames+add
ff=n%30
ss=n//30%60
mm=n//1800%60
hh=n//108000
return '%02d:%02d:%02d;%02d'%(hh,mm,ss,ff)
def check(label, actual, expected):
observations.append({"check": label, "actual": actual, "expected": expected, "passed": actual == expected})
fixtures = [[('regression: drop separator', [1800], '00:01:00;02'), ('regression variant: drop separator', [107891], '00:59:59;29'), ('partial repair probe: drop separator', [1799], '00:00:59;29'), ('partial repair variant: drop separator', [683315], '06:19:59;29'), ('boundary control', [-1], None), ('normal control', [-2], None), ('normal control', [-464827], None), ('normal control', [-1153089], None)], [('regression: drop separator', [17982], '00:10:00;00'), ('regression variant: drop separator', [2589407], '23:59:59;29'), ('partial repair probe: drop separator', [107892], '01:00:00;00'), ('partial repair variant: drop separator', [5138128], '23:37:22;12'), ('boundary control', [-1], None), ('normal control', [-180902], None), ('normal control', [-1007831], None), ('normal control', [-2704966], None)], [('regression: drop separator', [1799], '00:00:59;29'), ('regression variant: drop separator', [52594], '00:29:14;28'), ('partial repair probe: drop separator', [0], '00:00:00;00'), ('partial repair variant: drop separator', [2589408], '00:00:00;00'), ('boundary control', [-1], None), ('normal control', [-1440574], None), ('normal control', [-2414851], None), ('normal control', [-1406281], None)], [('regression: drop separator', [107892], '01:00:00;00'), ('regression variant: drop separator', [3372691], '07:15:35;17'), ('partial repair probe: drop separator', [107891], '00:59:59;29'), ('partial repair variant: drop separator', [703099], '06:31:00;03'), ('boundary control', [-1], None), ('normal control', [-1130649], None), ('normal control', [-2542944], None), ('normal control', [-1108369], None)], [('regression: drop separator', [0], '00:00:00;00'), ('regression variant: drop separator', [683315], '06:19:59;29'), ('partial repair probe: drop separator', [2589407], '23:59:59;29'), ('partial repair variant: drop separator', [916013], '08:29:24;11'), ('boundary control', [-1], None), ('normal control', [-2], None), ('normal control', [-745831], None), ('normal control', [-1976708], None)]]
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: drop separator | 00:01:00;02 | 00:01:00;02 | Passed |
| regression variant: drop separator | 00:59:59;29 | 00:59:59;29 | Passed |
| partial repair probe: drop separator | 00:00:59;29 | 00:00:59;29 | Passed |
| partial repair variant: drop separator | 06:19:59;29 | 06:19:59;29 | Passed |
| boundary control | None | None | Passed |
| normal control | None | None | Passed |
| normal control | None | None | Passed |
| normal control | None | None | Passed |
SHA-256 / 94c89b1b86189dde7cb556474b2925935b9d08d37a2b9552cc18a7d5bd700b1d
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:35.318858+00:00.
Case digest / 0092b95f227e1129d1582fdc4fa63294e19ec80c27f227651857ba2fd13b3acc