FA-97036 / Recipe scaling and nutrition / Open access
Baking pan substitution: fill factor direction · case 01
Moving to a bigger pan shrinks the recipe.
ROOT CAUSE
The fill factor divides old area by new area.
VERIFIED REPAIR
Scale by new area over old area.
Unsuccessful approach: Always dividing larger by smaller never scales a recipe down for a smaller pan.
Case contract
Pans: ["round", diameter], ["square", side], ["rect", w, l] in inches; other -> "error: pan". If scale_to_fill, return factor round(area_new/area_old, 2), same minutes, warning None. Otherwise the same batter goes into the new pan: depth ratio = area_old/area_new, minutes = bake_min*(1+(ratio-1)/2) rounded half-up to a multiple of 5, factor 1.0, warning "overflow risk" when ratio > 1.5 else None.
Why this case matters
Bakers swap pan shapes and must scale the batter or adjust bake time for batter depth.
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(old_pan, new_pan, bake_min, scale_to_fill):
def area(p):
if p[0] == 'round':
return math.pi * (p[1] / 2) ** 2
if p[0] == 'square':
return p[1] * p[1]
if p[0] == 'rect':
return p[1] * p[2]
return None
a0, a1 = area(old_pan), area(new_pan)
if not a0 or not a1:
return 'error: pan'
if scale_to_fill:
return {'factor': round(a0 / a1, 2), 'minutes': bake_min, 'warning': None}
depth = a0 / a1
minutes = 5 * math.floor(bake_min * (1 + (depth - 1) / 2) / 5 + 0.5)
return {'factor': 1.0, 'minutes': minutes, 'warning': 'overflow risk' if depth > 1.5 else None}
def check(label, actual, expected):
observations.append({"check": label, "actual": actual, "expected": expected, "passed": actual == expected})
fixtures = [[['same pan', [['square', 8], ['square', 8], 30, False], {'factor': 1.0, 'minutes': 30, 'warning': None}],
['ratio exactly 1.5', [['square', 12], ['rect', 8, 12], 30, False],
{'factor': 1.0, 'minutes': 40, 'warning': None}],
['round to square fill', [['round', 9], ['square', 9], 30, True],
{'factor': 1.27, 'minutes': 30, 'warning': None}],
['regression: fill factor direction', [['rect', 9, 15], ['square', 6], 35, True],
{'factor': 0.27, 'minutes': 35, 'warning': None}],
['repair check: fill factor direction', [['rect', 8, 13], ['square', 6], 20, True],
{'factor': 0.35, 'minutes': 20, 'warning': None}],
['generated control 1', [['rect', 9, 13], ['rect', 8, 13], 20, False],
{'factor': 1.0, 'minutes': 20, 'warning': None}],
['generated control 2', [['rect', 11, 13], ['rect', 9, 15], 25, False],
{'factor': 1.0, 'minutes': 25, 'warning': None}],
['generated control 3', [['square', 8], ['square', 12], 30, False],
{'factor': 1.0, 'minutes': 20, 'warning': None}]],
[['ratio exactly 1.5', [['square', 12], ['rect', 8, 12], 30, False],
{'factor': 1.0, 'minutes': 40, 'warning': None}],
['round to square fill', [['round', 9], ['square', 9], 30, True],
{'factor': 1.27, 'minutes': 30, 'warning': None}],
['bad pan', [['bundt', 10], ['square', 8], 30, True], 'error: pan'],
['regression: fill factor direction', [['square', 6], ['rect', 11, 13], 35, True],
{'factor': 3.97, 'minutes': 35, 'warning': None}],
['repair check: fill factor direction', [['rect', 11, 15], ['square', 6], 25, True],
{'factor': 0.22, 'minutes': 25, 'warning': None}],
['generated control 1', [['rect', 9, 12], ['rect', 11, 13], 45, False],
{'factor': 1.0, 'minutes': 40, 'warning': None}],
['generated control 2', [['rect', 9, 13], ['rect', 8, 15], 30, False],
{'factor': 1.0, 'minutes': 30, 'warning': None}],
['generated control 3', [['rect', 9, 12], ['round', 6], 35, False],
{'factor': 1.0, 'minutes': 85, 'warning': 'overflow risk'}]],
[['round to square fill', [['round', 9], ['square', 9], 30, True],
{'factor': 1.27, 'minutes': 30, 'warning': None}],
['bad pan', [['bundt', 10], ['square', 8], 30, True], 'error: pan'],
['same pan', [['square', 8], ['square', 8], 30, False], {'factor': 1.0, 'minutes': 30, 'warning': None}],
['regression: fill factor direction', [['round', 12], ['rect', 11, 15], 20, True],
{'factor': 1.46, 'minutes': 20, 'warning': None}],
['repair check: fill factor direction', [['square', 9], ['square', 8], 25, True],
{'factor': 0.79, 'minutes': 25, 'warning': None}],
['generated control 1', [['square', 12], ['square', 6], 45, False],
{'factor': 1.0, 'minutes': 115, 'warning': 'overflow risk'}],
['generated control 2', [['square', 8], ['square', 6], 35, False],
{'factor': 1.0, 'minutes': 50, 'warning': 'overflow risk'}],
['generated control 3', [['rect', 11, 15], ['round', 8], 35, False],
{'factor': 1.0, 'minutes': 75, 'warning': 'overflow risk'}]],
[['bad pan', [['bundt', 10], ['square', 8], 30, True], 'error: pan'],
['same pan', [['square', 8], ['square', 8], 30, False], {'factor': 1.0, 'minutes': 30, 'warning': None}],
['ratio exactly 1.5', [['square', 12], ['rect', 8, 12], 30, False],
{'factor': 1.0, 'minutes': 40, 'warning': None}],
['regression: fill factor direction', [['rect', 11, 13], ['round', 12], 25, True],
{'factor': 0.79, 'minutes': 25, 'warning': None}],
['repair check: fill factor direction', [['square', 8], ['round', 6], 20, True],
{'factor': 0.44, 'minutes': 20, 'warning': None}],
['generated control 1', [['round', 12], ['rect', 9, 13], 35, False],
{'factor': 1.0, 'minutes': 35, 'warning': None}],
['generated control 2', [['rect', 8, 15], ['round', 12], 20, False],
{'factor': 1.0, 'minutes': 20, 'warning': None}],
['generated control 3', [['square', 8], ['round', 9], 35, False],
{'factor': 1.0, 'minutes': 35, 'warning': None}]],
[['same pan', [['square', 8], ['square', 8], 30, False], {'factor': 1.0, 'minutes': 30, 'warning': None}],
['ratio exactly 1.5', [['square', 12], ['rect', 8, 12], 30, False],
{'factor': 1.0, 'minutes': 40, 'warning': None}],
['round to square fill', [['round', 9], ['square', 9], 30, True],
{'factor': 1.27, 'minutes': 30, 'warning': None}],
['regression: fill factor direction', [['square', 8], ['rect', 9, 12], 30, True],
{'factor': 1.69, 'minutes': 30, 'warning': None}],
['repair check: fill factor direction', [['round', 8], ['square', 6], 35, True],
{'factor': 0.72, 'minutes': 35, 'warning': None}],
['generated control 1', [['square', 6], ['rect', 8, 12], 20, True],
{'factor': 2.67, 'minutes': 20, 'warning': None}],
['generated control 2', [['rect', 8, 12], ['rect', 11, 13], 35, True],
{'factor': 1.49, 'minutes': 35, 'warning': None}],
['generated control 3', [['rect', 9, 12], ['round', 6], 45, False],
{'factor': 1.0, 'minutes': 110, 'warning': 'overflow risk'}]]]
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 |
|---|---|---|---|
| same pan | {'factor': 1.0, 'minutes': 30, 'warning': None} | {'factor': 1.0, 'minutes': 30, 'warning': None} | Passed |
| ratio exactly 1.5 | {'factor': 1.0, 'minutes': 40, 'warning': None} | {'factor': 1.0, 'minutes': 40, 'warning': None} | Passed |
| round to square fill | {'factor': 0.79, 'minutes': 30, 'warning': None} | {'factor': 1.27, 'minutes': 30, 'warning': None} | Failed |
| regression: fill factor direction | {'factor': 3.75, 'minutes': 35, 'warning': None} | {'factor': 0.27, 'minutes': 35, 'warning': None} | Failed |
| repair check: fill factor direction | {'factor': 2.89, 'minutes': 20, 'warning': None} | {'factor': 0.35, 'minutes': 20, 'warning': None} | Failed |
| generated control 1 | {'factor': 1.0, 'minutes': 20, 'warning': None} | {'factor': 1.0, 'minutes': 20, 'warning': None} | Passed |
| generated control 2 | {'factor': 1.0, 'minutes': 25, 'warning': None} | {'factor': 1.0, 'minutes': 25, 'warning': None} | Passed |
| generated control 3 | {'factor': 1.0, 'minutes': 20, 'warning': None} | {'factor': 1.0, 'minutes': 20, 'warning': None} | Passed |
SHA-256 / ee8d18f39b2ada717f8da1e87a49cc70c28b303d5049969c976ae2672524b1fd
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(old_pan, new_pan, bake_min, scale_to_fill):
def area(p):
if p[0] == 'round':
return math.pi * (p[1] / 2) ** 2
if p[0] == 'square':
return p[1] * p[1]
if p[0] == 'rect':
return p[1] * p[2]
return None
a0, a1 = area(old_pan), area(new_pan)
if not a0 or not a1:
return 'error: pan'
if scale_to_fill:
return {'factor': round(max(a0, a1) / min(a0, a1), 2), 'minutes': bake_min, 'warning': None}
depth = a0 / a1
minutes = 5 * math.floor(bake_min * (1 + (depth - 1) / 2) / 5 + 0.5)
return {'factor': 1.0, 'minutes': minutes, 'warning': 'overflow risk' if depth > 1.5 else None}
def check(label, actual, expected):
observations.append({"check": label, "actual": actual, "expected": expected, "passed": actual == expected})
fixtures = [[['same pan', [['square', 8], ['square', 8], 30, False], {'factor': 1.0, 'minutes': 30, 'warning': None}],
['ratio exactly 1.5', [['square', 12], ['rect', 8, 12], 30, False],
{'factor': 1.0, 'minutes': 40, 'warning': None}],
['round to square fill', [['round', 9], ['square', 9], 30, True],
{'factor': 1.27, 'minutes': 30, 'warning': None}],
['regression: fill factor direction', [['rect', 9, 15], ['square', 6], 35, True],
{'factor': 0.27, 'minutes': 35, 'warning': None}],
['repair check: fill factor direction', [['rect', 8, 13], ['square', 6], 20, True],
{'factor': 0.35, 'minutes': 20, 'warning': None}],
['generated control 1', [['rect', 9, 13], ['rect', 8, 13], 20, False],
{'factor': 1.0, 'minutes': 20, 'warning': None}],
['generated control 2', [['rect', 11, 13], ['rect', 9, 15], 25, False],
{'factor': 1.0, 'minutes': 25, 'warning': None}],
['generated control 3', [['square', 8], ['square', 12], 30, False],
{'factor': 1.0, 'minutes': 20, 'warning': None}]],
[['ratio exactly 1.5', [['square', 12], ['rect', 8, 12], 30, False],
{'factor': 1.0, 'minutes': 40, 'warning': None}],
['round to square fill', [['round', 9], ['square', 9], 30, True],
{'factor': 1.27, 'minutes': 30, 'warning': None}],
['bad pan', [['bundt', 10], ['square', 8], 30, True], 'error: pan'],
['regression: fill factor direction', [['square', 6], ['rect', 11, 13], 35, True],
{'factor': 3.97, 'minutes': 35, 'warning': None}],
['repair check: fill factor direction', [['rect', 11, 15], ['square', 6], 25, True],
{'factor': 0.22, 'minutes': 25, 'warning': None}],
['generated control 1', [['rect', 9, 12], ['rect', 11, 13], 45, False],
{'factor': 1.0, 'minutes': 40, 'warning': None}],
['generated control 2', [['rect', 9, 13], ['rect', 8, 15], 30, False],
{'factor': 1.0, 'minutes': 30, 'warning': None}],
['generated control 3', [['rect', 9, 12], ['round', 6], 35, False],
{'factor': 1.0, 'minutes': 85, 'warning': 'overflow risk'}]],
[['round to square fill', [['round', 9], ['square', 9], 30, True],
{'factor': 1.27, 'minutes': 30, 'warning': None}],
['bad pan', [['bundt', 10], ['square', 8], 30, True], 'error: pan'],
['same pan', [['square', 8], ['square', 8], 30, False], {'factor': 1.0, 'minutes': 30, 'warning': None}],
['regression: fill factor direction', [['round', 12], ['rect', 11, 15], 20, True],
{'factor': 1.46, 'minutes': 20, 'warning': None}],
['repair check: fill factor direction', [['square', 9], ['square', 8], 25, True],
{'factor': 0.79, 'minutes': 25, 'warning': None}],
['generated control 1', [['square', 12], ['square', 6], 45, False],
{'factor': 1.0, 'minutes': 115, 'warning': 'overflow risk'}],
['generated control 2', [['square', 8], ['square', 6], 35, False],
{'factor': 1.0, 'minutes': 50, 'warning': 'overflow risk'}],
['generated control 3', [['rect', 11, 15], ['round', 8], 35, False],
{'factor': 1.0, 'minutes': 75, 'warning': 'overflow risk'}]],
[['bad pan', [['bundt', 10], ['square', 8], 30, True], 'error: pan'],
['same pan', [['square', 8], ['square', 8], 30, False], {'factor': 1.0, 'minutes': 30, 'warning': None}],
['ratio exactly 1.5', [['square', 12], ['rect', 8, 12], 30, False],
{'factor': 1.0, 'minutes': 40, 'warning': None}],
['regression: fill factor direction', [['rect', 11, 13], ['round', 12], 25, True],
{'factor': 0.79, 'minutes': 25, 'warning': None}],
['repair check: fill factor direction', [['square', 8], ['round', 6], 20, True],
{'factor': 0.44, 'minutes': 20, 'warning': None}],
['generated control 1', [['round', 12], ['rect', 9, 13], 35, False],
{'factor': 1.0, 'minutes': 35, 'warning': None}],
['generated control 2', [['rect', 8, 15], ['round', 12], 20, False],
{'factor': 1.0, 'minutes': 20, 'warning': None}],
['generated control 3', [['square', 8], ['round', 9], 35, False],
{'factor': 1.0, 'minutes': 35, 'warning': None}]],
[['same pan', [['square', 8], ['square', 8], 30, False], {'factor': 1.0, 'minutes': 30, 'warning': None}],
['ratio exactly 1.5', [['square', 12], ['rect', 8, 12], 30, False],
{'factor': 1.0, 'minutes': 40, 'warning': None}],
['round to square fill', [['round', 9], ['square', 9], 30, True],
{'factor': 1.27, 'minutes': 30, 'warning': None}],
['regression: fill factor direction', [['square', 8], ['rect', 9, 12], 30, True],
{'factor': 1.69, 'minutes': 30, 'warning': None}],
['repair check: fill factor direction', [['round', 8], ['square', 6], 35, True],
{'factor': 0.72, 'minutes': 35, 'warning': None}],
['generated control 1', [['square', 6], ['rect', 8, 12], 20, True],
{'factor': 2.67, 'minutes': 20, 'warning': None}],
['generated control 2', [['rect', 8, 12], ['rect', 11, 13], 35, True],
{'factor': 1.49, 'minutes': 35, 'warning': None}],
['generated control 3', [['rect', 9, 12], ['round', 6], 45, False],
{'factor': 1.0, 'minutes': 110, 'warning': 'overflow risk'}]]]
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 |
|---|---|---|---|
| same pan | {'factor': 1.0, 'minutes': 30, 'warning': None} | {'factor': 1.0, 'minutes': 30, 'warning': None} | Passed |
| ratio exactly 1.5 | {'factor': 1.0, 'minutes': 40, 'warning': None} | {'factor': 1.0, 'minutes': 40, 'warning': None} | Passed |
| round to square fill | {'factor': 1.27, 'minutes': 30, 'warning': None} | {'factor': 1.27, 'minutes': 30, 'warning': None} | Passed |
| regression: fill factor direction | {'factor': 3.75, 'minutes': 35, 'warning': None} | {'factor': 0.27, 'minutes': 35, 'warning': None} | Failed |
| repair check: fill factor direction | {'factor': 2.89, 'minutes': 20, 'warning': None} | {'factor': 0.35, 'minutes': 20, 'warning': None} | Failed |
| generated control 1 | {'factor': 1.0, 'minutes': 20, 'warning': None} | {'factor': 1.0, 'minutes': 20, 'warning': None} | Passed |
| generated control 2 | {'factor': 1.0, 'minutes': 25, 'warning': None} | {'factor': 1.0, 'minutes': 25, 'warning': None} | Passed |
| generated control 3 | {'factor': 1.0, 'minutes': 20, 'warning': None} | {'factor': 1.0, 'minutes': 20, 'warning': None} | Passed |
SHA-256 / bf1d4466b9d5a221874d84b65cef0bb850610d4f3eb55a3a101761141cbbffa3
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(old_pan, new_pan, bake_min, scale_to_fill):
def area(p):
if p[0] == 'round':
return math.pi * (p[1] / 2) ** 2
if p[0] == 'square':
return p[1] * p[1]
if p[0] == 'rect':
return p[1] * p[2]
return None
a0, a1 = area(old_pan), area(new_pan)
if not a0 or not a1:
return 'error: pan'
if scale_to_fill:
return {'factor': round(a1 / a0, 2), 'minutes': bake_min, 'warning': None}
depth = a0 / a1
minutes = 5 * math.floor(bake_min * (1 + (depth - 1) / 2) / 5 + 0.5)
return {'factor': 1.0, 'minutes': minutes, 'warning': 'overflow risk' if depth > 1.5 else None}
def check(label, actual, expected):
observations.append({"check": label, "actual": actual, "expected": expected, "passed": actual == expected})
fixtures = [[['same pan', [['square', 8], ['square', 8], 30, False], {'factor': 1.0, 'minutes': 30, 'warning': None}],
['ratio exactly 1.5', [['square', 12], ['rect', 8, 12], 30, False],
{'factor': 1.0, 'minutes': 40, 'warning': None}],
['round to square fill', [['round', 9], ['square', 9], 30, True],
{'factor': 1.27, 'minutes': 30, 'warning': None}],
['regression: fill factor direction', [['rect', 9, 15], ['square', 6], 35, True],
{'factor': 0.27, 'minutes': 35, 'warning': None}],
['repair check: fill factor direction', [['rect', 8, 13], ['square', 6], 20, True],
{'factor': 0.35, 'minutes': 20, 'warning': None}],
['generated control 1', [['rect', 9, 13], ['rect', 8, 13], 20, False],
{'factor': 1.0, 'minutes': 20, 'warning': None}],
['generated control 2', [['rect', 11, 13], ['rect', 9, 15], 25, False],
{'factor': 1.0, 'minutes': 25, 'warning': None}],
['generated control 3', [['square', 8], ['square', 12], 30, False],
{'factor': 1.0, 'minutes': 20, 'warning': None}]],
[['ratio exactly 1.5', [['square', 12], ['rect', 8, 12], 30, False],
{'factor': 1.0, 'minutes': 40, 'warning': None}],
['round to square fill', [['round', 9], ['square', 9], 30, True],
{'factor': 1.27, 'minutes': 30, 'warning': None}],
['bad pan', [['bundt', 10], ['square', 8], 30, True], 'error: pan'],
['regression: fill factor direction', [['square', 6], ['rect', 11, 13], 35, True],
{'factor': 3.97, 'minutes': 35, 'warning': None}],
['repair check: fill factor direction', [['rect', 11, 15], ['square', 6], 25, True],
{'factor': 0.22, 'minutes': 25, 'warning': None}],
['generated control 1', [['rect', 9, 12], ['rect', 11, 13], 45, False],
{'factor': 1.0, 'minutes': 40, 'warning': None}],
['generated control 2', [['rect', 9, 13], ['rect', 8, 15], 30, False],
{'factor': 1.0, 'minutes': 30, 'warning': None}],
['generated control 3', [['rect', 9, 12], ['round', 6], 35, False],
{'factor': 1.0, 'minutes': 85, 'warning': 'overflow risk'}]],
[['round to square fill', [['round', 9], ['square', 9], 30, True],
{'factor': 1.27, 'minutes': 30, 'warning': None}],
['bad pan', [['bundt', 10], ['square', 8], 30, True], 'error: pan'],
['same pan', [['square', 8], ['square', 8], 30, False], {'factor': 1.0, 'minutes': 30, 'warning': None}],
['regression: fill factor direction', [['round', 12], ['rect', 11, 15], 20, True],
{'factor': 1.46, 'minutes': 20, 'warning': None}],
['repair check: fill factor direction', [['square', 9], ['square', 8], 25, True],
{'factor': 0.79, 'minutes': 25, 'warning': None}],
['generated control 1', [['square', 12], ['square', 6], 45, False],
{'factor': 1.0, 'minutes': 115, 'warning': 'overflow risk'}],
['generated control 2', [['square', 8], ['square', 6], 35, False],
{'factor': 1.0, 'minutes': 50, 'warning': 'overflow risk'}],
['generated control 3', [['rect', 11, 15], ['round', 8], 35, False],
{'factor': 1.0, 'minutes': 75, 'warning': 'overflow risk'}]],
[['bad pan', [['bundt', 10], ['square', 8], 30, True], 'error: pan'],
['same pan', [['square', 8], ['square', 8], 30, False], {'factor': 1.0, 'minutes': 30, 'warning': None}],
['ratio exactly 1.5', [['square', 12], ['rect', 8, 12], 30, False],
{'factor': 1.0, 'minutes': 40, 'warning': None}],
['regression: fill factor direction', [['rect', 11, 13], ['round', 12], 25, True],
{'factor': 0.79, 'minutes': 25, 'warning': None}],
['repair check: fill factor direction', [['square', 8], ['round', 6], 20, True],
{'factor': 0.44, 'minutes': 20, 'warning': None}],
['generated control 1', [['round', 12], ['rect', 9, 13], 35, False],
{'factor': 1.0, 'minutes': 35, 'warning': None}],
['generated control 2', [['rect', 8, 15], ['round', 12], 20, False],
{'factor': 1.0, 'minutes': 20, 'warning': None}],
['generated control 3', [['square', 8], ['round', 9], 35, False],
{'factor': 1.0, 'minutes': 35, 'warning': None}]],
[['same pan', [['square', 8], ['square', 8], 30, False], {'factor': 1.0, 'minutes': 30, 'warning': None}],
['ratio exactly 1.5', [['square', 12], ['rect', 8, 12], 30, False],
{'factor': 1.0, 'minutes': 40, 'warning': None}],
['round to square fill', [['round', 9], ['square', 9], 30, True],
{'factor': 1.27, 'minutes': 30, 'warning': None}],
['regression: fill factor direction', [['square', 8], ['rect', 9, 12], 30, True],
{'factor': 1.69, 'minutes': 30, 'warning': None}],
['repair check: fill factor direction', [['round', 8], ['square', 6], 35, True],
{'factor': 0.72, 'minutes': 35, 'warning': None}],
['generated control 1', [['square', 6], ['rect', 8, 12], 20, True],
{'factor': 2.67, 'minutes': 20, 'warning': None}],
['generated control 2', [['rect', 8, 12], ['rect', 11, 13], 35, True],
{'factor': 1.49, 'minutes': 35, 'warning': None}],
['generated control 3', [['rect', 9, 12], ['round', 6], 45, False],
{'factor': 1.0, 'minutes': 110, 'warning': 'overflow risk'}]]]
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 |
|---|---|---|---|
| same pan | {'factor': 1.0, 'minutes': 30, 'warning': None} | {'factor': 1.0, 'minutes': 30, 'warning': None} | Passed |
| ratio exactly 1.5 | {'factor': 1.0, 'minutes': 40, 'warning': None} | {'factor': 1.0, 'minutes': 40, 'warning': None} | Passed |
| round to square fill | {'factor': 1.27, 'minutes': 30, 'warning': None} | {'factor': 1.27, 'minutes': 30, 'warning': None} | Passed |
| regression: fill factor direction | {'factor': 0.27, 'minutes': 35, 'warning': None} | {'factor': 0.27, 'minutes': 35, 'warning': None} | Passed |
| repair check: fill factor direction | {'factor': 0.35, 'minutes': 20, 'warning': None} | {'factor': 0.35, 'minutes': 20, 'warning': None} | Passed |
| generated control 1 | {'factor': 1.0, 'minutes': 20, 'warning': None} | {'factor': 1.0, 'minutes': 20, 'warning': None} | Passed |
| generated control 2 | {'factor': 1.0, 'minutes': 25, 'warning': None} | {'factor': 1.0, 'minutes': 25, 'warning': None} | Passed |
| generated control 3 | {'factor': 1.0, 'minutes': 20, 'warning': None} | {'factor': 1.0, 'minutes': 20, 'warning': None} | Passed |
SHA-256 / d9371e9843968007a42a26a7a0723cdc58cbd5167bd9f9cfb24e56293e113762
Verification & scope
A deterministic toy contract stated in full here; it is a bounded teaching model, not an authoritative reference or standards implementation. 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:52:28.238309+00:00.
Case digest / 1df48cd33b5d9c85bcffc1317311648b27c65f08c784da943ebb5fda78f840b9