{"abstract":"Prep scheduled to end when the last dependent step starts, so the roast starts before prep is done.","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.","contract_signature":"steps, serve","evaluation_group":"w2-recipe_scaling_and_nutrition-backward-schedule","failed_approach":"Keeping only the last dependent visited ignores earlier ones.","family":"w2-recipe_scaling_and_nutrition-backward-schedule-earliest-dependent-start","id":"FA-97291","implementations":{"attempt":{"sha256":"bfd89d14121b7a981fa4176c60aceb05c1a06a8172e46ee5e6468ca51a126bcb","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 = 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: earliest dependent start',\n   [[['roast', 240, ['marinate']], ['prep', 5, []], ['sauce', 30, ['roast']], ['marinate', 30, ['prep']]],\n    '01:15'],\n   [['prep', '20:10'], ['marinate', '20:15'], ['roast', '20:45'], ['sauce', '00:45']]],\n  ['repair check: earliest dependent start',\n   [[['roast', 45, ['prep', 'marinate']], ['marinate', 15, []], ['sauce', 10, ['marinate', 'roast']],\n     ['prep', 5, []]],\n    '01:15'],\n   [['marinate', '00:05'], ['prep', '00:15'], ['roast', '00:20'], ['sauce', '01:05']]],\n  ['generated control 1',\n   [[['sauce', 15, ['marinate', 'roast']], ['prep', 45, ['plate']], ['rest', 240, ['marinate']],\n     ['marinate', 45, ['shop']], ['plate', 240, ['prep', 'roast']], ['roast', 30, []]],\n    '01:15'],\n   'error: unknown step shop'],\n  ['generated control 2',\n   [[['marinate', 45, ['prep']], ['sauce', 45, ['marinate']], ['prep', 90, []], ['roast', 90, ['prep']]],\n    '01:15'],\n   [['prep', '22:15'], ['marinate', '23:45'], ['roast', '23:45'], ['sauce', '00:30']]],\n  ['generated control 3',\n   [[['rest', 90, ['roast']], ['sauce', 45, ['prep', 'marinate', 'shop']], ['roast', 45, []],\n     ['prep', 240, ['rest']], ['marinate', 90, ['prep']]],\n    '18:30'],\n   'error: unknown step shop']],\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: earliest dependent start',\n   [[['sauce', 30, []], ['marinate', 10, ['prep']], ['roast', 15, ['prep']], ['prep', 45, []]], '02:00'],\n   [['prep', '01:00'], ['sauce', '01:30'], ['roast', '01:45'], ['marinate', '01:50']]],\n  ['repair check: earliest dependent start',\n   [[['roast', 90, ['prep']], ['marinate', 5, ['prep']], ['prep', 240, []]], '18:30'],\n   [['prep', '13:00'], ['roast', '17:00'], ['marinate', '18:25']]],\n  ['generated control 1',\n   [[['prep', 15, []], ['roast', 45, ['marinate']], ['marinate', 90, ['prep']]], '12:00'],\n   [['prep', '09:30'], ['marinate', '09:45'], ['roast', '11:15']]],\n  ['generated control 2',\n   [[['prep', 240, []], ['marinate', 10, []], ['sauce', 90, ['prep', 'roast']],\n     ['roast', 5, ['prep', 'marinate']]],\n    '19:45'],\n   [['prep', '14:10'], ['marinate', '18:00'], ['roast', '18:10'], ['sauce', '18:15']]],\n  ['generated control 3',\n   [[['prep', 15, []], ['roast', 5, ['prep']], ['plate', 90, ['prep', 'roast', 'rest']],\n     ['rest', 10, ['prep', 'sauce']], ['sauce', 90, ['marinate']], ['marinate', 10, []]],\n    '18:30'],\n   [['marinate', '15:10'], ['sauce', '15:20'], ['prep', '16:35'], ['rest', '16:50'], ['roast', '16:55'],\n    ['plate', '17:00']]]],\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: earliest dependent start',\n   [[['sauce', 15, ['roast']], ['prep', 30, []], ['marinate', 15, ['prep']], ['roast', 15, []],\n     ['rest', 10, ['prep', 'marinate', 'roast', 'sauce']]],\n    '19:45'],\n   [['prep', '18:50'], ['roast', '19:05'], ['marinate', '19:20'], ['sauce', '19:20'], ['rest', '19:35']]],\n  ['repair check: earliest dependent start',\n   [[['roast', 10, []], ['prep', 5, []], ['plate', 90, ['prep', 'marinate', 'roast']],\n     ['sauce', 5, ['roast']], ['rest', 5, []], ['marinate', 90, []]],\n    '00:30'],\n   [['marinate', '21:30'], ['roast', '22:50'], ['prep', '22:55'], ['plate', '23:00'], ['rest', '00:25'],\n    ['sauce', '00:25']]],\n  ['generated control 1',\n   [[['rest', 90, ['marinate', 'sauce']], ['roast', 15, ['marinate']], ['marinate', 240, []],\n     ['sauce', 240, ['prep', 'marinate', 'roast', 'shop']], ['prep', 10, ['shop']],\n     ['plate', 30, ['marinate', 'rest']]],\n    '18:30'],\n   'error: unknown step shop'],\n  ['generated control 2',\n   [[['roast', 240, []], ['prep', 240, []], ['sauce', 45, ['roast']], ['marinate', 5, ['prep']]], '02:00'],\n   [['roast', '21:15'], ['prep', '21:55'], ['sauce', '01:15'], ['marinate', '01:55']]],\n  ['generated control 3',\n   [[['marinate', 240, ['prep']], ['sauce', 5, ['roast']], ['roast', 90, ['shop']], ['plate', 30, ['shop']],\n     ['prep', 10, []], ['rest', 5, ['prep', 'roast']]],\n    '19:45'],\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: earliest dependent start',\n   [[['marinate', 30, []], ['prep', 5, ['roast']], ['roast', 45, ['marinate']]], '01:15'],\n   [['marinate', '23:55'], ['roast', '00:25'], ['prep', '01:10']]],\n  ['repair check: earliest dependent start',\n   [[['prep', 90, []], ['roast', 15, ['marinate']], ['marinate', 30, []], ['sauce', 45, ['prep', 'marinate']],\n     ['plate', 90, ['sauce']], ['rest', 240, ['prep', 'sauce']]],\n    '01:15'],\n   [['prep', '19:00'], ['marinate', '20:00'], ['sauce', '20:30'], ['rest', '21:15'], ['plate', '23:45'],\n    ['roast', '01:00']]],\n  ['generated control 1', [[['prep', 5, []], ['roast', 15, []], ['marinate', 15, []]], '00:30'],\n   [['marinate', '00:15'], ['roast', '00:15'], ['prep', '00:25']]],\n  ['generated control 2',\n   [[['prep', 15, []], ['roast', 45, ['marinate']], ['marinate', 90, ['prep']]], '19:45'],\n   [['prep', '17:15'], ['marinate', '17:30'], ['roast', '19:00']]],\n  ['generated control 3',\n   [[['prep', 45, []], ['marinate', 45, ['prep']], ['sauce', 10, ['roast']], ['roast', 45, []]], '02:00'],\n   [['prep', '00:30'], ['roast', '01:05'], ['marinate', '01:15'], ['sauce', '01:50']]]],\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: earliest dependent start',\n   [[['plate', 45, ['marinate', 'roast', 'sauce', 'rest']], ['sauce', 15, ['prep', 'marinate']],\n     ['marinate', 45, []], ['roast', 15, []], ['prep', 30, []],\n     ['rest', 15, ['marinate', 'roast', 'sauce']]],\n    '19:45'],\n   [['marinate', '17:45'], ['prep', '18:00'], ['roast', '18:30'], ['sauce', '18:30'], ['rest', '18:45'],\n    ['plate', '19:00']]],\n  ['repair check: earliest dependent start',\n   [[['prep', 10, []], ['roast', 240, []], ['marinate', 240, []], ['sauce', 5, ['prep']],\n     ['plate', 10, ['prep', 'marinate', 'roast', 'rest']],\n     ['rest', 90, ['prep', 'marinate', 'roast', 'sauce']]],\n    '18:30'],\n   [['marinate', '12:50'], ['roast', '12:50'], ['prep', '16:35'], ['sauce', '16:45'], ['rest', '16:50'],\n    ['plate', '18:20']]],\n  ['generated control 1',\n   [[['sauce', 240, []], ['marinate', 15, ['prep']], ['roast', 240, ['prep']], ['prep', 240, []]], '02:00'],\n   [['prep', '18:00'], ['roast', '22:00'], ['sauce', '22:00'], ['marinate', '01:45']]],\n  ['generated control 2',\n   [[['sauce', 45, []], ['roast', 240, ['marinate']], ['marinate', 45, []], ['prep', 15, []],\n     ['rest', 90, ['marinate', 'roast', 'sauce']]],\n    '18:30'],\n   [['marinate', '12:15'], ['roast', '13:00'], ['sauce', '16:15'], ['rest', '17:00'], ['prep', '18:15']]],\n  ['generated control 3', [[['marinate', 45, []], ['roast', 240, ['marinate']], ['prep', 45, []]], '01:15'],\n   [['marinate', '20:30'], ['roast', '21:15'], ['prep', '00:30']]]]]\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":"11e9d372e8079fbf67dfe7cf9475f3cb15badc9972b44fb1fe1c7eca16e42e48","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 = max(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: earliest dependent start',\n   [[['roast', 240, ['marinate']], ['prep', 5, []], ['sauce', 30, ['roast']], ['marinate', 30, ['prep']]],\n    '01:15'],\n   [['prep', '20:10'], ['marinate', '20:15'], ['roast', '20:45'], ['sauce', '00:45']]],\n  ['repair check: earliest dependent start',\n   [[['roast', 45, ['prep', 'marinate']], ['marinate', 15, []], ['sauce', 10, ['marinate', 'roast']],\n     ['prep', 5, []]],\n    '01:15'],\n   [['marinate', '00:05'], ['prep', '00:15'], ['roast', '00:20'], ['sauce', '01:05']]],\n  ['generated control 1',\n   [[['sauce', 15, ['marinate', 'roast']], ['prep', 45, ['plate']], ['rest', 240, ['marinate']],\n     ['marinate', 45, ['shop']], ['plate', 240, ['prep', 'roast']], ['roast', 30, []]],\n    '01:15'],\n   'error: unknown step shop'],\n  ['generated control 2',\n   [[['marinate', 45, ['prep']], ['sauce', 45, ['marinate']], ['prep', 90, []], ['roast', 90, ['prep']]],\n    '01:15'],\n   [['prep', '22:15'], ['marinate', '23:45'], ['roast', '23:45'], ['sauce', '00:30']]],\n  ['generated control 3',\n   [[['rest', 90, ['roast']], ['sauce', 45, ['prep', 'marinate', 'shop']], ['roast', 45, []],\n     ['prep', 240, ['rest']], ['marinate', 90, ['prep']]],\n    '18:30'],\n   'error: unknown step shop']],\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: earliest dependent start',\n   [[['sauce', 30, []], ['marinate', 10, ['prep']], ['roast', 15, ['prep']], ['prep', 45, []]], '02:00'],\n   [['prep', '01:00'], ['sauce', '01:30'], ['roast', '01:45'], ['marinate', '01:50']]],\n  ['repair check: earliest dependent start',\n   [[['roast', 90, ['prep']], ['marinate', 5, ['prep']], ['prep', 240, []]], '18:30'],\n   [['prep', '13:00'], ['roast', '17:00'], ['marinate', '18:25']]],\n  ['generated control 1',\n   [[['prep', 15, []], ['roast', 45, ['marinate']], ['marinate', 90, ['prep']]], '12:00'],\n   [['prep', '09:30'], ['marinate', '09:45'], ['roast', '11:15']]],\n  ['generated control 2',\n   [[['prep', 240, []], ['marinate', 10, []], ['sauce', 90, ['prep', 'roast']],\n     ['roast', 5, ['prep', 'marinate']]],\n    '19:45'],\n   [['prep', '14:10'], ['marinate', '18:00'], ['roast', '18:10'], ['sauce', '18:15']]],\n  ['generated control 3',\n   [[['prep', 15, []], ['roast', 5, ['prep']], ['plate', 90, ['prep', 'roast', 'rest']],\n     ['rest', 10, ['prep', 'sauce']], ['sauce', 90, ['marinate']], ['marinate', 10, []]],\n    '18:30'],\n   [['marinate', '15:10'], ['sauce', '15:20'], ['prep', '16:35'], ['rest', '16:50'], ['roast', '16:55'],\n    ['plate', '17:00']]]],\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: earliest dependent start',\n   [[['sauce', 15, ['roast']], ['prep', 30, []], ['marinate', 15, ['prep']], ['roast', 15, []],\n     ['rest', 10, ['prep', 'marinate', 'roast', 'sauce']]],\n    '19:45'],\n   [['prep', '18:50'], ['roast', '19:05'], ['marinate', '19:20'], ['sauce', '19:20'], ['rest', '19:35']]],\n  ['repair check: earliest dependent start',\n   [[['roast', 10, []], ['prep', 5, []], ['plate', 90, ['prep', 'marinate', 'roast']],\n     ['sauce', 5, ['roast']], ['rest', 5, []], ['marinate', 90, []]],\n    '00:30'],\n   [['marinate', '21:30'], ['roast', '22:50'], ['prep', '22:55'], ['plate', '23:00'], ['rest', '00:25'],\n    ['sauce', '00:25']]],\n  ['generated control 1',\n   [[['rest', 90, ['marinate', 'sauce']], ['roast', 15, ['marinate']], ['marinate', 240, []],\n     ['sauce', 240, ['prep', 'marinate', 'roast', 'shop']], ['prep', 10, ['shop']],\n     ['plate', 30, ['marinate', 'rest']]],\n    '18:30'],\n   'error: unknown step shop'],\n  ['generated control 2',\n   [[['roast', 240, []], ['prep', 240, []], ['sauce', 45, ['roast']], ['marinate', 5, ['prep']]], '02:00'],\n   [['roast', '21:15'], ['prep', '21:55'], ['sauce', '01:15'], ['marinate', '01:55']]],\n  ['generated control 3',\n   [[['marinate', 240, ['prep']], ['sauce', 5, ['roast']], ['roast', 90, ['shop']], ['plate', 30, ['shop']],\n     ['prep', 10, []], ['rest', 5, ['prep', 'roast']]],\n    '19:45'],\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: earliest dependent start',\n   [[['marinate', 30, []], ['prep', 5, ['roast']], ['roast', 45, ['marinate']]], '01:15'],\n   [['marinate', '23:55'], ['roast', '00:25'], ['prep', '01:10']]],\n  ['repair check: earliest dependent start',\n   [[['prep', 90, []], ['roast', 15, ['marinate']], ['marinate', 30, []], ['sauce', 45, ['prep', 'marinate']],\n     ['plate', 90, ['sauce']], ['rest', 240, ['prep', 'sauce']]],\n    '01:15'],\n   [['prep', '19:00'], ['marinate', '20:00'], ['sauce', '20:30'], ['rest', '21:15'], ['plate', '23:45'],\n    ['roast', '01:00']]],\n  ['generated control 1', [[['prep', 5, []], ['roast', 15, []], ['marinate', 15, []]], '00:30'],\n   [['marinate', '00:15'], ['roast', '00:15'], ['prep', '00:25']]],\n  ['generated control 2',\n   [[['prep', 15, []], ['roast', 45, ['marinate']], ['marinate', 90, ['prep']]], '19:45'],\n   [['prep', '17:15'], ['marinate', '17:30'], ['roast', '19:00']]],\n  ['generated control 3',\n   [[['prep', 45, []], ['marinate', 45, ['prep']], ['sauce', 10, ['roast']], ['roast', 45, []]], '02:00'],\n   [['prep', '00:30'], ['roast', '01:05'], ['marinate', '01:15'], ['sauce', '01:50']]]],\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: earliest dependent start',\n   [[['plate', 45, ['marinate', 'roast', 'sauce', 'rest']], ['sauce', 15, ['prep', 'marinate']],\n     ['marinate', 45, []], ['roast', 15, []], ['prep', 30, []],\n     ['rest', 15, ['marinate', 'roast', 'sauce']]],\n    '19:45'],\n   [['marinate', '17:45'], ['prep', '18:00'], ['roast', '18:30'], ['sauce', '18:30'], ['rest', '18:45'],\n    ['plate', '19:00']]],\n  ['repair check: earliest dependent start',\n   [[['prep', 10, []], ['roast', 240, []], ['marinate', 240, []], ['sauce', 5, ['prep']],\n     ['plate', 10, ['prep', 'marinate', 'roast', 'rest']],\n     ['rest', 90, ['prep', 'marinate', 'roast', 'sauce']]],\n    '18:30'],\n   [['marinate', '12:50'], ['roast', '12:50'], ['prep', '16:35'], ['sauce', '16:45'], ['rest', '16:50'],\n    ['plate', '18:20']]],\n  ['generated control 1',\n   [[['sauce', 240, []], ['marinate', 15, ['prep']], ['roast', 240, ['prep']], ['prep', 240, []]], '02:00'],\n   [['prep', '18:00'], ['roast', '22:00'], ['sauce', '22:00'], ['marinate', '01:45']]],\n  ['generated control 2',\n   [[['sauce', 45, []], ['roast', 240, ['marinate']], ['marinate', 45, []], ['prep', 15, []],\n     ['rest', 90, ['marinate', 'roast', 'sauce']]],\n    '18:30'],\n   [['marinate', '12:15'], ['roast', '13:00'], ['sauce', '16:15'], ['rest', '17:00'], ['prep', '18:15']]],\n  ['generated control 3', [[['marinate', 45, []], ['roast', 240, ['marinate']], ['prep', 45, []]], '01:15'],\n   [['marinate', '20:30'], ['roast', '21:15'], ['prep', '00:30']]]]]\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-earliest-dependent-start","generated_at":"2026-09-29T14:52:30.770445+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.","root_cause":"The deadline takes the latest dependent start instead of the earliest.","sha256":"7d28ccd4e5c06e300f1daa380d808653fffcd4fe4d7341cbef45848ac72ed406","title":"Backward recipe step scheduler: earliest dependent start · case 01","variant":1,"variant_policy":"Five numbered records share a model and may reuse boundary fixtures.","verified":true,"visibility":"public","verification":{"attempt":{"elapsed_ms":45.747,"exit_code":1,"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":[["prep","20:10"],["marinate","20:15"],["roast","20:45"],["sauce","00:45"]],"check":"regression: earliest dependent start","expected":[["prep","20:10"],["marinate","20:15"],["roast","20:45"],["sauce","00:45"]],"passed":true},{"actual":[["prep","00:15"],["roast","00:20"],["marinate","00:50"],["sauce","01:05"]],"check":"repair check: earliest dependent start","expected":[["marinate","00:05"],["prep","00:15"],["roast","00:20"],["sauce","01:05"]],"passed":false},{"actual":"error: unknown step shop","check":"generated control 1","expected":"error: unknown step shop","passed":true},{"actual":[["prep","22:15"],["marinate","23:45"],["roast","23:45"],["sauce","00:30"]],"check":"generated control 2","expected":[["prep","22:15"],["marinate","23:45"],["roast","23:45"],["sauce","00:30"]],"passed":true},{"actual":"error: unknown step shop","check":"generated control 3","expected":"error: unknown step shop","passed":true}],"passed":false,"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: earliest dependent start\", \"actual\": [[\"prep\", \"20:10\"], [\"marinate\", \"20:15\"], [\"roast\", \"20:45\"], [\"sauce\", \"00:45\"]], \"expected\": [[\"prep\", \"20:10\"], [\"marinate\", \"20:15\"], [\"roast\", \"20:45\"], [\"sauce\", \"00:45\"]], \"passed\": true}, {\"check\": \"repair check: earliest dependent start\", \"actual\": [[\"prep\", \"00:15\"], [\"roast\", \"00:20\"], [\"marinate\", \"00:50\"], [\"sauce\", \"01:05\"]], \"expected\": [[\"marinate\", \"00:05\"], [\"prep\", \"00:15\"], [\"roast\", \"00:20\"], [\"sauce\", \"01:05\"]], \"passed\": false}, {\"check\": \"generated control 1\", \"actual\": \"error: unknown step shop\", \"expected\": \"error: unknown step shop\", \"passed\": true}, {\"check\": \"generated control 2\", \"actual\": [[\"prep\", \"22:15\"], [\"marinate\", \"23:45\"], [\"roast\", \"23:45\"], [\"sauce\", \"00:30\"]], \"expected\": [[\"prep\", \"22:15\"], [\"marinate\", \"23:45\"], [\"roast\", \"23:45\"], [\"sauce\", \"00:30\"]], \"passed\": true}, {\"check\": \"generated control 3\", \"actual\": \"error: unknown step shop\", \"expected\": \"error: unknown step shop\", \"passed\": true}], \"passed\": false}\n"},"broken":{"elapsed_ms":45.72,"exit_code":1,"observations":[{"actual":[["roast","17:00"],["rest","18:15"],["prep","18:20"]],"check":"chain","expected":[["prep","16:35"],["roast","16:45"],["rest","18:15"]],"passed":false},{"actual":[["marinate","04:00"],["grill","11:40"]],"check":"overnight marinade","expected":[["marinate","03:40"],["grill","11:40"]],"passed":false},{"actual":"error: cycle","check":"cycle","expected":"error: cycle","passed":true},{"actual":[["roast","21:15"],["marinate","00:45"],["sauce","00:45"],["prep","01:10"]],"check":"regression: earliest dependent start","expected":[["prep","20:10"],["marinate","20:15"],["roast","20:45"],["sauce","00:45"]],"passed":false},{"actual":[["roast","00:30"],["marinate","01:00"],["sauce","01:05"],["prep","01:10"]],"check":"repair check: earliest dependent start","expected":[["marinate","00:05"],["prep","00:15"],["roast","00:20"],["sauce","01:05"]],"passed":false},{"actual":"error: unknown step shop","check":"generated control 1","expected":"error: unknown step shop","passed":true},{"actual":[["prep","23:45"],["roast","23:45"],["marinate","00:30"],["sauce","00:30"]],"check":"generated control 2","expected":[["prep","22:15"],["marinate","23:45"],["roast","23:45"],["sauce","00:30"]],"passed":false},{"actual":"error: unknown step shop","check":"generated control 3","expected":"error: unknown step shop","passed":true}],"passed":false,"stderr":"","stdout":"{\"observations\": [{\"check\": \"chain\", \"actual\": [[\"roast\", \"17:00\"], [\"rest\", \"18:15\"], [\"prep\", \"18:20\"]], \"expected\": [[\"prep\", \"16:35\"], [\"roast\", \"16:45\"], [\"rest\", \"18:15\"]], \"passed\": false}, {\"check\": \"overnight marinade\", \"actual\": [[\"marinate\", \"04:00\"], [\"grill\", \"11:40\"]], \"expected\": [[\"marinate\", \"03:40\"], [\"grill\", \"11:40\"]], \"passed\": false}, {\"check\": \"cycle\", \"actual\": \"error: cycle\", \"expected\": \"error: cycle\", \"passed\": true}, {\"check\": \"regression: earliest dependent start\", \"actual\": [[\"roast\", \"21:15\"], [\"marinate\", \"00:45\"], [\"sauce\", \"00:45\"], [\"prep\", \"01:10\"]], \"expected\": [[\"prep\", \"20:10\"], [\"marinate\", \"20:15\"], [\"roast\", \"20:45\"], [\"sauce\", \"00:45\"]], \"passed\": false}, {\"check\": \"repair check: earliest dependent start\", \"actual\": [[\"roast\", \"00:30\"], [\"marinate\", \"01:00\"], [\"sauce\", \"01:05\"], [\"prep\", \"01:10\"]], \"expected\": [[\"marinate\", \"00:05\"], [\"prep\", \"00:15\"], [\"roast\", \"00:20\"], [\"sauce\", \"01:05\"]], \"passed\": false}, {\"check\": \"generated control 1\", \"actual\": \"error: unknown step shop\", \"expected\": \"error: unknown step shop\", \"passed\": true}, {\"check\": \"generated control 2\", \"actual\": [[\"prep\", \"23:45\"], [\"roast\", \"23:45\"], [\"marinate\", \"00:30\"], [\"sauce\", \"00:30\"]], \"expected\": [[\"prep\", \"22:15\"], [\"marinate\", \"23:45\"], [\"roast\", \"23:45\"], [\"sauce\", \"00:30\"]], \"passed\": false}, {\"check\": \"generated control 3\", \"actual\": \"error: unknown step shop\", \"expected\": \"error: unknown step shop\", \"passed\": true}], \"passed\": false}\n"}},"member_only":{"stages":["fixed"],"fields":["implementations.fixed","verification.fixed","harness","repair"],"note":"The verified repair, its recorded checks, the repair description, and the scoring harness are available to members."}}