{"abstract":"Two tablespoons of butter convert to 38 g instead of 28 g.","category":"Recipe scaling and nutrition","checks":8,"contract":"Convert amount (fraction string) of cup/tbsp/tsp/ml to grams. 1 cup = 16 tbsp = 48 tsp = 236.5 ml. Grams per cup: flour 120, sugar 200, brown sugar 145 (213 when prefixed \"packed \"), butter 227, honey 340, water 236. Names are trimmed and case-insensitive; a \", sifted\" suffix multiplies density by 9/10. Results below 10 g print one decimal (\"%.1f g\"), otherwise whole grams, both half-up. Unknown ingredient or unit returns an error string.","evaluation_group":"w2-recipe_scaling_and_nutrition-volume-to-mass","failed_approach":"Fixing tablespoons but leaving 36 teaspoons per cup keeps every teaspoon conversion a third too heavy.","family":"w2-recipe_scaling_and_nutrition-volume-to-mass-tablespoons-per-cup","id":"FA-96901","implementations":{"attempt":{"sha256":"b0f49bd1f0217a0076d114432ead6397275b4ff18c7ddc5f782f90804865fc05","source":"\"\"\"Failure Map reference implementation. Python standard library only.\"\"\"\nimport json\nimport math\nfrom fractions import Fraction\nN = 1\nobservations = []\ndef solve(amount, unit, ingredient):\n    DENS = {'flour': 120, 'sugar': 200, 'brown sugar': 145, 'butter': 227, 'honey': 340, 'water': 236}\n    PER_CUP = {'cup': 1, 'tbsp': 16, 'tsp': 36}\n    name = ingredient.strip().lower()\n    packed = name.startswith('packed ')\n    if packed:\n        name = name[len('packed '):]\n    sifted = name.endswith(', sifted')\n    if sifted:\n        name = name[:-len(', sifted')]\n    if name not in DENS:\n        return 'error: unknown ingredient'\n    if unit == 'ml':\n        cups = Fraction(amount) / Fraction(2365, 10)\n    elif unit in PER_CUP:\n        cups = Fraction(amount) / PER_CUP[unit]\n    else:\n        return 'error: unknown unit'\n    d = Fraction(DENS[name])\n    if packed and name == 'brown sugar':\n        d = Fraction(213)\n    if sifted:\n        d = d * Fraction(9, 10)\n    g = cups * d\n    if g < 10:\n        return '%.1f g' % (math.floor(g * 10 + Fraction(1, 2)) / 10)\n    return '%d g' % math.floor(g + Fraction(1, 2))\ndef check(label, actual, expected):\n    observations.append({\"check\": label, \"actual\": actual, \"expected\": expected, \"passed\": actual == expected})\nfixtures = [[['one cup flour', ['1', 'cup', 'flour'], '120 g'], ['exactly ten grams', ['4', 'tsp', 'flour'], '10 g'],\n  ['packed brown sugar', ['1', 'cup', 'packed brown sugar'], '213 g'],\n  ['regression: tablespoons per cup', ['100', 'tbsp', '  Water '], '1475 g'],\n  ['repair check: tablespoons per cup', ['15', 'tsp', 'water'], '74 g'],\n  ['generated control 1', ['100', 'cup', 'PACKED FLOUR'], '12000 g'],\n  ['generated control 2', ['6', 'ml', 'honey, sifted'], '7.8 g'],\n  ['generated control 3', ['1/3', 'ml', 'butter'], '0.3 g']],\n [['exactly ten grams', ['4', 'tsp', 'flour'], '10 g'],\n  ['packed brown sugar', ['1', 'cup', 'packed brown sugar'], '213 g'],\n  ['unknown ingredient', ['1', 'cup', 'saffron'], 'error: unknown ingredient'],\n  ['regression: tablespoons per cup', ['4', 'tbsp', '  Flour '], '30 g'],\n  ['repair check: tablespoons per cup', ['120', 'tsp', 'brown sugar'], '363 g'],\n  ['generated control 1', ['15', 'cup', 'honey'], '5100 g'],\n  ['generated control 2', ['250', 'ml', '  Water '], '249 g'],\n  ['generated control 3', ['1', 'ml', 'saffron'], 'error: unknown ingredient']],\n [['packed brown sugar', ['1', 'cup', 'packed brown sugar'], '213 g'],\n  ['unknown ingredient', ['1', 'cup', 'saffron'], 'error: unknown ingredient'],\n  ['metric cup of water', ['250', 'ml', 'water'], '249 g'],\n  ['regression: tablespoons per cup', ['3', 'tsp', '  Water '], '15 g'],\n  ['repair check: tablespoons per cup', ['120', 'tsp', 'water, sifted'], '531 g'],\n  ['generated control 1', ['15', 'cup', 'butter'], '3405 g'],\n  ['generated control 2', ['5', 'ml', 'water'], '5.0 g'],\n  ['generated control 3', ['5', 'cup', 'butter'], '1135 g']],\n [['unknown ingredient', ['1', 'cup', 'saffron'], 'error: unknown ingredient'],\n  ['metric cup of water', ['250', 'ml', 'water'], '249 g'],\n  ['sifted flour tablespoon', ['2', 'tbsp', 'Flour, sifted'], '14 g'],\n  ['regression: tablespoons per cup', ['15', 'tsp', '  Sugar '], '63 g'],\n  ['repair check: tablespoons per cup', ['5', 'tsp', 'sugar'], '21 g'],\n  ['generated control 1', ['100', 'ml', '  Water '], '100 g'],\n  ['generated control 2', ['15', 'ml', 'packed flour'], '7.6 g'],\n  ['generated control 3', ['15', 'ml', 'flour, sifted'], '6.8 g']],\n [['metric cup of water', ['250', 'ml', 'water'], '249 g'],\n  ['sifted flour tablespoon', ['2', 'tbsp', 'Flour, sifted'], '14 g'],\n  ['one cup flour', ['1', 'cup', 'flour'], '120 g'],\n  ['regression: tablespoons per cup', ['2', 'tbsp', 'water'], '30 g'],\n  ['repair check: tablespoons per cup', ['100', 'tsp', 'FLOUR'], '250 g'],\n  ['generated control 1', ['1/4', 'tbsp', 'sugar, sifted'], '2.8 g'],\n  ['generated control 2', ['1/2', 'cup', 'FLOUR'], '60 g'],\n  ['generated control 3', ['3/4', 'tsp', '  Packed Flour '], '1.9 g']]]\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":"7074a6b2149d58c70753fba413d4f9be3e44623358dd2e42265a4e5b779dd9aa","source":"\"\"\"Failure Map reference implementation. Python standard library only.\"\"\"\nimport json\nimport math\nfrom fractions import Fraction\nN = 1\nobservations = []\ndef solve(amount, unit, ingredient):\n    DENS = {'flour': 120, 'sugar': 200, 'brown sugar': 145, 'butter': 227, 'honey': 340, 'water': 236}\n    PER_CUP = {'cup': 1, 'tbsp': 12, 'tsp': 36}\n    name = ingredient.strip().lower()\n    packed = name.startswith('packed ')\n    if packed:\n        name = name[len('packed '):]\n    sifted = name.endswith(', sifted')\n    if sifted:\n        name = name[:-len(', sifted')]\n    if name not in DENS:\n        return 'error: unknown ingredient'\n    if unit == 'ml':\n        cups = Fraction(amount) / Fraction(2365, 10)\n    elif unit in PER_CUP:\n        cups = Fraction(amount) / PER_CUP[unit]\n    else:\n        return 'error: unknown unit'\n    d = Fraction(DENS[name])\n    if packed and name == 'brown sugar':\n        d = Fraction(213)\n    if sifted:\n        d = d * Fraction(9, 10)\n    g = cups * d\n    if g < 10:\n        return '%.1f g' % (math.floor(g * 10 + Fraction(1, 2)) / 10)\n    return '%d g' % math.floor(g + Fraction(1, 2))\ndef check(label, actual, expected):\n    observations.append({\"check\": label, \"actual\": actual, \"expected\": expected, \"passed\": actual == expected})\nfixtures = [[['one cup flour', ['1', 'cup', 'flour'], '120 g'], ['exactly ten grams', ['4', 'tsp', 'flour'], '10 g'],\n  ['packed brown sugar', ['1', 'cup', 'packed brown sugar'], '213 g'],\n  ['regression: tablespoons per cup', ['100', 'tbsp', '  Water '], '1475 g'],\n  ['repair check: tablespoons per cup', ['15', 'tsp', 'water'], '74 g'],\n  ['generated control 1', ['100', 'cup', 'PACKED FLOUR'], '12000 g'],\n  ['generated control 2', ['6', 'ml', 'honey, sifted'], '7.8 g'],\n  ['generated control 3', ['1/3', 'ml', 'butter'], '0.3 g']],\n [['exactly ten grams', ['4', 'tsp', 'flour'], '10 g'],\n  ['packed brown sugar', ['1', 'cup', 'packed brown sugar'], '213 g'],\n  ['unknown ingredient', ['1', 'cup', 'saffron'], 'error: unknown ingredient'],\n  ['regression: tablespoons per cup', ['4', 'tbsp', '  Flour '], '30 g'],\n  ['repair check: tablespoons per cup', ['120', 'tsp', 'brown sugar'], '363 g'],\n  ['generated control 1', ['15', 'cup', 'honey'], '5100 g'],\n  ['generated control 2', ['250', 'ml', '  Water '], '249 g'],\n  ['generated control 3', ['1', 'ml', 'saffron'], 'error: unknown ingredient']],\n [['packed brown sugar', ['1', 'cup', 'packed brown sugar'], '213 g'],\n  ['unknown ingredient', ['1', 'cup', 'saffron'], 'error: unknown ingredient'],\n  ['metric cup of water', ['250', 'ml', 'water'], '249 g'],\n  ['regression: tablespoons per cup', ['3', 'tsp', '  Water '], '15 g'],\n  ['repair check: tablespoons per cup', ['120', 'tsp', 'water, sifted'], '531 g'],\n  ['generated control 1', ['15', 'cup', 'butter'], '3405 g'],\n  ['generated control 2', ['5', 'ml', 'water'], '5.0 g'],\n  ['generated control 3', ['5', 'cup', 'butter'], '1135 g']],\n [['unknown ingredient', ['1', 'cup', 'saffron'], 'error: unknown ingredient'],\n  ['metric cup of water', ['250', 'ml', 'water'], '249 g'],\n  ['sifted flour tablespoon', ['2', 'tbsp', 'Flour, sifted'], '14 g'],\n  ['regression: tablespoons per cup', ['15', 'tsp', '  Sugar '], '63 g'],\n  ['repair check: tablespoons per cup', ['5', 'tsp', 'sugar'], '21 g'],\n  ['generated control 1', ['100', 'ml', '  Water '], '100 g'],\n  ['generated control 2', ['15', 'ml', 'packed flour'], '7.6 g'],\n  ['generated control 3', ['15', 'ml', 'flour, sifted'], '6.8 g']],\n [['metric cup of water', ['250', 'ml', 'water'], '249 g'],\n  ['sifted flour tablespoon', ['2', 'tbsp', 'Flour, sifted'], '14 g'],\n  ['one cup flour', ['1', 'cup', 'flour'], '120 g'],\n  ['regression: tablespoons per cup', ['2', 'tbsp', 'water'], '30 g'],\n  ['repair check: tablespoons per cup', ['100', 'tsp', 'FLOUR'], '250 g'],\n  ['generated control 1', ['1/4', 'tbsp', 'sugar, sifted'], '2.8 g'],\n  ['generated control 2', ['1/2', 'cup', 'FLOUR'], '60 g'],\n  ['generated control 3', ['3/4', 'tsp', '  Packed Flour '], '1.9 g']]]\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"},"fixed":{"sha256":"4202c818ba9f3bae5485be95d99db8ac4eddad77a3f612f112b5ee3da6f5fe3d","source":"\"\"\"Failure Map reference implementation. Python standard library only.\"\"\"\nimport json\nimport math\nfrom fractions import Fraction\nN = 1\nobservations = []\ndef solve(amount, unit, ingredient):\n    DENS = {'flour': 120, 'sugar': 200, 'brown sugar': 145, 'butter': 227, 'honey': 340, 'water': 236}\n    PER_CUP = {'cup': 1, 'tbsp': 16, 'tsp': 48}\n    name = ingredient.strip().lower()\n    packed = name.startswith('packed ')\n    if packed:\n        name = name[len('packed '):]\n    sifted = name.endswith(', sifted')\n    if sifted:\n        name = name[:-len(', sifted')]\n    if name not in DENS:\n        return 'error: unknown ingredient'\n    if unit == 'ml':\n        cups = Fraction(amount) / Fraction(2365, 10)\n    elif unit in PER_CUP:\n        cups = Fraction(amount) / PER_CUP[unit]\n    else:\n        return 'error: unknown unit'\n    d = Fraction(DENS[name])\n    if packed and name == 'brown sugar':\n        d = Fraction(213)\n    if sifted:\n        d = d * Fraction(9, 10)\n    g = cups * d\n    if g < 10:\n        return '%.1f g' % (math.floor(g * 10 + Fraction(1, 2)) / 10)\n    return '%d g' % math.floor(g + Fraction(1, 2))\ndef check(label, actual, expected):\n    observations.append({\"check\": label, \"actual\": actual, \"expected\": expected, \"passed\": actual == expected})\nfixtures = [[['one cup flour', ['1', 'cup', 'flour'], '120 g'], ['exactly ten grams', ['4', 'tsp', 'flour'], '10 g'],\n  ['packed brown sugar', ['1', 'cup', 'packed brown sugar'], '213 g'],\n  ['regression: tablespoons per cup', ['100', 'tbsp', '  Water '], '1475 g'],\n  ['repair check: tablespoons per cup', ['15', 'tsp', 'water'], '74 g'],\n  ['generated control 1', ['100', 'cup', 'PACKED FLOUR'], '12000 g'],\n  ['generated control 2', ['6', 'ml', 'honey, sifted'], '7.8 g'],\n  ['generated control 3', ['1/3', 'ml', 'butter'], '0.3 g']],\n [['exactly ten grams', ['4', 'tsp', 'flour'], '10 g'],\n  ['packed brown sugar', ['1', 'cup', 'packed brown sugar'], '213 g'],\n  ['unknown ingredient', ['1', 'cup', 'saffron'], 'error: unknown ingredient'],\n  ['regression: tablespoons per cup', ['4', 'tbsp', '  Flour '], '30 g'],\n  ['repair check: tablespoons per cup', ['120', 'tsp', 'brown sugar'], '363 g'],\n  ['generated control 1', ['15', 'cup', 'honey'], '5100 g'],\n  ['generated control 2', ['250', 'ml', '  Water '], '249 g'],\n  ['generated control 3', ['1', 'ml', 'saffron'], 'error: unknown ingredient']],\n [['packed brown sugar', ['1', 'cup', 'packed brown sugar'], '213 g'],\n  ['unknown ingredient', ['1', 'cup', 'saffron'], 'error: unknown ingredient'],\n  ['metric cup of water', ['250', 'ml', 'water'], '249 g'],\n  ['regression: tablespoons per cup', ['3', 'tsp', '  Water '], '15 g'],\n  ['repair check: tablespoons per cup', ['120', 'tsp', 'water, sifted'], '531 g'],\n  ['generated control 1', ['15', 'cup', 'butter'], '3405 g'],\n  ['generated control 2', ['5', 'ml', 'water'], '5.0 g'],\n  ['generated control 3', ['5', 'cup', 'butter'], '1135 g']],\n [['unknown ingredient', ['1', 'cup', 'saffron'], 'error: unknown ingredient'],\n  ['metric cup of water', ['250', 'ml', 'water'], '249 g'],\n  ['sifted flour tablespoon', ['2', 'tbsp', 'Flour, sifted'], '14 g'],\n  ['regression: tablespoons per cup', ['15', 'tsp', '  Sugar '], '63 g'],\n  ['repair check: tablespoons per cup', ['5', 'tsp', 'sugar'], '21 g'],\n  ['generated control 1', ['100', 'ml', '  Water '], '100 g'],\n  ['generated control 2', ['15', 'ml', 'packed flour'], '7.6 g'],\n  ['generated control 3', ['15', 'ml', 'flour, sifted'], '6.8 g']],\n [['metric cup of water', ['250', 'ml', 'water'], '249 g'],\n  ['sifted flour tablespoon', ['2', 'tbsp', 'Flour, sifted'], '14 g'],\n  ['one cup flour', ['1', 'cup', 'flour'], '120 g'],\n  ['regression: tablespoons per cup', ['2', 'tbsp', 'water'], '30 g'],\n  ['repair check: tablespoons per cup', ['100', 'tsp', 'FLOUR'], '250 g'],\n  ['generated control 1', ['1/4', 'tbsp', 'sugar, sifted'], '2.8 g'],\n  ['generated control 2', ['1/2', 'cup', 'FLOUR'], '60 g'],\n  ['generated control 3', ['3/4', 'tsp', '  Packed Flour '], '1.9 g']]]\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-volume-to-mass-tablespoons-per-cup","generated_at":"2026-09-29T14:52:26.951621+00:00","license":"CC0-1.0","python":"3.12.14","seed":1,"split":"open-access"},"relevance":"Recipe apps convert American volume measures to weights for scaling and nutrition lookup.","repair":"Use 16 tbsp and 48 tsp per cup.","root_cause":"The unit table assumes 12 tablespoons per cup, inflating every spoon measure by a third.","sha256":"e3a064c847bacb9e67a44151244b8bdcf44cec234b9155ff6a426e639e085308","title":"Volume-to-mass ingredient converter: tablespoons per cup · case 01","variant":1,"variant_policy":"Five numbered records share a model and may reuse boundary fixtures.","verification":{"attempt":{"elapsed_ms":42.866,"exit_code":1,"observations":[{"actual":"120 g","check":"one cup flour","expected":"120 g","passed":true},{"actual":"13 g","check":"exactly ten grams","expected":"10 g","passed":false},{"actual":"213 g","check":"packed brown sugar","expected":"213 g","passed":true},{"actual":"1475 g","check":"regression: tablespoons per cup","expected":"1475 g","passed":true},{"actual":"98 g","check":"repair check: tablespoons per cup","expected":"74 g","passed":false},{"actual":"12000 g","check":"generated control 1","expected":"12000 g","passed":true},{"actual":"7.8 g","check":"generated control 2","expected":"7.8 g","passed":true},{"actual":"0.3 g","check":"generated control 3","expected":"0.3 g","passed":true}],"passed":false,"stderr":"","stdout":"{\"observations\": [{\"check\": \"one cup flour\", \"actual\": \"120 g\", \"expected\": \"120 g\", \"passed\": true}, {\"check\": \"exactly ten grams\", \"actual\": \"13 g\", \"expected\": \"10 g\", \"passed\": false}, {\"check\": \"packed brown sugar\", \"actual\": \"213 g\", \"expected\": \"213 g\", \"passed\": true}, {\"check\": \"regression: tablespoons per cup\", \"actual\": \"1475 g\", \"expected\": \"1475 g\", \"passed\": true}, {\"check\": \"repair check: tablespoons per cup\", \"actual\": \"98 g\", \"expected\": \"74 g\", \"passed\": false}, {\"check\": \"generated control 1\", \"actual\": \"12000 g\", \"expected\": \"12000 g\", \"passed\": true}, {\"check\": \"generated control 2\", \"actual\": \"7.8 g\", \"expected\": \"7.8 g\", \"passed\": true}, {\"check\": \"generated control 3\", \"actual\": \"0.3 g\", \"expected\": \"0.3 g\", \"passed\": true}], \"passed\": false}\n"},"broken":{"elapsed_ms":39.328,"exit_code":1,"observations":[{"actual":"120 g","check":"one cup flour","expected":"120 g","passed":true},{"actual":"13 g","check":"exactly ten grams","expected":"10 g","passed":false},{"actual":"213 g","check":"packed brown sugar","expected":"213 g","passed":true},{"actual":"1967 g","check":"regression: tablespoons per cup","expected":"1475 g","passed":false},{"actual":"98 g","check":"repair check: tablespoons per cup","expected":"74 g","passed":false},{"actual":"12000 g","check":"generated control 1","expected":"12000 g","passed":true},{"actual":"7.8 g","check":"generated control 2","expected":"7.8 g","passed":true},{"actual":"0.3 g","check":"generated control 3","expected":"0.3 g","passed":true}],"passed":false,"stderr":"","stdout":"{\"observations\": [{\"check\": \"one cup flour\", \"actual\": \"120 g\", \"expected\": \"120 g\", \"passed\": true}, {\"check\": \"exactly ten grams\", \"actual\": \"13 g\", \"expected\": \"10 g\", \"passed\": false}, {\"check\": \"packed brown sugar\", \"actual\": \"213 g\", \"expected\": \"213 g\", \"passed\": true}, {\"check\": \"regression: tablespoons per cup\", \"actual\": \"1967 g\", \"expected\": \"1475 g\", \"passed\": false}, {\"check\": \"repair check: tablespoons per cup\", \"actual\": \"98 g\", \"expected\": \"74 g\", \"passed\": false}, {\"check\": \"generated control 1\", \"actual\": \"12000 g\", \"expected\": \"12000 g\", \"passed\": true}, {\"check\": \"generated control 2\", \"actual\": \"7.8 g\", \"expected\": \"7.8 g\", \"passed\": true}, {\"check\": \"generated control 3\", \"actual\": \"0.3 g\", \"expected\": \"0.3 g\", \"passed\": true}], \"passed\": false}\n"},"fixed":{"elapsed_ms":39.825,"exit_code":0,"observations":[{"actual":"120 g","check":"one cup flour","expected":"120 g","passed":true},{"actual":"10 g","check":"exactly ten grams","expected":"10 g","passed":true},{"actual":"213 g","check":"packed brown sugar","expected":"213 g","passed":true},{"actual":"1475 g","check":"regression: tablespoons per cup","expected":"1475 g","passed":true},{"actual":"74 g","check":"repair check: tablespoons per cup","expected":"74 g","passed":true},{"actual":"12000 g","check":"generated control 1","expected":"12000 g","passed":true},{"actual":"7.8 g","check":"generated control 2","expected":"7.8 g","passed":true},{"actual":"0.3 g","check":"generated control 3","expected":"0.3 g","passed":true}],"passed":true,"stderr":"","stdout":"{\"observations\": [{\"check\": \"one cup flour\", \"actual\": \"120 g\", \"expected\": \"120 g\", \"passed\": true}, {\"check\": \"exactly ten grams\", \"actual\": \"10 g\", \"expected\": \"10 g\", \"passed\": true}, {\"check\": \"packed brown sugar\", \"actual\": \"213 g\", \"expected\": \"213 g\", \"passed\": true}, {\"check\": \"regression: tablespoons per cup\", \"actual\": \"1475 g\", \"expected\": \"1475 g\", \"passed\": true}, {\"check\": \"repair check: tablespoons per cup\", \"actual\": \"74 g\", \"expected\": \"74 g\", \"passed\": true}, {\"check\": \"generated control 1\", \"actual\": \"12000 g\", \"expected\": \"12000 g\", \"passed\": true}, {\"check\": \"generated control 2\", \"actual\": \"7.8 g\", \"expected\": \"7.8 g\", \"passed\": true}, {\"check\": \"generated control 3\", \"actual\": \"0.3 g\", \"expected\": \"0.3 g\", \"passed\": true}], \"passed\": true}\n"}},"verified":true,"visibility":"public"}