FAILURE MAP
← Case archive

FA-96971 / Recipe scaling and nutrition / Open access

Cooked-yield nutrition per serving: discarded aromatics · case 01

A bay leaf removed before serving still adds weight and calories.

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

ROOT CAUSE

Discarded rows are skipped only when they have zero energy.

VERIFIED REPAIR

Skip every discard row regardless of its values.

Unsuccessful approach: Skipping only light discards still counts a 20 g lemon rind that is removed.

Case contract

Rows [name, raw_g, kcal_per_100g, sodium_mg_per_100g, use]; use "eat" counts fully, "marinade" retains 1/5 of its weight and nutrients, "discard" contributes nothing. Cooked weight = retained raw weight * yield_pct/100 (moisture loss changes weight, not energy or sodium). Return half-up integers: serving_g = cooked/servings, kcal and sodium_mg per serving, kcal_per_100g of cooked dish (0 if nothing is retained). servings < 1 returns an error string.

Why this case matters

Recipe nutrition must account for cooking moisture loss and for marinades and aromatics that are not eaten.

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(ingredients, yield_pct, servings):
    if servings < 1:
        return 'error: servings'
    kcal = Fraction(0)
    na = Fraction(0)
    raw = Fraction(0)
    for name, g, k, s, use in ingredients:
        if use == 'discard' and k == 0:
            continue
        share = Fraction(1, 5) if use == 'marinade' else Fraction(1)
        grams = Fraction(g) * share
        raw += grams
        kcal += grams * k / 100
        na += grams * s / 100
    cooked = raw * Fraction(yield_pct, 100)
    def r(x):
        return math.floor(x + Fraction(1, 2))
    return {'serving_g': r(cooked / servings), 'kcal': r(kcal / servings), 'sodium_mg': r(na / servings),
            'kcal_per_100g': r(kcal * 100 / cooked) if cooked else 0}
def check(label, actual, expected):
    observations.append({"check": label, "actual": actual, "expected": expected, "passed": actual == expected})
fixtures = [[['plain dish', [[['rice', 300, 130, 1, 'eat']], 100, 3],
   {'kcal': 130, 'kcal_per_100g': 130, 'serving_g': 100, 'sodium_mg': 1}],
  ['zero servings', [[['rice', 300, 130, 1, 'eat']], 80, 0], 'error: servings'],
  ['only discarded aromatics', [[['bay leaf', 2, 313, 23, 'discard']], 90, 2],
   {'kcal': 0, 'kcal_per_100g': 0, 'serving_g': 0, 'sodium_mg': 0}],
  ['regression: discarded aromatics',
   [[['rice', 300, 130, 1, 'eat'], ['stock', 525, 10, 350, 'eat'], ['lemon rind', 45, 47, 6, 'discard'],
     ['onion', 175, 40, 4, 'eat'], ['soy marinade', 210, 60, 5500, 'marinade']],
    90, 4],
   {'kcal': 134, 'kcal_per_100g': 57, 'serving_g': 234, 'sodium_mg': 1039}],
  ['repair check: discarded aromatics',
   [[['bay leaf', 12, 313, 23, 'discard'], ['oil', 30, 884, 0, 'marinade']], 75, 2],
   {'kcal': 27, 'kcal_per_100g': 1179, 'serving_g': 2, 'sodium_mg': 0}],
  ['generated control 1',
   [[['onion', 175, 40, 4, 'eat'], ['stock', 525, 10, 350, 'eat'], ['oil', 30, 884, 0, 'eat']], 100, 1],
   {'kcal': 388, 'kcal_per_100g': 53, 'serving_g': 730, 'sodium_mg': 1845}],
  ['generated control 2', [[['oil', 30, 884, 0, 'marinade'], ['onion', 160, 40, 4, 'eat']], 75, 2],
   {'kcal': 59, 'kcal_per_100g': 94, 'serving_g': 62, 'sodium_mg': 3}],
  ['generated control 3',
   [[['onion', 150, 40, 4, 'eat'], ['lemon rind', 30, 47, 6, 'discard'], ['rice', 310, 130, 1, 'eat'],
     ['chicken', 610, 165, 70, 'eat'], ['bay leaf', 27, 313, 23, 'discard']],
    75, 5],
   {'kcal': 294, 'kcal_per_100g': 183, 'serving_g': 161, 'sodium_mg': 87}]],
 [['zero servings', [[['rice', 300, 130, 1, 'eat']], 80, 0], 'error: servings'],
  ['only discarded aromatics', [[['bay leaf', 2, 313, 23, 'discard']], 90, 2],
   {'kcal': 0, 'kcal_per_100g': 0, 'serving_g': 0, 'sodium_mg': 0}],
  ['marinated chicken',
   [[['chicken', 600, 165, 70, 'eat'], ['soy marinade', 200, 60, 5500, 'marinade']], 75, 4],
   {'kcal': 254, 'kcal_per_100g': 211, 'serving_g': 120, 'sodium_mg': 655}],
  ['regression: discarded aromatics',
   [[['bay leaf', 2, 313, 23, 'eat'], ['chicken', 610, 165, 70, 'eat'], ['lemon rind', 45, 47, 6, 'discard'],
     ['oil', 55, 884, 0, 'eat']],
    80, 2],
   {'kcal': 749, 'kcal_per_100g': 281, 'serving_g': 267, 'sodium_mg': 214}],
  ['repair check: discarded aromatics',
   [[['lemon rind', 20, 47, 6, 'discard'], ['chicken', 610, 165, 70, 'eat']], 60, 1],
   {'kcal': 1007, 'kcal_per_100g': 275, 'serving_g': 366, 'sodium_mg': 427}],
  ['generated control 1',
   [[['chicken', 610, 165, 70, 'eat'], ['soy marinade', 210, 60, 5500, 'marinade']], 70, 5],
   {'kcal': 206, 'kcal_per_100g': 226, 'serving_g': 91, 'sodium_mg': 547}],
  ['generated control 2',
   [[['lemon rind', 45, 47, 6, 'eat'], ['soy marinade', 210, 60, 5500, 'marinade'],
     ['rice', 310, 130, 1, 'eat'], ['chicken', 625, 165, 70, 'eat'], ['bay leaf', 12, 313, 23, 'eat']],
    70, 6],
   {'kcal': 253, 'kcal_per_100g': 210, 'serving_g': 121, 'sodium_mg': 459}],
  ['generated control 3',
   [[['bay leaf', 2, 313, 23, 'marinade'], ['lemon rind', 30, 47, 6, 'eat'],
     ['chicken', 600, 165, 70, 'eat']],
    90, 4],
   {'kcal': 251, 'kcal_per_100g': 177, 'serving_g': 142, 'sodium_mg': 105}]],
 [['only discarded aromatics', [[['bay leaf', 2, 313, 23, 'discard']], 90, 2],
   {'kcal': 0, 'kcal_per_100g': 0, 'serving_g': 0, 'sodium_mg': 0}],
  ['marinated chicken',
   [[['chicken', 600, 165, 70, 'eat'], ['soy marinade', 200, 60, 5500, 'marinade']], 75, 4],
   {'kcal': 254, 'kcal_per_100g': 211, 'serving_g': 120, 'sodium_mg': 655}],
  ['plain dish', [[['rice', 300, 130, 1, 'eat']], 100, 3],
   {'kcal': 130, 'kcal_per_100g': 130, 'serving_g': 100, 'sodium_mg': 1}],
  ['regression: discarded aromatics',
   [[['rice', 300, 130, 1, 'eat'], ['bay leaf', 2, 313, 23, 'discard'], ['oil', 30, 884, 0, 'eat'],
     ['chicken', 625, 165, 70, 'eat']],
    75, 4],
   {'kcal': 422, 'kcal_per_100g': 235, 'serving_g': 179, 'sodium_mg': 110}],
  ['repair check: discarded aromatics',
   [[['chicken', 600, 165, 70, 'eat'], ['stock', 500, 10, 350, 'eat'], ['onion', 175, 40, 4, 'eat'],
     ['soy marinade', 210, 60, 5500, 'marinade'], ['lemon rind', 30, 47, 6, 'discard']],
    80, 6],
   {'kcal': 189, 'kcal_per_100g': 108, 'serving_g': 176, 'sodium_mg': 748}],
  ['generated control 1',
   [[['stock', 525, 10, 350, 'eat'], ['oil', 30, 884, 0, 'eat'], ['bay leaf', 2, 313, 23, 'discard'],
     ['rice', 310, 130, 1, 'eat'], ['chicken', 600, 165, 70, 'eat']],
    60, 4],
   {'kcal': 428, 'kcal_per_100g': 195, 'serving_g': 220, 'sodium_mg': 565}],
  ['generated control 2',
   [[['stock', 510, 10, 350, 'eat'], ['onion', 175, 40, 4, 'eat'], ['rice', 325, 130, 1, 'eat'],
     ['bay leaf', 2, 313, 23, 'discard'], ['soy marinade', 225, 60, 5500, 'marinade']],
    75, 5],
   {'kcal': 114, 'kcal_per_100g': 72, 'serving_g': 158, 'sodium_mg': 854}],
  ['generated control 3',
   [[['oil', 30, 884, 0, 'eat'], ['bay leaf', 2, 313, 23, 'discard'],
     ['soy marinade', 200, 60, 5500, 'marinade']],
    60, 6],
   {'kcal': 48, 'kcal_per_100g': 689, 'serving_g': 7, 'sodium_mg': 367}]],
 [['marinated chicken',
   [[['chicken', 600, 165, 70, 'eat'], ['soy marinade', 200, 60, 5500, 'marinade']], 75, 4],
   {'kcal': 254, 'kcal_per_100g': 211, 'serving_g': 120, 'sodium_mg': 655}],
  ['plain dish', [[['rice', 300, 130, 1, 'eat']], 100, 3],
   {'kcal': 130, 'kcal_per_100g': 130, 'serving_g': 100, 'sodium_mg': 1}],
  ['zero servings', [[['rice', 300, 130, 1, 'eat']], 80, 0], 'error: servings'],
  ['regression: discarded aromatics',
   [[['chicken', 610, 165, 70, 'eat'], ['bay leaf', 2, 313, 23, 'discard'],
     ['soy marinade', 200, 60, 5500, 'marinade'], ['oil', 40, 884, 0, 'eat'], ['rice', 310, 130, 1, 'eat']],
    70, 4],
   {'kcal': 447, 'kcal_per_100g': 255, 'serving_g': 175, 'sodium_mg': 658}],
  ['repair check: discarded aromatics',
   [[['stock', 500, 10, 350, 'eat'], ['lemon rind', 30, 47, 6, 'discard']], 60, 2],
   {'kcal': 25, 'kcal_per_100g': 17, 'serving_g': 150, 'sodium_mg': 875}],
  ['generated control 1',
   [[['lemon rind', 45, 47, 6, 'eat'], ['soy marinade', 210, 60, 5500, 'marinade'],
     ['rice', 310, 130, 1, 'eat']],
    100, 5],
   {'kcal': 90, 'kcal_per_100g': 113, 'serving_g': 79, 'sodium_mg': 463}],
  ['generated control 2',
   [[['lemon rind', 45, 47, 6, 'eat'], ['bay leaf', 12, 313, 23, 'eat'], ['chicken', 600, 165, 70, 'eat'],
     ['oil', 30, 884, 0, 'eat'], ['stock', 510, 10, 350, 'eat']],
    80, 1],
   {'kcal': 1365, 'kcal_per_100g': 143, 'serving_g': 958, 'sodium_mg': 2210}],
  ['generated control 3',
   [[['stock', 500, 10, 350, 'eat'], ['rice', 300, 130, 1, 'eat'], ['oil', 30, 884, 0, 'eat']], 110, 1],
   {'kcal': 705, 'kcal_per_100g': 77, 'serving_g': 913, 'sodium_mg': 1753}]],
 [['plain dish', [[['rice', 300, 130, 1, 'eat']], 100, 3],
   {'kcal': 130, 'kcal_per_100g': 130, 'serving_g': 100, 'sodium_mg': 1}],
  ['zero servings', [[['rice', 300, 130, 1, 'eat']], 80, 0], 'error: servings'],
  ['only discarded aromatics', [[['bay leaf', 2, 313, 23, 'discard']], 90, 2],
   {'kcal': 0, 'kcal_per_100g': 0, 'serving_g': 0, 'sodium_mg': 0}],
  ['regression: discarded aromatics',
   [[['bay leaf', 27, 313, 23, 'discard'], ['onion', 175, 40, 4, 'eat'], ['stock', 510, 10, 350, 'eat'],
     ['rice', 310, 130, 1, 'eat']],
    110, 2],
   {'kcal': 262, 'kcal_per_100g': 48, 'serving_g': 547, 'sodium_mg': 898}],
  ['repair check: discarded aromatics',
   [[['bay leaf', 27, 313, 23, 'discard'], ['rice', 310, 130, 1, 'eat'], ['onion', 150, 40, 4, 'eat']], 70,
    2],
   {'kcal': 232, 'kcal_per_100g': 144, 'serving_g': 161, 'sodium_mg': 5}],
  ['generated control 1',
   [[['oil', 30, 884, 0, 'eat'], ['rice', 310, 130, 1, 'eat'], ['onion', 160, 40, 4, 'eat']], 90, 5],
   {'kcal': 146, 'kcal_per_100g': 163, 'serving_g': 90, 'sodium_mg': 2}],
  ['generated control 2',
   [[['chicken', 625, 165, 70, 'eat'], ['soy marinade', 200, 60, 5500, 'marinade']], 75, 6],
   {'kcal': 176, 'kcal_per_100g': 212, 'serving_g': 83, 'sodium_mg': 440}],
  ['generated control 3',
   [[['bay leaf', 12, 313, 23, 'discard'], ['onion', 160, 40, 4, 'eat'],
     ['soy marinade', 200, 60, 5500, 'marinade'], ['stock', 525, 10, 350, 'marinade'],
     ['oil', 30, 884, 0, 'eat']],
    70, 2],
   {'kcal': 182, 'kcal_per_100g': 155, 'serving_g': 117, 'sodium_mg': 1287}]]]
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
plain dish{'kcal': 130, 'kcal_per_100g': 130, 'serving_g': 100, 'sodium_mg': 1}{'kcal': 130, 'kcal_per_100g': 130, 'serving_g': 100, 'sodium_mg': 1}Passed
zero servingserror: servingserror: servingsPassed
only discarded aromatics{'kcal': 3, 'kcal_per_100g': 348, 'serving_g': 1, 'sodium_mg': 0}{'kcal': 0, 'kcal_per_100g': 0, 'serving_g': 0, 'sodium_mg': 0}Failed
regression: discarded aromatics{'kcal': 140, 'kcal_per_100g': 57, 'serving_g': 245, 'sodium_mg': 1040}{'kcal': 134, 'kcal_per_100g': 57, 'serving_g': 234, 'sodium_mg': 1039}Failed
repair check: discarded aromatics{'kcal': 45, 'kcal_per_100g': 671, 'serving_g': 7, 'sodium_mg': 1}{'kcal': 27, 'kcal_per_100g': 1179, 'serving_g': 2, 'sodium_mg': 0}Failed
generated control 1{'kcal': 388, 'kcal_per_100g': 53, 'serving_g': 730, 'sodium_mg': 1845}{'kcal': 388, 'kcal_per_100g': 53, 'serving_g': 730, 'sodium_mg': 1845}Passed
generated control 2{'kcal': 59, 'kcal_per_100g': 94, 'serving_g': 62, 'sodium_mg': 3}{'kcal': 59, 'kcal_per_100g': 94, 'serving_g': 62, 'sodium_mg': 3}Passed
generated control 3{'kcal': 314, 'kcal_per_100g': 186, 'serving_g': 169, 'sodium_mg': 89}{'kcal': 294, 'kcal_per_100g': 183, 'serving_g': 161, 'sodium_mg': 87}Failed

SHA-256 / d74dd37569db9641029e68b1253df0cb6c41e46f1d1a6f342c1ee1cb9c73afb5

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(ingredients, yield_pct, servings):
    if servings < 1:
        return 'error: servings'
    kcal = Fraction(0)
    na = Fraction(0)
    raw = Fraction(0)
    for name, g, k, s, use in ingredients:
        if use == 'discard' and g < 10:
            continue
        share = Fraction(1, 5) if use == 'marinade' else Fraction(1)
        grams = Fraction(g) * share
        raw += grams
        kcal += grams * k / 100
        na += grams * s / 100
    cooked = raw * Fraction(yield_pct, 100)
    def r(x):
        return math.floor(x + Fraction(1, 2))
    return {'serving_g': r(cooked / servings), 'kcal': r(kcal / servings), 'sodium_mg': r(na / servings),
            'kcal_per_100g': r(kcal * 100 / cooked) if cooked else 0}
def check(label, actual, expected):
    observations.append({"check": label, "actual": actual, "expected": expected, "passed": actual == expected})
fixtures = [[['plain dish', [[['rice', 300, 130, 1, 'eat']], 100, 3],
   {'kcal': 130, 'kcal_per_100g': 130, 'serving_g': 100, 'sodium_mg': 1}],
  ['zero servings', [[['rice', 300, 130, 1, 'eat']], 80, 0], 'error: servings'],
  ['only discarded aromatics', [[['bay leaf', 2, 313, 23, 'discard']], 90, 2],
   {'kcal': 0, 'kcal_per_100g': 0, 'serving_g': 0, 'sodium_mg': 0}],
  ['regression: discarded aromatics',
   [[['rice', 300, 130, 1, 'eat'], ['stock', 525, 10, 350, 'eat'], ['lemon rind', 45, 47, 6, 'discard'],
     ['onion', 175, 40, 4, 'eat'], ['soy marinade', 210, 60, 5500, 'marinade']],
    90, 4],
   {'kcal': 134, 'kcal_per_100g': 57, 'serving_g': 234, 'sodium_mg': 1039}],
  ['repair check: discarded aromatics',
   [[['bay leaf', 12, 313, 23, 'discard'], ['oil', 30, 884, 0, 'marinade']], 75, 2],
   {'kcal': 27, 'kcal_per_100g': 1179, 'serving_g': 2, 'sodium_mg': 0}],
  ['generated control 1',
   [[['onion', 175, 40, 4, 'eat'], ['stock', 525, 10, 350, 'eat'], ['oil', 30, 884, 0, 'eat']], 100, 1],
   {'kcal': 388, 'kcal_per_100g': 53, 'serving_g': 730, 'sodium_mg': 1845}],
  ['generated control 2', [[['oil', 30, 884, 0, 'marinade'], ['onion', 160, 40, 4, 'eat']], 75, 2],
   {'kcal': 59, 'kcal_per_100g': 94, 'serving_g': 62, 'sodium_mg': 3}],
  ['generated control 3',
   [[['onion', 150, 40, 4, 'eat'], ['lemon rind', 30, 47, 6, 'discard'], ['rice', 310, 130, 1, 'eat'],
     ['chicken', 610, 165, 70, 'eat'], ['bay leaf', 27, 313, 23, 'discard']],
    75, 5],
   {'kcal': 294, 'kcal_per_100g': 183, 'serving_g': 161, 'sodium_mg': 87}]],
 [['zero servings', [[['rice', 300, 130, 1, 'eat']], 80, 0], 'error: servings'],
  ['only discarded aromatics', [[['bay leaf', 2, 313, 23, 'discard']], 90, 2],
   {'kcal': 0, 'kcal_per_100g': 0, 'serving_g': 0, 'sodium_mg': 0}],
  ['marinated chicken',
   [[['chicken', 600, 165, 70, 'eat'], ['soy marinade', 200, 60, 5500, 'marinade']], 75, 4],
   {'kcal': 254, 'kcal_per_100g': 211, 'serving_g': 120, 'sodium_mg': 655}],
  ['regression: discarded aromatics',
   [[['bay leaf', 2, 313, 23, 'eat'], ['chicken', 610, 165, 70, 'eat'], ['lemon rind', 45, 47, 6, 'discard'],
     ['oil', 55, 884, 0, 'eat']],
    80, 2],
   {'kcal': 749, 'kcal_per_100g': 281, 'serving_g': 267, 'sodium_mg': 214}],
  ['repair check: discarded aromatics',
   [[['lemon rind', 20, 47, 6, 'discard'], ['chicken', 610, 165, 70, 'eat']], 60, 1],
   {'kcal': 1007, 'kcal_per_100g': 275, 'serving_g': 366, 'sodium_mg': 427}],
  ['generated control 1',
   [[['chicken', 610, 165, 70, 'eat'], ['soy marinade', 210, 60, 5500, 'marinade']], 70, 5],
   {'kcal': 206, 'kcal_per_100g': 226, 'serving_g': 91, 'sodium_mg': 547}],
  ['generated control 2',
   [[['lemon rind', 45, 47, 6, 'eat'], ['soy marinade', 210, 60, 5500, 'marinade'],
     ['rice', 310, 130, 1, 'eat'], ['chicken', 625, 165, 70, 'eat'], ['bay leaf', 12, 313, 23, 'eat']],
    70, 6],
   {'kcal': 253, 'kcal_per_100g': 210, 'serving_g': 121, 'sodium_mg': 459}],
  ['generated control 3',
   [[['bay leaf', 2, 313, 23, 'marinade'], ['lemon rind', 30, 47, 6, 'eat'],
     ['chicken', 600, 165, 70, 'eat']],
    90, 4],
   {'kcal': 251, 'kcal_per_100g': 177, 'serving_g': 142, 'sodium_mg': 105}]],
 [['only discarded aromatics', [[['bay leaf', 2, 313, 23, 'discard']], 90, 2],
   {'kcal': 0, 'kcal_per_100g': 0, 'serving_g': 0, 'sodium_mg': 0}],
  ['marinated chicken',
   [[['chicken', 600, 165, 70, 'eat'], ['soy marinade', 200, 60, 5500, 'marinade']], 75, 4],
   {'kcal': 254, 'kcal_per_100g': 211, 'serving_g': 120, 'sodium_mg': 655}],
  ['plain dish', [[['rice', 300, 130, 1, 'eat']], 100, 3],
   {'kcal': 130, 'kcal_per_100g': 130, 'serving_g': 100, 'sodium_mg': 1}],
  ['regression: discarded aromatics',
   [[['rice', 300, 130, 1, 'eat'], ['bay leaf', 2, 313, 23, 'discard'], ['oil', 30, 884, 0, 'eat'],
     ['chicken', 625, 165, 70, 'eat']],
    75, 4],
   {'kcal': 422, 'kcal_per_100g': 235, 'serving_g': 179, 'sodium_mg': 110}],
  ['repair check: discarded aromatics',
   [[['chicken', 600, 165, 70, 'eat'], ['stock', 500, 10, 350, 'eat'], ['onion', 175, 40, 4, 'eat'],
     ['soy marinade', 210, 60, 5500, 'marinade'], ['lemon rind', 30, 47, 6, 'discard']],
    80, 6],
   {'kcal': 189, 'kcal_per_100g': 108, 'serving_g': 176, 'sodium_mg': 748}],
  ['generated control 1',
   [[['stock', 525, 10, 350, 'eat'], ['oil', 30, 884, 0, 'eat'], ['bay leaf', 2, 313, 23, 'discard'],
     ['rice', 310, 130, 1, 'eat'], ['chicken', 600, 165, 70, 'eat']],
    60, 4],
   {'kcal': 428, 'kcal_per_100g': 195, 'serving_g': 220, 'sodium_mg': 565}],
  ['generated control 2',
   [[['stock', 510, 10, 350, 'eat'], ['onion', 175, 40, 4, 'eat'], ['rice', 325, 130, 1, 'eat'],
     ['bay leaf', 2, 313, 23, 'discard'], ['soy marinade', 225, 60, 5500, 'marinade']],
    75, 5],
   {'kcal': 114, 'kcal_per_100g': 72, 'serving_g': 158, 'sodium_mg': 854}],
  ['generated control 3',
   [[['oil', 30, 884, 0, 'eat'], ['bay leaf', 2, 313, 23, 'discard'],
     ['soy marinade', 200, 60, 5500, 'marinade']],
    60, 6],
   {'kcal': 48, 'kcal_per_100g': 689, 'serving_g': 7, 'sodium_mg': 367}]],
 [['marinated chicken',
   [[['chicken', 600, 165, 70, 'eat'], ['soy marinade', 200, 60, 5500, 'marinade']], 75, 4],
   {'kcal': 254, 'kcal_per_100g': 211, 'serving_g': 120, 'sodium_mg': 655}],
  ['plain dish', [[['rice', 300, 130, 1, 'eat']], 100, 3],
   {'kcal': 130, 'kcal_per_100g': 130, 'serving_g': 100, 'sodium_mg': 1}],
  ['zero servings', [[['rice', 300, 130, 1, 'eat']], 80, 0], 'error: servings'],
  ['regression: discarded aromatics',
   [[['chicken', 610, 165, 70, 'eat'], ['bay leaf', 2, 313, 23, 'discard'],
     ['soy marinade', 200, 60, 5500, 'marinade'], ['oil', 40, 884, 0, 'eat'], ['rice', 310, 130, 1, 'eat']],
    70, 4],
   {'kcal': 447, 'kcal_per_100g': 255, 'serving_g': 175, 'sodium_mg': 658}],
  ['repair check: discarded aromatics',
   [[['stock', 500, 10, 350, 'eat'], ['lemon rind', 30, 47, 6, 'discard']], 60, 2],
   {'kcal': 25, 'kcal_per_100g': 17, 'serving_g': 150, 'sodium_mg': 875}],
  ['generated control 1',
   [[['lemon rind', 45, 47, 6, 'eat'], ['soy marinade', 210, 60, 5500, 'marinade'],
     ['rice', 310, 130, 1, 'eat']],
    100, 5],
   {'kcal': 90, 'kcal_per_100g': 113, 'serving_g': 79, 'sodium_mg': 463}],
  ['generated control 2',
   [[['lemon rind', 45, 47, 6, 'eat'], ['bay leaf', 12, 313, 23, 'eat'], ['chicken', 600, 165, 70, 'eat'],
     ['oil', 30, 884, 0, 'eat'], ['stock', 510, 10, 350, 'eat']],
    80, 1],
   {'kcal': 1365, 'kcal_per_100g': 143, 'serving_g': 958, 'sodium_mg': 2210}],
  ['generated control 3',
   [[['stock', 500, 10, 350, 'eat'], ['rice', 300, 130, 1, 'eat'], ['oil', 30, 884, 0, 'eat']], 110, 1],
   {'kcal': 705, 'kcal_per_100g': 77, 'serving_g': 913, 'sodium_mg': 1753}]],
 [['plain dish', [[['rice', 300, 130, 1, 'eat']], 100, 3],
   {'kcal': 130, 'kcal_per_100g': 130, 'serving_g': 100, 'sodium_mg': 1}],
  ['zero servings', [[['rice', 300, 130, 1, 'eat']], 80, 0], 'error: servings'],
  ['only discarded aromatics', [[['bay leaf', 2, 313, 23, 'discard']], 90, 2],
   {'kcal': 0, 'kcal_per_100g': 0, 'serving_g': 0, 'sodium_mg': 0}],
  ['regression: discarded aromatics',
   [[['bay leaf', 27, 313, 23, 'discard'], ['onion', 175, 40, 4, 'eat'], ['stock', 510, 10, 350, 'eat'],
     ['rice', 310, 130, 1, 'eat']],
    110, 2],
   {'kcal': 262, 'kcal_per_100g': 48, 'serving_g': 547, 'sodium_mg': 898}],
  ['repair check: discarded aromatics',
   [[['bay leaf', 27, 313, 23, 'discard'], ['rice', 310, 130, 1, 'eat'], ['onion', 150, 40, 4, 'eat']], 70,
    2],
   {'kcal': 232, 'kcal_per_100g': 144, 'serving_g': 161, 'sodium_mg': 5}],
  ['generated control 1',
   [[['oil', 30, 884, 0, 'eat'], ['rice', 310, 130, 1, 'eat'], ['onion', 160, 40, 4, 'eat']], 90, 5],
   {'kcal': 146, 'kcal_per_100g': 163, 'serving_g': 90, 'sodium_mg': 2}],
  ['generated control 2',
   [[['chicken', 625, 165, 70, 'eat'], ['soy marinade', 200, 60, 5500, 'marinade']], 75, 6],
   {'kcal': 176, 'kcal_per_100g': 212, 'serving_g': 83, 'sodium_mg': 440}],
  ['generated control 3',
   [[['bay leaf', 12, 313, 23, 'discard'], ['onion', 160, 40, 4, 'eat'],
     ['soy marinade', 200, 60, 5500, 'marinade'], ['stock', 525, 10, 350, 'marinade'],
     ['oil', 30, 884, 0, 'eat']],
    70, 2],
   {'kcal': 182, 'kcal_per_100g': 155, 'serving_g': 117, 'sodium_mg': 1287}]]]
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
plain dish{'kcal': 130, 'kcal_per_100g': 130, 'serving_g': 100, 'sodium_mg': 1}{'kcal': 130, 'kcal_per_100g': 130, 'serving_g': 100, 'sodium_mg': 1}Passed
zero servingserror: servingserror: servingsPassed
only discarded aromatics{'kcal': 0, 'kcal_per_100g': 0, 'serving_g': 0, 'sodium_mg': 0}{'kcal': 0, 'kcal_per_100g': 0, 'serving_g': 0, 'sodium_mg': 0}Passed
regression: discarded aromatics{'kcal': 140, 'kcal_per_100g': 57, 'serving_g': 245, 'sodium_mg': 1040}{'kcal': 134, 'kcal_per_100g': 57, 'serving_g': 234, 'sodium_mg': 1039}Failed
repair check: discarded aromatics{'kcal': 45, 'kcal_per_100g': 671, 'serving_g': 7, 'sodium_mg': 1}{'kcal': 27, 'kcal_per_100g': 1179, 'serving_g': 2, 'sodium_mg': 0}Failed
generated control 1{'kcal': 388, 'kcal_per_100g': 53, 'serving_g': 730, 'sodium_mg': 1845}{'kcal': 388, 'kcal_per_100g': 53, 'serving_g': 730, 'sodium_mg': 1845}Passed
generated control 2{'kcal': 59, 'kcal_per_100g': 94, 'serving_g': 62, 'sodium_mg': 3}{'kcal': 59, 'kcal_per_100g': 94, 'serving_g': 62, 'sodium_mg': 3}Passed
generated control 3{'kcal': 314, 'kcal_per_100g': 186, 'serving_g': 169, 'sodium_mg': 89}{'kcal': 294, 'kcal_per_100g': 183, 'serving_g': 161, 'sodium_mg': 87}Failed

SHA-256 / 8c02b0430849012041a450989dbd9ddf48c574ff8a574a2a23f7896e5902ef57

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(ingredients, yield_pct, servings):
    if servings < 1:
        return 'error: servings'
    kcal = Fraction(0)
    na = Fraction(0)
    raw = Fraction(0)
    for name, g, k, s, use in ingredients:
        if use == 'discard':
            continue
        share = Fraction(1, 5) if use == 'marinade' else Fraction(1)
        grams = Fraction(g) * share
        raw += grams
        kcal += grams * k / 100
        na += grams * s / 100
    cooked = raw * Fraction(yield_pct, 100)
    def r(x):
        return math.floor(x + Fraction(1, 2))
    return {'serving_g': r(cooked / servings), 'kcal': r(kcal / servings), 'sodium_mg': r(na / servings),
            'kcal_per_100g': r(kcal * 100 / cooked) if cooked else 0}
def check(label, actual, expected):
    observations.append({"check": label, "actual": actual, "expected": expected, "passed": actual == expected})
fixtures = [[['plain dish', [[['rice', 300, 130, 1, 'eat']], 100, 3],
   {'kcal': 130, 'kcal_per_100g': 130, 'serving_g': 100, 'sodium_mg': 1}],
  ['zero servings', [[['rice', 300, 130, 1, 'eat']], 80, 0], 'error: servings'],
  ['only discarded aromatics', [[['bay leaf', 2, 313, 23, 'discard']], 90, 2],
   {'kcal': 0, 'kcal_per_100g': 0, 'serving_g': 0, 'sodium_mg': 0}],
  ['regression: discarded aromatics',
   [[['rice', 300, 130, 1, 'eat'], ['stock', 525, 10, 350, 'eat'], ['lemon rind', 45, 47, 6, 'discard'],
     ['onion', 175, 40, 4, 'eat'], ['soy marinade', 210, 60, 5500, 'marinade']],
    90, 4],
   {'kcal': 134, 'kcal_per_100g': 57, 'serving_g': 234, 'sodium_mg': 1039}],
  ['repair check: discarded aromatics',
   [[['bay leaf', 12, 313, 23, 'discard'], ['oil', 30, 884, 0, 'marinade']], 75, 2],
   {'kcal': 27, 'kcal_per_100g': 1179, 'serving_g': 2, 'sodium_mg': 0}],
  ['generated control 1',
   [[['onion', 175, 40, 4, 'eat'], ['stock', 525, 10, 350, 'eat'], ['oil', 30, 884, 0, 'eat']], 100, 1],
   {'kcal': 388, 'kcal_per_100g': 53, 'serving_g': 730, 'sodium_mg': 1845}],
  ['generated control 2', [[['oil', 30, 884, 0, 'marinade'], ['onion', 160, 40, 4, 'eat']], 75, 2],
   {'kcal': 59, 'kcal_per_100g': 94, 'serving_g': 62, 'sodium_mg': 3}],
  ['generated control 3',
   [[['onion', 150, 40, 4, 'eat'], ['lemon rind', 30, 47, 6, 'discard'], ['rice', 310, 130, 1, 'eat'],
     ['chicken', 610, 165, 70, 'eat'], ['bay leaf', 27, 313, 23, 'discard']],
    75, 5],
   {'kcal': 294, 'kcal_per_100g': 183, 'serving_g': 161, 'sodium_mg': 87}]],
 [['zero servings', [[['rice', 300, 130, 1, 'eat']], 80, 0], 'error: servings'],
  ['only discarded aromatics', [[['bay leaf', 2, 313, 23, 'discard']], 90, 2],
   {'kcal': 0, 'kcal_per_100g': 0, 'serving_g': 0, 'sodium_mg': 0}],
  ['marinated chicken',
   [[['chicken', 600, 165, 70, 'eat'], ['soy marinade', 200, 60, 5500, 'marinade']], 75, 4],
   {'kcal': 254, 'kcal_per_100g': 211, 'serving_g': 120, 'sodium_mg': 655}],
  ['regression: discarded aromatics',
   [[['bay leaf', 2, 313, 23, 'eat'], ['chicken', 610, 165, 70, 'eat'], ['lemon rind', 45, 47, 6, 'discard'],
     ['oil', 55, 884, 0, 'eat']],
    80, 2],
   {'kcal': 749, 'kcal_per_100g': 281, 'serving_g': 267, 'sodium_mg': 214}],
  ['repair check: discarded aromatics',
   [[['lemon rind', 20, 47, 6, 'discard'], ['chicken', 610, 165, 70, 'eat']], 60, 1],
   {'kcal': 1007, 'kcal_per_100g': 275, 'serving_g': 366, 'sodium_mg': 427}],
  ['generated control 1',
   [[['chicken', 610, 165, 70, 'eat'], ['soy marinade', 210, 60, 5500, 'marinade']], 70, 5],
   {'kcal': 206, 'kcal_per_100g': 226, 'serving_g': 91, 'sodium_mg': 547}],
  ['generated control 2',
   [[['lemon rind', 45, 47, 6, 'eat'], ['soy marinade', 210, 60, 5500, 'marinade'],
     ['rice', 310, 130, 1, 'eat'], ['chicken', 625, 165, 70, 'eat'], ['bay leaf', 12, 313, 23, 'eat']],
    70, 6],
   {'kcal': 253, 'kcal_per_100g': 210, 'serving_g': 121, 'sodium_mg': 459}],
  ['generated control 3',
   [[['bay leaf', 2, 313, 23, 'marinade'], ['lemon rind', 30, 47, 6, 'eat'],
     ['chicken', 600, 165, 70, 'eat']],
    90, 4],
   {'kcal': 251, 'kcal_per_100g': 177, 'serving_g': 142, 'sodium_mg': 105}]],
 [['only discarded aromatics', [[['bay leaf', 2, 313, 23, 'discard']], 90, 2],
   {'kcal': 0, 'kcal_per_100g': 0, 'serving_g': 0, 'sodium_mg': 0}],
  ['marinated chicken',
   [[['chicken', 600, 165, 70, 'eat'], ['soy marinade', 200, 60, 5500, 'marinade']], 75, 4],
   {'kcal': 254, 'kcal_per_100g': 211, 'serving_g': 120, 'sodium_mg': 655}],
  ['plain dish', [[['rice', 300, 130, 1, 'eat']], 100, 3],
   {'kcal': 130, 'kcal_per_100g': 130, 'serving_g': 100, 'sodium_mg': 1}],
  ['regression: discarded aromatics',
   [[['rice', 300, 130, 1, 'eat'], ['bay leaf', 2, 313, 23, 'discard'], ['oil', 30, 884, 0, 'eat'],
     ['chicken', 625, 165, 70, 'eat']],
    75, 4],
   {'kcal': 422, 'kcal_per_100g': 235, 'serving_g': 179, 'sodium_mg': 110}],
  ['repair check: discarded aromatics',
   [[['chicken', 600, 165, 70, 'eat'], ['stock', 500, 10, 350, 'eat'], ['onion', 175, 40, 4, 'eat'],
     ['soy marinade', 210, 60, 5500, 'marinade'], ['lemon rind', 30, 47, 6, 'discard']],
    80, 6],
   {'kcal': 189, 'kcal_per_100g': 108, 'serving_g': 176, 'sodium_mg': 748}],
  ['generated control 1',
   [[['stock', 525, 10, 350, 'eat'], ['oil', 30, 884, 0, 'eat'], ['bay leaf', 2, 313, 23, 'discard'],
     ['rice', 310, 130, 1, 'eat'], ['chicken', 600, 165, 70, 'eat']],
    60, 4],
   {'kcal': 428, 'kcal_per_100g': 195, 'serving_g': 220, 'sodium_mg': 565}],
  ['generated control 2',
   [[['stock', 510, 10, 350, 'eat'], ['onion', 175, 40, 4, 'eat'], ['rice', 325, 130, 1, 'eat'],
     ['bay leaf', 2, 313, 23, 'discard'], ['soy marinade', 225, 60, 5500, 'marinade']],
    75, 5],
   {'kcal': 114, 'kcal_per_100g': 72, 'serving_g': 158, 'sodium_mg': 854}],
  ['generated control 3',
   [[['oil', 30, 884, 0, 'eat'], ['bay leaf', 2, 313, 23, 'discard'],
     ['soy marinade', 200, 60, 5500, 'marinade']],
    60, 6],
   {'kcal': 48, 'kcal_per_100g': 689, 'serving_g': 7, 'sodium_mg': 367}]],
 [['marinated chicken',
   [[['chicken', 600, 165, 70, 'eat'], ['soy marinade', 200, 60, 5500, 'marinade']], 75, 4],
   {'kcal': 254, 'kcal_per_100g': 211, 'serving_g': 120, 'sodium_mg': 655}],
  ['plain dish', [[['rice', 300, 130, 1, 'eat']], 100, 3],
   {'kcal': 130, 'kcal_per_100g': 130, 'serving_g': 100, 'sodium_mg': 1}],
  ['zero servings', [[['rice', 300, 130, 1, 'eat']], 80, 0], 'error: servings'],
  ['regression: discarded aromatics',
   [[['chicken', 610, 165, 70, 'eat'], ['bay leaf', 2, 313, 23, 'discard'],
     ['soy marinade', 200, 60, 5500, 'marinade'], ['oil', 40, 884, 0, 'eat'], ['rice', 310, 130, 1, 'eat']],
    70, 4],
   {'kcal': 447, 'kcal_per_100g': 255, 'serving_g': 175, 'sodium_mg': 658}],
  ['repair check: discarded aromatics',
   [[['stock', 500, 10, 350, 'eat'], ['lemon rind', 30, 47, 6, 'discard']], 60, 2],
   {'kcal': 25, 'kcal_per_100g': 17, 'serving_g': 150, 'sodium_mg': 875}],
  ['generated control 1',
   [[['lemon rind', 45, 47, 6, 'eat'], ['soy marinade', 210, 60, 5500, 'marinade'],
     ['rice', 310, 130, 1, 'eat']],
    100, 5],
   {'kcal': 90, 'kcal_per_100g': 113, 'serving_g': 79, 'sodium_mg': 463}],
  ['generated control 2',
   [[['lemon rind', 45, 47, 6, 'eat'], ['bay leaf', 12, 313, 23, 'eat'], ['chicken', 600, 165, 70, 'eat'],
     ['oil', 30, 884, 0, 'eat'], ['stock', 510, 10, 350, 'eat']],
    80, 1],
   {'kcal': 1365, 'kcal_per_100g': 143, 'serving_g': 958, 'sodium_mg': 2210}],
  ['generated control 3',
   [[['stock', 500, 10, 350, 'eat'], ['rice', 300, 130, 1, 'eat'], ['oil', 30, 884, 0, 'eat']], 110, 1],
   {'kcal': 705, 'kcal_per_100g': 77, 'serving_g': 913, 'sodium_mg': 1753}]],
 [['plain dish', [[['rice', 300, 130, 1, 'eat']], 100, 3],
   {'kcal': 130, 'kcal_per_100g': 130, 'serving_g': 100, 'sodium_mg': 1}],
  ['zero servings', [[['rice', 300, 130, 1, 'eat']], 80, 0], 'error: servings'],
  ['only discarded aromatics', [[['bay leaf', 2, 313, 23, 'discard']], 90, 2],
   {'kcal': 0, 'kcal_per_100g': 0, 'serving_g': 0, 'sodium_mg': 0}],
  ['regression: discarded aromatics',
   [[['bay leaf', 27, 313, 23, 'discard'], ['onion', 175, 40, 4, 'eat'], ['stock', 510, 10, 350, 'eat'],
     ['rice', 310, 130, 1, 'eat']],
    110, 2],
   {'kcal': 262, 'kcal_per_100g': 48, 'serving_g': 547, 'sodium_mg': 898}],
  ['repair check: discarded aromatics',
   [[['bay leaf', 27, 313, 23, 'discard'], ['rice', 310, 130, 1, 'eat'], ['onion', 150, 40, 4, 'eat']], 70,
    2],
   {'kcal': 232, 'kcal_per_100g': 144, 'serving_g': 161, 'sodium_mg': 5}],
  ['generated control 1',
   [[['oil', 30, 884, 0, 'eat'], ['rice', 310, 130, 1, 'eat'], ['onion', 160, 40, 4, 'eat']], 90, 5],
   {'kcal': 146, 'kcal_per_100g': 163, 'serving_g': 90, 'sodium_mg': 2}],
  ['generated control 2',
   [[['chicken', 625, 165, 70, 'eat'], ['soy marinade', 200, 60, 5500, 'marinade']], 75, 6],
   {'kcal': 176, 'kcal_per_100g': 212, 'serving_g': 83, 'sodium_mg': 440}],
  ['generated control 3',
   [[['bay leaf', 12, 313, 23, 'discard'], ['onion', 160, 40, 4, 'eat'],
     ['soy marinade', 200, 60, 5500, 'marinade'], ['stock', 525, 10, 350, 'marinade'],
     ['oil', 30, 884, 0, 'eat']],
    70, 2],
   {'kcal': 182, 'kcal_per_100g': 155, 'serving_g': 117, 'sodium_mg': 1287}]]]
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
plain dish{'kcal': 130, 'kcal_per_100g': 130, 'serving_g': 100, 'sodium_mg': 1}{'kcal': 130, 'kcal_per_100g': 130, 'serving_g': 100, 'sodium_mg': 1}Passed
zero servingserror: servingserror: servingsPassed
only discarded aromatics{'kcal': 0, 'kcal_per_100g': 0, 'serving_g': 0, 'sodium_mg': 0}{'kcal': 0, 'kcal_per_100g': 0, 'serving_g': 0, 'sodium_mg': 0}Passed
regression: discarded aromatics{'kcal': 134, 'kcal_per_100g': 57, 'serving_g': 234, 'sodium_mg': 1039}{'kcal': 134, 'kcal_per_100g': 57, 'serving_g': 234, 'sodium_mg': 1039}Passed
repair check: discarded aromatics{'kcal': 27, 'kcal_per_100g': 1179, 'serving_g': 2, 'sodium_mg': 0}{'kcal': 27, 'kcal_per_100g': 1179, 'serving_g': 2, 'sodium_mg': 0}Passed
generated control 1{'kcal': 388, 'kcal_per_100g': 53, 'serving_g': 730, 'sodium_mg': 1845}{'kcal': 388, 'kcal_per_100g': 53, 'serving_g': 730, 'sodium_mg': 1845}Passed
generated control 2{'kcal': 59, 'kcal_per_100g': 94, 'serving_g': 62, 'sodium_mg': 3}{'kcal': 59, 'kcal_per_100g': 94, 'serving_g': 62, 'sodium_mg': 3}Passed
generated control 3{'kcal': 294, 'kcal_per_100g': 183, 'serving_g': 161, 'sodium_mg': 87}{'kcal': 294, 'kcal_per_100g': 183, 'serving_g': 161, 'sodium_mg': 87}Passed

SHA-256 / cd24f10cffb95e6e1a77e61a07bd51569185e7da7a131d759b2f0efcd1f3b200

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

Case digest / 07d29edac874b6f1292deac816c38d4cf627a4c2dc3448e268041e0ca8f06f88