FA-97081 / Recipe scaling and nutrition / Open access
Yeast type converter: bloom flag · case 01
Converting instant to active dry omits the proofing instruction.
ROOT CAUSE
The bloom flag checks the source type instead of the target type.
VERIFIED REPAIR
Flag bloom when the target is active dry.
Unsuccessful approach: Flagging every non-instant target also tells fresh yeast users to bloom.
Case contract
Types (trimmed, case-insensitive) instant, active dry, fresh with grams per 1 g instant: 1, 5/4, 3. Unknown -> "error: yeast type". grams = amount/ratio[from]*ratio[to], printed half-up to 0.1 (float). tsp: None for fresh; else grams/3.1 in quarter teaspoons half-up: 0 -> "less than 1/4", <4 quarters -> "q/4", whole -> "n", else "n q/4" (quarters not reduced). bloom is True only when converting to active dry.
Why this case matters
Bakers substitute yeast forms and need both weight and spoon measures.
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(amount_g, from_type, to_type):
R = {'instant': Fraction(1), 'active dry': Fraction(5, 4), 'fresh': Fraction(3)}
f, t = from_type.strip().lower(), to_type.strip().lower()
if f not in R or t not in R:
return 'error: yeast type'
g = Fraction(str(amount_g)) / R[f] * R[t]
grams = math.floor(g * 10 + Fraction(1, 2)) / 10
out = {'grams': grams}
if t == 'fresh':
out['tsp'] = None
else:
q = math.floor(g / Fraction(31, 10) * 4 + Fraction(1, 2))
if q == 0:
out['tsp'] = 'less than 1/4'
elif q < 4:
out['tsp'] = '%d/4' % q
elif q % 4 == 0:
out['tsp'] = '%d' % (q // 4)
else:
out['tsp'] = '%d %d/4' % divmod(q, 4)
out['bloom'] = f == 'active dry'
return out
def check(label, actual, expected):
observations.append({"check": label, "actual": actual, "expected": expected, "passed": actual == expected})
fixtures = [[['instant to active dry', [7, 'instant', 'active dry'], {'bloom': True, 'grams': 8.8, 'tsp': '2 3/4'}],
['fresh to instant', [21, 'fresh', 'instant'], {'bloom': False, 'grams': 7.0, 'tsp': '2 1/4'}],
['unknown type', [7, 'rapid', 'instant'], 'error: yeast type'],
['regression: bloom flag', [21, ' Instant', 'active dry'], {'bloom': True, 'grams': 26.3, 'tsp': '8 2/4'}],
['repair check: bloom flag', [3, ' Instant', 'FRESH'], {'bloom': False, 'grams': 9.0, 'tsp': None}],
['generated control 1', [4, 'FRESH', 'instant'], {'bloom': False, 'grams': 1.3, 'tsp': '2/4'}],
['generated control 2', [0.3, 'fresh', 'fresh'], {'bloom': False, 'grams': 0.3, 'tsp': None}],
['generated control 3', [10, 'active dry', ' Instant'], {'bloom': False, 'grams': 8.0, 'tsp': '2 2/4'}]],
[['fresh to instant', [21, 'fresh', 'instant'], {'bloom': False, 'grams': 7.0, 'tsp': '2 1/4'}],
['unknown type', [7, 'rapid', 'instant'], 'error: yeast type'],
['same type', [3.1, 'instant', 'instant'], {'bloom': False, 'grams': 3.1, 'tsp': '1'}],
['regression: bloom flag', [14, 'active dry', 'instant'], {'bloom': False, 'grams': 11.2, 'tsp': '3 2/4'}],
['repair check: bloom flag', [2.5, 'FRESH', 'fresh'], {'bloom': False, 'grams': 2.5, 'tsp': None}],
['generated control 1', [21, 'active dry', 'active dry'], {'bloom': True, 'grams': 21.0, 'tsp': '6 3/4'}],
['generated control 2', [2.5, 'fresh', 'rapid'], 'error: yeast type'],
['generated control 3', [1, ' Instant', 'active dry'], {'bloom': True, 'grams': 1.3, 'tsp': '2/4'}]],
[['unknown type', [7, 'rapid', 'instant'], 'error: yeast type'],
['same type', [3.1, 'instant', 'instant'], {'bloom': False, 'grams': 3.1, 'tsp': '1'}],
['tiny amount', [0.3, 'instant', 'instant'], {'bloom': False, 'grams': 0.3, 'tsp': 'less than 1/4'}],
['regression: bloom flag', [0.5, 'active dry', ' Instant'], {'bloom': False, 'grams': 0.4, 'tsp': '1/4'}],
['repair check: bloom flag', [21, 'fresh', 'fresh'], {'bloom': False, 'grams': 21.0, 'tsp': None}],
['generated control 1', [1, 'fresh', 'instant'], {'bloom': False, 'grams': 0.3, 'tsp': 'less than 1/4'}],
['generated control 2', [2, 'FRESH', 'rapid'], 'error: yeast type'],
['generated control 3', [2.5, 'active dry', 'rapid'], 'error: yeast type']],
[['same type', [3.1, 'instant', 'instant'], {'bloom': False, 'grams': 3.1, 'tsp': '1'}],
['tiny amount', [0.3, 'instant', 'instant'], {'bloom': False, 'grams': 0.3, 'tsp': 'less than 1/4'}],
['instant to active dry', [7, 'instant', 'active dry'], {'bloom': True, 'grams': 8.8, 'tsp': '2 3/4'}],
['regression: bloom flag', [2.5, 'instant', 'active dry'], {'bloom': True, 'grams': 3.1, 'tsp': '1'}],
['repair check: bloom flag', [10, 'fresh', 'FRESH'], {'bloom': False, 'grams': 10.0, 'tsp': None}],
['generated control 1', [2, 'instant', ' Instant'], {'bloom': False, 'grams': 2.0, 'tsp': '3/4'}],
['generated control 2', [0.3, 'rapid', ' Instant'], 'error: yeast type'],
['generated control 3', [0.3, 'fresh', 'fresh'], {'bloom': False, 'grams': 0.3, 'tsp': None}]],
[['tiny amount', [0.3, 'instant', 'instant'], {'bloom': False, 'grams': 0.3, 'tsp': 'less than 1/4'}],
['instant to active dry', [7, 'instant', 'active dry'], {'bloom': True, 'grams': 8.8, 'tsp': '2 3/4'}],
['fresh to instant', [21, 'fresh', 'instant'], {'bloom': False, 'grams': 7.0, 'tsp': '2 1/4'}],
['regression: bloom flag', [0.3, 'fresh', 'active dry'],
{'bloom': True, 'grams': 0.1, 'tsp': 'less than 1/4'}],
['repair check: bloom flag', [10, 'FRESH', 'FRESH'], {'bloom': False, 'grams': 10.0, 'tsp': None}],
['generated control 1', [5, 'instant', 'rapid'], 'error: yeast type'],
['generated control 2', [2.5, 'active dry', 'active dry'], {'bloom': True, 'grams': 2.5, 'tsp': '3/4'}],
['generated control 3', [2, 'FRESH', 'fresh'], {'bloom': False, 'grams': 2.0, 'tsp': None}]]]
for label, args, expected in fixtures[N - 1]:
check(label, solve(*args), expected)
print(json.dumps({"observations": observations, "passed": all(x["passed"] for x in observations)}, ensure_ascii=False))
raise SystemExit(0 if all(x["passed"] for x in observations) else 1)
| Boundary fixture | Actual | Expected | Outcome |
|---|---|---|---|
| instant to active dry | {'bloom': False, 'grams': 8.8, 'tsp': '2 3/4'} | {'bloom': True, 'grams': 8.8, 'tsp': '2 3/4'} | Failed |
| fresh to instant | {'bloom': False, 'grams': 7.0, 'tsp': '2 1/4'} | {'bloom': False, 'grams': 7.0, 'tsp': '2 1/4'} | Passed |
| unknown type | error: yeast type | error: yeast type | Passed |
| regression: bloom flag | {'bloom': False, 'grams': 26.3, 'tsp': '8 2/4'} | {'bloom': True, 'grams': 26.3, 'tsp': '8 2/4'} | Failed |
| repair check: bloom flag | {'bloom': False, 'grams': 9.0, 'tsp': None} | {'bloom': False, 'grams': 9.0, 'tsp': None} | Passed |
| generated control 1 | {'bloom': False, 'grams': 1.3, 'tsp': '2/4'} | {'bloom': False, 'grams': 1.3, 'tsp': '2/4'} | Passed |
| generated control 2 | {'bloom': False, 'grams': 0.3, 'tsp': None} | {'bloom': False, 'grams': 0.3, 'tsp': None} | Passed |
| generated control 3 | {'bloom': True, 'grams': 8.0, 'tsp': '2 2/4'} | {'bloom': False, 'grams': 8.0, 'tsp': '2 2/4'} | Failed |
SHA-256 / f037e483dd1ad37cfa7cf215dbe6ac6a25882b74fed9bf8717db7c8a73f7aead
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(amount_g, from_type, to_type):
R = {'instant': Fraction(1), 'active dry': Fraction(5, 4), 'fresh': Fraction(3)}
f, t = from_type.strip().lower(), to_type.strip().lower()
if f not in R or t not in R:
return 'error: yeast type'
g = Fraction(str(amount_g)) / R[f] * R[t]
grams = math.floor(g * 10 + Fraction(1, 2)) / 10
out = {'grams': grams}
if t == 'fresh':
out['tsp'] = None
else:
q = math.floor(g / Fraction(31, 10) * 4 + Fraction(1, 2))
if q == 0:
out['tsp'] = 'less than 1/4'
elif q < 4:
out['tsp'] = '%d/4' % q
elif q % 4 == 0:
out['tsp'] = '%d' % (q // 4)
else:
out['tsp'] = '%d %d/4' % divmod(q, 4)
out['bloom'] = t != 'instant'
return out
def check(label, actual, expected):
observations.append({"check": label, "actual": actual, "expected": expected, "passed": actual == expected})
fixtures = [[['instant to active dry', [7, 'instant', 'active dry'], {'bloom': True, 'grams': 8.8, 'tsp': '2 3/4'}],
['fresh to instant', [21, 'fresh', 'instant'], {'bloom': False, 'grams': 7.0, 'tsp': '2 1/4'}],
['unknown type', [7, 'rapid', 'instant'], 'error: yeast type'],
['regression: bloom flag', [21, ' Instant', 'active dry'], {'bloom': True, 'grams': 26.3, 'tsp': '8 2/4'}],
['repair check: bloom flag', [3, ' Instant', 'FRESH'], {'bloom': False, 'grams': 9.0, 'tsp': None}],
['generated control 1', [4, 'FRESH', 'instant'], {'bloom': False, 'grams': 1.3, 'tsp': '2/4'}],
['generated control 2', [0.3, 'fresh', 'fresh'], {'bloom': False, 'grams': 0.3, 'tsp': None}],
['generated control 3', [10, 'active dry', ' Instant'], {'bloom': False, 'grams': 8.0, 'tsp': '2 2/4'}]],
[['fresh to instant', [21, 'fresh', 'instant'], {'bloom': False, 'grams': 7.0, 'tsp': '2 1/4'}],
['unknown type', [7, 'rapid', 'instant'], 'error: yeast type'],
['same type', [3.1, 'instant', 'instant'], {'bloom': False, 'grams': 3.1, 'tsp': '1'}],
['regression: bloom flag', [14, 'active dry', 'instant'], {'bloom': False, 'grams': 11.2, 'tsp': '3 2/4'}],
['repair check: bloom flag', [2.5, 'FRESH', 'fresh'], {'bloom': False, 'grams': 2.5, 'tsp': None}],
['generated control 1', [21, 'active dry', 'active dry'], {'bloom': True, 'grams': 21.0, 'tsp': '6 3/4'}],
['generated control 2', [2.5, 'fresh', 'rapid'], 'error: yeast type'],
['generated control 3', [1, ' Instant', 'active dry'], {'bloom': True, 'grams': 1.3, 'tsp': '2/4'}]],
[['unknown type', [7, 'rapid', 'instant'], 'error: yeast type'],
['same type', [3.1, 'instant', 'instant'], {'bloom': False, 'grams': 3.1, 'tsp': '1'}],
['tiny amount', [0.3, 'instant', 'instant'], {'bloom': False, 'grams': 0.3, 'tsp': 'less than 1/4'}],
['regression: bloom flag', [0.5, 'active dry', ' Instant'], {'bloom': False, 'grams': 0.4, 'tsp': '1/4'}],
['repair check: bloom flag', [21, 'fresh', 'fresh'], {'bloom': False, 'grams': 21.0, 'tsp': None}],
['generated control 1', [1, 'fresh', 'instant'], {'bloom': False, 'grams': 0.3, 'tsp': 'less than 1/4'}],
['generated control 2', [2, 'FRESH', 'rapid'], 'error: yeast type'],
['generated control 3', [2.5, 'active dry', 'rapid'], 'error: yeast type']],
[['same type', [3.1, 'instant', 'instant'], {'bloom': False, 'grams': 3.1, 'tsp': '1'}],
['tiny amount', [0.3, 'instant', 'instant'], {'bloom': False, 'grams': 0.3, 'tsp': 'less than 1/4'}],
['instant to active dry', [7, 'instant', 'active dry'], {'bloom': True, 'grams': 8.8, 'tsp': '2 3/4'}],
['regression: bloom flag', [2.5, 'instant', 'active dry'], {'bloom': True, 'grams': 3.1, 'tsp': '1'}],
['repair check: bloom flag', [10, 'fresh', 'FRESH'], {'bloom': False, 'grams': 10.0, 'tsp': None}],
['generated control 1', [2, 'instant', ' Instant'], {'bloom': False, 'grams': 2.0, 'tsp': '3/4'}],
['generated control 2', [0.3, 'rapid', ' Instant'], 'error: yeast type'],
['generated control 3', [0.3, 'fresh', 'fresh'], {'bloom': False, 'grams': 0.3, 'tsp': None}]],
[['tiny amount', [0.3, 'instant', 'instant'], {'bloom': False, 'grams': 0.3, 'tsp': 'less than 1/4'}],
['instant to active dry', [7, 'instant', 'active dry'], {'bloom': True, 'grams': 8.8, 'tsp': '2 3/4'}],
['fresh to instant', [21, 'fresh', 'instant'], {'bloom': False, 'grams': 7.0, 'tsp': '2 1/4'}],
['regression: bloom flag', [0.3, 'fresh', 'active dry'],
{'bloom': True, 'grams': 0.1, 'tsp': 'less than 1/4'}],
['repair check: bloom flag', [10, 'FRESH', 'FRESH'], {'bloom': False, 'grams': 10.0, 'tsp': None}],
['generated control 1', [5, 'instant', 'rapid'], 'error: yeast type'],
['generated control 2', [2.5, 'active dry', 'active dry'], {'bloom': True, 'grams': 2.5, 'tsp': '3/4'}],
['generated control 3', [2, 'FRESH', 'fresh'], {'bloom': False, 'grams': 2.0, 'tsp': None}]]]
for label, args, expected in fixtures[N - 1]:
check(label, solve(*args), expected)
print(json.dumps({"observations": observations, "passed": all(x["passed"] for x in observations)}, ensure_ascii=False))
raise SystemExit(0 if all(x["passed"] for x in observations) else 1)
| Boundary fixture | Actual | Expected | Outcome |
|---|---|---|---|
| instant to active dry | {'bloom': True, 'grams': 8.8, 'tsp': '2 3/4'} | {'bloom': True, 'grams': 8.8, 'tsp': '2 3/4'} | Passed |
| fresh to instant | {'bloom': False, 'grams': 7.0, 'tsp': '2 1/4'} | {'bloom': False, 'grams': 7.0, 'tsp': '2 1/4'} | Passed |
| unknown type | error: yeast type | error: yeast type | Passed |
| regression: bloom flag | {'bloom': True, 'grams': 26.3, 'tsp': '8 2/4'} | {'bloom': True, 'grams': 26.3, 'tsp': '8 2/4'} | Passed |
| repair check: bloom flag | {'bloom': True, 'grams': 9.0, 'tsp': None} | {'bloom': False, 'grams': 9.0, 'tsp': None} | Failed |
| generated control 1 | {'bloom': False, 'grams': 1.3, 'tsp': '2/4'} | {'bloom': False, 'grams': 1.3, 'tsp': '2/4'} | Passed |
| generated control 2 | {'bloom': True, 'grams': 0.3, 'tsp': None} | {'bloom': False, 'grams': 0.3, 'tsp': None} | Failed |
| generated control 3 | {'bloom': False, 'grams': 8.0, 'tsp': '2 2/4'} | {'bloom': False, 'grams': 8.0, 'tsp': '2 2/4'} | Passed |
SHA-256 / dc9dad14ee0bc2abd7d706134c0e08564da1c88aa61038437ed115416167f699
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(amount_g, from_type, to_type):
R = {'instant': Fraction(1), 'active dry': Fraction(5, 4), 'fresh': Fraction(3)}
f, t = from_type.strip().lower(), to_type.strip().lower()
if f not in R or t not in R:
return 'error: yeast type'
g = Fraction(str(amount_g)) / R[f] * R[t]
grams = math.floor(g * 10 + Fraction(1, 2)) / 10
out = {'grams': grams}
if t == 'fresh':
out['tsp'] = None
else:
q = math.floor(g / Fraction(31, 10) * 4 + Fraction(1, 2))
if q == 0:
out['tsp'] = 'less than 1/4'
elif q < 4:
out['tsp'] = '%d/4' % q
elif q % 4 == 0:
out['tsp'] = '%d' % (q // 4)
else:
out['tsp'] = '%d %d/4' % divmod(q, 4)
out['bloom'] = t == 'active dry'
return out
def check(label, actual, expected):
observations.append({"check": label, "actual": actual, "expected": expected, "passed": actual == expected})
fixtures = [[['instant to active dry', [7, 'instant', 'active dry'], {'bloom': True, 'grams': 8.8, 'tsp': '2 3/4'}],
['fresh to instant', [21, 'fresh', 'instant'], {'bloom': False, 'grams': 7.0, 'tsp': '2 1/4'}],
['unknown type', [7, 'rapid', 'instant'], 'error: yeast type'],
['regression: bloom flag', [21, ' Instant', 'active dry'], {'bloom': True, 'grams': 26.3, 'tsp': '8 2/4'}],
['repair check: bloom flag', [3, ' Instant', 'FRESH'], {'bloom': False, 'grams': 9.0, 'tsp': None}],
['generated control 1', [4, 'FRESH', 'instant'], {'bloom': False, 'grams': 1.3, 'tsp': '2/4'}],
['generated control 2', [0.3, 'fresh', 'fresh'], {'bloom': False, 'grams': 0.3, 'tsp': None}],
['generated control 3', [10, 'active dry', ' Instant'], {'bloom': False, 'grams': 8.0, 'tsp': '2 2/4'}]],
[['fresh to instant', [21, 'fresh', 'instant'], {'bloom': False, 'grams': 7.0, 'tsp': '2 1/4'}],
['unknown type', [7, 'rapid', 'instant'], 'error: yeast type'],
['same type', [3.1, 'instant', 'instant'], {'bloom': False, 'grams': 3.1, 'tsp': '1'}],
['regression: bloom flag', [14, 'active dry', 'instant'], {'bloom': False, 'grams': 11.2, 'tsp': '3 2/4'}],
['repair check: bloom flag', [2.5, 'FRESH', 'fresh'], {'bloom': False, 'grams': 2.5, 'tsp': None}],
['generated control 1', [21, 'active dry', 'active dry'], {'bloom': True, 'grams': 21.0, 'tsp': '6 3/4'}],
['generated control 2', [2.5, 'fresh', 'rapid'], 'error: yeast type'],
['generated control 3', [1, ' Instant', 'active dry'], {'bloom': True, 'grams': 1.3, 'tsp': '2/4'}]],
[['unknown type', [7, 'rapid', 'instant'], 'error: yeast type'],
['same type', [3.1, 'instant', 'instant'], {'bloom': False, 'grams': 3.1, 'tsp': '1'}],
['tiny amount', [0.3, 'instant', 'instant'], {'bloom': False, 'grams': 0.3, 'tsp': 'less than 1/4'}],
['regression: bloom flag', [0.5, 'active dry', ' Instant'], {'bloom': False, 'grams': 0.4, 'tsp': '1/4'}],
['repair check: bloom flag', [21, 'fresh', 'fresh'], {'bloom': False, 'grams': 21.0, 'tsp': None}],
['generated control 1', [1, 'fresh', 'instant'], {'bloom': False, 'grams': 0.3, 'tsp': 'less than 1/4'}],
['generated control 2', [2, 'FRESH', 'rapid'], 'error: yeast type'],
['generated control 3', [2.5, 'active dry', 'rapid'], 'error: yeast type']],
[['same type', [3.1, 'instant', 'instant'], {'bloom': False, 'grams': 3.1, 'tsp': '1'}],
['tiny amount', [0.3, 'instant', 'instant'], {'bloom': False, 'grams': 0.3, 'tsp': 'less than 1/4'}],
['instant to active dry', [7, 'instant', 'active dry'], {'bloom': True, 'grams': 8.8, 'tsp': '2 3/4'}],
['regression: bloom flag', [2.5, 'instant', 'active dry'], {'bloom': True, 'grams': 3.1, 'tsp': '1'}],
['repair check: bloom flag', [10, 'fresh', 'FRESH'], {'bloom': False, 'grams': 10.0, 'tsp': None}],
['generated control 1', [2, 'instant', ' Instant'], {'bloom': False, 'grams': 2.0, 'tsp': '3/4'}],
['generated control 2', [0.3, 'rapid', ' Instant'], 'error: yeast type'],
['generated control 3', [0.3, 'fresh', 'fresh'], {'bloom': False, 'grams': 0.3, 'tsp': None}]],
[['tiny amount', [0.3, 'instant', 'instant'], {'bloom': False, 'grams': 0.3, 'tsp': 'less than 1/4'}],
['instant to active dry', [7, 'instant', 'active dry'], {'bloom': True, 'grams': 8.8, 'tsp': '2 3/4'}],
['fresh to instant', [21, 'fresh', 'instant'], {'bloom': False, 'grams': 7.0, 'tsp': '2 1/4'}],
['regression: bloom flag', [0.3, 'fresh', 'active dry'],
{'bloom': True, 'grams': 0.1, 'tsp': 'less than 1/4'}],
['repair check: bloom flag', [10, 'FRESH', 'FRESH'], {'bloom': False, 'grams': 10.0, 'tsp': None}],
['generated control 1', [5, 'instant', 'rapid'], 'error: yeast type'],
['generated control 2', [2.5, 'active dry', 'active dry'], {'bloom': True, 'grams': 2.5, 'tsp': '3/4'}],
['generated control 3', [2, 'FRESH', 'fresh'], {'bloom': False, 'grams': 2.0, 'tsp': None}]]]
for label, args, expected in fixtures[N - 1]:
check(label, solve(*args), expected)
print(json.dumps({"observations": observations, "passed": all(x["passed"] for x in observations)}, ensure_ascii=False))
raise SystemExit(0 if all(x["passed"] for x in observations) else 1)
| Boundary fixture | Actual | Expected | Outcome |
|---|---|---|---|
| instant to active dry | {'bloom': True, 'grams': 8.8, 'tsp': '2 3/4'} | {'bloom': True, 'grams': 8.8, 'tsp': '2 3/4'} | Passed |
| fresh to instant | {'bloom': False, 'grams': 7.0, 'tsp': '2 1/4'} | {'bloom': False, 'grams': 7.0, 'tsp': '2 1/4'} | Passed |
| unknown type | error: yeast type | error: yeast type | Passed |
| regression: bloom flag | {'bloom': True, 'grams': 26.3, 'tsp': '8 2/4'} | {'bloom': True, 'grams': 26.3, 'tsp': '8 2/4'} | Passed |
| repair check: bloom flag | {'bloom': False, 'grams': 9.0, 'tsp': None} | {'bloom': False, 'grams': 9.0, 'tsp': None} | Passed |
| generated control 1 | {'bloom': False, 'grams': 1.3, 'tsp': '2/4'} | {'bloom': False, 'grams': 1.3, 'tsp': '2/4'} | Passed |
| generated control 2 | {'bloom': False, 'grams': 0.3, 'tsp': None} | {'bloom': False, 'grams': 0.3, 'tsp': None} | Passed |
| generated control 3 | {'bloom': False, 'grams': 8.0, 'tsp': '2 2/4'} | {'bloom': False, 'grams': 8.0, 'tsp': '2 2/4'} | Passed |
SHA-256 / de1618901829d5a67b6c8ddf24742bb3722b18b5eb868f750cb2ec4e111dec34
Verification & scope
A deterministic toy contract stated in full here; it is a bounded teaching model, not an authoritative reference or standards implementation. This reproducer isolates one failure mechanism. Results cover the supplied fixtures. Variants within a family share a test contract and should remain grouped when constructing evaluation splits. Related mechanisms with a shared evaluation_group must also remain together; these controlled models are not independent production incidents.
Observations recorded using Python 3.12.14 at 2026-09-29T14:52:28.669941+00:00.
Case digest / a375c8965b36fca62956d9dff91855a65224b77d63a3600da98e561b1c23ba5d