FAILURE MAP
← Case archive

FA-77921 / Subtitle cue timing / Open access

Subtitle frame-rate retiming: rational rate parsing · case 01

NTSC-rate sources written as 30000/1001 retime as if they were exactly 29 fps.

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

ROOT CAUSE

The N/D rate is parsed with integer division, truncating 29.97 to 29.

VERIFIED REPAIR

Keep the rate as the exact fraction N/D.

Unsuccessful approach: Rounding the rate to two decimals leaves a residual drift of several frames per hour.

Case contract

Cue times authored against a src frame rate are rescaled for playback at dst by t*src/dst, rounded half up to integer ms. Rates are "N", "N/D", or the aliases "23.976"/"29.97" meaning (N+1)*1000/1001. The end is rounded independently; an end that does not exceed the start becomes start+1.

Why this case matters

Subtitle timing defects shift, hide or overlap captions that viewers depend on for comprehension and accessibility.

1 / The failure

Exit 1
"""Failure Map reference implementation. Python standard library only."""
import json
import math
from fractions import Fraction
N = 1
observations = []
def solve(cues, src, dst):
    def rate(r):
        if '/' in r:
            a,b=r.split('/')
            return Fraction(int(a)//int(b))
        if '.' in r:
            return Fraction(int(float(r)+0.5)*1000,1001)
        return Fraction(int(r))
    k=rate(src)/rate(dst)
    out=[]
    for start,end in cues:
        rs=math.floor(start*k+Fraction(1,2))
        re_=math.floor(end*k+Fraction(1,2))
        if re_<=rs:
            re_=rs+1
        out.append([rs,re_])
    return out
def check(label, actual, expected):
    observations.append({"check": label, "actual": actual, "expected": expected, "passed": actual == expected})
fixtures = [[('regression: rational rate parsing', [[[1001, 3003]], '24000/1001', '24'], [[1000, 3000]]), ('regression variant: rational rate parsing', [[[3, 4], [12345, 12903]], '30', '30000/1001'], [[3, 4], [12357, 12916]]), ('partial repair probe: rational rate parsing', [[[1001, 2968], [1001, 4376]], '24', '24000/1001'], [[1002, 2971], [1002, 4380]]), ('partial repair variant: rational rate parsing', [[[0, 3], [3, 6]], '30000/1001', '24000/1001'], [[0, 4], [4, 8]]), ('boundary control', [[[1000, 2000]], '25', '50'], [[500, 1000]]), ('boundary control', [[[5, 6]], '24', '25'], [[5, 6]]), ('normal control', [[[1, 2], [3, 4]], '23.976', '25'], [[1, 2], [3, 4]]), ('normal control', [[[7, 10], [1001, 4303], [12345, 12348], [0, 101]], '25', '29.97'], [[6, 8], [835, 3589], [10298, 10300], [0, 84]]), ('normal control', [[[268354, 268356], [12345, 14346], [0, 42]], '60', '25'], [[644050, 644054], [29628, 34430], [0, 101]])], [('regression: rational rate parsing', [[[1, 1001]], '30000/1001', '29.97'], [[1, 1001]]), ('regression variant: rational rate parsing', [[[1, 3], [999, 3000]], '48', '30000/1001'], [[2, 5], [1600, 4805]]), ('partial repair probe: rational rate parsing', [[[37041, 39886], [885298, 885301], [219784, 219786], [3, 1003]], '24000/1001', '50'], [[17762, 19126], [424519, 424520], [105391, 105392], [1, 481]]), ('partial repair variant: rational rate parsing', [[[1, 2002], [12345, 12347], [51717, 51718]], '25', '24000/1001'], [[1, 2088], [12872, 12874], [53926, 53927]]), ('boundary control', [[[5, 6]], '24', '25'], [[5, 6]]), ('boundary control', [[[1, 2], [3, 4]], '23.976', '25'], [[1, 2], [3, 4]]), ('normal control', [[[3, 6]], '30', '48'], [[2, 4]]), ('normal control', [[[1001, 1003], [7, 4855], [12345, 13345]], '50', '50'], [[1001, 1003], [7, 4855], [12345, 13345]]), ('normal control', [[[12345, 15451]], '24000/1001', '24000/1001'], [[12345, 15451]])], [('regression: rational rate parsing', [[[269050, 271051]], '30000/1001', '23.976'], [[336313, 338814]]), ('regression variant: rational rate parsing', [[[3, 2004], [3, 1003], [0, 3]], '30000/1001', '24000/1001'], [[4, 2505], [4, 1254], [0, 4]]), ('partial repair probe: rational rate parsing', [[[999, 1999], [7, 1007], [12345, 12346]], '15', '24000/1001'], [[625, 1251], [4, 630], [7723, 7724]]), ('partial repair variant: rational rate parsing', [[[498674, 500675], [1, 4], [0, 3], [1001, 1004]], '24', '30000/1001'], [[399338, 400941], [1, 3], [0, 2], [802, 804]]), ('boundary control', [[[1, 2], [3, 4]], '23.976', '25'], [[1, 2], [3, 4]]), ('boundary control', [[[1000, 2000]], '25', '50'], [[500, 1000]]), ('normal control', [[[999, 4970]], '30', '60'], [[500, 2485]]), ('normal control', [[[418354, 420355]], '60', '48'], [[522943, 525444]]), ('normal control', [[[3, 1003], [999, 1000], [3, 5]], '50', '30'], [[5, 1672], [1665, 1667], [5, 8]])], [('regression: rational rate parsing', [[[999, 2714], [12345, 13345], [1, 2002]], '29.97', '30000/1001'], [[999, 2714], [12345, 13345], [1, 2002]]), ('regression variant: rational rate parsing', [[[1001, 2968], [1001, 4376]], '24', '24000/1001'], [[1002, 2971], [1002, 4380]]), ('partial repair probe: rational rate parsing', [[[999, 1000]], '24000/1001', '15'], [[1597, 1598]]), ('partial repair variant: rational rate parsing', [[[12345, 12348]], '24000/1001', '60'], [[4933, 4934]]), ('boundary control', [[[1000, 2000]], '25', '50'], [[500, 1000]]), ('boundary control', [[[5, 6]], '24', '25'], [[5, 6]]), ('normal control', [[[7, 2008], [1001, 3002]], '50', '12'], [[29, 8367], [4171, 12508]]), ('normal control', [[[0, 1], [3, 716], [12345, 16324]], '29.97', '48'], [[0, 1], [2, 447], [7708, 10192]]), ('normal control', [[[7, 2849], [7, 10], [1, 1001], [7, 3995]], '15', '29.97'], [[4, 1426], [4, 5], [1, 501], [4, 1999]])], [('regression: rational rate parsing', [[[1, 4], [7, 9], [12345, 14346], [1001, 1002]], '24000/1001', '12'], [[2, 8], [14, 18], [24665, 28663], [2000, 2002]]), ('regression variant: rational rate parsing', [[[3, 2004]], '24000/1001', '30000/1001'], [[2, 1603]]), ('partial repair probe: rational rate parsing', [[[252986, 253737]], '23.976', '24000/1001'], [[252986, 253737]]), ('partial repair variant: rational rate parsing', [[[654091, 654093]], '30000/1001', '24'], [[816797, 816799]]), ('boundary control', [[[5, 6]], '24', '25'], [[5, 6]]), ('boundary control', [[[1, 2], [3, 4]], '23.976', '25'], [[1, 2], [3, 4]]), ('normal control', [[[1001, 1004], [7, 9], [999, 1001]], '30', '25'], [[1201, 1205], [8, 11], [1199, 1201]]), ('normal control', [[[3, 6]], '29.97', '24'], [[4, 7]]), ('normal control', [[[1, 2], [7, 2008], [1001, 1002]], '50', '25'], [[2, 4], [14, 4016], [2002, 2004]])]]
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: rational rate parsing[[959, 2878]][[1000, 3000]]Failed
regression variant: rational rate parsing[[3, 4], [12771, 13348]][[3, 4], [12357, 12916]]Failed
partial repair probe: rational rate parsing[[1045, 3097], [1045, 4566]][[1002, 2971], [1002, 4380]]Failed
partial repair variant: rational rate parsing[[0, 4], [4, 8]][[0, 4], [4, 8]]Passed
boundary control[[500, 1000]][[500, 1000]]Passed
boundary control[[5, 6]][[5, 6]]Passed
normal control[[1, 2], [3, 4]][[1, 2], [3, 4]]Passed
normal control[[6, 8], [835, 3589], [10298, 10300], [0, 84]][[6, 8], [835, 3589], [10298, 10300], [0, 84]]Passed
normal control[[644050, 644054], [29628, 34430], [0, 101]][[644050, 644054], [29628, 34430], [0, 101]]Passed

SHA-256 / 049c473cfe0b7cbcf4b5f1bf7be99cd18f8fa245ed6f62d00dd4fdc72ed21540

2 / The unsuccessful fix

Exit 1
"""Failure Map reference implementation. Python standard library only."""
import json
import math
from fractions import Fraction
N = 1
observations = []
def solve(cues, src, dst):
    def rate(r):
        if '/' in r:
            a,b=r.split('/')
            return Fraction(round(int(a)/int(b),2))
        if '.' in r:
            return Fraction(int(float(r)+0.5)*1000,1001)
        return Fraction(int(r))
    k=rate(src)/rate(dst)
    out=[]
    for start,end in cues:
        rs=math.floor(start*k+Fraction(1,2))
        re_=math.floor(end*k+Fraction(1,2))
        if re_<=rs:
            re_=rs+1
        out.append([rs,re_])
    return out
def check(label, actual, expected):
    observations.append({"check": label, "actual": actual, "expected": expected, "passed": actual == expected})
fixtures = [[('regression: rational rate parsing', [[[1001, 3003]], '24000/1001', '24'], [[1000, 3000]]), ('regression variant: rational rate parsing', [[[3, 4], [12345, 12903]], '30', '30000/1001'], [[3, 4], [12357, 12916]]), ('partial repair probe: rational rate parsing', [[[1001, 2968], [1001, 4376]], '24', '24000/1001'], [[1002, 2971], [1002, 4380]]), ('partial repair variant: rational rate parsing', [[[0, 3], [3, 6]], '30000/1001', '24000/1001'], [[0, 4], [4, 8]]), ('boundary control', [[[1000, 2000]], '25', '50'], [[500, 1000]]), ('boundary control', [[[5, 6]], '24', '25'], [[5, 6]]), ('normal control', [[[1, 2], [3, 4]], '23.976', '25'], [[1, 2], [3, 4]]), ('normal control', [[[7, 10], [1001, 4303], [12345, 12348], [0, 101]], '25', '29.97'], [[6, 8], [835, 3589], [10298, 10300], [0, 84]]), ('normal control', [[[268354, 268356], [12345, 14346], [0, 42]], '60', '25'], [[644050, 644054], [29628, 34430], [0, 101]])], [('regression: rational rate parsing', [[[1, 1001]], '30000/1001', '29.97'], [[1, 1001]]), ('regression variant: rational rate parsing', [[[1, 3], [999, 3000]], '48', '30000/1001'], [[2, 5], [1600, 4805]]), ('partial repair probe: rational rate parsing', [[[37041, 39886], [885298, 885301], [219784, 219786], [3, 1003]], '24000/1001', '50'], [[17762, 19126], [424519, 424520], [105391, 105392], [1, 481]]), ('partial repair variant: rational rate parsing', [[[1, 2002], [12345, 12347], [51717, 51718]], '25', '24000/1001'], [[1, 2088], [12872, 12874], [53926, 53927]]), ('boundary control', [[[5, 6]], '24', '25'], [[5, 6]]), ('boundary control', [[[1, 2], [3, 4]], '23.976', '25'], [[1, 2], [3, 4]]), ('normal control', [[[3, 6]], '30', '48'], [[2, 4]]), ('normal control', [[[1001, 1003], [7, 4855], [12345, 13345]], '50', '50'], [[1001, 1003], [7, 4855], [12345, 13345]]), ('normal control', [[[12345, 15451]], '24000/1001', '24000/1001'], [[12345, 15451]])], [('regression: rational rate parsing', [[[269050, 271051]], '30000/1001', '23.976'], [[336313, 338814]]), ('regression variant: rational rate parsing', [[[3, 2004], [3, 1003], [0, 3]], '30000/1001', '24000/1001'], [[4, 2505], [4, 1254], [0, 4]]), ('partial repair probe: rational rate parsing', [[[999, 1999], [7, 1007], [12345, 12346]], '15', '24000/1001'], [[625, 1251], [4, 630], [7723, 7724]]), ('partial repair variant: rational rate parsing', [[[498674, 500675], [1, 4], [0, 3], [1001, 1004]], '24', '30000/1001'], [[399338, 400941], [1, 3], [0, 2], [802, 804]]), ('boundary control', [[[1, 2], [3, 4]], '23.976', '25'], [[1, 2], [3, 4]]), ('boundary control', [[[1000, 2000]], '25', '50'], [[500, 1000]]), ('normal control', [[[999, 4970]], '30', '60'], [[500, 2485]]), ('normal control', [[[418354, 420355]], '60', '48'], [[522943, 525444]]), ('normal control', [[[3, 1003], [999, 1000], [3, 5]], '50', '30'], [[5, 1672], [1665, 1667], [5, 8]])], [('regression: rational rate parsing', [[[999, 2714], [12345, 13345], [1, 2002]], '29.97', '30000/1001'], [[999, 2714], [12345, 13345], [1, 2002]]), ('regression variant: rational rate parsing', [[[1001, 2968], [1001, 4376]], '24', '24000/1001'], [[1002, 2971], [1002, 4380]]), ('partial repair probe: rational rate parsing', [[[999, 1000]], '24000/1001', '15'], [[1597, 1598]]), ('partial repair variant: rational rate parsing', [[[12345, 12348]], '24000/1001', '60'], [[4933, 4934]]), ('boundary control', [[[1000, 2000]], '25', '50'], [[500, 1000]]), ('boundary control', [[[5, 6]], '24', '25'], [[5, 6]]), ('normal control', [[[7, 2008], [1001, 3002]], '50', '12'], [[29, 8367], [4171, 12508]]), ('normal control', [[[0, 1], [3, 716], [12345, 16324]], '29.97', '48'], [[0, 1], [2, 447], [7708, 10192]]), ('normal control', [[[7, 2849], [7, 10], [1, 1001], [7, 3995]], '15', '29.97'], [[4, 1426], [4, 5], [1, 501], [4, 1999]])], [('regression: rational rate parsing', [[[1, 4], [7, 9], [12345, 14346], [1001, 1002]], '24000/1001', '12'], [[2, 8], [14, 18], [24665, 28663], [2000, 2002]]), ('regression variant: rational rate parsing', [[[3, 2004]], '24000/1001', '30000/1001'], [[2, 1603]]), ('partial repair probe: rational rate parsing', [[[252986, 253737]], '23.976', '24000/1001'], [[252986, 253737]]), ('partial repair variant: rational rate parsing', [[[654091, 654093]], '30000/1001', '24'], [[816797, 816799]]), ('boundary control', [[[5, 6]], '24', '25'], [[5, 6]]), ('boundary control', [[[1, 2], [3, 4]], '23.976', '25'], [[1, 2], [3, 4]]), ('normal control', [[[1001, 1004], [7, 9], [999, 1001]], '30', '25'], [[1201, 1205], [8, 11], [1199, 1201]]), ('normal control', [[[3, 6]], '29.97', '24'], [[4, 7]]), ('normal control', [[[1, 2], [7, 2008], [1001, 1002]], '50', '25'], [[2, 4], [14, 4016], [2002, 2004]])]]
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: rational rate parsing[[1000, 3000]][[1000, 3000]]Passed
regression variant: rational rate parsing[[3, 4], [12357, 12916]][[3, 4], [12357, 12916]]Passed
partial repair probe: rational rate parsing[[1002, 2970], [1002, 4380]][[1002, 2971], [1002, 4380]]Failed
partial repair variant: rational rate parsing[[0, 4], [4, 7]][[0, 4], [4, 8]]Failed
boundary control[[500, 1000]][[500, 1000]]Passed
boundary control[[5, 6]][[5, 6]]Passed
normal control[[1, 2], [3, 4]][[1, 2], [3, 4]]Passed
normal control[[6, 8], [835, 3589], [10298, 10300], [0, 84]][[6, 8], [835, 3589], [10298, 10300], [0, 84]]Passed
normal control[[644050, 644054], [29628, 34430], [0, 101]][[644050, 644054], [29628, 34430], [0, 101]]Passed

SHA-256 / 1a053686b546e57da6d264e02da39af321fc40ff2763bda0b70e07dc87e8c2c4

3 / The verified repair

Exit 0
"""Failure Map reference implementation. Python standard library only."""
import json
import math
from fractions import Fraction
N = 1
observations = []
def solve(cues, src, dst):
    def rate(r):
        if '/' in r:
            a,b=r.split('/')
            return Fraction(int(a),int(b))
        if '.' in r:
            return Fraction(int(float(r)+0.5)*1000,1001)
        return Fraction(int(r))
    k=rate(src)/rate(dst)
    out=[]
    for start,end in cues:
        rs=math.floor(start*k+Fraction(1,2))
        re_=math.floor(end*k+Fraction(1,2))
        if re_<=rs:
            re_=rs+1
        out.append([rs,re_])
    return out
def check(label, actual, expected):
    observations.append({"check": label, "actual": actual, "expected": expected, "passed": actual == expected})
fixtures = [[('regression: rational rate parsing', [[[1001, 3003]], '24000/1001', '24'], [[1000, 3000]]), ('regression variant: rational rate parsing', [[[3, 4], [12345, 12903]], '30', '30000/1001'], [[3, 4], [12357, 12916]]), ('partial repair probe: rational rate parsing', [[[1001, 2968], [1001, 4376]], '24', '24000/1001'], [[1002, 2971], [1002, 4380]]), ('partial repair variant: rational rate parsing', [[[0, 3], [3, 6]], '30000/1001', '24000/1001'], [[0, 4], [4, 8]]), ('boundary control', [[[1000, 2000]], '25', '50'], [[500, 1000]]), ('boundary control', [[[5, 6]], '24', '25'], [[5, 6]]), ('normal control', [[[1, 2], [3, 4]], '23.976', '25'], [[1, 2], [3, 4]]), ('normal control', [[[7, 10], [1001, 4303], [12345, 12348], [0, 101]], '25', '29.97'], [[6, 8], [835, 3589], [10298, 10300], [0, 84]]), ('normal control', [[[268354, 268356], [12345, 14346], [0, 42]], '60', '25'], [[644050, 644054], [29628, 34430], [0, 101]])], [('regression: rational rate parsing', [[[1, 1001]], '30000/1001', '29.97'], [[1, 1001]]), ('regression variant: rational rate parsing', [[[1, 3], [999, 3000]], '48', '30000/1001'], [[2, 5], [1600, 4805]]), ('partial repair probe: rational rate parsing', [[[37041, 39886], [885298, 885301], [219784, 219786], [3, 1003]], '24000/1001', '50'], [[17762, 19126], [424519, 424520], [105391, 105392], [1, 481]]), ('partial repair variant: rational rate parsing', [[[1, 2002], [12345, 12347], [51717, 51718]], '25', '24000/1001'], [[1, 2088], [12872, 12874], [53926, 53927]]), ('boundary control', [[[5, 6]], '24', '25'], [[5, 6]]), ('boundary control', [[[1, 2], [3, 4]], '23.976', '25'], [[1, 2], [3, 4]]), ('normal control', [[[3, 6]], '30', '48'], [[2, 4]]), ('normal control', [[[1001, 1003], [7, 4855], [12345, 13345]], '50', '50'], [[1001, 1003], [7, 4855], [12345, 13345]]), ('normal control', [[[12345, 15451]], '24000/1001', '24000/1001'], [[12345, 15451]])], [('regression: rational rate parsing', [[[269050, 271051]], '30000/1001', '23.976'], [[336313, 338814]]), ('regression variant: rational rate parsing', [[[3, 2004], [3, 1003], [0, 3]], '30000/1001', '24000/1001'], [[4, 2505], [4, 1254], [0, 4]]), ('partial repair probe: rational rate parsing', [[[999, 1999], [7, 1007], [12345, 12346]], '15', '24000/1001'], [[625, 1251], [4, 630], [7723, 7724]]), ('partial repair variant: rational rate parsing', [[[498674, 500675], [1, 4], [0, 3], [1001, 1004]], '24', '30000/1001'], [[399338, 400941], [1, 3], [0, 2], [802, 804]]), ('boundary control', [[[1, 2], [3, 4]], '23.976', '25'], [[1, 2], [3, 4]]), ('boundary control', [[[1000, 2000]], '25', '50'], [[500, 1000]]), ('normal control', [[[999, 4970]], '30', '60'], [[500, 2485]]), ('normal control', [[[418354, 420355]], '60', '48'], [[522943, 525444]]), ('normal control', [[[3, 1003], [999, 1000], [3, 5]], '50', '30'], [[5, 1672], [1665, 1667], [5, 8]])], [('regression: rational rate parsing', [[[999, 2714], [12345, 13345], [1, 2002]], '29.97', '30000/1001'], [[999, 2714], [12345, 13345], [1, 2002]]), ('regression variant: rational rate parsing', [[[1001, 2968], [1001, 4376]], '24', '24000/1001'], [[1002, 2971], [1002, 4380]]), ('partial repair probe: rational rate parsing', [[[999, 1000]], '24000/1001', '15'], [[1597, 1598]]), ('partial repair variant: rational rate parsing', [[[12345, 12348]], '24000/1001', '60'], [[4933, 4934]]), ('boundary control', [[[1000, 2000]], '25', '50'], [[500, 1000]]), ('boundary control', [[[5, 6]], '24', '25'], [[5, 6]]), ('normal control', [[[7, 2008], [1001, 3002]], '50', '12'], [[29, 8367], [4171, 12508]]), ('normal control', [[[0, 1], [3, 716], [12345, 16324]], '29.97', '48'], [[0, 1], [2, 447], [7708, 10192]]), ('normal control', [[[7, 2849], [7, 10], [1, 1001], [7, 3995]], '15', '29.97'], [[4, 1426], [4, 5], [1, 501], [4, 1999]])], [('regression: rational rate parsing', [[[1, 4], [7, 9], [12345, 14346], [1001, 1002]], '24000/1001', '12'], [[2, 8], [14, 18], [24665, 28663], [2000, 2002]]), ('regression variant: rational rate parsing', [[[3, 2004]], '24000/1001', '30000/1001'], [[2, 1603]]), ('partial repair probe: rational rate parsing', [[[252986, 253737]], '23.976', '24000/1001'], [[252986, 253737]]), ('partial repair variant: rational rate parsing', [[[654091, 654093]], '30000/1001', '24'], [[816797, 816799]]), ('boundary control', [[[5, 6]], '24', '25'], [[5, 6]]), ('boundary control', [[[1, 2], [3, 4]], '23.976', '25'], [[1, 2], [3, 4]]), ('normal control', [[[1001, 1004], [7, 9], [999, 1001]], '30', '25'], [[1201, 1205], [8, 11], [1199, 1201]]), ('normal control', [[[3, 6]], '29.97', '24'], [[4, 7]]), ('normal control', [[[1, 2], [7, 2008], [1001, 1002]], '50', '25'], [[2, 4], [14, 4016], [2002, 2004]])]]
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: rational rate parsing[[1000, 3000]][[1000, 3000]]Passed
regression variant: rational rate parsing[[3, 4], [12357, 12916]][[3, 4], [12357, 12916]]Passed
partial repair probe: rational rate parsing[[1002, 2971], [1002, 4380]][[1002, 2971], [1002, 4380]]Passed
partial repair variant: rational rate parsing[[0, 4], [4, 8]][[0, 4], [4, 8]]Passed
boundary control[[500, 1000]][[500, 1000]]Passed
boundary control[[5, 6]][[5, 6]]Passed
normal control[[1, 2], [3, 4]][[1, 2], [3, 4]]Passed
normal control[[6, 8], [835, 3589], [10298, 10300], [0, 84]][[6, 8], [835, 3589], [10298, 10300], [0, 84]]Passed
normal control[[644050, 644054], [29628, 34430], [0, 101]][[644050, 644054], [29628, 34430], [0, 101]]Passed

SHA-256 / 2ac7ae5f4eb3463db36a0f63aeb2faf36d23b962d521dafe830f25ecf9f4c51a

Verification & scope

A deterministic bounded teaching model with a stipulated toy contract; it does not claim conformance to any subtitle 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:30.439083+00:00.

Case digest / 4069b3d8f1ccac1c07782d2fea38f2ffe4f0628b55f8b84b03f2d1f0df94b74e