FA-78551 / Broadcast timecode arithmetic / Open access
2:3 pulldown film frame placement: phase alignment · case 01
With a non-zero cadence phase the first film frame does not start at field 0.
ROOT CAUSE
The field position of the starting cadence phase is not subtracted.
VERIFIED REPAIR
Subtract the field offset of the phase.
Unsuccessful approach: Subtracting the phase index instead of its field offset misaligns the cadence.
Case contract
Film frames follow the A2 B3 C2 D3 field cadence (10 fields per 4 film frames). phase is the cadence position (0=A..3=D) of film frame 0, which starts at video field 0. Negative n returns None. For film frame n return [video frame of its first field, "upper" for an even field index else "lower", number of fields].
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(n, phase):
if n<0:
return None
def sf(a):
return 10*(a//4)+[0,2,5,7][a%4]
a=n+phase
start=sf(a)
count=[2,3,2,3][a%4]
return [start//2,'upper' if start%2==0 else 'lower',count]
def check(label, actual, expected):
observations.append({"check": label, "actual": actual, "expected": expected, "passed": actual == expected})
fixtures = [[('regression: phase alignment', [0, 1], [0, 'upper', 3]), ('regression variant: phase alignment', [9, 3], [11, 'lower', 2]), ('partial repair probe: phase alignment', [9, 1], [11, 'lower', 2]), ('partial repair variant: phase alignment', [36, 1], [45, 'upper', 3]), ('boundary control', [0, 0], [0, 'upper', 2]), ('boundary control', [4, 0], [5, 'upper', 2]), ('normal control', [1, 0], [1, 'upper', 3]), ('normal control', [8, 0], [10, 'upper', 2]), ('normal control', [-3, 2], None)], [('regression: phase alignment', [2, 3], [2, 'lower', 3]), ('regression variant: phase alignment', [10, 1], [12, 'lower', 3]), ('partial repair probe: phase alignment', [35, 1], [44, 'upper', 2]), ('partial repair variant: phase alignment', [38, 3], [47, 'lower', 3]), ('boundary control', [1, 0], [1, 'upper', 3]), ('boundary control', [0, 0], [0, 'upper', 2]), ('normal control', [-6, 0], None), ('normal control', [-3, 1], None), ('normal control', [-6, 1], None)], [('regression: phase alignment', [9, 1], [11, 'lower', 2]), ('regression variant: phase alignment', [22, 2], [27, 'lower', 2]), ('partial repair probe: phase alignment', [34, 2], [42, 'lower', 2]), ('partial repair variant: phase alignment', [1, 3], [1, 'lower', 2]), ('boundary control', [3, 0], [3, 'lower', 3]), ('boundary control', [1, 0], [1, 'upper', 3]), ('normal control', [-3, 0], None), ('normal control', [-1, 1], None), ('normal control', [-5, 2], None)], [('regression: phase alignment', [35, 1], [44, 'upper', 2]), ('regression variant: phase alignment', [26, 2], [32, 'lower', 2]), ('partial repair probe: phase alignment', [9, 3], [11, 'lower', 2]), ('partial repair variant: phase alignment', [3, 2], [3, 'lower', 3]), ('boundary control', [4, 0], [5, 'upper', 2]), ('boundary control', [3, 0], [3, 'lower', 3]), ('normal control', [33, 0], [41, 'upper', 3]), ('normal control', [24, 0], [30, 'upper', 2]), ('normal control', [-4, 1], None)], [('regression: phase alignment', [34, 2], [42, 'lower', 2]), ('regression variant: phase alignment', [36, 1], [45, 'upper', 3]), ('partial repair probe: phase alignment', [10, 1], [12, 'lower', 3]), ('partial repair variant: phase alignment', [39, 2], [48, 'lower', 3]), ('boundary control', [0, 0], [0, 'upper', 2]), ('boundary control', [4, 0], [5, 'upper', 2]), ('normal control', [31, 0], [38, 'lower', 3]), ('normal control', [37, 0], [46, 'upper', 3]), ('normal control', [11, 0], [13, 'lower', 3])]]
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: phase alignment | [1, 'upper', 3] | [0, 'upper', 3] | Failed |
| regression variant: phase alignment | [15, 'upper', 2] | [11, 'lower', 2] | Failed |
| partial repair probe: phase alignment | [12, 'lower', 2] | [11, 'lower', 2] | Failed |
| partial repair variant: phase alignment | [46, 'upper', 3] | [45, 'upper', 3] | Failed |
| boundary control | [0, 'upper', 2] | [0, 'upper', 2] | Passed |
| boundary control | [5, 'upper', 2] | [5, 'upper', 2] | Passed |
| normal control | [1, 'upper', 3] | [1, 'upper', 3] | Passed |
| normal control | [10, 'upper', 2] | [10, 'upper', 2] | Passed |
| normal control | None | None | Passed |
SHA-256 / 3c60d2824fe073522a0cb9c889786a0bcf72f4ee2b9de72b13b10d766669106f
2 / The unsuccessful fix
Exit 1"""Failure Map reference implementation. Python standard library only."""
import json
N = 1
observations = []
def solve(n, phase):
if n<0:
return None
def sf(a):
return 10*(a//4)+[0,2,5,7][a%4]
a=n+phase
start=sf(a)-phase
count=[2,3,2,3][a%4]
return [start//2,'upper' if start%2==0 else 'lower',count]
def check(label, actual, expected):
observations.append({"check": label, "actual": actual, "expected": expected, "passed": actual == expected})
fixtures = [[('regression: phase alignment', [0, 1], [0, 'upper', 3]), ('regression variant: phase alignment', [9, 3], [11, 'lower', 2]), ('partial repair probe: phase alignment', [9, 1], [11, 'lower', 2]), ('partial repair variant: phase alignment', [36, 1], [45, 'upper', 3]), ('boundary control', [0, 0], [0, 'upper', 2]), ('boundary control', [4, 0], [5, 'upper', 2]), ('normal control', [1, 0], [1, 'upper', 3]), ('normal control', [8, 0], [10, 'upper', 2]), ('normal control', [-3, 2], None)], [('regression: phase alignment', [2, 3], [2, 'lower', 3]), ('regression variant: phase alignment', [10, 1], [12, 'lower', 3]), ('partial repair probe: phase alignment', [35, 1], [44, 'upper', 2]), ('partial repair variant: phase alignment', [38, 3], [47, 'lower', 3]), ('boundary control', [1, 0], [1, 'upper', 3]), ('boundary control', [0, 0], [0, 'upper', 2]), ('normal control', [-6, 0], None), ('normal control', [-3, 1], None), ('normal control', [-6, 1], None)], [('regression: phase alignment', [9, 1], [11, 'lower', 2]), ('regression variant: phase alignment', [22, 2], [27, 'lower', 2]), ('partial repair probe: phase alignment', [34, 2], [42, 'lower', 2]), ('partial repair variant: phase alignment', [1, 3], [1, 'lower', 2]), ('boundary control', [3, 0], [3, 'lower', 3]), ('boundary control', [1, 0], [1, 'upper', 3]), ('normal control', [-3, 0], None), ('normal control', [-1, 1], None), ('normal control', [-5, 2], None)], [('regression: phase alignment', [35, 1], [44, 'upper', 2]), ('regression variant: phase alignment', [26, 2], [32, 'lower', 2]), ('partial repair probe: phase alignment', [9, 3], [11, 'lower', 2]), ('partial repair variant: phase alignment', [3, 2], [3, 'lower', 3]), ('boundary control', [4, 0], [5, 'upper', 2]), ('boundary control', [3, 0], [3, 'lower', 3]), ('normal control', [33, 0], [41, 'upper', 3]), ('normal control', [24, 0], [30, 'upper', 2]), ('normal control', [-4, 1], None)], [('regression: phase alignment', [34, 2], [42, 'lower', 2]), ('regression variant: phase alignment', [36, 1], [45, 'upper', 3]), ('partial repair probe: phase alignment', [10, 1], [12, 'lower', 3]), ('partial repair variant: phase alignment', [39, 2], [48, 'lower', 3]), ('boundary control', [0, 0], [0, 'upper', 2]), ('boundary control', [4, 0], [5, 'upper', 2]), ('normal control', [31, 0], [38, 'lower', 3]), ('normal control', [37, 0], [46, 'upper', 3]), ('normal control', [11, 0], [13, 'lower', 3])]]
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: phase alignment | [0, 'lower', 3] | [0, 'upper', 3] | Failed |
| regression variant: phase alignment | [13, 'lower', 2] | [11, 'lower', 2] | Failed |
| partial repair probe: phase alignment | [12, 'upper', 2] | [11, 'lower', 2] | Failed |
| partial repair variant: phase alignment | [45, 'lower', 3] | [45, 'upper', 3] | Failed |
| boundary control | [0, 'upper', 2] | [0, 'upper', 2] | Passed |
| boundary control | [5, 'upper', 2] | [5, 'upper', 2] | Passed |
| normal control | [1, 'upper', 3] | [1, 'upper', 3] | Passed |
| normal control | [10, 'upper', 2] | [10, 'upper', 2] | Passed |
| normal control | None | None | Passed |
SHA-256 / 3863f3eb5d864157ed8ef4c1f636040bae789212d1f634bf8b9400bb8752f811
3 / The verified repair
Exit 0"""Failure Map reference implementation. Python standard library only."""
import json
N = 1
observations = []
def solve(n, phase):
if n<0:
return None
def sf(a):
return 10*(a//4)+[0,2,5,7][a%4]
a=n+phase
start=sf(a)-sf(phase)
count=[2,3,2,3][a%4]
return [start//2,'upper' if start%2==0 else 'lower',count]
def check(label, actual, expected):
observations.append({"check": label, "actual": actual, "expected": expected, "passed": actual == expected})
fixtures = [[('regression: phase alignment', [0, 1], [0, 'upper', 3]), ('regression variant: phase alignment', [9, 3], [11, 'lower', 2]), ('partial repair probe: phase alignment', [9, 1], [11, 'lower', 2]), ('partial repair variant: phase alignment', [36, 1], [45, 'upper', 3]), ('boundary control', [0, 0], [0, 'upper', 2]), ('boundary control', [4, 0], [5, 'upper', 2]), ('normal control', [1, 0], [1, 'upper', 3]), ('normal control', [8, 0], [10, 'upper', 2]), ('normal control', [-3, 2], None)], [('regression: phase alignment', [2, 3], [2, 'lower', 3]), ('regression variant: phase alignment', [10, 1], [12, 'lower', 3]), ('partial repair probe: phase alignment', [35, 1], [44, 'upper', 2]), ('partial repair variant: phase alignment', [38, 3], [47, 'lower', 3]), ('boundary control', [1, 0], [1, 'upper', 3]), ('boundary control', [0, 0], [0, 'upper', 2]), ('normal control', [-6, 0], None), ('normal control', [-3, 1], None), ('normal control', [-6, 1], None)], [('regression: phase alignment', [9, 1], [11, 'lower', 2]), ('regression variant: phase alignment', [22, 2], [27, 'lower', 2]), ('partial repair probe: phase alignment', [34, 2], [42, 'lower', 2]), ('partial repair variant: phase alignment', [1, 3], [1, 'lower', 2]), ('boundary control', [3, 0], [3, 'lower', 3]), ('boundary control', [1, 0], [1, 'upper', 3]), ('normal control', [-3, 0], None), ('normal control', [-1, 1], None), ('normal control', [-5, 2], None)], [('regression: phase alignment', [35, 1], [44, 'upper', 2]), ('regression variant: phase alignment', [26, 2], [32, 'lower', 2]), ('partial repair probe: phase alignment', [9, 3], [11, 'lower', 2]), ('partial repair variant: phase alignment', [3, 2], [3, 'lower', 3]), ('boundary control', [4, 0], [5, 'upper', 2]), ('boundary control', [3, 0], [3, 'lower', 3]), ('normal control', [33, 0], [41, 'upper', 3]), ('normal control', [24, 0], [30, 'upper', 2]), ('normal control', [-4, 1], None)], [('regression: phase alignment', [34, 2], [42, 'lower', 2]), ('regression variant: phase alignment', [36, 1], [45, 'upper', 3]), ('partial repair probe: phase alignment', [10, 1], [12, 'lower', 3]), ('partial repair variant: phase alignment', [39, 2], [48, 'lower', 3]), ('boundary control', [0, 0], [0, 'upper', 2]), ('boundary control', [4, 0], [5, 'upper', 2]), ('normal control', [31, 0], [38, 'lower', 3]), ('normal control', [37, 0], [46, 'upper', 3]), ('normal control', [11, 0], [13, 'lower', 3])]]
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: phase alignment | [0, 'upper', 3] | [0, 'upper', 3] | Passed |
| regression variant: phase alignment | [11, 'lower', 2] | [11, 'lower', 2] | Passed |
| partial repair probe: phase alignment | [11, 'lower', 2] | [11, 'lower', 2] | Passed |
| partial repair variant: phase alignment | [45, 'upper', 3] | [45, 'upper', 3] | Passed |
| boundary control | [0, 'upper', 2] | [0, 'upper', 2] | Passed |
| boundary control | [5, 'upper', 2] | [5, 'upper', 2] | Passed |
| normal control | [1, 'upper', 3] | [1, 'upper', 3] | Passed |
| normal control | [10, 'upper', 2] | [10, 'upper', 2] | Passed |
| normal control | None | None | Passed |
SHA-256 / 78a5911724e6160396aa1a796f331908e70bb5b80eaf16d87aaf61cfc0928df3
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.377368+00:00.
Case digest / d38038bfad556cff318fdb01572b3118615d40656ba6da52cbbc75ed372e0a54