{"abstract":"Converting instant to active dry omits the proofing instruction.","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":"Flagging every non-instant target also tells fresh yeast users to bloom.","family":"w2-recipe_scaling_and_nutrition-yeast-conversion-bloom-flag","id":"FA-97081","implementations":{"attempt":{"sha256":"dc9dad14ee0bc2abd7d706134c0e08564da1c88aa61038437ed115416167f699","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 != 'instant'\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: bloom flag', [21, ' Instant', 'active dry'], {'bloom': True, 'grams': 26.3, 'tsp': '8 2/4'}],\n  ['repair check: bloom flag', [3, ' Instant', 'FRESH'], {'bloom': False, 'grams': 9.0, 'tsp': None}],\n  ['generated control 1', [4, 'FRESH', 'instant'], {'bloom': False, 'grams': 1.3, 'tsp': '2/4'}],\n  ['generated control 2', [0.3, 'fresh', 'fresh'], {'bloom': False, 'grams': 0.3, 'tsp': None}],\n  ['generated control 3', [10, 'active dry', ' Instant'], {'bloom': False, 'grams': 8.0, 'tsp': '2 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: bloom flag', [14, 'active dry', 'instant'], {'bloom': False, 'grams': 11.2, 'tsp': '3 2/4'}],\n  ['repair check: bloom flag', [2.5, 'FRESH', 'fresh'], {'bloom': False, 'grams': 2.5, 'tsp': None}],\n  ['generated control 1', [21, 'active dry', 'active dry'], {'bloom': True, 'grams': 21.0, 'tsp': '6 3/4'}],\n  ['generated control 2', [2.5, 'fresh', 'rapid'], 'error: yeast type'],\n  ['generated control 3', [1, ' Instant', 'active dry'], {'bloom': True, 'grams': 1.3, 'tsp': '2/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  ['tiny amount', [0.3, 'instant', 'instant'], {'bloom': False, 'grams': 0.3, 'tsp': 'less than 1/4'}],\n  ['regression: bloom flag', [0.5, 'active dry', ' Instant'], {'bloom': False, 'grams': 0.4, 'tsp': '1/4'}],\n  ['repair check: bloom flag', [21, 'fresh', 'fresh'], {'bloom': False, 'grams': 21.0, 'tsp': None}],\n  ['generated control 1', [1, 'fresh', 'instant'], {'bloom': False, 'grams': 0.3, 'tsp': 'less than 1/4'}],\n  ['generated control 2', [2, 'FRESH', 'rapid'], 'error: yeast type'],\n  ['generated control 3', [2.5, 'active dry', 'rapid'], '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  ['instant to active dry', [7, 'instant', 'active dry'], {'bloom': True, 'grams': 8.8, 'tsp': '2 3/4'}],\n  ['regression: bloom flag', [2.5, 'instant', 'active dry'], {'bloom': True, 'grams': 3.1, 'tsp': '1'}],\n  ['repair check: bloom flag', [10, 'fresh', 'FRESH'], {'bloom': False, 'grams': 10.0, 'tsp': None}],\n  ['generated control 1', [2, 'instant', ' Instant'], {'bloom': False, 'grams': 2.0, 'tsp': '3/4'}],\n  ['generated control 2', [0.3, 'rapid', ' Instant'], 'error: yeast type'],\n  ['generated control 3', [0.3, 'fresh', 'fresh'], {'bloom': False, 'grams': 0.3, 'tsp': None}]],\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: bloom flag', [0.3, 'fresh', 'active dry'],\n   {'bloom': True, 'grams': 0.1, 'tsp': 'less than 1/4'}],\n  ['repair check: bloom flag', [10, 'FRESH', 'FRESH'], {'bloom': False, 'grams': 10.0, 'tsp': None}],\n  ['generated control 1', [5, 'instant', 'rapid'], 'error: yeast type'],\n  ['generated control 2', [2.5, 'active dry', 'active dry'], {'bloom': True, 'grams': 2.5, 'tsp': '3/4'}],\n  ['generated control 3', [2, 'FRESH', 'fresh'], {'bloom': False, 'grams': 2.0, 'tsp': None}]]]\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":"f037e483dd1ad37cfa7cf215dbe6ac6a25882b74fed9bf8717db7c8a73f7aead","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'] = f == '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: bloom flag', [21, ' Instant', 'active dry'], {'bloom': True, 'grams': 26.3, 'tsp': '8 2/4'}],\n  ['repair check: bloom flag', [3, ' Instant', 'FRESH'], {'bloom': False, 'grams': 9.0, 'tsp': None}],\n  ['generated control 1', [4, 'FRESH', 'instant'], {'bloom': False, 'grams': 1.3, 'tsp': '2/4'}],\n  ['generated control 2', [0.3, 'fresh', 'fresh'], {'bloom': False, 'grams': 0.3, 'tsp': None}],\n  ['generated control 3', [10, 'active dry', ' Instant'], {'bloom': False, 'grams': 8.0, 'tsp': '2 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: bloom flag', [14, 'active dry', 'instant'], {'bloom': False, 'grams': 11.2, 'tsp': '3 2/4'}],\n  ['repair check: bloom flag', [2.5, 'FRESH', 'fresh'], {'bloom': False, 'grams': 2.5, 'tsp': None}],\n  ['generated control 1', [21, 'active dry', 'active dry'], {'bloom': True, 'grams': 21.0, 'tsp': '6 3/4'}],\n  ['generated control 2', [2.5, 'fresh', 'rapid'], 'error: yeast type'],\n  ['generated control 3', [1, ' Instant', 'active dry'], {'bloom': True, 'grams': 1.3, 'tsp': '2/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  ['tiny amount', [0.3, 'instant', 'instant'], {'bloom': False, 'grams': 0.3, 'tsp': 'less than 1/4'}],\n  ['regression: bloom flag', [0.5, 'active dry', ' Instant'], {'bloom': False, 'grams': 0.4, 'tsp': '1/4'}],\n  ['repair check: bloom flag', [21, 'fresh', 'fresh'], {'bloom': False, 'grams': 21.0, 'tsp': None}],\n  ['generated control 1', [1, 'fresh', 'instant'], {'bloom': False, 'grams': 0.3, 'tsp': 'less than 1/4'}],\n  ['generated control 2', [2, 'FRESH', 'rapid'], 'error: yeast type'],\n  ['generated control 3', [2.5, 'active dry', 'rapid'], '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  ['instant to active dry', [7, 'instant', 'active dry'], {'bloom': True, 'grams': 8.8, 'tsp': '2 3/4'}],\n  ['regression: bloom flag', [2.5, 'instant', 'active dry'], {'bloom': True, 'grams': 3.1, 'tsp': '1'}],\n  ['repair check: bloom flag', [10, 'fresh', 'FRESH'], {'bloom': False, 'grams': 10.0, 'tsp': None}],\n  ['generated control 1', [2, 'instant', ' Instant'], {'bloom': False, 'grams': 2.0, 'tsp': '3/4'}],\n  ['generated control 2', [0.3, 'rapid', ' Instant'], 'error: yeast type'],\n  ['generated control 3', [0.3, 'fresh', 'fresh'], {'bloom': False, 'grams': 0.3, 'tsp': None}]],\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: bloom flag', [0.3, 'fresh', 'active dry'],\n   {'bloom': True, 'grams': 0.1, 'tsp': 'less than 1/4'}],\n  ['repair check: bloom flag', [10, 'FRESH', 'FRESH'], {'bloom': False, 'grams': 10.0, 'tsp': None}],\n  ['generated control 1', [5, 'instant', 'rapid'], 'error: yeast type'],\n  ['generated control 2', [2.5, 'active dry', 'active dry'], {'bloom': True, 'grams': 2.5, 'tsp': '3/4'}],\n  ['generated control 3', [2, 'FRESH', 'fresh'], {'bloom': False, 'grams': 2.0, 'tsp': None}]]]\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":"de1618901829d5a67b6c8ddf24742bb3722b18b5eb868f750cb2ec4e111dec34","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: bloom flag', [21, ' Instant', 'active dry'], {'bloom': True, 'grams': 26.3, 'tsp': '8 2/4'}],\n  ['repair check: bloom flag', [3, ' Instant', 'FRESH'], {'bloom': False, 'grams': 9.0, 'tsp': None}],\n  ['generated control 1', [4, 'FRESH', 'instant'], {'bloom': False, 'grams': 1.3, 'tsp': '2/4'}],\n  ['generated control 2', [0.3, 'fresh', 'fresh'], {'bloom': False, 'grams': 0.3, 'tsp': None}],\n  ['generated control 3', [10, 'active dry', ' Instant'], {'bloom': False, 'grams': 8.0, 'tsp': '2 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: bloom flag', [14, 'active dry', 'instant'], {'bloom': False, 'grams': 11.2, 'tsp': '3 2/4'}],\n  ['repair check: bloom flag', [2.5, 'FRESH', 'fresh'], {'bloom': False, 'grams': 2.5, 'tsp': None}],\n  ['generated control 1', [21, 'active dry', 'active dry'], {'bloom': True, 'grams': 21.0, 'tsp': '6 3/4'}],\n  ['generated control 2', [2.5, 'fresh', 'rapid'], 'error: yeast type'],\n  ['generated control 3', [1, ' Instant', 'active dry'], {'bloom': True, 'grams': 1.3, 'tsp': '2/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  ['tiny amount', [0.3, 'instant', 'instant'], {'bloom': False, 'grams': 0.3, 'tsp': 'less than 1/4'}],\n  ['regression: bloom flag', [0.5, 'active dry', ' Instant'], {'bloom': False, 'grams': 0.4, 'tsp': '1/4'}],\n  ['repair check: bloom flag', [21, 'fresh', 'fresh'], {'bloom': False, 'grams': 21.0, 'tsp': None}],\n  ['generated control 1', [1, 'fresh', 'instant'], {'bloom': False, 'grams': 0.3, 'tsp': 'less than 1/4'}],\n  ['generated control 2', [2, 'FRESH', 'rapid'], 'error: yeast type'],\n  ['generated control 3', [2.5, 'active dry', 'rapid'], '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  ['instant to active dry', [7, 'instant', 'active dry'], {'bloom': True, 'grams': 8.8, 'tsp': '2 3/4'}],\n  ['regression: bloom flag', [2.5, 'instant', 'active dry'], {'bloom': True, 'grams': 3.1, 'tsp': '1'}],\n  ['repair check: bloom flag', [10, 'fresh', 'FRESH'], {'bloom': False, 'grams': 10.0, 'tsp': None}],\n  ['generated control 1', [2, 'instant', ' Instant'], {'bloom': False, 'grams': 2.0, 'tsp': '3/4'}],\n  ['generated control 2', [0.3, 'rapid', ' Instant'], 'error: yeast type'],\n  ['generated control 3', [0.3, 'fresh', 'fresh'], {'bloom': False, 'grams': 0.3, 'tsp': None}]],\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: bloom flag', [0.3, 'fresh', 'active dry'],\n   {'bloom': True, 'grams': 0.1, 'tsp': 'less than 1/4'}],\n  ['repair check: bloom flag', [10, 'FRESH', 'FRESH'], {'bloom': False, 'grams': 10.0, 'tsp': None}],\n  ['generated control 1', [5, 'instant', 'rapid'], 'error: yeast type'],\n  ['generated control 2', [2.5, 'active dry', 'active dry'], {'bloom': True, 'grams': 2.5, 'tsp': '3/4'}],\n  ['generated control 3', [2, 'FRESH', 'fresh'], {'bloom': False, 'grams': 2.0, 'tsp': None}]]]\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-bloom-flag","generated_at":"2026-09-29T14:52:28.669941+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":"Flag bloom when the target is active dry.","root_cause":"The bloom flag checks the source type instead of the target type.","sha256":"a375c8965b36fca62956d9dff91855a65224b77d63a3600da98e561b1c23ba5d","title":"Yeast type converter: bloom flag · case 01","variant":1,"variant_policy":"Five numbered records share a model and may reuse boundary fixtures.","verification":{"attempt":{"elapsed_ms":43.227,"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":true,"grams":26.3,"tsp":"8 2/4"},"check":"regression: bloom flag","expected":{"bloom":true,"grams":26.3,"tsp":"8 2/4"},"passed":true},{"actual":{"bloom":true,"grams":9.0,"tsp":null},"check":"repair check: bloom flag","expected":{"bloom":false,"grams":9.0,"tsp":null},"passed":false},{"actual":{"bloom":false,"grams":1.3,"tsp":"2/4"},"check":"generated control 1","expected":{"bloom":false,"grams":1.3,"tsp":"2/4"},"passed":true},{"actual":{"bloom":true,"grams":0.3,"tsp":null},"check":"generated control 2","expected":{"bloom":false,"grams":0.3,"tsp":null},"passed":false},{"actual":{"bloom":false,"grams":8.0,"tsp":"2 2/4"},"check":"generated control 3","expected":{"bloom":false,"grams":8.0,"tsp":"2 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: bloom flag\", \"actual\": {\"grams\": 26.3, \"tsp\": \"8 2/4\", \"bloom\": true}, \"expected\": {\"bloom\": true, \"grams\": 26.3, \"tsp\": \"8 2/4\"}, \"passed\": true}, {\"check\": \"repair check: bloom flag\", \"actual\": {\"grams\": 9.0, \"tsp\": null, \"bloom\": true}, \"expected\": {\"bloom\": false, \"grams\": 9.0, \"tsp\": null}, \"passed\": false}, {\"check\": \"generated control 1\", \"actual\": {\"grams\": 1.3, \"tsp\": \"2/4\", \"bloom\": false}, \"expected\": {\"bloom\": false, \"grams\": 1.3, \"tsp\": \"2/4\"}, \"passed\": true}, {\"check\": \"generated control 2\", \"actual\": {\"grams\": 0.3, \"tsp\": null, \"bloom\": true}, \"expected\": {\"bloom\": false, \"grams\": 0.3, \"tsp\": null}, \"passed\": false}, {\"check\": \"generated control 3\", \"actual\": {\"grams\": 8.0, \"tsp\": \"2 2/4\", \"bloom\": false}, \"expected\": {\"bloom\": false, \"grams\": 8.0, \"tsp\": \"2 2/4\"}, \"passed\": true}], \"passed\": false}\n"},"broken":{"elapsed_ms":42.671,"exit_code":1,"observations":[{"actual":{"bloom":false,"grams":8.8,"tsp":"2 3/4"},"check":"instant to active dry","expected":{"bloom":true,"grams":8.8,"tsp":"2 3/4"},"passed":false},{"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":26.3,"tsp":"8 2/4"},"check":"regression: bloom flag","expected":{"bloom":true,"grams":26.3,"tsp":"8 2/4"},"passed":false},{"actual":{"bloom":false,"grams":9.0,"tsp":null},"check":"repair check: bloom flag","expected":{"bloom":false,"grams":9.0,"tsp":null},"passed":true},{"actual":{"bloom":false,"grams":1.3,"tsp":"2/4"},"check":"generated control 1","expected":{"bloom":false,"grams":1.3,"tsp":"2/4"},"passed":true},{"actual":{"bloom":false,"grams":0.3,"tsp":null},"check":"generated control 2","expected":{"bloom":false,"grams":0.3,"tsp":null},"passed":true},{"actual":{"bloom":true,"grams":8.0,"tsp":"2 2/4"},"check":"generated control 3","expected":{"bloom":false,"grams":8.0,"tsp":"2 2/4"},"passed":false}],"passed":false,"stderr":"","stdout":"{\"observations\": [{\"check\": \"instant to active dry\", \"actual\": {\"grams\": 8.8, \"tsp\": \"2 3/4\", \"bloom\": false}, \"expected\": {\"bloom\": true, \"grams\": 8.8, \"tsp\": \"2 3/4\"}, \"passed\": false}, {\"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: bloom flag\", \"actual\": {\"grams\": 26.3, \"tsp\": \"8 2/4\", \"bloom\": false}, \"expected\": {\"bloom\": true, \"grams\": 26.3, \"tsp\": \"8 2/4\"}, \"passed\": false}, {\"check\": \"repair check: bloom flag\", \"actual\": {\"grams\": 9.0, \"tsp\": null, \"bloom\": false}, \"expected\": {\"bloom\": false, \"grams\": 9.0, \"tsp\": null}, \"passed\": true}, {\"check\": \"generated control 1\", \"actual\": {\"grams\": 1.3, \"tsp\": \"2/4\", \"bloom\": false}, \"expected\": {\"bloom\": false, \"grams\": 1.3, \"tsp\": \"2/4\"}, \"passed\": true}, {\"check\": \"generated control 2\", \"actual\": {\"grams\": 0.3, \"tsp\": null, \"bloom\": false}, \"expected\": {\"bloom\": false, \"grams\": 0.3, \"tsp\": null}, \"passed\": true}, {\"check\": \"generated control 3\", \"actual\": {\"grams\": 8.0, \"tsp\": \"2 2/4\", \"bloom\": true}, \"expected\": {\"bloom\": false, \"grams\": 8.0, \"tsp\": \"2 2/4\"}, \"passed\": false}], \"passed\": false}\n"},"fixed":{"elapsed_ms":43.354,"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":true,"grams":26.3,"tsp":"8 2/4"},"check":"regression: bloom flag","expected":{"bloom":true,"grams":26.3,"tsp":"8 2/4"},"passed":true},{"actual":{"bloom":false,"grams":9.0,"tsp":null},"check":"repair check: bloom flag","expected":{"bloom":false,"grams":9.0,"tsp":null},"passed":true},{"actual":{"bloom":false,"grams":1.3,"tsp":"2/4"},"check":"generated control 1","expected":{"bloom":false,"grams":1.3,"tsp":"2/4"},"passed":true},{"actual":{"bloom":false,"grams":0.3,"tsp":null},"check":"generated control 2","expected":{"bloom":false,"grams":0.3,"tsp":null},"passed":true},{"actual":{"bloom":false,"grams":8.0,"tsp":"2 2/4"},"check":"generated control 3","expected":{"bloom":false,"grams":8.0,"tsp":"2 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: bloom flag\", \"actual\": {\"grams\": 26.3, \"tsp\": \"8 2/4\", \"bloom\": true}, \"expected\": {\"bloom\": true, \"grams\": 26.3, \"tsp\": \"8 2/4\"}, \"passed\": true}, {\"check\": \"repair check: bloom flag\", \"actual\": {\"grams\": 9.0, \"tsp\": null, \"bloom\": false}, \"expected\": {\"bloom\": false, \"grams\": 9.0, \"tsp\": null}, \"passed\": true}, {\"check\": \"generated control 1\", \"actual\": {\"grams\": 1.3, \"tsp\": \"2/4\", \"bloom\": false}, \"expected\": {\"bloom\": false, \"grams\": 1.3, \"tsp\": \"2/4\"}, \"passed\": true}, {\"check\": \"generated control 2\", \"actual\": {\"grams\": 0.3, \"tsp\": null, \"bloom\": false}, \"expected\": {\"bloom\": false, \"grams\": 0.3, \"tsp\": null}, \"passed\": true}, {\"check\": \"generated control 3\", \"actual\": {\"grams\": 8.0, \"tsp\": \"2 2/4\", \"bloom\": false}, \"expected\": {\"bloom\": false, \"grams\": 8.0, \"tsp\": \"2 2/4\"}, \"passed\": true}], \"passed\": true}\n"}},"verified":true,"visibility":"public"}