{"abstract":"A 9-inch round is treated as four times larger than it is.","category":"Recipe scaling and nutrition","checks":8,"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.","contract_signature":"old_pan, new_pan, bake_min, scale_to_fill","evaluation_group":"w2-recipe_scaling_and_nutrition-pan-substitution","failed_approach":"Without parentheses 2 ** 2 binds first, giving pi*d/4 instead of pi*(d/2)^2.","family":"w2-recipe_scaling_and_nutrition-pan-substitution-round-pan-radius","id":"FA-97031","implementations":{"attempt":{"sha256":"4570093525e196661a81ec6ceac90c1dcdcae882b655e274b0344ab9fea7bdb5","source":"\"\"\"Failure Map reference implementation. Python standard library only.\"\"\"\nimport json\nimport math\nfrom fractions import Fraction\nN = 1\nobservations = []\ndef solve(old_pan, new_pan, bake_min, scale_to_fill):\n    def area(p):\n        if p[0] == 'round':\n            return math.pi * p[1] / 2 ** 2\n        if p[0] == 'square':\n            return p[1] * p[1]\n        if p[0] == 'rect':\n            return p[1] * p[2]\n        return None\n    a0, a1 = area(old_pan), area(new_pan)\n    if not a0 or not a1:\n        return 'error: pan'\n    if scale_to_fill:\n        return {'factor': round(a1 / a0, 2), 'minutes': bake_min, 'warning': None}\n    depth = a0 / a1\n    minutes = 5 * math.floor(bake_min * (1 + (depth - 1) / 2) / 5 + 0.5)\n    return {'factor': 1.0, 'minutes': minutes, 'warning': 'overflow risk' if depth > 1.5 else None}\ndef check(label, actual, expected):\n    observations.append({\"check\": label, \"actual\": actual, \"expected\": expected, \"passed\": actual == expected})\nfixtures = [[['same pan', [['square', 8], ['square', 8], 30, False], {'factor': 1.0, 'minutes': 30, 'warning': None}],\n  ['ratio exactly 1.5', [['square', 12], ['rect', 8, 12], 30, False],\n   {'factor': 1.0, 'minutes': 40, 'warning': None}],\n  ['round to square fill', [['round', 9], ['square', 9], 30, True],\n   {'factor': 1.27, 'minutes': 30, 'warning': None}],\n  ['regression: round pan radius', [['rect', 8, 13], ['round', 10], 30, False],\n   {'factor': 1.0, 'minutes': 35, 'warning': None}],\n  ['repair check: round pan radius', [['round', 8], ['round', 6], 20, True],\n   {'factor': 0.56, 'minutes': 20, 'warning': None}],\n  ['generated control 1', [['rect', 8, 15], ['rect', 8, 12], 30, False],\n   {'factor': 1.0, 'minutes': 35, 'warning': None}],\n  ['generated control 2', [['square', 9], ['rect', 8, 13], 30, False],\n   {'factor': 1.0, 'minutes': 25, 'warning': None}],\n  ['generated control 3', [['rect', 9, 15], ['rect', 9, 13], 30, True],\n   {'factor': 0.87, 'minutes': 30, 'warning': None}]],\n [['ratio exactly 1.5', [['square', 12], ['rect', 8, 12], 30, False],\n   {'factor': 1.0, 'minutes': 40, 'warning': None}],\n  ['round to square fill', [['round', 9], ['square', 9], 30, True],\n   {'factor': 1.27, 'minutes': 30, 'warning': None}],\n  ['bad pan', [['bundt', 10], ['square', 8], 30, True], 'error: pan'],\n  ['regression: round pan radius', [['square', 8], ['round', 9], 45, False],\n   {'factor': 1.0, 'minutes': 45, 'warning': None}],\n  ['repair check: round pan radius', [['round', 12], ['round', 6], 35, True],\n   {'factor': 0.25, 'minutes': 35, 'warning': None}],\n  ['generated control 1', [['rect', 9, 12], ['square', 12], 35, False],\n   {'factor': 1.0, 'minutes': 30, 'warning': None}],\n  ['generated control 2', [['round', 6], ['square', 12], 25, False],\n   {'factor': 1.0, 'minutes': 15, 'warning': None}],\n  ['generated control 3', [['rect', 11, 12], ['rect', 8, 13], 30, True],\n   {'factor': 0.79, 'minutes': 30, 'warning': None}]],\n [['round to square fill', [['round', 9], ['square', 9], 30, True],\n   {'factor': 1.27, 'minutes': 30, 'warning': None}],\n  ['bad pan', [['bundt', 10], ['square', 8], 30, True], 'error: pan'],\n  ['same pan', [['square', 8], ['square', 8], 30, False], {'factor': 1.0, 'minutes': 30, 'warning': None}],\n  ['regression: round pan radius', [['square', 12], ['round', 10], 35, False],\n   {'factor': 1.0, 'minutes': 50, 'warning': 'overflow risk'}],\n  ['repair check: round pan radius', [['round', 9], ['round', 6], 20, False],\n   {'factor': 1.0, 'minutes': 35, 'warning': 'overflow risk'}],\n  ['generated control 1', [['rect', 9, 12], ['rect', 11, 12], 30, False],\n   {'factor': 1.0, 'minutes': 25, 'warning': None}],\n  ['generated control 2', [['rect', 8, 15], ['rect', 11, 15], 30, True],\n   {'factor': 1.38, 'minutes': 30, 'warning': None}],\n  ['generated control 3', [['rect', 9, 13], ['rect', 11, 15], 25, True],\n   {'factor': 1.41, 'minutes': 25, 'warning': None}]],\n [['bad pan', [['bundt', 10], ['square', 8], 30, True], 'error: pan'],\n  ['same pan', [['square', 8], ['square', 8], 30, False], {'factor': 1.0, 'minutes': 30, 'warning': None}],\n  ['ratio exactly 1.5', [['square', 12], ['rect', 8, 12], 30, False],\n   {'factor': 1.0, 'minutes': 40, 'warning': None}],\n  ['regression: round pan radius', [['rect', 9, 15], ['round', 6], 45, True],\n   {'factor': 0.21, 'minutes': 45, 'warning': None}],\n  ['repair check: round pan radius', [['rect', 9, 13], ['round', 12], 30, True],\n   {'factor': 0.97, 'minutes': 30, 'warning': None}],\n  ['generated control 1', [['rect', 11, 12], ['square', 6], 35, False],\n   {'factor': 1.0, 'minutes': 80, 'warning': 'overflow risk'}],\n  ['generated control 2', [['rect', 8, 12], ['rect', 9, 12], 35, True],\n   {'factor': 1.12, 'minutes': 35, 'warning': None}],\n  ['generated control 3', [['rect', 8, 12], ['rect', 11, 15], 25, False],\n   {'factor': 1.0, 'minutes': 20, 'warning': None}]],\n [['same pan', [['square', 8], ['square', 8], 30, False], {'factor': 1.0, 'minutes': 30, 'warning': None}],\n  ['ratio exactly 1.5', [['square', 12], ['rect', 8, 12], 30, False],\n   {'factor': 1.0, 'minutes': 40, 'warning': None}],\n  ['round to square fill', [['round', 9], ['square', 9], 30, True],\n   {'factor': 1.27, 'minutes': 30, 'warning': None}],\n  ['regression: round pan radius', [['rect', 9, 12], ['round', 8], 30, True],\n   {'factor': 0.47, 'minutes': 30, 'warning': None}],\n  ['repair check: round pan radius', [['rect', 8, 13], ['round', 6], 25, False],\n   {'factor': 1.0, 'minutes': 60, 'warning': 'overflow risk'}],\n  ['generated control 1', [['rect', 11, 13], ['rect', 8, 15], 20, False],\n   {'factor': 1.0, 'minutes': 20, 'warning': None}],\n  ['generated control 2', [['rect', 9, 15], ['square', 12], 25, False],\n   {'factor': 1.0, 'minutes': 25, 'warning': None}],\n  ['generated control 3', [['square', 9], ['square', 12], 30, True],\n   {'factor': 1.78, 'minutes': 30, 'warning': None}]]]\nfor label, args, expected in fixtures[N - 1]:\n    check(label, solve(*args), expected)\nprint(json.dumps({\"observations\": observations, \"passed\": all(x[\"passed\"] for x in observations)}, ensure_ascii=False))\nraise SystemExit(0 if all(x[\"passed\"] for x in observations) else 1)\n"},"broken":{"sha256":"1ef791113811962518fcd92a146181e8878460b7ed2b33bca246d0b471246609","source":"\"\"\"Failure Map reference implementation. Python standard library only.\"\"\"\nimport json\nimport math\nfrom fractions import Fraction\nN = 1\nobservations = []\ndef solve(old_pan, new_pan, bake_min, scale_to_fill):\n    def area(p):\n        if p[0] == 'round':\n            return math.pi * p[1] ** 2\n        if p[0] == 'square':\n            return p[1] * p[1]\n        if p[0] == 'rect':\n            return p[1] * p[2]\n        return None\n    a0, a1 = area(old_pan), area(new_pan)\n    if not a0 or not a1:\n        return 'error: pan'\n    if scale_to_fill:\n        return {'factor': round(a1 / a0, 2), 'minutes': bake_min, 'warning': None}\n    depth = a0 / a1\n    minutes = 5 * math.floor(bake_min * (1 + (depth - 1) / 2) / 5 + 0.5)\n    return {'factor': 1.0, 'minutes': minutes, 'warning': 'overflow risk' if depth > 1.5 else None}\ndef check(label, actual, expected):\n    observations.append({\"check\": label, \"actual\": actual, \"expected\": expected, \"passed\": actual == expected})\nfixtures = [[['same pan', [['square', 8], ['square', 8], 30, False], {'factor': 1.0, 'minutes': 30, 'warning': None}],\n  ['ratio exactly 1.5', [['square', 12], ['rect', 8, 12], 30, False],\n   {'factor': 1.0, 'minutes': 40, 'warning': None}],\n  ['round to square fill', [['round', 9], ['square', 9], 30, True],\n   {'factor': 1.27, 'minutes': 30, 'warning': None}],\n  ['regression: round pan radius', [['rect', 8, 13], ['round', 10], 30, False],\n   {'factor': 1.0, 'minutes': 35, 'warning': None}],\n  ['repair check: round pan radius', [['round', 8], ['round', 6], 20, True],\n   {'factor': 0.56, 'minutes': 20, 'warning': None}],\n  ['generated control 1', [['rect', 8, 15], ['rect', 8, 12], 30, False],\n   {'factor': 1.0, 'minutes': 35, 'warning': None}],\n  ['generated control 2', [['square', 9], ['rect', 8, 13], 30, False],\n   {'factor': 1.0, 'minutes': 25, 'warning': None}],\n  ['generated control 3', [['rect', 9, 15], ['rect', 9, 13], 30, True],\n   {'factor': 0.87, 'minutes': 30, 'warning': None}]],\n [['ratio exactly 1.5', [['square', 12], ['rect', 8, 12], 30, False],\n   {'factor': 1.0, 'minutes': 40, 'warning': None}],\n  ['round to square fill', [['round', 9], ['square', 9], 30, True],\n   {'factor': 1.27, 'minutes': 30, 'warning': None}],\n  ['bad pan', [['bundt', 10], ['square', 8], 30, True], 'error: pan'],\n  ['regression: round pan radius', [['square', 8], ['round', 9], 45, False],\n   {'factor': 1.0, 'minutes': 45, 'warning': None}],\n  ['repair check: round pan radius', [['round', 12], ['round', 6], 35, True],\n   {'factor': 0.25, 'minutes': 35, 'warning': None}],\n  ['generated control 1', [['rect', 9, 12], ['square', 12], 35, False],\n   {'factor': 1.0, 'minutes': 30, 'warning': None}],\n  ['generated control 2', [['round', 6], ['square', 12], 25, False],\n   {'factor': 1.0, 'minutes': 15, 'warning': None}],\n  ['generated control 3', [['rect', 11, 12], ['rect', 8, 13], 30, True],\n   {'factor': 0.79, 'minutes': 30, 'warning': None}]],\n [['round to square fill', [['round', 9], ['square', 9], 30, True],\n   {'factor': 1.27, 'minutes': 30, 'warning': None}],\n  ['bad pan', [['bundt', 10], ['square', 8], 30, True], 'error: pan'],\n  ['same pan', [['square', 8], ['square', 8], 30, False], {'factor': 1.0, 'minutes': 30, 'warning': None}],\n  ['regression: round pan radius', [['square', 12], ['round', 10], 35, False],\n   {'factor': 1.0, 'minutes': 50, 'warning': 'overflow risk'}],\n  ['repair check: round pan radius', [['round', 9], ['round', 6], 20, False],\n   {'factor': 1.0, 'minutes': 35, 'warning': 'overflow risk'}],\n  ['generated control 1', [['rect', 9, 12], ['rect', 11, 12], 30, False],\n   {'factor': 1.0, 'minutes': 25, 'warning': None}],\n  ['generated control 2', [['rect', 8, 15], ['rect', 11, 15], 30, True],\n   {'factor': 1.38, 'minutes': 30, 'warning': None}],\n  ['generated control 3', [['rect', 9, 13], ['rect', 11, 15], 25, True],\n   {'factor': 1.41, 'minutes': 25, 'warning': None}]],\n [['bad pan', [['bundt', 10], ['square', 8], 30, True], 'error: pan'],\n  ['same pan', [['square', 8], ['square', 8], 30, False], {'factor': 1.0, 'minutes': 30, 'warning': None}],\n  ['ratio exactly 1.5', [['square', 12], ['rect', 8, 12], 30, False],\n   {'factor': 1.0, 'minutes': 40, 'warning': None}],\n  ['regression: round pan radius', [['rect', 9, 15], ['round', 6], 45, True],\n   {'factor': 0.21, 'minutes': 45, 'warning': None}],\n  ['repair check: round pan radius', [['rect', 9, 13], ['round', 12], 30, True],\n   {'factor': 0.97, 'minutes': 30, 'warning': None}],\n  ['generated control 1', [['rect', 11, 12], ['square', 6], 35, False],\n   {'factor': 1.0, 'minutes': 80, 'warning': 'overflow risk'}],\n  ['generated control 2', [['rect', 8, 12], ['rect', 9, 12], 35, True],\n   {'factor': 1.12, 'minutes': 35, 'warning': None}],\n  ['generated control 3', [['rect', 8, 12], ['rect', 11, 15], 25, False],\n   {'factor': 1.0, 'minutes': 20, 'warning': None}]],\n [['same pan', [['square', 8], ['square', 8], 30, False], {'factor': 1.0, 'minutes': 30, 'warning': None}],\n  ['ratio exactly 1.5', [['square', 12], ['rect', 8, 12], 30, False],\n   {'factor': 1.0, 'minutes': 40, 'warning': None}],\n  ['round to square fill', [['round', 9], ['square', 9], 30, True],\n   {'factor': 1.27, 'minutes': 30, 'warning': None}],\n  ['regression: round pan radius', [['rect', 9, 12], ['round', 8], 30, True],\n   {'factor': 0.47, 'minutes': 30, 'warning': None}],\n  ['repair check: round pan radius', [['rect', 8, 13], ['round', 6], 25, False],\n   {'factor': 1.0, 'minutes': 60, 'warning': 'overflow risk'}],\n  ['generated control 1', [['rect', 11, 13], ['rect', 8, 15], 20, False],\n   {'factor': 1.0, 'minutes': 20, 'warning': None}],\n  ['generated control 2', [['rect', 9, 15], ['square', 12], 25, False],\n   {'factor': 1.0, 'minutes': 25, 'warning': None}],\n  ['generated control 3', [['square', 9], ['square', 12], 30, True],\n   {'factor': 1.78, 'minutes': 30, 'warning': None}]]]\nfor label, args, expected in fixtures[N - 1]:\n    check(label, solve(*args), expected)\nprint(json.dumps({\"observations\": observations, \"passed\": all(x[\"passed\"] for x in observations)}, ensure_ascii=False))\nraise SystemExit(0 if all(x[\"passed\"] for x in observations) else 1)\n"}},"limitations":"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.","method":"Deterministic executable model with adversarial boundary fixtures.","provenance":{"created_by":"Failure Map","dependencies":"Python standard library","family":"w2-recipe_scaling_and_nutrition-pan-substitution-round-pan-radius","generated_at":"2026-09-29T14:52:28.191143+00:00","license":"CC0-1.0","python":"3.12.14","seed":1,"split":"open-access"},"relevance":"Bakers swap pan shapes and must scale the batter or adjust bake time for batter depth.","root_cause":"The diameter is squared as if it were the radius.","sha256":"b79baa4cf6c664bc6fdd014749e6e211ad16702a5aa7e15221445b36d7ad49c8","title":"Baking pan substitution: round pan radius · case 01","variant":1,"variant_policy":"Five numbered records share a model and may reuse boundary fixtures.","verified":true,"visibility":"public","verification":{"attempt":{"elapsed_ms":40.993,"exit_code":1,"observations":[{"actual":{"factor":1.0,"minutes":30,"warning":null},"check":"same pan","expected":{"factor":1.0,"minutes":30,"warning":null},"passed":true},{"actual":{"factor":1.0,"minutes":40,"warning":null},"check":"ratio exactly 1.5","expected":{"factor":1.0,"minutes":40,"warning":null},"passed":true},{"actual":{"factor":11.46,"minutes":30,"warning":null},"check":"round to square fill","expected":{"factor":1.27,"minutes":30,"warning":null},"passed":false},{"actual":{"factor":1.0,"minutes":215,"warning":"overflow risk"},"check":"regression: round pan radius","expected":{"factor":1.0,"minutes":35,"warning":null},"passed":false},{"actual":{"factor":0.75,"minutes":20,"warning":null},"check":"repair check: round pan radius","expected":{"factor":0.56,"minutes":20,"warning":null},"passed":false},{"actual":{"factor":1.0,"minutes":35,"warning":null},"check":"generated control 1","expected":{"factor":1.0,"minutes":35,"warning":null},"passed":true},{"actual":{"factor":1.0,"minutes":25,"warning":null},"check":"generated control 2","expected":{"factor":1.0,"minutes":25,"warning":null},"passed":true},{"actual":{"factor":0.87,"minutes":30,"warning":null},"check":"generated control 3","expected":{"factor":0.87,"minutes":30,"warning":null},"passed":true}],"passed":false,"stderr":"","stdout":"{\"observations\": [{\"check\": \"same pan\", \"actual\": {\"factor\": 1.0, \"minutes\": 30, \"warning\": null}, \"expected\": {\"factor\": 1.0, \"minutes\": 30, \"warning\": null}, \"passed\": true}, {\"check\": \"ratio exactly 1.5\", \"actual\": {\"factor\": 1.0, \"minutes\": 40, \"warning\": null}, \"expected\": {\"factor\": 1.0, \"minutes\": 40, \"warning\": null}, \"passed\": true}, {\"check\": \"round to square fill\", \"actual\": {\"factor\": 11.46, \"minutes\": 30, \"warning\": null}, \"expected\": {\"factor\": 1.27, \"minutes\": 30, \"warning\": null}, \"passed\": false}, {\"check\": \"regression: round pan radius\", \"actual\": {\"factor\": 1.0, \"minutes\": 215, \"warning\": \"overflow risk\"}, \"expected\": {\"factor\": 1.0, \"minutes\": 35, \"warning\": null}, \"passed\": false}, {\"check\": \"repair check: round pan radius\", \"actual\": {\"factor\": 0.75, \"minutes\": 20, \"warning\": null}, \"expected\": {\"factor\": 0.56, \"minutes\": 20, \"warning\": null}, \"passed\": false}, {\"check\": \"generated control 1\", \"actual\": {\"factor\": 1.0, \"minutes\": 35, \"warning\": null}, \"expected\": {\"factor\": 1.0, \"minutes\": 35, \"warning\": null}, \"passed\": true}, {\"check\": \"generated control 2\", \"actual\": {\"factor\": 1.0, \"minutes\": 25, \"warning\": null}, \"expected\": {\"factor\": 1.0, \"minutes\": 25, \"warning\": null}, \"passed\": true}, {\"check\": \"generated control 3\", \"actual\": {\"factor\": 0.87, \"minutes\": 30, \"warning\": null}, \"expected\": {\"factor\": 0.87, \"minutes\": 30, \"warning\": null}, \"passed\": true}], \"passed\": false}\n"},"broken":{"elapsed_ms":41.143,"exit_code":1,"observations":[{"actual":{"factor":1.0,"minutes":30,"warning":null},"check":"same pan","expected":{"factor":1.0,"minutes":30,"warning":null},"passed":true},{"actual":{"factor":1.0,"minutes":40,"warning":null},"check":"ratio exactly 1.5","expected":{"factor":1.0,"minutes":40,"warning":null},"passed":true},{"actual":{"factor":0.32,"minutes":30,"warning":null},"check":"round to square fill","expected":{"factor":1.27,"minutes":30,"warning":null},"passed":false},{"actual":{"factor":1.0,"minutes":20,"warning":null},"check":"regression: round pan radius","expected":{"factor":1.0,"minutes":35,"warning":null},"passed":false},{"actual":{"factor":0.56,"minutes":20,"warning":null},"check":"repair check: round pan radius","expected":{"factor":0.56,"minutes":20,"warning":null},"passed":true},{"actual":{"factor":1.0,"minutes":35,"warning":null},"check":"generated control 1","expected":{"factor":1.0,"minutes":35,"warning":null},"passed":true},{"actual":{"factor":1.0,"minutes":25,"warning":null},"check":"generated control 2","expected":{"factor":1.0,"minutes":25,"warning":null},"passed":true},{"actual":{"factor":0.87,"minutes":30,"warning":null},"check":"generated control 3","expected":{"factor":0.87,"minutes":30,"warning":null},"passed":true}],"passed":false,"stderr":"","stdout":"{\"observations\": [{\"check\": \"same pan\", \"actual\": {\"factor\": 1.0, \"minutes\": 30, \"warning\": null}, \"expected\": {\"factor\": 1.0, \"minutes\": 30, \"warning\": null}, \"passed\": true}, {\"check\": \"ratio exactly 1.5\", \"actual\": {\"factor\": 1.0, \"minutes\": 40, \"warning\": null}, \"expected\": {\"factor\": 1.0, \"minutes\": 40, \"warning\": null}, \"passed\": true}, {\"check\": \"round to square fill\", \"actual\": {\"factor\": 0.32, \"minutes\": 30, \"warning\": null}, \"expected\": {\"factor\": 1.27, \"minutes\": 30, \"warning\": null}, \"passed\": false}, {\"check\": \"regression: round pan radius\", \"actual\": {\"factor\": 1.0, \"minutes\": 20, \"warning\": null}, \"expected\": {\"factor\": 1.0, \"minutes\": 35, \"warning\": null}, \"passed\": false}, {\"check\": \"repair check: round pan radius\", \"actual\": {\"factor\": 0.56, \"minutes\": 20, \"warning\": null}, \"expected\": {\"factor\": 0.56, \"minutes\": 20, \"warning\": null}, \"passed\": true}, {\"check\": \"generated control 1\", \"actual\": {\"factor\": 1.0, \"minutes\": 35, \"warning\": null}, \"expected\": {\"factor\": 1.0, \"minutes\": 35, \"warning\": null}, \"passed\": true}, {\"check\": \"generated control 2\", \"actual\": {\"factor\": 1.0, \"minutes\": 25, \"warning\": null}, \"expected\": {\"factor\": 1.0, \"minutes\": 25, \"warning\": null}, \"passed\": true}, {\"check\": \"generated control 3\", \"actual\": {\"factor\": 0.87, \"minutes\": 30, \"warning\": null}, \"expected\": {\"factor\": 0.87, \"minutes\": 30, \"warning\": null}, \"passed\": true}], \"passed\": false}\n"}},"member_only":{"stages":["fixed"],"fields":["implementations.fixed","verification.fixed","harness","repair"],"note":"The verified repair, its recorded checks, the repair description, and the scoring harness are available to members."}}