{"abstract":"Converting instant to fresh prints a teaspoon count for crumbly cake yeast.","category":"Recipe scaling and nutrition","checks":8,"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.","evaluation_group":"w2-recipe_scaling_and_nutrition-yeast-conversion","failed_approach":"Excluding fresh-to-fresh still prints spoons for that conversion.","family":"w2-recipe_scaling_and_nutrition-yeast-conversion-fresh-yeast-spoon-measure","id":"FA-97066","implementations":{"attempt":{"sha256":"f870d4e69ec2673802c10c46122687e3f4c250d7f94fe8e22c240c7e9c9aebd1","source":"\"\"\"Failure Map reference implementation. Python standard library only.\"\"\"\nimport json\nimport math\nfrom fractions import Fraction\nN = 1\nobservations = []\ndef solve(amount_g, from_type, to_type):\n    R = {'instant': Fraction(1), 'active dry': Fraction(5, 4), 'fresh': Fraction(3)}\n    f, t = from_type.strip().lower(), to_type.strip().lower()\n    if f not in R or t not in R:\n        return 'error: yeast type'\n    g = Fraction(str(amount_g)) / R[f] * R[t]\n    grams = math.floor(g * 10 + Fraction(1, 2)) / 10\n    out = {'grams': grams}\n    if t == 'fresh' and f != 'fresh':\n        out['tsp'] = None\n    else:\n        q = math.floor(g / Fraction(31, 10) * 4 + Fraction(1, 2))\n        if q == 0:\n            out['tsp'] = 'less than 1/4'\n        elif q < 4:\n            out['tsp'] = '%d/4' % q\n        elif q % 4 == 0:\n            out['tsp'] = '%d' % (q // 4)\n        else:\n            out['tsp'] = '%d %d/4' % divmod(q, 4)\n    out['bloom'] = t == 'active dry'\n    return out\ndef check(label, actual, expected):\n    observations.append({\"check\": label, \"actual\": actual, \"expected\": expected, \"passed\": actual == expected})\nfixtures = [[['instant to active dry', [7, 'instant', 'active dry'], {'bloom': True, 'grams': 8.8, 'tsp': '2 3/4'}],\n  ['fresh to instant', [21, 'fresh', 'instant'], {'bloom': False, 'grams': 7.0, 'tsp': '2 1/4'}],\n  ['unknown type', [7, 'rapid', 'instant'], 'error: yeast type'],\n  ['regression: fresh yeast spoon measure', [5, 'instant', 'FRESH'],\n   {'bloom': False, 'grams': 15.0, 'tsp': None}],\n  ['repair check: fresh yeast spoon measure', [3, 'fresh', 'FRESH'],\n   {'bloom': False, 'grams': 3.0, 'tsp': None}],\n  ['generated control 1', [4, 'rapid', 'fresh'], 'error: yeast type'],\n  ['generated control 2', [4, 'active dry', 'rapid'], 'error: yeast type'],\n  ['generated control 3', [2, 'active dry', ' Instant'], {'bloom': False, 'grams': 1.6, 'tsp': '2/4'}]],\n [['fresh to instant', [21, 'fresh', 'instant'], {'bloom': False, 'grams': 7.0, 'tsp': '2 1/4'}],\n  ['unknown type', [7, 'rapid', 'instant'], 'error: yeast type'],\n  ['same type', [3.1, 'instant', 'instant'], {'bloom': False, 'grams': 3.1, 'tsp': '1'}],\n  ['regression: fresh yeast spoon measure', [6.2, 'fresh', 'active dry'],\n   {'bloom': True, 'grams': 2.6, 'tsp': '3/4'}],\n  ['repair check: fresh yeast spoon measure', [2, 'FRESH', 'fresh'],\n   {'bloom': False, 'grams': 2.0, 'tsp': None}],\n  ['generated control 1', [21, 'instant', ' Instant'], {'bloom': False, 'grams': 21.0, 'tsp': '6 3/4'}],\n  ['generated control 2', [21, 'instant', 'fresh'], {'bloom': False, 'grams': 63.0, 'tsp': None}],\n  ['generated control 3', [1, 'active dry', 'FRESH'], {'bloom': False, 'grams': 2.4, 'tsp': None}]],\n [['unknown type', [7, 'rapid', 'instant'], 'error: yeast type'],\n  ['same type', [3.1, 'instant', 'instant'], {'bloom': False, 'grams': 3.1, 'tsp': '1'}],\n  ['tiny amount', [0.3, 'instant', 'instant'], {'bloom': False, 'grams': 0.3, 'tsp': 'less than 1/4'}],\n  ['regression: fresh yeast spoon measure', [1, 'FRESH', 'active dry'],\n   {'bloom': True, 'grams': 0.4, 'tsp': '1/4'}],\n  ['repair check: fresh yeast spoon measure', [2.5, 'fresh', 'FRESH'],\n   {'bloom': False, 'grams': 2.5, 'tsp': None}],\n  ['generated control 1', [0.5, ' Instant', ' Instant'], {'bloom': False, 'grams': 0.5, 'tsp': '1/4'}],\n  ['generated control 2', [7, 'active dry', 'fresh'], {'bloom': False, 'grams': 16.8, 'tsp': None}],\n  ['generated control 3', [2, ' Instant', 'instant'], {'bloom': False, 'grams': 2.0, 'tsp': '3/4'}]],\n [['same type', [3.1, 'instant', 'instant'], {'bloom': False, 'grams': 3.1, 'tsp': '1'}],\n  ['tiny amount', [0.3, 'instant', 'instant'], {'bloom': False, 'grams': 0.3, 'tsp': 'less than 1/4'}],\n  ['instant to active dry', [7, 'instant', 'active dry'], {'bloom': True, 'grams': 8.8, 'tsp': '2 3/4'}],\n  ['regression: fresh yeast spoon measure', [7, 'FRESH', 'active dry'],\n   {'bloom': True, 'grams': 2.9, 'tsp': '1'}],\n  ['repair check: fresh yeast spoon measure', [14, 'FRESH', 'FRESH'],\n   {'bloom': False, 'grams': 14.0, 'tsp': None}],\n  ['generated control 1', [6.2, 'instant', 'rapid'], 'error: yeast type'],\n  ['generated control 2', [4, 'rapid', 'rapid'], 'error: yeast type'],\n  ['generated control 3', [0.3, 'active dry', 'active dry'],\n   {'bloom': True, 'grams': 0.3, 'tsp': 'less than 1/4'}]],\n [['tiny amount', [0.3, 'instant', 'instant'], {'bloom': False, 'grams': 0.3, 'tsp': 'less than 1/4'}],\n  ['instant to active dry', [7, 'instant', 'active dry'], {'bloom': True, 'grams': 8.8, 'tsp': '2 3/4'}],\n  ['fresh to instant', [21, 'fresh', 'instant'], {'bloom': False, 'grams': 7.0, 'tsp': '2 1/4'}],\n  ['regression: fresh yeast spoon measure', [14, 'fresh', 'instant'],\n   {'bloom': False, 'grams': 4.7, 'tsp': '1 2/4'}],\n  ['repair check: fresh yeast spoon measure', [14, 'FRESH', 'fresh'],\n   {'bloom': False, 'grams': 14.0, 'tsp': None}],\n  ['generated control 1', [0.5, ' Instant', 'rapid'], 'error: yeast type'],\n  ['generated control 2', [10, ' Instant', 'FRESH'], {'bloom': False, 'grams': 30.0, 'tsp': None}],\n  ['generated control 3', [2.5, 'active dry', 'instant'], {'bloom': False, 'grams': 2.0, 'tsp': '3/4'}]]]\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":"eb74eaadfbaa71a06aeed6c3c68773dc42a45ae6ed09f20b6dba342a53288e91","source":"\"\"\"Failure Map reference implementation. Python standard library only.\"\"\"\nimport json\nimport math\nfrom fractions import Fraction\nN = 1\nobservations = []\ndef solve(amount_g, from_type, to_type):\n    R = {'instant': Fraction(1), 'active dry': Fraction(5, 4), 'fresh': Fraction(3)}\n    f, t = from_type.strip().lower(), to_type.strip().lower()\n    if f not in R or t not in R:\n        return 'error: yeast type'\n    g = Fraction(str(amount_g)) / R[f] * R[t]\n    grams = math.floor(g * 10 + Fraction(1, 2)) / 10\n    out = {'grams': grams}\n    if f == 'fresh':\n        out['tsp'] = None\n    else:\n        q = math.floor(g / Fraction(31, 10) * 4 + Fraction(1, 2))\n        if q == 0:\n            out['tsp'] = 'less than 1/4'\n        elif q < 4:\n            out['tsp'] = '%d/4' % q\n        elif q % 4 == 0:\n            out['tsp'] = '%d' % (q // 4)\n        else:\n            out['tsp'] = '%d %d/4' % divmod(q, 4)\n    out['bloom'] = t == 'active dry'\n    return out\ndef check(label, actual, expected):\n    observations.append({\"check\": label, \"actual\": actual, \"expected\": expected, \"passed\": actual == expected})\nfixtures = [[['instant to active dry', [7, 'instant', 'active dry'], {'bloom': True, 'grams': 8.8, 'tsp': '2 3/4'}],\n  ['fresh to instant', [21, 'fresh', 'instant'], {'bloom': False, 'grams': 7.0, 'tsp': '2 1/4'}],\n  ['unknown type', [7, 'rapid', 'instant'], 'error: yeast type'],\n  ['regression: fresh yeast spoon measure', [5, 'instant', 'FRESH'],\n   {'bloom': False, 'grams': 15.0, 'tsp': None}],\n  ['repair check: fresh yeast spoon measure', [3, 'fresh', 'FRESH'],\n   {'bloom': False, 'grams': 3.0, 'tsp': None}],\n  ['generated control 1', [4, 'rapid', 'fresh'], 'error: yeast type'],\n  ['generated control 2', [4, 'active dry', 'rapid'], 'error: yeast type'],\n  ['generated control 3', [2, 'active dry', ' Instant'], {'bloom': False, 'grams': 1.6, 'tsp': '2/4'}]],\n [['fresh to instant', [21, 'fresh', 'instant'], {'bloom': False, 'grams': 7.0, 'tsp': '2 1/4'}],\n  ['unknown type', [7, 'rapid', 'instant'], 'error: yeast type'],\n  ['same type', [3.1, 'instant', 'instant'], {'bloom': False, 'grams': 3.1, 'tsp': '1'}],\n  ['regression: fresh yeast spoon measure', [6.2, 'fresh', 'active dry'],\n   {'bloom': True, 'grams': 2.6, 'tsp': '3/4'}],\n  ['repair check: fresh yeast spoon measure', [2, 'FRESH', 'fresh'],\n   {'bloom': False, 'grams': 2.0, 'tsp': None}],\n  ['generated control 1', [21, 'instant', ' Instant'], {'bloom': False, 'grams': 21.0, 'tsp': '6 3/4'}],\n  ['generated control 2', [21, 'instant', 'fresh'], {'bloom': False, 'grams': 63.0, 'tsp': None}],\n  ['generated control 3', [1, 'active dry', 'FRESH'], {'bloom': False, 'grams': 2.4, 'tsp': None}]],\n [['unknown type', [7, 'rapid', 'instant'], 'error: yeast type'],\n  ['same type', [3.1, 'instant', 'instant'], {'bloom': False, 'grams': 3.1, 'tsp': '1'}],\n  ['tiny amount', [0.3, 'instant', 'instant'], {'bloom': False, 'grams': 0.3, 'tsp': 'less than 1/4'}],\n  ['regression: fresh yeast spoon measure', [1, 'FRESH', 'active dry'],\n   {'bloom': True, 'grams': 0.4, 'tsp': '1/4'}],\n  ['repair check: fresh yeast spoon measure', [2.5, 'fresh', 'FRESH'],\n   {'bloom': False, 'grams': 2.5, 'tsp': None}],\n  ['generated control 1', [0.5, ' Instant', ' Instant'], {'bloom': False, 'grams': 0.5, 'tsp': '1/4'}],\n  ['generated control 2', [7, 'active dry', 'fresh'], {'bloom': False, 'grams': 16.8, 'tsp': None}],\n  ['generated control 3', [2, ' Instant', 'instant'], {'bloom': False, 'grams': 2.0, 'tsp': '3/4'}]],\n [['same type', [3.1, 'instant', 'instant'], {'bloom': False, 'grams': 3.1, 'tsp': '1'}],\n  ['tiny amount', [0.3, 'instant', 'instant'], {'bloom': False, 'grams': 0.3, 'tsp': 'less than 1/4'}],\n  ['instant to active dry', [7, 'instant', 'active dry'], {'bloom': True, 'grams': 8.8, 'tsp': '2 3/4'}],\n  ['regression: fresh yeast spoon measure', [7, 'FRESH', 'active dry'],\n   {'bloom': True, 'grams': 2.9, 'tsp': '1'}],\n  ['repair check: fresh yeast spoon measure', [14, 'FRESH', 'FRESH'],\n   {'bloom': False, 'grams': 14.0, 'tsp': None}],\n  ['generated control 1', [6.2, 'instant', 'rapid'], 'error: yeast type'],\n  ['generated control 2', [4, 'rapid', 'rapid'], 'error: yeast type'],\n  ['generated control 3', [0.3, 'active dry', 'active dry'],\n   {'bloom': True, 'grams': 0.3, 'tsp': 'less than 1/4'}]],\n [['tiny amount', [0.3, 'instant', 'instant'], {'bloom': False, 'grams': 0.3, 'tsp': 'less than 1/4'}],\n  ['instant to active dry', [7, 'instant', 'active dry'], {'bloom': True, 'grams': 8.8, 'tsp': '2 3/4'}],\n  ['fresh to instant', [21, 'fresh', 'instant'], {'bloom': False, 'grams': 7.0, 'tsp': '2 1/4'}],\n  ['regression: fresh yeast spoon measure', [14, 'fresh', 'instant'],\n   {'bloom': False, 'grams': 4.7, 'tsp': '1 2/4'}],\n  ['repair check: fresh yeast spoon measure', [14, 'FRESH', 'fresh'],\n   {'bloom': False, 'grams': 14.0, 'tsp': None}],\n  ['generated control 1', [0.5, ' Instant', 'rapid'], 'error: yeast type'],\n  ['generated control 2', [10, ' Instant', 'FRESH'], {'bloom': False, 'grams': 30.0, 'tsp': None}],\n  ['generated control 3', [2.5, 'active dry', 'instant'], {'bloom': False, 'grams': 2.0, 'tsp': '3/4'}]]]\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":"43e98350552d9c0fd3e934e4029e17305c799b0732d6cefc95c2d3456ddbd486","source":"\"\"\"Failure Map reference implementation. Python standard library only.\"\"\"\nimport json\nimport math\nfrom fractions import Fraction\nN = 1\nobservations = []\ndef solve(amount_g, from_type, to_type):\n    R = {'instant': Fraction(1), 'active dry': Fraction(5, 4), 'fresh': Fraction(3)}\n    f, t = from_type.strip().lower(), to_type.strip().lower()\n    if f not in R or t not in R:\n        return 'error: yeast type'\n    g = Fraction(str(amount_g)) / R[f] * R[t]\n    grams = math.floor(g * 10 + Fraction(1, 2)) / 10\n    out = {'grams': grams}\n    if t == 'fresh':\n        out['tsp'] = None\n    else:\n        q = math.floor(g / Fraction(31, 10) * 4 + Fraction(1, 2))\n        if q == 0:\n            out['tsp'] = 'less than 1/4'\n        elif q < 4:\n            out['tsp'] = '%d/4' % q\n        elif q % 4 == 0:\n            out['tsp'] = '%d' % (q // 4)\n        else:\n            out['tsp'] = '%d %d/4' % divmod(q, 4)\n    out['bloom'] = t == 'active dry'\n    return out\ndef check(label, actual, expected):\n    observations.append({\"check\": label, \"actual\": actual, \"expected\": expected, \"passed\": actual == expected})\nfixtures = [[['instant to active dry', [7, 'instant', 'active dry'], {'bloom': True, 'grams': 8.8, 'tsp': '2 3/4'}],\n  ['fresh to instant', [21, 'fresh', 'instant'], {'bloom': False, 'grams': 7.0, 'tsp': '2 1/4'}],\n  ['unknown type', [7, 'rapid', 'instant'], 'error: yeast type'],\n  ['regression: fresh yeast spoon measure', [5, 'instant', 'FRESH'],\n   {'bloom': False, 'grams': 15.0, 'tsp': None}],\n  ['repair check: fresh yeast spoon measure', [3, 'fresh', 'FRESH'],\n   {'bloom': False, 'grams': 3.0, 'tsp': None}],\n  ['generated control 1', [4, 'rapid', 'fresh'], 'error: yeast type'],\n  ['generated control 2', [4, 'active dry', 'rapid'], 'error: yeast type'],\n  ['generated control 3', [2, 'active dry', ' Instant'], {'bloom': False, 'grams': 1.6, 'tsp': '2/4'}]],\n [['fresh to instant', [21, 'fresh', 'instant'], {'bloom': False, 'grams': 7.0, 'tsp': '2 1/4'}],\n  ['unknown type', [7, 'rapid', 'instant'], 'error: yeast type'],\n  ['same type', [3.1, 'instant', 'instant'], {'bloom': False, 'grams': 3.1, 'tsp': '1'}],\n  ['regression: fresh yeast spoon measure', [6.2, 'fresh', 'active dry'],\n   {'bloom': True, 'grams': 2.6, 'tsp': '3/4'}],\n  ['repair check: fresh yeast spoon measure', [2, 'FRESH', 'fresh'],\n   {'bloom': False, 'grams': 2.0, 'tsp': None}],\n  ['generated control 1', [21, 'instant', ' Instant'], {'bloom': False, 'grams': 21.0, 'tsp': '6 3/4'}],\n  ['generated control 2', [21, 'instant', 'fresh'], {'bloom': False, 'grams': 63.0, 'tsp': None}],\n  ['generated control 3', [1, 'active dry', 'FRESH'], {'bloom': False, 'grams': 2.4, 'tsp': None}]],\n [['unknown type', [7, 'rapid', 'instant'], 'error: yeast type'],\n  ['same type', [3.1, 'instant', 'instant'], {'bloom': False, 'grams': 3.1, 'tsp': '1'}],\n  ['tiny amount', [0.3, 'instant', 'instant'], {'bloom': False, 'grams': 0.3, 'tsp': 'less than 1/4'}],\n  ['regression: fresh yeast spoon measure', [1, 'FRESH', 'active dry'],\n   {'bloom': True, 'grams': 0.4, 'tsp': '1/4'}],\n  ['repair check: fresh yeast spoon measure', [2.5, 'fresh', 'FRESH'],\n   {'bloom': False, 'grams': 2.5, 'tsp': None}],\n  ['generated control 1', [0.5, ' Instant', ' Instant'], {'bloom': False, 'grams': 0.5, 'tsp': '1/4'}],\n  ['generated control 2', [7, 'active dry', 'fresh'], {'bloom': False, 'grams': 16.8, 'tsp': None}],\n  ['generated control 3', [2, ' Instant', 'instant'], {'bloom': False, 'grams': 2.0, 'tsp': '3/4'}]],\n [['same type', [3.1, 'instant', 'instant'], {'bloom': False, 'grams': 3.1, 'tsp': '1'}],\n  ['tiny amount', [0.3, 'instant', 'instant'], {'bloom': False, 'grams': 0.3, 'tsp': 'less than 1/4'}],\n  ['instant to active dry', [7, 'instant', 'active dry'], {'bloom': True, 'grams': 8.8, 'tsp': '2 3/4'}],\n  ['regression: fresh yeast spoon measure', [7, 'FRESH', 'active dry'],\n   {'bloom': True, 'grams': 2.9, 'tsp': '1'}],\n  ['repair check: fresh yeast spoon measure', [14, 'FRESH', 'FRESH'],\n   {'bloom': False, 'grams': 14.0, 'tsp': None}],\n  ['generated control 1', [6.2, 'instant', 'rapid'], 'error: yeast type'],\n  ['generated control 2', [4, 'rapid', 'rapid'], 'error: yeast type'],\n  ['generated control 3', [0.3, 'active dry', 'active dry'],\n   {'bloom': True, 'grams': 0.3, 'tsp': 'less than 1/4'}]],\n [['tiny amount', [0.3, 'instant', 'instant'], {'bloom': False, 'grams': 0.3, 'tsp': 'less than 1/4'}],\n  ['instant to active dry', [7, 'instant', 'active dry'], {'bloom': True, 'grams': 8.8, 'tsp': '2 3/4'}],\n  ['fresh to instant', [21, 'fresh', 'instant'], {'bloom': False, 'grams': 7.0, 'tsp': '2 1/4'}],\n  ['regression: fresh yeast spoon measure', [14, 'fresh', 'instant'],\n   {'bloom': False, 'grams': 4.7, 'tsp': '1 2/4'}],\n  ['repair check: fresh yeast spoon measure', [14, 'FRESH', 'fresh'],\n   {'bloom': False, 'grams': 14.0, 'tsp': None}],\n  ['generated control 1', [0.5, ' Instant', 'rapid'], 'error: yeast type'],\n  ['generated control 2', [10, ' Instant', 'FRESH'], {'bloom': False, 'grams': 30.0, 'tsp': None}],\n  ['generated control 3', [2.5, 'active dry', 'instant'], {'bloom': False, 'grams': 2.0, 'tsp': '3/4'}]]]\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-yeast-conversion-fresh-yeast-spoon-measure","generated_at":"2026-09-29T14:52:28.500552+00:00","license":"CC0-1.0","python":"3.12.14","seed":1,"split":"open-access"},"relevance":"Bakers substitute yeast forms and need both weight and spoon measures.","repair":"Suppress teaspoons when the target is fresh yeast.","root_cause":"The no-spoon rule tests the source type instead of the target type.","sha256":"3bf064c6e875dcbc42199d54edda4d2670123668e5c72a31684c847974838ced","title":"Yeast type converter: fresh yeast spoon measure · case 01","variant":1,"variant_policy":"Five numbered records share a model and may reuse boundary fixtures.","verification":{"attempt":{"elapsed_ms":39.871,"exit_code":1,"observations":[{"actual":{"bloom":true,"grams":8.8,"tsp":"2 3/4"},"check":"instant to active dry","expected":{"bloom":true,"grams":8.8,"tsp":"2 3/4"},"passed":true},{"actual":{"bloom":false,"grams":7.0,"tsp":"2 1/4"},"check":"fresh to instant","expected":{"bloom":false,"grams":7.0,"tsp":"2 1/4"},"passed":true},{"actual":"error: yeast type","check":"unknown type","expected":"error: yeast type","passed":true},{"actual":{"bloom":false,"grams":15.0,"tsp":null},"check":"regression: fresh yeast spoon measure","expected":{"bloom":false,"grams":15.0,"tsp":null},"passed":true},{"actual":{"bloom":false,"grams":3.0,"tsp":"1"},"check":"repair check: fresh yeast spoon measure","expected":{"bloom":false,"grams":3.0,"tsp":null},"passed":false},{"actual":"error: yeast type","check":"generated control 1","expected":"error: yeast type","passed":true},{"actual":"error: yeast type","check":"generated control 2","expected":"error: yeast type","passed":true},{"actual":{"bloom":false,"grams":1.6,"tsp":"2/4"},"check":"generated control 3","expected":{"bloom":false,"grams":1.6,"tsp":"2/4"},"passed":true}],"passed":false,"stderr":"","stdout":"{\"observations\": [{\"check\": \"instant to active dry\", \"actual\": {\"grams\": 8.8, \"tsp\": \"2 3/4\", \"bloom\": true}, \"expected\": {\"bloom\": true, \"grams\": 8.8, \"tsp\": \"2 3/4\"}, \"passed\": true}, {\"check\": \"fresh to instant\", \"actual\": {\"grams\": 7.0, \"tsp\": \"2 1/4\", \"bloom\": false}, \"expected\": {\"bloom\": false, \"grams\": 7.0, \"tsp\": \"2 1/4\"}, \"passed\": true}, {\"check\": \"unknown type\", \"actual\": \"error: yeast type\", \"expected\": \"error: yeast type\", \"passed\": true}, {\"check\": \"regression: fresh yeast spoon measure\", \"actual\": {\"grams\": 15.0, \"tsp\": null, \"bloom\": false}, \"expected\": {\"bloom\": false, \"grams\": 15.0, \"tsp\": null}, \"passed\": true}, {\"check\": \"repair check: fresh yeast spoon measure\", \"actual\": {\"grams\": 3.0, \"tsp\": \"1\", \"bloom\": false}, \"expected\": {\"bloom\": false, \"grams\": 3.0, \"tsp\": null}, \"passed\": false}, {\"check\": \"generated control 1\", \"actual\": \"error: yeast type\", \"expected\": \"error: yeast type\", \"passed\": true}, {\"check\": \"generated control 2\", \"actual\": \"error: yeast type\", \"expected\": \"error: yeast type\", \"passed\": true}, {\"check\": \"generated control 3\", \"actual\": {\"grams\": 1.6, \"tsp\": \"2/4\", \"bloom\": false}, \"expected\": {\"bloom\": false, \"grams\": 1.6, \"tsp\": \"2/4\"}, \"passed\": true}], \"passed\": false}\n"},"broken":{"elapsed_ms":42.549,"exit_code":1,"observations":[{"actual":{"bloom":true,"grams":8.8,"tsp":"2 3/4"},"check":"instant to active dry","expected":{"bloom":true,"grams":8.8,"tsp":"2 3/4"},"passed":true},{"actual":{"bloom":false,"grams":7.0,"tsp":null},"check":"fresh to instant","expected":{"bloom":false,"grams":7.0,"tsp":"2 1/4"},"passed":false},{"actual":"error: yeast type","check":"unknown type","expected":"error: yeast type","passed":true},{"actual":{"bloom":false,"grams":15.0,"tsp":"4 3/4"},"check":"regression: fresh yeast spoon measure","expected":{"bloom":false,"grams":15.0,"tsp":null},"passed":false},{"actual":{"bloom":false,"grams":3.0,"tsp":null},"check":"repair check: fresh yeast spoon measure","expected":{"bloom":false,"grams":3.0,"tsp":null},"passed":true},{"actual":"error: yeast type","check":"generated control 1","expected":"error: yeast type","passed":true},{"actual":"error: yeast type","check":"generated control 2","expected":"error: yeast type","passed":true},{"actual":{"bloom":false,"grams":1.6,"tsp":"2/4"},"check":"generated control 3","expected":{"bloom":false,"grams":1.6,"tsp":"2/4"},"passed":true}],"passed":false,"stderr":"","stdout":"{\"observations\": [{\"check\": \"instant to active dry\", \"actual\": {\"grams\": 8.8, \"tsp\": \"2 3/4\", \"bloom\": true}, \"expected\": {\"bloom\": true, \"grams\": 8.8, \"tsp\": \"2 3/4\"}, \"passed\": true}, {\"check\": \"fresh to instant\", \"actual\": {\"grams\": 7.0, \"tsp\": null, \"bloom\": false}, \"expected\": {\"bloom\": false, \"grams\": 7.0, \"tsp\": \"2 1/4\"}, \"passed\": false}, {\"check\": \"unknown type\", \"actual\": \"error: yeast type\", \"expected\": \"error: yeast type\", \"passed\": true}, {\"check\": \"regression: fresh yeast spoon measure\", \"actual\": {\"grams\": 15.0, \"tsp\": \"4 3/4\", \"bloom\": false}, \"expected\": {\"bloom\": false, \"grams\": 15.0, \"tsp\": null}, \"passed\": false}, {\"check\": \"repair check: fresh yeast spoon measure\", \"actual\": {\"grams\": 3.0, \"tsp\": null, \"bloom\": false}, \"expected\": {\"bloom\": false, \"grams\": 3.0, \"tsp\": null}, \"passed\": true}, {\"check\": \"generated control 1\", \"actual\": \"error: yeast type\", \"expected\": \"error: yeast type\", \"passed\": true}, {\"check\": \"generated control 2\", \"actual\": \"error: yeast type\", \"expected\": \"error: yeast type\", \"passed\": true}, {\"check\": \"generated control 3\", \"actual\": {\"grams\": 1.6, \"tsp\": \"2/4\", \"bloom\": false}, \"expected\": {\"bloom\": false, \"grams\": 1.6, \"tsp\": \"2/4\"}, \"passed\": true}], \"passed\": false}\n"},"fixed":{"elapsed_ms":42.299,"exit_code":0,"observations":[{"actual":{"bloom":true,"grams":8.8,"tsp":"2 3/4"},"check":"instant to active dry","expected":{"bloom":true,"grams":8.8,"tsp":"2 3/4"},"passed":true},{"actual":{"bloom":false,"grams":7.0,"tsp":"2 1/4"},"check":"fresh to instant","expected":{"bloom":false,"grams":7.0,"tsp":"2 1/4"},"passed":true},{"actual":"error: yeast type","check":"unknown type","expected":"error: yeast type","passed":true},{"actual":{"bloom":false,"grams":15.0,"tsp":null},"check":"regression: fresh yeast spoon measure","expected":{"bloom":false,"grams":15.0,"tsp":null},"passed":true},{"actual":{"bloom":false,"grams":3.0,"tsp":null},"check":"repair check: fresh yeast spoon measure","expected":{"bloom":false,"grams":3.0,"tsp":null},"passed":true},{"actual":"error: yeast type","check":"generated control 1","expected":"error: yeast type","passed":true},{"actual":"error: yeast type","check":"generated control 2","expected":"error: yeast type","passed":true},{"actual":{"bloom":false,"grams":1.6,"tsp":"2/4"},"check":"generated control 3","expected":{"bloom":false,"grams":1.6,"tsp":"2/4"},"passed":true}],"passed":true,"stderr":"","stdout":"{\"observations\": [{\"check\": \"instant to active dry\", \"actual\": {\"grams\": 8.8, \"tsp\": \"2 3/4\", \"bloom\": true}, \"expected\": {\"bloom\": true, \"grams\": 8.8, \"tsp\": \"2 3/4\"}, \"passed\": true}, {\"check\": \"fresh to instant\", \"actual\": {\"grams\": 7.0, \"tsp\": \"2 1/4\", \"bloom\": false}, \"expected\": {\"bloom\": false, \"grams\": 7.0, \"tsp\": \"2 1/4\"}, \"passed\": true}, {\"check\": \"unknown type\", \"actual\": \"error: yeast type\", \"expected\": \"error: yeast type\", \"passed\": true}, {\"check\": \"regression: fresh yeast spoon measure\", \"actual\": {\"grams\": 15.0, \"tsp\": null, \"bloom\": false}, \"expected\": {\"bloom\": false, \"grams\": 15.0, \"tsp\": null}, \"passed\": true}, {\"check\": \"repair check: fresh yeast spoon measure\", \"actual\": {\"grams\": 3.0, \"tsp\": null, \"bloom\": false}, \"expected\": {\"bloom\": false, \"grams\": 3.0, \"tsp\": null}, \"passed\": true}, {\"check\": \"generated control 1\", \"actual\": \"error: yeast type\", \"expected\": \"error: yeast type\", \"passed\": true}, {\"check\": \"generated control 2\", \"actual\": \"error: yeast type\", \"expected\": \"error: yeast type\", \"passed\": true}, {\"check\": \"generated control 3\", \"actual\": {\"grams\": 1.6, \"tsp\": \"2/4\", \"bloom\": false}, \"expected\": {\"bloom\": false, \"grams\": 1.6, \"tsp\": \"2/4\"}, \"passed\": true}], \"passed\": true}\n"}},"verified":true,"visibility":"public"}