{"abstract":"Every step is shown starting at the moment it must finish.","category":"Recipe scaling and nutrition","checks":8,"contract":"Steps [name, minutes, depends_on]; a step must finish before any step depending on it starts. Latest start = min(latest start of dependents, serve time) - minutes. Unknown dependency -> \"error: unknown step X\"; a cycle -> \"error: cycle\". Serve \"HH:MM\"; starts print as \"HH:MM\" modulo 24h (previous day wraps). Output [[name, time]] sorted by absolute start then name.","evaluation_group":"w2-recipe_scaling_and_nutrition-backward-schedule","failed_approach":"Adding one minute of slack makes every step late.","family":"w2-recipe_scaling_and_nutrition-backward-schedule-step-duration-offset","id":"FA-97296","implementations":{"attempt":{"sha256":"e26b276f36f690f1d2cde192499ffbfe01c95fc151b9a62fa979a5d6076f7b1f","source":"\"\"\"Failure Map reference implementation. Python standard library only.\"\"\"\nimport json\nimport math\nfrom fractions import Fraction\nN = 1\nobservations = []\ndef solve(steps, serve):\n    by = {s[0]: s for s in steps}\n    for s in steps:\n        for d in s[2]:\n            if d not in by:\n                return 'error: unknown step ' + d\n    h, m = serve.split(':')\n    T = int(h) * 60 + int(m)\n    latest = {}\n    visiting = set()\n    def ls(n):\n        if n in latest:\n            return latest[n]\n        if n in visiting:\n            return None\n        visiting.add(n)\n        finish = T\n        for s in steps:\n            if n in s[2]:\n                v = ls(s[0])\n                if v is None:\n                    return None\n                finish = min(finish, v)\n        visiting.discard(n)\n        latest[n] = finish - by[n][1] + 1\n        return latest[n]\n    rows = []\n    for s in steps:\n        v = ls(s[0])\n        if v is None:\n            return 'error: cycle'\n        rows.append((v, s[0]))\n    rows.sort()\n    return [[n, '%02d:%02d' % divmod(v % 1440, 60)] for v, n in rows]\ndef check(label, actual, expected):\n    observations.append({\"check\": label, \"actual\": actual, \"expected\": expected, \"passed\": actual == expected})\nfixtures = [[['chain', [[['prep', 10, []], ['roast', 90, ['prep']], ['rest', 15, ['roast']]], '18:30'],\n   [['prep', '16:35'], ['roast', '16:45'], ['rest', '18:15']]],\n  ['overnight marinade', [[['marinate', 480, []], ['grill', 20, ['marinate']]], '12:00'],\n   [['marinate', '03:40'], ['grill', '11:40']]],\n  ['cycle', [[['a', 5, ['b']], ['b', 5, ['a']]], '18:00'], 'error: cycle'],\n  ['regression: step duration offset',\n   [[['roast', 240, ['marinate']], ['sauce', 240, ['prep']], ['marinate', 30, []], ['prep', 10, []]],\n    '19:45'],\n   [['marinate', '15:15'], ['prep', '15:35'], ['roast', '15:45'], ['sauce', '15:45']]],\n  ['repair check: step duration offset',\n   [[['sauce', 15, ['prep']], ['prep', 45, []], ['rest', 240, []], ['roast', 15, ['prep']],\n     ['marinate', 45, ['prep']]],\n    '00:30'],\n   [['rest', '20:30'], ['prep', '23:00'], ['marinate', '23:45'], ['roast', '00:15'], ['sauce', '00:15']]],\n  ['generated control 1',\n   [[['sauce', 45, ['shop']], ['roast', 45, ['prep', 'marinate']], ['marinate', 90, []], ['prep', 15, []],\n     ['rest', 10, ['sauce']]],\n    '00:30'],\n   'error: unknown step shop'],\n  ['generated control 2',\n   [[['sauce', 30, ['prep', 'marinate', 'shop']], ['rest', 45, ['roast']], ['marinate', 5, []],\n     ['prep', 5, []], ['roast', 5, ['prep']]],\n    '19:45'],\n   'error: unknown step shop'],\n  ['generated control 3',\n   [[['roast', 10, ['prep', 'marinate']], ['marinate', 15, []], ['prep', 45, ['roast']]], '12:00'],\n   'error: cycle']],\n [['overnight marinade', [[['marinate', 480, []], ['grill', 20, ['marinate']]], '12:00'],\n   [['marinate', '03:40'], ['grill', '11:40']]],\n  ['cycle', [[['a', 5, ['b']], ['b', 5, ['a']]], '18:00'], 'error: cycle'],\n  ['unknown dependency', [[['a', 5, ['shop']]], '18:00'], 'error: unknown step shop'],\n  ['regression: step duration offset',\n   [[['marinate', 240, []], ['plate', 5, ['prep', 'roast', 'rest']], ['sauce', 5, ['prep']],\n     ['roast', 30, ['prep', 'marinate']], ['prep', 45, []], ['rest', 30, ['roast', 'sauce']]],\n    '01:15'],\n   [['marinate', '20:10'], ['prep', '23:25'], ['roast', '00:10'], ['sauce', '00:35'], ['rest', '00:40'],\n    ['plate', '01:10']]],\n  ['repair check: step duration offset',\n   [[['prep', 15, []], ['plate', 10, ['rest']], ['rest', 10, ['marinate']], ['marinate', 240, ['prep']],\n     ['sauce', 45, ['roast']], ['roast', 15, ['marinate']]],\n    '18:30'],\n   [['prep', '13:15'], ['marinate', '13:30'], ['roast', '17:30'], ['sauce', '17:45'], ['rest', '18:10'],\n    ['plate', '18:20']]],\n  ['generated control 1',\n   [[['marinate', 10, []], ['plate', 45, ['prep', 'sauce']], ['rest', 90, ['prep', 'marinate', 'sauce']],\n     ['sauce', 45, ['marinate']], ['prep', 90, []], ['roast', 15, ['prep']]],\n    '19:45'],\n   [['prep', '16:45'], ['marinate', '17:20'], ['sauce', '17:30'], ['rest', '18:15'], ['plate', '19:00'],\n    ['roast', '19:30']]],\n  ['generated control 2',\n   [[['prep', 90, []], ['sauce', 10, ['prep', 'marinate']], ['roast', 30, ['prep']],\n     ['marinate', 15, ['prep']]],\n    '12:00'],\n   [['prep', '10:00'], ['roast', '11:30'], ['marinate', '11:35'], ['sauce', '11:50']]],\n  ['generated control 3',\n   [[['prep', 15, []], ['sauce', 30, []], ['marinate', 10, []], ['rest', 10, ['shop']],\n     ['roast', 240, ['prep', 'marinate']]],\n    '19:45'],\n   'error: unknown step shop']],\n [['cycle', [[['a', 5, ['b']], ['b', 5, ['a']]], '18:00'], 'error: cycle'],\n  ['unknown dependency', [[['a', 5, ['shop']]], '18:00'], 'error: unknown step shop'],\n  ['chain', [[['prep', 10, []], ['roast', 90, ['prep']], ['rest', 15, ['roast']]], '18:30'],\n   [['prep', '16:35'], ['roast', '16:45'], ['rest', '18:15']]],\n  ['regression: step duration offset',\n   [[['prep', 240, []], ['roast', 90, []], ['marinate', 45, ['prep']]], '12:00'],\n   [['prep', '07:15'], ['roast', '10:30'], ['marinate', '11:15']]],\n  ['repair check: step duration offset',\n   [[['prep', 30, []], ['roast', 5, []], ['sauce', 15, ['prep', 'marinate']], ['marinate', 30, ['prep']]],\n    '01:15'],\n   [['prep', '00:00'], ['marinate', '00:30'], ['sauce', '01:00'], ['roast', '01:10']]],\n  ['generated control 1',\n   [[['roast', 45, ['prep', 'marinate']], ['marinate', 30, ['prep']], ['sauce', 5, ['prep', 'marinate']],\n     ['prep', 240, ['sauce']]],\n    '02:00'],\n   'error: cycle'],\n  ['generated control 2',\n   [[['rest', 15, ['roast', 'sauce']], ['roast', 90, []], ['prep', 15, []],\n     ['marinate', 45, ['prep', 'shop']], ['sauce', 10, ['roast']]],\n    '02:00'],\n   'error: unknown step shop'],\n  ['generated control 3',\n   [[['marinate', 15, []], ['roast', 15, ['prep', 'marinate']], ['prep', 15, []],\n     ['rest', 90, ['prep', 'marinate', 'roast']], ['sauce', 45, ['shop']]],\n    '02:00'],\n   'error: unknown step shop']],\n [['unknown dependency', [[['a', 5, ['shop']]], '18:00'], 'error: unknown step shop'],\n  ['chain', [[['prep', 10, []], ['roast', 90, ['prep']], ['rest', 15, ['roast']]], '18:30'],\n   [['prep', '16:35'], ['roast', '16:45'], ['rest', '18:15']]],\n  ['overnight marinade', [[['marinate', 480, []], ['grill', 20, ['marinate']]], '12:00'],\n   [['marinate', '03:40'], ['grill', '11:40']]],\n  ['regression: step duration offset',\n   [[['sauce', 5, []], ['roast', 15, ['prep', 'marinate']], ['prep', 15, []], ['rest', 10, ['prep']],\n     ['marinate', 10, ['prep']]],\n    '01:15'],\n   [['prep', '00:35'], ['marinate', '00:50'], ['roast', '01:00'], ['rest', '01:05'], ['sauce', '01:10']]],\n  ['repair check: step duration offset',\n   [[['roast', 10, ['prep', 'marinate']], ['prep', 30, []], ['sauce', 90, ['marinate', 'roast']],\n     ['marinate', 240, []], ['rest', 10, ['prep', 'sauce']]],\n    '19:45'],\n   [['marinate', '13:55'], ['prep', '17:25'], ['roast', '17:55'], ['sauce', '18:05'], ['rest', '19:35']]],\n  ['generated control 1',\n   [[['rest', 240, ['prep', 'roast', 'sauce']], ['marinate', 90, []], ['sauce', 5, ['prep', 'marinate']],\n     ['roast', 45, []], ['prep', 15, ['rest']]],\n    '18:30'],\n   'error: cycle'],\n  ['generated control 2', [[['roast', 15, ['prep']], ['prep', 15, []], ['marinate', 10, []]], '00:30'],\n   [['prep', '00:00'], ['roast', '00:15'], ['marinate', '00:20']]],\n  ['generated control 3',\n   [[['rest', 240, ['roast']], ['roast', 45, ['prep', 'shop']], ['marinate', 10, []],\n     ['sauce', 45, ['prep', 'roast']], ['prep', 240, []]],\n    '01:15'],\n   'error: unknown step shop']],\n [['chain', [[['prep', 10, []], ['roast', 90, ['prep']], ['rest', 15, ['roast']]], '18:30'],\n   [['prep', '16:35'], ['roast', '16:45'], ['rest', '18:15']]],\n  ['overnight marinade', [[['marinate', 480, []], ['grill', 20, ['marinate']]], '12:00'],\n   [['marinate', '03:40'], ['grill', '11:40']]],\n  ['cycle', [[['a', 5, ['b']], ['b', 5, ['a']]], '18:00'], 'error: cycle'],\n  ['regression: step duration offset',\n   [[['prep', 10, []], ['rest', 30, ['marinate', 'roast', 'sauce']], ['sauce', 30, []],\n     ['plate', 90, ['prep', 'roast', 'sauce', 'rest']], ['marinate', 30, ['prep']],\n     ['roast', 30, ['marinate']]],\n    '01:15'],\n   [['prep', '22:05'], ['marinate', '22:15'], ['roast', '22:45'], ['sauce', '22:45'], ['rest', '23:15'],\n    ['plate', '23:45']]],\n  ['repair check: step duration offset',\n   [[['roast', 45, ['prep', 'marinate']], ['rest', 90, ['prep']], ['prep', 10, []],\n     ['marinate', 15, ['prep']], ['plate', 10, ['roast']], ['sauce', 5, ['prep', 'marinate']]],\n    '19:45'],\n   [['prep', '18:05'], ['rest', '18:15'], ['marinate', '18:35'], ['roast', '18:50'], ['plate', '19:35'],\n    ['sauce', '19:40']]],\n  ['generated control 1',\n   [[['prep', 45, []], ['marinate', 5, []], ['roast', 240, []], ['sauce', 30, ['roast']]], '02:00'],\n   [['roast', '21:30'], ['prep', '01:15'], ['sauce', '01:30'], ['marinate', '01:55']]],\n  ['generated control 2',\n   [[['plate', 15, []], ['marinate', 240, ['prep']], ['prep', 15, []], ['roast', 15, []],\n     ['rest', 15, ['marinate']], ['sauce', 45, ['marinate']]],\n    '18:30'],\n   [['prep', '13:30'], ['marinate', '13:45'], ['sauce', '17:45'], ['plate', '18:15'], ['rest', '18:15'],\n    ['roast', '18:15']]],\n  ['generated control 3',\n   [[['marinate', 240, ['shop']], ['plate', 45, ['prep', 'sauce']], ['rest', 90, []], ['prep', 90, ['plate']],\n     ['sauce', 240, ['marinate', 'roast']], ['roast', 15, ['prep', 'marinate']]],\n    '19:45'],\n   'error: unknown step shop']]]\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":"935c8abe821b2b9ddab2d1c0236d1d10d2b8350477ec33901a07cd3fa5031d99","source":"\"\"\"Failure Map reference implementation. Python standard library only.\"\"\"\nimport json\nimport math\nfrom fractions import Fraction\nN = 1\nobservations = []\ndef solve(steps, serve):\n    by = {s[0]: s for s in steps}\n    for s in steps:\n        for d in s[2]:\n            if d not in by:\n                return 'error: unknown step ' + d\n    h, m = serve.split(':')\n    T = int(h) * 60 + int(m)\n    latest = {}\n    visiting = set()\n    def ls(n):\n        if n in latest:\n            return latest[n]\n        if n in visiting:\n            return None\n        visiting.add(n)\n        finish = T\n        for s in steps:\n            if n in s[2]:\n                v = ls(s[0])\n                if v is None:\n                    return None\n                finish = min(finish, v)\n        visiting.discard(n)\n        latest[n] = finish\n        return latest[n]\n    rows = []\n    for s in steps:\n        v = ls(s[0])\n        if v is None:\n            return 'error: cycle'\n        rows.append((v, s[0]))\n    rows.sort()\n    return [[n, '%02d:%02d' % divmod(v % 1440, 60)] for v, n in rows]\ndef check(label, actual, expected):\n    observations.append({\"check\": label, \"actual\": actual, \"expected\": expected, \"passed\": actual == expected})\nfixtures = [[['chain', [[['prep', 10, []], ['roast', 90, ['prep']], ['rest', 15, ['roast']]], '18:30'],\n   [['prep', '16:35'], ['roast', '16:45'], ['rest', '18:15']]],\n  ['overnight marinade', [[['marinate', 480, []], ['grill', 20, ['marinate']]], '12:00'],\n   [['marinate', '03:40'], ['grill', '11:40']]],\n  ['cycle', [[['a', 5, ['b']], ['b', 5, ['a']]], '18:00'], 'error: cycle'],\n  ['regression: step duration offset',\n   [[['roast', 240, ['marinate']], ['sauce', 240, ['prep']], ['marinate', 30, []], ['prep', 10, []]],\n    '19:45'],\n   [['marinate', '15:15'], ['prep', '15:35'], ['roast', '15:45'], ['sauce', '15:45']]],\n  ['repair check: step duration offset',\n   [[['sauce', 15, ['prep']], ['prep', 45, []], ['rest', 240, []], ['roast', 15, ['prep']],\n     ['marinate', 45, ['prep']]],\n    '00:30'],\n   [['rest', '20:30'], ['prep', '23:00'], ['marinate', '23:45'], ['roast', '00:15'], ['sauce', '00:15']]],\n  ['generated control 1',\n   [[['sauce', 45, ['shop']], ['roast', 45, ['prep', 'marinate']], ['marinate', 90, []], ['prep', 15, []],\n     ['rest', 10, ['sauce']]],\n    '00:30'],\n   'error: unknown step shop'],\n  ['generated control 2',\n   [[['sauce', 30, ['prep', 'marinate', 'shop']], ['rest', 45, ['roast']], ['marinate', 5, []],\n     ['prep', 5, []], ['roast', 5, ['prep']]],\n    '19:45'],\n   'error: unknown step shop'],\n  ['generated control 3',\n   [[['roast', 10, ['prep', 'marinate']], ['marinate', 15, []], ['prep', 45, ['roast']]], '12:00'],\n   'error: cycle']],\n [['overnight marinade', [[['marinate', 480, []], ['grill', 20, ['marinate']]], '12:00'],\n   [['marinate', '03:40'], ['grill', '11:40']]],\n  ['cycle', [[['a', 5, ['b']], ['b', 5, ['a']]], '18:00'], 'error: cycle'],\n  ['unknown dependency', [[['a', 5, ['shop']]], '18:00'], 'error: unknown step shop'],\n  ['regression: step duration offset',\n   [[['marinate', 240, []], ['plate', 5, ['prep', 'roast', 'rest']], ['sauce', 5, ['prep']],\n     ['roast', 30, ['prep', 'marinate']], ['prep', 45, []], ['rest', 30, ['roast', 'sauce']]],\n    '01:15'],\n   [['marinate', '20:10'], ['prep', '23:25'], ['roast', '00:10'], ['sauce', '00:35'], ['rest', '00:40'],\n    ['plate', '01:10']]],\n  ['repair check: step duration offset',\n   [[['prep', 15, []], ['plate', 10, ['rest']], ['rest', 10, ['marinate']], ['marinate', 240, ['prep']],\n     ['sauce', 45, ['roast']], ['roast', 15, ['marinate']]],\n    '18:30'],\n   [['prep', '13:15'], ['marinate', '13:30'], ['roast', '17:30'], ['sauce', '17:45'], ['rest', '18:10'],\n    ['plate', '18:20']]],\n  ['generated control 1',\n   [[['marinate', 10, []], ['plate', 45, ['prep', 'sauce']], ['rest', 90, ['prep', 'marinate', 'sauce']],\n     ['sauce', 45, ['marinate']], ['prep', 90, []], ['roast', 15, ['prep']]],\n    '19:45'],\n   [['prep', '16:45'], ['marinate', '17:20'], ['sauce', '17:30'], ['rest', '18:15'], ['plate', '19:00'],\n    ['roast', '19:30']]],\n  ['generated control 2',\n   [[['prep', 90, []], ['sauce', 10, ['prep', 'marinate']], ['roast', 30, ['prep']],\n     ['marinate', 15, ['prep']]],\n    '12:00'],\n   [['prep', '10:00'], ['roast', '11:30'], ['marinate', '11:35'], ['sauce', '11:50']]],\n  ['generated control 3',\n   [[['prep', 15, []], ['sauce', 30, []], ['marinate', 10, []], ['rest', 10, ['shop']],\n     ['roast', 240, ['prep', 'marinate']]],\n    '19:45'],\n   'error: unknown step shop']],\n [['cycle', [[['a', 5, ['b']], ['b', 5, ['a']]], '18:00'], 'error: cycle'],\n  ['unknown dependency', [[['a', 5, ['shop']]], '18:00'], 'error: unknown step shop'],\n  ['chain', [[['prep', 10, []], ['roast', 90, ['prep']], ['rest', 15, ['roast']]], '18:30'],\n   [['prep', '16:35'], ['roast', '16:45'], ['rest', '18:15']]],\n  ['regression: step duration offset',\n   [[['prep', 240, []], ['roast', 90, []], ['marinate', 45, ['prep']]], '12:00'],\n   [['prep', '07:15'], ['roast', '10:30'], ['marinate', '11:15']]],\n  ['repair check: step duration offset',\n   [[['prep', 30, []], ['roast', 5, []], ['sauce', 15, ['prep', 'marinate']], ['marinate', 30, ['prep']]],\n    '01:15'],\n   [['prep', '00:00'], ['marinate', '00:30'], ['sauce', '01:00'], ['roast', '01:10']]],\n  ['generated control 1',\n   [[['roast', 45, ['prep', 'marinate']], ['marinate', 30, ['prep']], ['sauce', 5, ['prep', 'marinate']],\n     ['prep', 240, ['sauce']]],\n    '02:00'],\n   'error: cycle'],\n  ['generated control 2',\n   [[['rest', 15, ['roast', 'sauce']], ['roast', 90, []], ['prep', 15, []],\n     ['marinate', 45, ['prep', 'shop']], ['sauce', 10, ['roast']]],\n    '02:00'],\n   'error: unknown step shop'],\n  ['generated control 3',\n   [[['marinate', 15, []], ['roast', 15, ['prep', 'marinate']], ['prep', 15, []],\n     ['rest', 90, ['prep', 'marinate', 'roast']], ['sauce', 45, ['shop']]],\n    '02:00'],\n   'error: unknown step shop']],\n [['unknown dependency', [[['a', 5, ['shop']]], '18:00'], 'error: unknown step shop'],\n  ['chain', [[['prep', 10, []], ['roast', 90, ['prep']], ['rest', 15, ['roast']]], '18:30'],\n   [['prep', '16:35'], ['roast', '16:45'], ['rest', '18:15']]],\n  ['overnight marinade', [[['marinate', 480, []], ['grill', 20, ['marinate']]], '12:00'],\n   [['marinate', '03:40'], ['grill', '11:40']]],\n  ['regression: step duration offset',\n   [[['sauce', 5, []], ['roast', 15, ['prep', 'marinate']], ['prep', 15, []], ['rest', 10, ['prep']],\n     ['marinate', 10, ['prep']]],\n    '01:15'],\n   [['prep', '00:35'], ['marinate', '00:50'], ['roast', '01:00'], ['rest', '01:05'], ['sauce', '01:10']]],\n  ['repair check: step duration offset',\n   [[['roast', 10, ['prep', 'marinate']], ['prep', 30, []], ['sauce', 90, ['marinate', 'roast']],\n     ['marinate', 240, []], ['rest', 10, ['prep', 'sauce']]],\n    '19:45'],\n   [['marinate', '13:55'], ['prep', '17:25'], ['roast', '17:55'], ['sauce', '18:05'], ['rest', '19:35']]],\n  ['generated control 1',\n   [[['rest', 240, ['prep', 'roast', 'sauce']], ['marinate', 90, []], ['sauce', 5, ['prep', 'marinate']],\n     ['roast', 45, []], ['prep', 15, ['rest']]],\n    '18:30'],\n   'error: cycle'],\n  ['generated control 2', [[['roast', 15, ['prep']], ['prep', 15, []], ['marinate', 10, []]], '00:30'],\n   [['prep', '00:00'], ['roast', '00:15'], ['marinate', '00:20']]],\n  ['generated control 3',\n   [[['rest', 240, ['roast']], ['roast', 45, ['prep', 'shop']], ['marinate', 10, []],\n     ['sauce', 45, ['prep', 'roast']], ['prep', 240, []]],\n    '01:15'],\n   'error: unknown step shop']],\n [['chain', [[['prep', 10, []], ['roast', 90, ['prep']], ['rest', 15, ['roast']]], '18:30'],\n   [['prep', '16:35'], ['roast', '16:45'], ['rest', '18:15']]],\n  ['overnight marinade', [[['marinate', 480, []], ['grill', 20, ['marinate']]], '12:00'],\n   [['marinate', '03:40'], ['grill', '11:40']]],\n  ['cycle', [[['a', 5, ['b']], ['b', 5, ['a']]], '18:00'], 'error: cycle'],\n  ['regression: step duration offset',\n   [[['prep', 10, []], ['rest', 30, ['marinate', 'roast', 'sauce']], ['sauce', 30, []],\n     ['plate', 90, ['prep', 'roast', 'sauce', 'rest']], ['marinate', 30, ['prep']],\n     ['roast', 30, ['marinate']]],\n    '01:15'],\n   [['prep', '22:05'], ['marinate', '22:15'], ['roast', '22:45'], ['sauce', '22:45'], ['rest', '23:15'],\n    ['plate', '23:45']]],\n  ['repair check: step duration offset',\n   [[['roast', 45, ['prep', 'marinate']], ['rest', 90, ['prep']], ['prep', 10, []],\n     ['marinate', 15, ['prep']], ['plate', 10, ['roast']], ['sauce', 5, ['prep', 'marinate']]],\n    '19:45'],\n   [['prep', '18:05'], ['rest', '18:15'], ['marinate', '18:35'], ['roast', '18:50'], ['plate', '19:35'],\n    ['sauce', '19:40']]],\n  ['generated control 1',\n   [[['prep', 45, []], ['marinate', 5, []], ['roast', 240, []], ['sauce', 30, ['roast']]], '02:00'],\n   [['roast', '21:30'], ['prep', '01:15'], ['sauce', '01:30'], ['marinate', '01:55']]],\n  ['generated control 2',\n   [[['plate', 15, []], ['marinate', 240, ['prep']], ['prep', 15, []], ['roast', 15, []],\n     ['rest', 15, ['marinate']], ['sauce', 45, ['marinate']]],\n    '18:30'],\n   [['prep', '13:30'], ['marinate', '13:45'], ['sauce', '17:45'], ['plate', '18:15'], ['rest', '18:15'],\n    ['roast', '18:15']]],\n  ['generated control 3',\n   [[['marinate', 240, ['shop']], ['plate', 45, ['prep', 'sauce']], ['rest', 90, []], ['prep', 90, ['plate']],\n     ['sauce', 240, ['marinate', 'roast']], ['roast', 15, ['prep', 'marinate']]],\n    '19:45'],\n   'error: unknown step shop']]]\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":"7f2af23bb23330970c63e6da52f90a0e2fe28c7a747975197a2a862fe6382795","source":"\"\"\"Failure Map reference implementation. Python standard library only.\"\"\"\nimport json\nimport math\nfrom fractions import Fraction\nN = 1\nobservations = []\ndef solve(steps, serve):\n    by = {s[0]: s for s in steps}\n    for s in steps:\n        for d in s[2]:\n            if d not in by:\n                return 'error: unknown step ' + d\n    h, m = serve.split(':')\n    T = int(h) * 60 + int(m)\n    latest = {}\n    visiting = set()\n    def ls(n):\n        if n in latest:\n            return latest[n]\n        if n in visiting:\n            return None\n        visiting.add(n)\n        finish = T\n        for s in steps:\n            if n in s[2]:\n                v = ls(s[0])\n                if v is None:\n                    return None\n                finish = min(finish, v)\n        visiting.discard(n)\n        latest[n] = finish - by[n][1]\n        return latest[n]\n    rows = []\n    for s in steps:\n        v = ls(s[0])\n        if v is None:\n            return 'error: cycle'\n        rows.append((v, s[0]))\n    rows.sort()\n    return [[n, '%02d:%02d' % divmod(v % 1440, 60)] for v, n in rows]\ndef check(label, actual, expected):\n    observations.append({\"check\": label, \"actual\": actual, \"expected\": expected, \"passed\": actual == expected})\nfixtures = [[['chain', [[['prep', 10, []], ['roast', 90, ['prep']], ['rest', 15, ['roast']]], '18:30'],\n   [['prep', '16:35'], ['roast', '16:45'], ['rest', '18:15']]],\n  ['overnight marinade', [[['marinate', 480, []], ['grill', 20, ['marinate']]], '12:00'],\n   [['marinate', '03:40'], ['grill', '11:40']]],\n  ['cycle', [[['a', 5, ['b']], ['b', 5, ['a']]], '18:00'], 'error: cycle'],\n  ['regression: step duration offset',\n   [[['roast', 240, ['marinate']], ['sauce', 240, ['prep']], ['marinate', 30, []], ['prep', 10, []]],\n    '19:45'],\n   [['marinate', '15:15'], ['prep', '15:35'], ['roast', '15:45'], ['sauce', '15:45']]],\n  ['repair check: step duration offset',\n   [[['sauce', 15, ['prep']], ['prep', 45, []], ['rest', 240, []], ['roast', 15, ['prep']],\n     ['marinate', 45, ['prep']]],\n    '00:30'],\n   [['rest', '20:30'], ['prep', '23:00'], ['marinate', '23:45'], ['roast', '00:15'], ['sauce', '00:15']]],\n  ['generated control 1',\n   [[['sauce', 45, ['shop']], ['roast', 45, ['prep', 'marinate']], ['marinate', 90, []], ['prep', 15, []],\n     ['rest', 10, ['sauce']]],\n    '00:30'],\n   'error: unknown step shop'],\n  ['generated control 2',\n   [[['sauce', 30, ['prep', 'marinate', 'shop']], ['rest', 45, ['roast']], ['marinate', 5, []],\n     ['prep', 5, []], ['roast', 5, ['prep']]],\n    '19:45'],\n   'error: unknown step shop'],\n  ['generated control 3',\n   [[['roast', 10, ['prep', 'marinate']], ['marinate', 15, []], ['prep', 45, ['roast']]], '12:00'],\n   'error: cycle']],\n [['overnight marinade', [[['marinate', 480, []], ['grill', 20, ['marinate']]], '12:00'],\n   [['marinate', '03:40'], ['grill', '11:40']]],\n  ['cycle', [[['a', 5, ['b']], ['b', 5, ['a']]], '18:00'], 'error: cycle'],\n  ['unknown dependency', [[['a', 5, ['shop']]], '18:00'], 'error: unknown step shop'],\n  ['regression: step duration offset',\n   [[['marinate', 240, []], ['plate', 5, ['prep', 'roast', 'rest']], ['sauce', 5, ['prep']],\n     ['roast', 30, ['prep', 'marinate']], ['prep', 45, []], ['rest', 30, ['roast', 'sauce']]],\n    '01:15'],\n   [['marinate', '20:10'], ['prep', '23:25'], ['roast', '00:10'], ['sauce', '00:35'], ['rest', '00:40'],\n    ['plate', '01:10']]],\n  ['repair check: step duration offset',\n   [[['prep', 15, []], ['plate', 10, ['rest']], ['rest', 10, ['marinate']], ['marinate', 240, ['prep']],\n     ['sauce', 45, ['roast']], ['roast', 15, ['marinate']]],\n    '18:30'],\n   [['prep', '13:15'], ['marinate', '13:30'], ['roast', '17:30'], ['sauce', '17:45'], ['rest', '18:10'],\n    ['plate', '18:20']]],\n  ['generated control 1',\n   [[['marinate', 10, []], ['plate', 45, ['prep', 'sauce']], ['rest', 90, ['prep', 'marinate', 'sauce']],\n     ['sauce', 45, ['marinate']], ['prep', 90, []], ['roast', 15, ['prep']]],\n    '19:45'],\n   [['prep', '16:45'], ['marinate', '17:20'], ['sauce', '17:30'], ['rest', '18:15'], ['plate', '19:00'],\n    ['roast', '19:30']]],\n  ['generated control 2',\n   [[['prep', 90, []], ['sauce', 10, ['prep', 'marinate']], ['roast', 30, ['prep']],\n     ['marinate', 15, ['prep']]],\n    '12:00'],\n   [['prep', '10:00'], ['roast', '11:30'], ['marinate', '11:35'], ['sauce', '11:50']]],\n  ['generated control 3',\n   [[['prep', 15, []], ['sauce', 30, []], ['marinate', 10, []], ['rest', 10, ['shop']],\n     ['roast', 240, ['prep', 'marinate']]],\n    '19:45'],\n   'error: unknown step shop']],\n [['cycle', [[['a', 5, ['b']], ['b', 5, ['a']]], '18:00'], 'error: cycle'],\n  ['unknown dependency', [[['a', 5, ['shop']]], '18:00'], 'error: unknown step shop'],\n  ['chain', [[['prep', 10, []], ['roast', 90, ['prep']], ['rest', 15, ['roast']]], '18:30'],\n   [['prep', '16:35'], ['roast', '16:45'], ['rest', '18:15']]],\n  ['regression: step duration offset',\n   [[['prep', 240, []], ['roast', 90, []], ['marinate', 45, ['prep']]], '12:00'],\n   [['prep', '07:15'], ['roast', '10:30'], ['marinate', '11:15']]],\n  ['repair check: step duration offset',\n   [[['prep', 30, []], ['roast', 5, []], ['sauce', 15, ['prep', 'marinate']], ['marinate', 30, ['prep']]],\n    '01:15'],\n   [['prep', '00:00'], ['marinate', '00:30'], ['sauce', '01:00'], ['roast', '01:10']]],\n  ['generated control 1',\n   [[['roast', 45, ['prep', 'marinate']], ['marinate', 30, ['prep']], ['sauce', 5, ['prep', 'marinate']],\n     ['prep', 240, ['sauce']]],\n    '02:00'],\n   'error: cycle'],\n  ['generated control 2',\n   [[['rest', 15, ['roast', 'sauce']], ['roast', 90, []], ['prep', 15, []],\n     ['marinate', 45, ['prep', 'shop']], ['sauce', 10, ['roast']]],\n    '02:00'],\n   'error: unknown step shop'],\n  ['generated control 3',\n   [[['marinate', 15, []], ['roast', 15, ['prep', 'marinate']], ['prep', 15, []],\n     ['rest', 90, ['prep', 'marinate', 'roast']], ['sauce', 45, ['shop']]],\n    '02:00'],\n   'error: unknown step shop']],\n [['unknown dependency', [[['a', 5, ['shop']]], '18:00'], 'error: unknown step shop'],\n  ['chain', [[['prep', 10, []], ['roast', 90, ['prep']], ['rest', 15, ['roast']]], '18:30'],\n   [['prep', '16:35'], ['roast', '16:45'], ['rest', '18:15']]],\n  ['overnight marinade', [[['marinate', 480, []], ['grill', 20, ['marinate']]], '12:00'],\n   [['marinate', '03:40'], ['grill', '11:40']]],\n  ['regression: step duration offset',\n   [[['sauce', 5, []], ['roast', 15, ['prep', 'marinate']], ['prep', 15, []], ['rest', 10, ['prep']],\n     ['marinate', 10, ['prep']]],\n    '01:15'],\n   [['prep', '00:35'], ['marinate', '00:50'], ['roast', '01:00'], ['rest', '01:05'], ['sauce', '01:10']]],\n  ['repair check: step duration offset',\n   [[['roast', 10, ['prep', 'marinate']], ['prep', 30, []], ['sauce', 90, ['marinate', 'roast']],\n     ['marinate', 240, []], ['rest', 10, ['prep', 'sauce']]],\n    '19:45'],\n   [['marinate', '13:55'], ['prep', '17:25'], ['roast', '17:55'], ['sauce', '18:05'], ['rest', '19:35']]],\n  ['generated control 1',\n   [[['rest', 240, ['prep', 'roast', 'sauce']], ['marinate', 90, []], ['sauce', 5, ['prep', 'marinate']],\n     ['roast', 45, []], ['prep', 15, ['rest']]],\n    '18:30'],\n   'error: cycle'],\n  ['generated control 2', [[['roast', 15, ['prep']], ['prep', 15, []], ['marinate', 10, []]], '00:30'],\n   [['prep', '00:00'], ['roast', '00:15'], ['marinate', '00:20']]],\n  ['generated control 3',\n   [[['rest', 240, ['roast']], ['roast', 45, ['prep', 'shop']], ['marinate', 10, []],\n     ['sauce', 45, ['prep', 'roast']], ['prep', 240, []]],\n    '01:15'],\n   'error: unknown step shop']],\n [['chain', [[['prep', 10, []], ['roast', 90, ['prep']], ['rest', 15, ['roast']]], '18:30'],\n   [['prep', '16:35'], ['roast', '16:45'], ['rest', '18:15']]],\n  ['overnight marinade', [[['marinate', 480, []], ['grill', 20, ['marinate']]], '12:00'],\n   [['marinate', '03:40'], ['grill', '11:40']]],\n  ['cycle', [[['a', 5, ['b']], ['b', 5, ['a']]], '18:00'], 'error: cycle'],\n  ['regression: step duration offset',\n   [[['prep', 10, []], ['rest', 30, ['marinate', 'roast', 'sauce']], ['sauce', 30, []],\n     ['plate', 90, ['prep', 'roast', 'sauce', 'rest']], ['marinate', 30, ['prep']],\n     ['roast', 30, ['marinate']]],\n    '01:15'],\n   [['prep', '22:05'], ['marinate', '22:15'], ['roast', '22:45'], ['sauce', '22:45'], ['rest', '23:15'],\n    ['plate', '23:45']]],\n  ['repair check: step duration offset',\n   [[['roast', 45, ['prep', 'marinate']], ['rest', 90, ['prep']], ['prep', 10, []],\n     ['marinate', 15, ['prep']], ['plate', 10, ['roast']], ['sauce', 5, ['prep', 'marinate']]],\n    '19:45'],\n   [['prep', '18:05'], ['rest', '18:15'], ['marinate', '18:35'], ['roast', '18:50'], ['plate', '19:35'],\n    ['sauce', '19:40']]],\n  ['generated control 1',\n   [[['prep', 45, []], ['marinate', 5, []], ['roast', 240, []], ['sauce', 30, ['roast']]], '02:00'],\n   [['roast', '21:30'], ['prep', '01:15'], ['sauce', '01:30'], ['marinate', '01:55']]],\n  ['generated control 2',\n   [[['plate', 15, []], ['marinate', 240, ['prep']], ['prep', 15, []], ['roast', 15, []],\n     ['rest', 15, ['marinate']], ['sauce', 45, ['marinate']]],\n    '18:30'],\n   [['prep', '13:30'], ['marinate', '13:45'], ['sauce', '17:45'], ['plate', '18:15'], ['rest', '18:15'],\n    ['roast', '18:15']]],\n  ['generated control 3',\n   [[['marinate', 240, ['shop']], ['plate', 45, ['prep', 'sauce']], ['rest', 90, []], ['prep', 90, ['plate']],\n     ['sauce', 240, ['marinate', 'roast']], ['roast', 15, ['prep', 'marinate']]],\n    '19:45'],\n   'error: unknown step shop']]]\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-backward-schedule-step-duration-offset","generated_at":"2026-09-29T14:52:30.769197+00:00","license":"CC0-1.0","python":"3.12.14","seed":1,"split":"open-access"},"relevance":"Dinner-party and restaurant prep planners schedule long marinades and roasts backward from service.","repair":"Start = deadline - duration.","root_cause":"The step duration is not subtracted from its deadline.","sha256":"d7d8f9891d27903aa413475bde0a881dfdb90585cbf893bf2a34e1755eb6987f","title":"Backward recipe step scheduler: step duration offset · case 01","variant":1,"variant_policy":"Five numbered records share a model and may reuse boundary fixtures.","verification":{"attempt":{"elapsed_ms":45.053,"exit_code":1,"observations":[{"actual":[["prep","16:38"],["roast","16:47"],["rest","18:16"]],"check":"chain","expected":[["prep","16:35"],["roast","16:45"],["rest","18:15"]],"passed":false},{"actual":[["marinate","03:42"],["grill","11:41"]],"check":"overnight marinade","expected":[["marinate","03:40"],["grill","11:40"]],"passed":false},{"actual":"error: cycle","check":"cycle","expected":"error: cycle","passed":true},{"actual":[["marinate","15:17"],["prep","15:37"],["roast","15:46"],["sauce","15:46"]],"check":"regression: step duration offset","expected":[["marinate","15:15"],["prep","15:35"],["roast","15:45"],["sauce","15:45"]],"passed":false},{"actual":[["rest","20:31"],["prep","23:02"],["marinate","23:46"],["roast","00:16"],["sauce","00:16"]],"check":"repair check: step duration offset","expected":[["rest","20:30"],["prep","23:00"],["marinate","23:45"],["roast","00:15"],["sauce","00:15"]],"passed":false},{"actual":"error: unknown step shop","check":"generated control 1","expected":"error: unknown step shop","passed":true},{"actual":"error: unknown step shop","check":"generated control 2","expected":"error: unknown step shop","passed":true},{"actual":"error: cycle","check":"generated control 3","expected":"error: cycle","passed":true}],"passed":false,"stderr":"","stdout":"{\"observations\": [{\"check\": \"chain\", \"actual\": [[\"prep\", \"16:38\"], [\"roast\", \"16:47\"], [\"rest\", \"18:16\"]], \"expected\": [[\"prep\", \"16:35\"], [\"roast\", \"16:45\"], [\"rest\", \"18:15\"]], \"passed\": false}, {\"check\": \"overnight marinade\", \"actual\": [[\"marinate\", \"03:42\"], [\"grill\", \"11:41\"]], \"expected\": [[\"marinate\", \"03:40\"], [\"grill\", \"11:40\"]], \"passed\": false}, {\"check\": \"cycle\", \"actual\": \"error: cycle\", \"expected\": \"error: cycle\", \"passed\": true}, {\"check\": \"regression: step duration offset\", \"actual\": [[\"marinate\", \"15:17\"], [\"prep\", \"15:37\"], [\"roast\", \"15:46\"], [\"sauce\", \"15:46\"]], \"expected\": [[\"marinate\", \"15:15\"], [\"prep\", \"15:35\"], [\"roast\", \"15:45\"], [\"sauce\", \"15:45\"]], \"passed\": false}, {\"check\": \"repair check: step duration offset\", \"actual\": [[\"rest\", \"20:31\"], [\"prep\", \"23:02\"], [\"marinate\", \"23:46\"], [\"roast\", \"00:16\"], [\"sauce\", \"00:16\"]], \"expected\": [[\"rest\", \"20:30\"], [\"prep\", \"23:00\"], [\"marinate\", \"23:45\"], [\"roast\", \"00:15\"], [\"sauce\", \"00:15\"]], \"passed\": false}, {\"check\": \"generated control 1\", \"actual\": \"error: unknown step shop\", \"expected\": \"error: unknown step shop\", \"passed\": true}, {\"check\": \"generated control 2\", \"actual\": \"error: unknown step shop\", \"expected\": \"error: unknown step shop\", \"passed\": true}, {\"check\": \"generated control 3\", \"actual\": \"error: cycle\", \"expected\": \"error: cycle\", \"passed\": true}], \"passed\": false}\n"},"broken":{"elapsed_ms":43.228,"exit_code":1,"observations":[{"actual":[["prep","18:30"],["rest","18:30"],["roast","18:30"]],"check":"chain","expected":[["prep","16:35"],["roast","16:45"],["rest","18:15"]],"passed":false},{"actual":[["grill","12:00"],["marinate","12:00"]],"check":"overnight marinade","expected":[["marinate","03:40"],["grill","11:40"]],"passed":false},{"actual":"error: cycle","check":"cycle","expected":"error: cycle","passed":true},{"actual":[["marinate","19:45"],["prep","19:45"],["roast","19:45"],["sauce","19:45"]],"check":"regression: step duration offset","expected":[["marinate","15:15"],["prep","15:35"],["roast","15:45"],["sauce","15:45"]],"passed":false},{"actual":[["marinate","00:30"],["prep","00:30"],["rest","00:30"],["roast","00:30"],["sauce","00:30"]],"check":"repair check: step duration offset","expected":[["rest","20:30"],["prep","23:00"],["marinate","23:45"],["roast","00:15"],["sauce","00:15"]],"passed":false},{"actual":"error: unknown step shop","check":"generated control 1","expected":"error: unknown step shop","passed":true},{"actual":"error: unknown step shop","check":"generated control 2","expected":"error: unknown step shop","passed":true},{"actual":"error: cycle","check":"generated control 3","expected":"error: cycle","passed":true}],"passed":false,"stderr":"","stdout":"{\"observations\": [{\"check\": \"chain\", \"actual\": [[\"prep\", \"18:30\"], [\"rest\", \"18:30\"], [\"roast\", \"18:30\"]], \"expected\": [[\"prep\", \"16:35\"], [\"roast\", \"16:45\"], [\"rest\", \"18:15\"]], \"passed\": false}, {\"check\": \"overnight marinade\", \"actual\": [[\"grill\", \"12:00\"], [\"marinate\", \"12:00\"]], \"expected\": [[\"marinate\", \"03:40\"], [\"grill\", \"11:40\"]], \"passed\": false}, {\"check\": \"cycle\", \"actual\": \"error: cycle\", \"expected\": \"error: cycle\", \"passed\": true}, {\"check\": \"regression: step duration offset\", \"actual\": [[\"marinate\", \"19:45\"], [\"prep\", \"19:45\"], [\"roast\", \"19:45\"], [\"sauce\", \"19:45\"]], \"expected\": [[\"marinate\", \"15:15\"], [\"prep\", \"15:35\"], [\"roast\", \"15:45\"], [\"sauce\", \"15:45\"]], \"passed\": false}, {\"check\": \"repair check: step duration offset\", \"actual\": [[\"marinate\", \"00:30\"], [\"prep\", \"00:30\"], [\"rest\", \"00:30\"], [\"roast\", \"00:30\"], [\"sauce\", \"00:30\"]], \"expected\": [[\"rest\", \"20:30\"], [\"prep\", \"23:00\"], [\"marinate\", \"23:45\"], [\"roast\", \"00:15\"], [\"sauce\", \"00:15\"]], \"passed\": false}, {\"check\": \"generated control 1\", \"actual\": \"error: unknown step shop\", \"expected\": \"error: unknown step shop\", \"passed\": true}, {\"check\": \"generated control 2\", \"actual\": \"error: unknown step shop\", \"expected\": \"error: unknown step shop\", \"passed\": true}, {\"check\": \"generated control 3\", \"actual\": \"error: cycle\", \"expected\": \"error: cycle\", \"passed\": true}], \"passed\": false}\n"},"fixed":{"elapsed_ms":44.814,"exit_code":0,"observations":[{"actual":[["prep","16:35"],["roast","16:45"],["rest","18:15"]],"check":"chain","expected":[["prep","16:35"],["roast","16:45"],["rest","18:15"]],"passed":true},{"actual":[["marinate","03:40"],["grill","11:40"]],"check":"overnight marinade","expected":[["marinate","03:40"],["grill","11:40"]],"passed":true},{"actual":"error: cycle","check":"cycle","expected":"error: cycle","passed":true},{"actual":[["marinate","15:15"],["prep","15:35"],["roast","15:45"],["sauce","15:45"]],"check":"regression: step duration offset","expected":[["marinate","15:15"],["prep","15:35"],["roast","15:45"],["sauce","15:45"]],"passed":true},{"actual":[["rest","20:30"],["prep","23:00"],["marinate","23:45"],["roast","00:15"],["sauce","00:15"]],"check":"repair check: step duration offset","expected":[["rest","20:30"],["prep","23:00"],["marinate","23:45"],["roast","00:15"],["sauce","00:15"]],"passed":true},{"actual":"error: unknown step shop","check":"generated control 1","expected":"error: unknown step shop","passed":true},{"actual":"error: unknown step shop","check":"generated control 2","expected":"error: unknown step shop","passed":true},{"actual":"error: cycle","check":"generated control 3","expected":"error: cycle","passed":true}],"passed":true,"stderr":"","stdout":"{\"observations\": [{\"check\": \"chain\", \"actual\": [[\"prep\", \"16:35\"], [\"roast\", \"16:45\"], [\"rest\", \"18:15\"]], \"expected\": [[\"prep\", \"16:35\"], [\"roast\", \"16:45\"], [\"rest\", \"18:15\"]], \"passed\": true}, {\"check\": \"overnight marinade\", \"actual\": [[\"marinate\", \"03:40\"], [\"grill\", \"11:40\"]], \"expected\": [[\"marinate\", \"03:40\"], [\"grill\", \"11:40\"]], \"passed\": true}, {\"check\": \"cycle\", \"actual\": \"error: cycle\", \"expected\": \"error: cycle\", \"passed\": true}, {\"check\": \"regression: step duration offset\", \"actual\": [[\"marinate\", \"15:15\"], [\"prep\", \"15:35\"], [\"roast\", \"15:45\"], [\"sauce\", \"15:45\"]], \"expected\": [[\"marinate\", \"15:15\"], [\"prep\", \"15:35\"], [\"roast\", \"15:45\"], [\"sauce\", \"15:45\"]], \"passed\": true}, {\"check\": \"repair check: step duration offset\", \"actual\": [[\"rest\", \"20:30\"], [\"prep\", \"23:00\"], [\"marinate\", \"23:45\"], [\"roast\", \"00:15\"], [\"sauce\", \"00:15\"]], \"expected\": [[\"rest\", \"20:30\"], [\"prep\", \"23:00\"], [\"marinate\", \"23:45\"], [\"roast\", \"00:15\"], [\"sauce\", \"00:15\"]], \"passed\": true}, {\"check\": \"generated control 1\", \"actual\": \"error: unknown step shop\", \"expected\": \"error: unknown step shop\", \"passed\": true}, {\"check\": \"generated control 2\", \"actual\": \"error: unknown step shop\", \"expected\": \"error: unknown step shop\", \"passed\": true}, {\"check\": \"generated control 3\", \"actual\": \"error: cycle\", \"expected\": \"error: cycle\", \"passed\": true}], \"passed\": true}\n"}},"verified":true,"visibility":"public"}