{"abstract":"250 ml of water converts to 236 g instead of 249 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":"The 240 ml nutrition-label cup still disagrees with the 236.5 ml cup the density table assumes.","family":"w2-recipe_scaling_and_nutrition-volume-to-mass-millilitres-per-cup","id":"FA-96926","implementations":{"attempt":{"sha256":"5960fd049323237739d357ca4d9231b53f61a29d1150e85f900bdf20739c88f6","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(240)\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: millilitres per cup', ['6', 'ml', 'packed flour'], '3.0 g'],\n  ['repair check: millilitres per cup', ['250', 'ml', 'honey'], '359 g'],\n  ['generated control 1', ['15', 'tbsp', 'SUGAR'], '188 g'],\n  ['generated control 2', ['2', 'tbsp', 'water'], '30 g'],\n  ['generated control 3', ['100', 'tsp', 'sugar'], '417 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: millilitres per cup', ['15', 'ml', 'honey'], '22 g'],\n  ['repair check: millilitres per cup', ['100', 'ml', 'packed water'], '100 g'],\n  ['generated control 1', ['1/3', 'ml', 'water'], '0.3 g'],\n  ['generated control 2', ['5', 'pinch', 'sugar'], 'error: unknown unit'],\n  ['generated control 3', ['1/4', 'tbsp', '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: millilitres per cup', ['250', 'ml', 'flour, sifted'], '114 g'],\n  ['repair check: millilitres per cup', ['4', 'ml', 'BROWN SUGAR'], '2.5 g'],\n  ['generated control 1', ['250', 'tbsp', 'BROWN SUGAR'], '2266 g'],\n  ['generated control 2', ['1/2', 'tbsp', 'packed honey'], '11 g'],\n  ['generated control 3', ['120', 'tbsp', 'sugar'], '1500 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: millilitres per cup', ['1/2', 'ml', '  Flour '], '0.3 g'],\n  ['repair check: millilitres per cup', ['250', 'ml', 'sugar, sifted'], '190 g'],\n  ['generated control 1', ['3/4', 'pinch', '  Honey '], 'error: unknown unit'],\n  ['generated control 2', ['3', 'tsp', 'honey, sifted'], '19 g'],\n  ['generated control 3', ['2', 'ml', 'FLOUR'], '1.0 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: millilitres per cup', ['6', 'ml', '  Butter '], '5.8 g'],\n  ['repair check: millilitres per cup', ['4', 'ml', 'water, sifted'], '3.6 g'],\n  ['generated control 1', ['1', 'ml', '  Flour '], '0.5 g'],\n  ['generated control 2', ['1/4', 'cup', 'sugar'], '50 g'],\n  ['generated control 3', ['4', 'cup', '  Packed Flour '], '480 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":"a42bfbd40620bd54968d71f2abae5548a27d6757ae1aeaebbd4c18855628e24b","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(250)\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: millilitres per cup', ['6', 'ml', 'packed flour'], '3.0 g'],\n  ['repair check: millilitres per cup', ['250', 'ml', 'honey'], '359 g'],\n  ['generated control 1', ['15', 'tbsp', 'SUGAR'], '188 g'],\n  ['generated control 2', ['2', 'tbsp', 'water'], '30 g'],\n  ['generated control 3', ['100', 'tsp', 'sugar'], '417 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: millilitres per cup', ['15', 'ml', 'honey'], '22 g'],\n  ['repair check: millilitres per cup', ['100', 'ml', 'packed water'], '100 g'],\n  ['generated control 1', ['1/3', 'ml', 'water'], '0.3 g'],\n  ['generated control 2', ['5', 'pinch', 'sugar'], 'error: unknown unit'],\n  ['generated control 3', ['1/4', 'tbsp', '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: millilitres per cup', ['250', 'ml', 'flour, sifted'], '114 g'],\n  ['repair check: millilitres per cup', ['4', 'ml', 'BROWN SUGAR'], '2.5 g'],\n  ['generated control 1', ['250', 'tbsp', 'BROWN SUGAR'], '2266 g'],\n  ['generated control 2', ['1/2', 'tbsp', 'packed honey'], '11 g'],\n  ['generated control 3', ['120', 'tbsp', 'sugar'], '1500 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: millilitres per cup', ['1/2', 'ml', '  Flour '], '0.3 g'],\n  ['repair check: millilitres per cup', ['250', 'ml', 'sugar, sifted'], '190 g'],\n  ['generated control 1', ['3/4', 'pinch', '  Honey '], 'error: unknown unit'],\n  ['generated control 2', ['3', 'tsp', 'honey, sifted'], '19 g'],\n  ['generated control 3', ['2', 'ml', 'FLOUR'], '1.0 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: millilitres per cup', ['6', 'ml', '  Butter '], '5.8 g'],\n  ['repair check: millilitres per cup', ['4', 'ml', 'water, sifted'], '3.6 g'],\n  ['generated control 1', ['1', 'ml', '  Flour '], '0.5 g'],\n  ['generated control 2', ['1/4', 'cup', 'sugar'], '50 g'],\n  ['generated control 3', ['4', 'cup', '  Packed Flour '], '480 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":"09153729595c7de6c297d17507c31cb16d4cc4e2e4fa779ab061d7ebc6668172","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: millilitres per cup', ['6', 'ml', 'packed flour'], '3.0 g'],\n  ['repair check: millilitres per cup', ['250', 'ml', 'honey'], '359 g'],\n  ['generated control 1', ['15', 'tbsp', 'SUGAR'], '188 g'],\n  ['generated control 2', ['2', 'tbsp', 'water'], '30 g'],\n  ['generated control 3', ['100', 'tsp', 'sugar'], '417 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: millilitres per cup', ['15', 'ml', 'honey'], '22 g'],\n  ['repair check: millilitres per cup', ['100', 'ml', 'packed water'], '100 g'],\n  ['generated control 1', ['1/3', 'ml', 'water'], '0.3 g'],\n  ['generated control 2', ['5', 'pinch', 'sugar'], 'error: unknown unit'],\n  ['generated control 3', ['1/4', 'tbsp', '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: millilitres per cup', ['250', 'ml', 'flour, sifted'], '114 g'],\n  ['repair check: millilitres per cup', ['4', 'ml', 'BROWN SUGAR'], '2.5 g'],\n  ['generated control 1', ['250', 'tbsp', 'BROWN SUGAR'], '2266 g'],\n  ['generated control 2', ['1/2', 'tbsp', 'packed honey'], '11 g'],\n  ['generated control 3', ['120', 'tbsp', 'sugar'], '1500 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: millilitres per cup', ['1/2', 'ml', '  Flour '], '0.3 g'],\n  ['repair check: millilitres per cup', ['250', 'ml', 'sugar, sifted'], '190 g'],\n  ['generated control 1', ['3/4', 'pinch', '  Honey '], 'error: unknown unit'],\n  ['generated control 2', ['3', 'tsp', 'honey, sifted'], '19 g'],\n  ['generated control 3', ['2', 'ml', 'FLOUR'], '1.0 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: millilitres per cup', ['6', 'ml', '  Butter '], '5.8 g'],\n  ['repair check: millilitres per cup', ['4', 'ml', 'water, sifted'], '3.6 g'],\n  ['generated control 1', ['1', 'ml', '  Flour '], '0.5 g'],\n  ['generated control 2', ['1/4', 'cup', 'sugar'], '50 g'],\n  ['generated control 3', ['4', 'cup', '  Packed Flour '], '480 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-millilitres-per-cup","generated_at":"2026-09-29T14:52:27.174501+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":"Divide millilitres by 236.5 to get US cups.","root_cause":"Millilitres are converted with a 250 ml metric cup although densities are per 236.5 ml US cup.","sha256":"72db3e062a4577f62ba5926f3f9622cf1e3403408a4ae1de5f34808ff1c4a937","title":"Volume-to-mass ingredient converter: millilitres per cup · case 01","variant":1,"variant_policy":"Five numbered records share a model and may reuse boundary fixtures.","verification":{"attempt":{"elapsed_ms":41.299,"exit_code":1,"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":"3.0 g","check":"regression: millilitres per cup","expected":"3.0 g","passed":true},{"actual":"354 g","check":"repair check: millilitres per cup","expected":"359 g","passed":false},{"actual":"188 g","check":"generated control 1","expected":"188 g","passed":true},{"actual":"30 g","check":"generated control 2","expected":"30 g","passed":true},{"actual":"417 g","check":"generated control 3","expected":"417 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\": \"10 g\", \"expected\": \"10 g\", \"passed\": true}, {\"check\": \"packed brown sugar\", \"actual\": \"213 g\", \"expected\": \"213 g\", \"passed\": true}, {\"check\": \"regression: millilitres per cup\", \"actual\": \"3.0 g\", \"expected\": \"3.0 g\", \"passed\": true}, {\"check\": \"repair check: millilitres per cup\", \"actual\": \"354 g\", \"expected\": \"359 g\", \"passed\": false}, {\"check\": \"generated control 1\", \"actual\": \"188 g\", \"expected\": \"188 g\", \"passed\": true}, {\"check\": \"generated control 2\", \"actual\": \"30 g\", \"expected\": \"30 g\", \"passed\": true}, {\"check\": \"generated control 3\", \"actual\": \"417 g\", \"expected\": \"417 g\", \"passed\": true}], \"passed\": false}\n"},"broken":{"elapsed_ms":40.044,"exit_code":1,"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":"2.9 g","check":"regression: millilitres per cup","expected":"3.0 g","passed":false},{"actual":"340 g","check":"repair check: millilitres per cup","expected":"359 g","passed":false},{"actual":"188 g","check":"generated control 1","expected":"188 g","passed":true},{"actual":"30 g","check":"generated control 2","expected":"30 g","passed":true},{"actual":"417 g","check":"generated control 3","expected":"417 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\": \"10 g\", \"expected\": \"10 g\", \"passed\": true}, {\"check\": \"packed brown sugar\", \"actual\": \"213 g\", \"expected\": \"213 g\", \"passed\": true}, {\"check\": \"regression: millilitres per cup\", \"actual\": \"2.9 g\", \"expected\": \"3.0 g\", \"passed\": false}, {\"check\": \"repair check: millilitres per cup\", \"actual\": \"340 g\", \"expected\": \"359 g\", \"passed\": false}, {\"check\": \"generated control 1\", \"actual\": \"188 g\", \"expected\": \"188 g\", \"passed\": true}, {\"check\": \"generated control 2\", \"actual\": \"30 g\", \"expected\": \"30 g\", \"passed\": true}, {\"check\": \"generated control 3\", \"actual\": \"417 g\", \"expected\": \"417 g\", \"passed\": true}], \"passed\": false}\n"},"fixed":{"elapsed_ms":41.89,"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":"3.0 g","check":"regression: millilitres per cup","expected":"3.0 g","passed":true},{"actual":"359 g","check":"repair check: millilitres per cup","expected":"359 g","passed":true},{"actual":"188 g","check":"generated control 1","expected":"188 g","passed":true},{"actual":"30 g","check":"generated control 2","expected":"30 g","passed":true},{"actual":"417 g","check":"generated control 3","expected":"417 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: millilitres per cup\", \"actual\": \"3.0 g\", \"expected\": \"3.0 g\", \"passed\": true}, {\"check\": \"repair check: millilitres per cup\", \"actual\": \"359 g\", \"expected\": \"359 g\", \"passed\": true}, {\"check\": \"generated control 1\", \"actual\": \"188 g\", \"expected\": \"188 g\", \"passed\": true}, {\"check\": \"generated control 2\", \"actual\": \"30 g\", \"expected\": \"30 g\", \"passed\": true}, {\"check\": \"generated control 3\", \"actual\": \"417 g\", \"expected\": \"417 g\", \"passed\": true}], \"passed\": true}\n"}},"verified":true,"visibility":"public"}