FAILURE MAP
← Case archive

FA-78451 / Broadcast timecode arithmetic / Open access

Drop-frame label increment: skipped label count · case 01

The first label of a new minute is a label that should have been dropped.

Verified by executionVariant 1 · 9 checks per implementationDownload source bundle ↓JSON ↗

ROOT CAUSE

The skip lands on the last dropped label instead of the first valid one.

VERIFIED REPAIR

Start the new minute at frame number drop.

Unsuccessful approach: Hard-coding a skip of 2 is wrong for 59.94, which drops four labels.

Case contract

Given a valid drop-frame label at rate "29.97" (nominal 30, drop 2) or "59.94" (nominal 60, drop 4), return the next label: frames carry into seconds at the nominal rate, seconds into minutes, minutes into hours (wrapping at 24); on entering a new minute not divisible by 10 the first drop labels are skipped.

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, rate):
    n=30 if rate=='29.97' else 60
    drop=2 if n==30 else 4
    h,m,s,f=map(int,re.split('[:;]',tc))
    f+=1
    if f==n:
        f=0
        s+=1
        if s==60:
            s=0
            m+=1
            if m==60:
                m=0
                h=(h+1)%24
            if m%10!=0:
                f=drop-1
    return '%02d:%02d:%02d;%02d'%(h,m,s,f)
def check(label, actual, expected):
    observations.append({"check": label, "actual": actual, "expected": expected, "passed": actual == expected})
fixtures = [[('regression: skipped label count', ['00:00:59;29', '29.97'], '00:01:00;02'), ('regression variant: skipped label count', ['01:00:59;29', '29.97'], '01:01:00;02'), ('partial repair probe: skipped label count', ['00:01:59;59', '59.94'], '00:02:00;04'), ('partial repair variant: skipped label count', ['23:00:59;59', '59.94'], '23:01:00;04'), ('boundary control', ['00:09:59;29', '29.97'], '00:10:00;00'), ('boundary control', ['23:59:59;29', '29.97'], '00:00:00;00'), ('normal control', ['00:01:00;02', '29.97'], '00:01:00;03'), ('normal control', ['01:01:01;02', '29.97'], '01:01:01;03'), ('normal control', ['00:09:00;58', '59.94'], '00:09:00;59')], [('regression: skipped label count', ['00:00:59;59', '59.94'], '00:01:00;04'), ('regression variant: skipped label count', ['01:01:59;59', '59.94'], '01:02:00;04'), ('partial repair probe: skipped label count', ['23:01:59;59', '59.94'], '23:02:00;04'), ('partial repair variant: skipped label count', ['23:10:59;59', '59.94'], '23:11:00;04'), ('boundary control', ['23:59:59;29', '29.97'], '00:00:00;00'), ('boundary control', ['00:01:00;02', '29.97'], '00:01:00;03'), ('normal control', ['23:09:59;59', '59.94'], '23:10:00;00'), ('normal control', ['01:10:58;29', '29.97'], '01:10:59;00'), ('normal control', ['00:29:59;00', '59.94'], '00:29:59;01')], [('regression: skipped label count', ['09:01:59;29', '29.97'], '09:02:00;02'), ('regression variant: skipped label count', ['01:01:59;29', '29.97'], '01:02:00;02'), ('partial repair probe: skipped label count', ['09:00:59;59', '59.94'], '09:01:00;04'), ('partial repair variant: skipped label count', ['00:10:59;59', '59.94'], '00:11:00;04'), ('boundary control', ['00:01:00;02', '29.97'], '00:01:00;03'), ('boundary control', ['00:09:59;29', '29.97'], '00:10:00;00'), ('normal control', ['09:19:00;04', '59.94'], '09:19:00;05'), ('normal control', ['00:59:59;59', '59.94'], '01:00:00;00'), ('normal control', ['01:29:58;58', '59.94'], '01:29:58;59')], [('regression: skipped label count', ['09:10:59;29', '29.97'], '09:11:00;02'), ('regression variant: skipped label count', ['00:01:59;59', '59.94'], '00:02:00;04'), ('partial repair probe: skipped label count', ['01:00:59;59', '59.94'], '01:01:00;04'), ('partial repair variant: skipped label count', ['00:00:59;59', '59.94'], '00:01:00;04'), ('boundary control', ['00:09:59;29', '29.97'], '00:10:00;00'), ('boundary control', ['23:59:59;29', '29.97'], '00:00:00;00'), ('normal control', ['23:00:00;00', '59.94'], '23:00:00;01'), ('normal control', ['23:59:59;03', '59.94'], '23:59:59;04'), ('normal control', ['23:01:58;03', '29.97'], '23:01:58;04')], [('regression: skipped label count', ['09:00:59;29', '29.97'], '09:01:00;02'), ('regression variant: skipped label count', ['23:01:59;59', '59.94'], '23:02:00;04'), ('partial repair probe: skipped label count', ['01:10:59;59', '59.94'], '01:11:00;04'), ('partial repair variant: skipped label count', ['01:01:59;59', '59.94'], '01:02:00;04'), ('boundary control', ['23:59:59;29', '29.97'], '00:00:00;00'), ('boundary control', ['00:01:00;02', '29.97'], '00:01:00;03'), ('normal control', ['09:29:59;59', '59.94'], '09:30:00;00'), ('normal control', ['00:09:59;02', '59.94'], '00:09:59;03'), ('normal control', ['23:19:59;05', '59.94'], '23:19:59;06')]]
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 fixtureActualExpectedOutcome
regression: skipped label count00:01:00;0100:01:00;02Failed
regression variant: skipped label count01:01:00;0101:01:00;02Failed
partial repair probe: skipped label count00:02:00;0300:02:00;04Failed
partial repair variant: skipped label count23:01:00;0323:01:00;04Failed
boundary control00:10:00;0000:10:00;00Passed
boundary control00:00:00;0000:00:00;00Passed
normal control00:01:00;0300:01:00;03Passed
normal control01:01:01;0301:01:01;03Passed
normal control00:09:00;5900:09:00;59Passed

SHA-256 / 527cbc4c09b7c1671a141f2ac8b7ead1f460a6561179fc370a6bf31f8257704e

2 / The unsuccessful fix

Exit 1
"""Failure Map reference implementation. Python standard library only."""
import json
import re
N = 1
observations = []
def solve(tc, rate):
    n=30 if rate=='29.97' else 60
    drop=2 if n==30 else 4
    h,m,s,f=map(int,re.split('[:;]',tc))
    f+=1
    if f==n:
        f=0
        s+=1
        if s==60:
            s=0
            m+=1
            if m==60:
                m=0
                h=(h+1)%24
            if m%10!=0:
                f=2
    return '%02d:%02d:%02d;%02d'%(h,m,s,f)
def check(label, actual, expected):
    observations.append({"check": label, "actual": actual, "expected": expected, "passed": actual == expected})
fixtures = [[('regression: skipped label count', ['00:00:59;29', '29.97'], '00:01:00;02'), ('regression variant: skipped label count', ['01:00:59;29', '29.97'], '01:01:00;02'), ('partial repair probe: skipped label count', ['00:01:59;59', '59.94'], '00:02:00;04'), ('partial repair variant: skipped label count', ['23:00:59;59', '59.94'], '23:01:00;04'), ('boundary control', ['00:09:59;29', '29.97'], '00:10:00;00'), ('boundary control', ['23:59:59;29', '29.97'], '00:00:00;00'), ('normal control', ['00:01:00;02', '29.97'], '00:01:00;03'), ('normal control', ['01:01:01;02', '29.97'], '01:01:01;03'), ('normal control', ['00:09:00;58', '59.94'], '00:09:00;59')], [('regression: skipped label count', ['00:00:59;59', '59.94'], '00:01:00;04'), ('regression variant: skipped label count', ['01:01:59;59', '59.94'], '01:02:00;04'), ('partial repair probe: skipped label count', ['23:01:59;59', '59.94'], '23:02:00;04'), ('partial repair variant: skipped label count', ['23:10:59;59', '59.94'], '23:11:00;04'), ('boundary control', ['23:59:59;29', '29.97'], '00:00:00;00'), ('boundary control', ['00:01:00;02', '29.97'], '00:01:00;03'), ('normal control', ['23:09:59;59', '59.94'], '23:10:00;00'), ('normal control', ['01:10:58;29', '29.97'], '01:10:59;00'), ('normal control', ['00:29:59;00', '59.94'], '00:29:59;01')], [('regression: skipped label count', ['09:01:59;29', '29.97'], '09:02:00;02'), ('regression variant: skipped label count', ['01:01:59;29', '29.97'], '01:02:00;02'), ('partial repair probe: skipped label count', ['09:00:59;59', '59.94'], '09:01:00;04'), ('partial repair variant: skipped label count', ['00:10:59;59', '59.94'], '00:11:00;04'), ('boundary control', ['00:01:00;02', '29.97'], '00:01:00;03'), ('boundary control', ['00:09:59;29', '29.97'], '00:10:00;00'), ('normal control', ['09:19:00;04', '59.94'], '09:19:00;05'), ('normal control', ['00:59:59;59', '59.94'], '01:00:00;00'), ('normal control', ['01:29:58;58', '59.94'], '01:29:58;59')], [('regression: skipped label count', ['09:10:59;29', '29.97'], '09:11:00;02'), ('regression variant: skipped label count', ['00:01:59;59', '59.94'], '00:02:00;04'), ('partial repair probe: skipped label count', ['01:00:59;59', '59.94'], '01:01:00;04'), ('partial repair variant: skipped label count', ['00:00:59;59', '59.94'], '00:01:00;04'), ('boundary control', ['00:09:59;29', '29.97'], '00:10:00;00'), ('boundary control', ['23:59:59;29', '29.97'], '00:00:00;00'), ('normal control', ['23:00:00;00', '59.94'], '23:00:00;01'), ('normal control', ['23:59:59;03', '59.94'], '23:59:59;04'), ('normal control', ['23:01:58;03', '29.97'], '23:01:58;04')], [('regression: skipped label count', ['09:00:59;29', '29.97'], '09:01:00;02'), ('regression variant: skipped label count', ['23:01:59;59', '59.94'], '23:02:00;04'), ('partial repair probe: skipped label count', ['01:10:59;59', '59.94'], '01:11:00;04'), ('partial repair variant: skipped label count', ['01:01:59;59', '59.94'], '01:02:00;04'), ('boundary control', ['23:59:59;29', '29.97'], '00:00:00;00'), ('boundary control', ['00:01:00;02', '29.97'], '00:01:00;03'), ('normal control', ['09:29:59;59', '59.94'], '09:30:00;00'), ('normal control', ['00:09:59;02', '59.94'], '00:09:59;03'), ('normal control', ['23:19:59;05', '59.94'], '23:19:59;06')]]
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 fixtureActualExpectedOutcome
regression: skipped label count00:01:00;0200:01:00;02Passed
regression variant: skipped label count01:01:00;0201:01:00;02Passed
partial repair probe: skipped label count00:02:00;0200:02:00;04Failed
partial repair variant: skipped label count23:01:00;0223:01:00;04Failed
boundary control00:10:00;0000:10:00;00Passed
boundary control00:00:00;0000:00:00;00Passed
normal control00:01:00;0300:01:00;03Passed
normal control01:01:01;0301:01:01;03Passed
normal control00:09:00;5900:09:00;59Passed

SHA-256 / 7e094d70bd609c7f61463970d5a9b63a90e0ceefd17d5da54f32eba396a83e25

3 / The verified repair

Exit 0
"""Failure Map reference implementation. Python standard library only."""
import json
import re
N = 1
observations = []
def solve(tc, rate):
    n=30 if rate=='29.97' else 60
    drop=2 if n==30 else 4
    h,m,s,f=map(int,re.split('[:;]',tc))
    f+=1
    if f==n:
        f=0
        s+=1
        if s==60:
            s=0
            m+=1
            if m==60:
                m=0
                h=(h+1)%24
            if m%10!=0:
                f=drop
    return '%02d:%02d:%02d;%02d'%(h,m,s,f)
def check(label, actual, expected):
    observations.append({"check": label, "actual": actual, "expected": expected, "passed": actual == expected})
fixtures = [[('regression: skipped label count', ['00:00:59;29', '29.97'], '00:01:00;02'), ('regression variant: skipped label count', ['01:00:59;29', '29.97'], '01:01:00;02'), ('partial repair probe: skipped label count', ['00:01:59;59', '59.94'], '00:02:00;04'), ('partial repair variant: skipped label count', ['23:00:59;59', '59.94'], '23:01:00;04'), ('boundary control', ['00:09:59;29', '29.97'], '00:10:00;00'), ('boundary control', ['23:59:59;29', '29.97'], '00:00:00;00'), ('normal control', ['00:01:00;02', '29.97'], '00:01:00;03'), ('normal control', ['01:01:01;02', '29.97'], '01:01:01;03'), ('normal control', ['00:09:00;58', '59.94'], '00:09:00;59')], [('regression: skipped label count', ['00:00:59;59', '59.94'], '00:01:00;04'), ('regression variant: skipped label count', ['01:01:59;59', '59.94'], '01:02:00;04'), ('partial repair probe: skipped label count', ['23:01:59;59', '59.94'], '23:02:00;04'), ('partial repair variant: skipped label count', ['23:10:59;59', '59.94'], '23:11:00;04'), ('boundary control', ['23:59:59;29', '29.97'], '00:00:00;00'), ('boundary control', ['00:01:00;02', '29.97'], '00:01:00;03'), ('normal control', ['23:09:59;59', '59.94'], '23:10:00;00'), ('normal control', ['01:10:58;29', '29.97'], '01:10:59;00'), ('normal control', ['00:29:59;00', '59.94'], '00:29:59;01')], [('regression: skipped label count', ['09:01:59;29', '29.97'], '09:02:00;02'), ('regression variant: skipped label count', ['01:01:59;29', '29.97'], '01:02:00;02'), ('partial repair probe: skipped label count', ['09:00:59;59', '59.94'], '09:01:00;04'), ('partial repair variant: skipped label count', ['00:10:59;59', '59.94'], '00:11:00;04'), ('boundary control', ['00:01:00;02', '29.97'], '00:01:00;03'), ('boundary control', ['00:09:59;29', '29.97'], '00:10:00;00'), ('normal control', ['09:19:00;04', '59.94'], '09:19:00;05'), ('normal control', ['00:59:59;59', '59.94'], '01:00:00;00'), ('normal control', ['01:29:58;58', '59.94'], '01:29:58;59')], [('regression: skipped label count', ['09:10:59;29', '29.97'], '09:11:00;02'), ('regression variant: skipped label count', ['00:01:59;59', '59.94'], '00:02:00;04'), ('partial repair probe: skipped label count', ['01:00:59;59', '59.94'], '01:01:00;04'), ('partial repair variant: skipped label count', ['00:00:59;59', '59.94'], '00:01:00;04'), ('boundary control', ['00:09:59;29', '29.97'], '00:10:00;00'), ('boundary control', ['23:59:59;29', '29.97'], '00:00:00;00'), ('normal control', ['23:00:00;00', '59.94'], '23:00:00;01'), ('normal control', ['23:59:59;03', '59.94'], '23:59:59;04'), ('normal control', ['23:01:58;03', '29.97'], '23:01:58;04')], [('regression: skipped label count', ['09:00:59;29', '29.97'], '09:01:00;02'), ('regression variant: skipped label count', ['23:01:59;59', '59.94'], '23:02:00;04'), ('partial repair probe: skipped label count', ['01:10:59;59', '59.94'], '01:11:00;04'), ('partial repair variant: skipped label count', ['01:01:59;59', '59.94'], '01:02:00;04'), ('boundary control', ['23:59:59;29', '29.97'], '00:00:00;00'), ('boundary control', ['00:01:00;02', '29.97'], '00:01:00;03'), ('normal control', ['09:29:59;59', '59.94'], '09:30:00;00'), ('normal control', ['00:09:59;02', '59.94'], '00:09:59;03'), ('normal control', ['23:19:59;05', '59.94'], '23:19:59;06')]]
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 fixtureActualExpectedOutcome
regression: skipped label count00:01:00;0200:01:00;02Passed
regression variant: skipped label count01:01:00;0201:01:00;02Passed
partial repair probe: skipped label count00:02:00;0400:02:00;04Passed
partial repair variant: skipped label count23:01:00;0423:01:00;04Passed
boundary control00:10:00;0000:10:00;00Passed
boundary control00:00:00;0000:00:00;00Passed
normal control00:01:00;0300:01:00;03Passed
normal control01:01:01;0301:01:01;03Passed
normal control00:09:00;5900:09:00;59Passed

SHA-256 / beacb86447db851384d7a6d19a1d5f5df113c7dd813468ebb8799136083c2d2d

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.329075+00:00.

Case digest / 27abfe331be8f8c0e8d9290ca91b6adfed932c700dda758ddf898514b77bc217