FAILURE MAP
← Case archive

FA-97031 / Recipe scaling and nutrition / Open access

Baking pan substitution: round pan radius · case 01

A 9-inch round is treated as four times larger than it is.

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

ROOT CAUSE

The diameter is squared as if it were the radius.

VERIFIED REPAIR

Square half the diameter.

Unsuccessful approach: Without parentheses 2 ** 2 binds first, giving pi*d/4 instead of pi*(d/2)^2.

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
        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: round pan radius', [['rect', 8, 13], ['round', 10], 30, False],
   {'factor': 1.0, 'minutes': 35, 'warning': None}],
  ['repair check: round pan radius', [['round', 8], ['round', 6], 20, True],
   {'factor': 0.56, 'minutes': 20, 'warning': None}],
  ['generated control 1', [['rect', 8, 15], ['rect', 8, 12], 30, False],
   {'factor': 1.0, 'minutes': 35, 'warning': None}],
  ['generated control 2', [['square', 9], ['rect', 8, 13], 30, False],
   {'factor': 1.0, 'minutes': 25, 'warning': None}],
  ['generated control 3', [['rect', 9, 15], ['rect', 9, 13], 30, True],
   {'factor': 0.87, '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}],
  ['bad pan', [['bundt', 10], ['square', 8], 30, True], 'error: pan'],
  ['regression: round pan radius', [['square', 8], ['round', 9], 45, False],
   {'factor': 1.0, 'minutes': 45, 'warning': None}],
  ['repair check: round pan radius', [['round', 12], ['round', 6], 35, True],
   {'factor': 0.25, 'minutes': 35, 'warning': None}],
  ['generated control 1', [['rect', 9, 12], ['square', 12], 35, False],
   {'factor': 1.0, 'minutes': 30, 'warning': None}],
  ['generated control 2', [['round', 6], ['square', 12], 25, False],
   {'factor': 1.0, 'minutes': 15, 'warning': None}],
  ['generated control 3', [['rect', 11, 12], ['rect', 8, 13], 30, True],
   {'factor': 0.79, 'minutes': 30, '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'],
  ['same pan', [['square', 8], ['square', 8], 30, False], {'factor': 1.0, 'minutes': 30, 'warning': None}],
  ['regression: round pan radius', [['square', 12], ['round', 10], 35, False],
   {'factor': 1.0, 'minutes': 50, 'warning': 'overflow risk'}],
  ['repair check: round pan radius', [['round', 9], ['round', 6], 20, False],
   {'factor': 1.0, 'minutes': 35, 'warning': 'overflow risk'}],
  ['generated control 1', [['rect', 9, 12], ['rect', 11, 12], 30, False],
   {'factor': 1.0, 'minutes': 25, 'warning': None}],
  ['generated control 2', [['rect', 8, 15], ['rect', 11, 15], 30, True],
   {'factor': 1.38, 'minutes': 30, 'warning': None}],
  ['generated control 3', [['rect', 9, 13], ['rect', 11, 15], 25, True],
   {'factor': 1.41, 'minutes': 25, '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}],
  ['ratio exactly 1.5', [['square', 12], ['rect', 8, 12], 30, False],
   {'factor': 1.0, 'minutes': 40, 'warning': None}],
  ['regression: round pan radius', [['rect', 9, 15], ['round', 6], 45, True],
   {'factor': 0.21, 'minutes': 45, 'warning': None}],
  ['repair check: round pan radius', [['rect', 9, 13], ['round', 12], 30, True],
   {'factor': 0.97, 'minutes': 30, 'warning': None}],
  ['generated control 1', [['rect', 11, 12], ['square', 6], 35, False],
   {'factor': 1.0, 'minutes': 80, 'warning': 'overflow risk'}],
  ['generated control 2', [['rect', 8, 12], ['rect', 9, 12], 35, True],
   {'factor': 1.12, 'minutes': 35, 'warning': None}],
  ['generated control 3', [['rect', 8, 12], ['rect', 11, 15], 25, False],
   {'factor': 1.0, 'minutes': 20, '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: round pan radius', [['rect', 9, 12], ['round', 8], 30, True],
   {'factor': 0.47, 'minutes': 30, 'warning': None}],
  ['repair check: round pan radius', [['rect', 8, 13], ['round', 6], 25, False],
   {'factor': 1.0, 'minutes': 60, 'warning': 'overflow risk'}],
  ['generated control 1', [['rect', 11, 13], ['rect', 8, 15], 20, False],
   {'factor': 1.0, 'minutes': 20, 'warning': None}],
  ['generated control 2', [['rect', 9, 15], ['square', 12], 25, False],
   {'factor': 1.0, 'minutes': 25, 'warning': None}],
  ['generated control 3', [['square', 9], ['square', 12], 30, True],
   {'factor': 1.78, 'minutes': 30, 'warning': 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 fixtureActualExpectedOutcome
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.32, 'minutes': 30, 'warning': None}{'factor': 1.27, 'minutes': 30, 'warning': None}Failed
regression: round pan radius{'factor': 1.0, 'minutes': 20, 'warning': None}{'factor': 1.0, 'minutes': 35, 'warning': None}Failed
repair check: round pan radius{'factor': 0.56, 'minutes': 20, 'warning': None}{'factor': 0.56, 'minutes': 20, 'warning': None}Passed
generated control 1{'factor': 1.0, 'minutes': 35, 'warning': None}{'factor': 1.0, 'minutes': 35, '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': 0.87, 'minutes': 30, 'warning': None}{'factor': 0.87, 'minutes': 30, 'warning': None}Passed

SHA-256 / 1ef791113811962518fcd92a146181e8878460b7ed2b33bca246d0b471246609

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(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: round pan radius', [['rect', 8, 13], ['round', 10], 30, False],
   {'factor': 1.0, 'minutes': 35, 'warning': None}],
  ['repair check: round pan radius', [['round', 8], ['round', 6], 20, True],
   {'factor': 0.56, 'minutes': 20, 'warning': None}],
  ['generated control 1', [['rect', 8, 15], ['rect', 8, 12], 30, False],
   {'factor': 1.0, 'minutes': 35, 'warning': None}],
  ['generated control 2', [['square', 9], ['rect', 8, 13], 30, False],
   {'factor': 1.0, 'minutes': 25, 'warning': None}],
  ['generated control 3', [['rect', 9, 15], ['rect', 9, 13], 30, True],
   {'factor': 0.87, '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}],
  ['bad pan', [['bundt', 10], ['square', 8], 30, True], 'error: pan'],
  ['regression: round pan radius', [['square', 8], ['round', 9], 45, False],
   {'factor': 1.0, 'minutes': 45, 'warning': None}],
  ['repair check: round pan radius', [['round', 12], ['round', 6], 35, True],
   {'factor': 0.25, 'minutes': 35, 'warning': None}],
  ['generated control 1', [['rect', 9, 12], ['square', 12], 35, False],
   {'factor': 1.0, 'minutes': 30, 'warning': None}],
  ['generated control 2', [['round', 6], ['square', 12], 25, False],
   {'factor': 1.0, 'minutes': 15, 'warning': None}],
  ['generated control 3', [['rect', 11, 12], ['rect', 8, 13], 30, True],
   {'factor': 0.79, 'minutes': 30, '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'],
  ['same pan', [['square', 8], ['square', 8], 30, False], {'factor': 1.0, 'minutes': 30, 'warning': None}],
  ['regression: round pan radius', [['square', 12], ['round', 10], 35, False],
   {'factor': 1.0, 'minutes': 50, 'warning': 'overflow risk'}],
  ['repair check: round pan radius', [['round', 9], ['round', 6], 20, False],
   {'factor': 1.0, 'minutes': 35, 'warning': 'overflow risk'}],
  ['generated control 1', [['rect', 9, 12], ['rect', 11, 12], 30, False],
   {'factor': 1.0, 'minutes': 25, 'warning': None}],
  ['generated control 2', [['rect', 8, 15], ['rect', 11, 15], 30, True],
   {'factor': 1.38, 'minutes': 30, 'warning': None}],
  ['generated control 3', [['rect', 9, 13], ['rect', 11, 15], 25, True],
   {'factor': 1.41, 'minutes': 25, '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}],
  ['ratio exactly 1.5', [['square', 12], ['rect', 8, 12], 30, False],
   {'factor': 1.0, 'minutes': 40, 'warning': None}],
  ['regression: round pan radius', [['rect', 9, 15], ['round', 6], 45, True],
   {'factor': 0.21, 'minutes': 45, 'warning': None}],
  ['repair check: round pan radius', [['rect', 9, 13], ['round', 12], 30, True],
   {'factor': 0.97, 'minutes': 30, 'warning': None}],
  ['generated control 1', [['rect', 11, 12], ['square', 6], 35, False],
   {'factor': 1.0, 'minutes': 80, 'warning': 'overflow risk'}],
  ['generated control 2', [['rect', 8, 12], ['rect', 9, 12], 35, True],
   {'factor': 1.12, 'minutes': 35, 'warning': None}],
  ['generated control 3', [['rect', 8, 12], ['rect', 11, 15], 25, False],
   {'factor': 1.0, 'minutes': 20, '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: round pan radius', [['rect', 9, 12], ['round', 8], 30, True],
   {'factor': 0.47, 'minutes': 30, 'warning': None}],
  ['repair check: round pan radius', [['rect', 8, 13], ['round', 6], 25, False],
   {'factor': 1.0, 'minutes': 60, 'warning': 'overflow risk'}],
  ['generated control 1', [['rect', 11, 13], ['rect', 8, 15], 20, False],
   {'factor': 1.0, 'minutes': 20, 'warning': None}],
  ['generated control 2', [['rect', 9, 15], ['square', 12], 25, False],
   {'factor': 1.0, 'minutes': 25, 'warning': None}],
  ['generated control 3', [['square', 9], ['square', 12], 30, True],
   {'factor': 1.78, 'minutes': 30, 'warning': 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 fixtureActualExpectedOutcome
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': 11.46, 'minutes': 30, 'warning': None}{'factor': 1.27, 'minutes': 30, 'warning': None}Failed
regression: round pan radius{'factor': 1.0, 'minutes': 215, 'warning': 'overflow risk'}{'factor': 1.0, 'minutes': 35, 'warning': None}Failed
repair check: round pan radius{'factor': 0.75, 'minutes': 20, 'warning': None}{'factor': 0.56, 'minutes': 20, 'warning': None}Failed
generated control 1{'factor': 1.0, 'minutes': 35, 'warning': None}{'factor': 1.0, 'minutes': 35, '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': 0.87, 'minutes': 30, 'warning': None}{'factor': 0.87, 'minutes': 30, 'warning': None}Passed

SHA-256 / 4570093525e196661a81ec6ceac90c1dcdcae882b655e274b0344ab9fea7bdb5

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: round pan radius', [['rect', 8, 13], ['round', 10], 30, False],
   {'factor': 1.0, 'minutes': 35, 'warning': None}],
  ['repair check: round pan radius', [['round', 8], ['round', 6], 20, True],
   {'factor': 0.56, 'minutes': 20, 'warning': None}],
  ['generated control 1', [['rect', 8, 15], ['rect', 8, 12], 30, False],
   {'factor': 1.0, 'minutes': 35, 'warning': None}],
  ['generated control 2', [['square', 9], ['rect', 8, 13], 30, False],
   {'factor': 1.0, 'minutes': 25, 'warning': None}],
  ['generated control 3', [['rect', 9, 15], ['rect', 9, 13], 30, True],
   {'factor': 0.87, '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}],
  ['bad pan', [['bundt', 10], ['square', 8], 30, True], 'error: pan'],
  ['regression: round pan radius', [['square', 8], ['round', 9], 45, False],
   {'factor': 1.0, 'minutes': 45, 'warning': None}],
  ['repair check: round pan radius', [['round', 12], ['round', 6], 35, True],
   {'factor': 0.25, 'minutes': 35, 'warning': None}],
  ['generated control 1', [['rect', 9, 12], ['square', 12], 35, False],
   {'factor': 1.0, 'minutes': 30, 'warning': None}],
  ['generated control 2', [['round', 6], ['square', 12], 25, False],
   {'factor': 1.0, 'minutes': 15, 'warning': None}],
  ['generated control 3', [['rect', 11, 12], ['rect', 8, 13], 30, True],
   {'factor': 0.79, 'minutes': 30, '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'],
  ['same pan', [['square', 8], ['square', 8], 30, False], {'factor': 1.0, 'minutes': 30, 'warning': None}],
  ['regression: round pan radius', [['square', 12], ['round', 10], 35, False],
   {'factor': 1.0, 'minutes': 50, 'warning': 'overflow risk'}],
  ['repair check: round pan radius', [['round', 9], ['round', 6], 20, False],
   {'factor': 1.0, 'minutes': 35, 'warning': 'overflow risk'}],
  ['generated control 1', [['rect', 9, 12], ['rect', 11, 12], 30, False],
   {'factor': 1.0, 'minutes': 25, 'warning': None}],
  ['generated control 2', [['rect', 8, 15], ['rect', 11, 15], 30, True],
   {'factor': 1.38, 'minutes': 30, 'warning': None}],
  ['generated control 3', [['rect', 9, 13], ['rect', 11, 15], 25, True],
   {'factor': 1.41, 'minutes': 25, '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}],
  ['ratio exactly 1.5', [['square', 12], ['rect', 8, 12], 30, False],
   {'factor': 1.0, 'minutes': 40, 'warning': None}],
  ['regression: round pan radius', [['rect', 9, 15], ['round', 6], 45, True],
   {'factor': 0.21, 'minutes': 45, 'warning': None}],
  ['repair check: round pan radius', [['rect', 9, 13], ['round', 12], 30, True],
   {'factor': 0.97, 'minutes': 30, 'warning': None}],
  ['generated control 1', [['rect', 11, 12], ['square', 6], 35, False],
   {'factor': 1.0, 'minutes': 80, 'warning': 'overflow risk'}],
  ['generated control 2', [['rect', 8, 12], ['rect', 9, 12], 35, True],
   {'factor': 1.12, 'minutes': 35, 'warning': None}],
  ['generated control 3', [['rect', 8, 12], ['rect', 11, 15], 25, False],
   {'factor': 1.0, 'minutes': 20, '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: round pan radius', [['rect', 9, 12], ['round', 8], 30, True],
   {'factor': 0.47, 'minutes': 30, 'warning': None}],
  ['repair check: round pan radius', [['rect', 8, 13], ['round', 6], 25, False],
   {'factor': 1.0, 'minutes': 60, 'warning': 'overflow risk'}],
  ['generated control 1', [['rect', 11, 13], ['rect', 8, 15], 20, False],
   {'factor': 1.0, 'minutes': 20, 'warning': None}],
  ['generated control 2', [['rect', 9, 15], ['square', 12], 25, False],
   {'factor': 1.0, 'minutes': 25, 'warning': None}],
  ['generated control 3', [['square', 9], ['square', 12], 30, True],
   {'factor': 1.78, 'minutes': 30, 'warning': 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 fixtureActualExpectedOutcome
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: round pan radius{'factor': 1.0, 'minutes': 35, 'warning': None}{'factor': 1.0, 'minutes': 35, 'warning': None}Passed
repair check: round pan radius{'factor': 0.56, 'minutes': 20, 'warning': None}{'factor': 0.56, 'minutes': 20, 'warning': None}Passed
generated control 1{'factor': 1.0, 'minutes': 35, 'warning': None}{'factor': 1.0, 'minutes': 35, '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': 0.87, 'minutes': 30, 'warning': None}{'factor': 0.87, 'minutes': 30, 'warning': None}Passed

SHA-256 / 9ffac353162182383c6a8a7301fade087c7db61fabf0c83018f5fd8c772cfd09

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

Case digest / 1ea587a65b722eda61dee59d7578c727ac529708f49c272ed80e50bdd6303e58