{"abstract":"A retentive timer loses its partial accumulation across a stop and restarts from zero.","category":"PLC ladder logic scan cycles","checks":8,"contract":"Retentive timer (RTO) on rung 1 and its reset (RES) on a later rung, evaluated per scan; scans is a list of [enable, reset, elapsed_ms]. An enabled scan whose previous scan was also enabled adds the elapsed time (clamped at preset); DN sets when ACC >= preset while enabled. A disabled rung retains ACC and DN. Because RES is a later rung, a reset in a scan clears ACC and DN after the RTO has run; the enable edge memory is not touched by RES. Return [DN, ACC] per scan.","evaluation_group":"w2-plc-ladder-logic-scan-cycles-rto-retentive-reset","failed_approach":"Clearing only DN on a false rung still drops a completed timer that should stay done.","family":"w2-plc-ladder-logic-scan-cycles-rto-retentive-reset-disabled-retention","id":"FA-91896","implementations":{"attempt":{"sha256":"9dbc67cb13143d828ed07c2495744031e500b50c51acacf1c1c861d644ab92e8","source":"\"\"\"Failure Map reference implementation. Python standard library only.\"\"\"\nimport json\n\nN = 1\nobservations = []\ndef solve(preset, scans):\n    acc = 0\n    dn = False\n    prev = False\n    out = []\n    for en, res, dt in scans:\n        en = bool(en)\n        if en:\n            if prev:\n                acc = min(preset, acc + dt)\n            if acc >= preset:\n                dn = True\n        else:\n            dn = False\n        prev = en\n        if res:\n            acc = 0\n            dn = False\n        out.append([dn, acc])\n    return out\ndef check(label, actual, expected):\n    observations.append({\"check\": label, \"actual\": actual, \"expected\": expected, \"passed\": actual == expected})\nfixtures = [[['regression: interrupted timing retained',\n   [100,\n    [[True, False, 30],\n     [True, False, 40],\n     [False, False, 40],\n     [True, False, 40],\n     [True, False, 40],\n     [True, False, 40]]],\n   [[False, 0], [False, 40], [False, 40], [False, 40], [False, 80], [True, 100]]],\n  ['regression: reset done timer while disabled',\n   [50, [[True, False, 30], [True, False, 60], [False, False, 10], [False, True, 10], [False, False, 10]]],\n   [[False, 0], [True, 50], [True, 50], [False, 0], [False, 0]]],\n  ['control: reset while enabled',\n   [100, [[True, False, 30], [True, False, 60], [True, True, 30], [True, False, 30], [True, False, 30]]],\n   [[False, 0], [False, 60], [False, 0], [False, 30], [False, 60]]],\n  ['control: reset done timer while enabled',\n   [50,\n    [[True, False, 30],\n     [True, False, 60],\n     [True, False, 10],\n     [True, True, 10],\n     [True, False, 25],\n     [True, False, 25]]],\n   [[False, 0], [True, 50], [True, 50], [False, 0], [False, 25], [True, 50]]],\n  ['regression: scenario 1',\n   [100,\n    [[False, False, 10],\n     [False, False, 50],\n     [False, False, 40],\n     [True, True, 20],\n     [False, False, 40],\n     [True, False, 40],\n     [True, False, 20],\n     [False, False, 40]]],\n   [[False, 0], [False, 0], [False, 0], [False, 0], [False, 0], [False, 0], [False, 20], [False, 20]]],\n  ['control: scenario 2',\n   [50,\n    [[False, False, 30],\n     [False, False, 30],\n     [True, False, 50],\n     [False, False, 50],\n     [False, False, 10],\n     [True, False, 30],\n     [False, False, 50],\n     [True, False, 30],\n     [True, False, 40]]],\n   [[False, 0],\n    [False, 0],\n    [False, 0],\n    [False, 0],\n    [False, 0],\n    [False, 0],\n    [False, 0],\n    [False, 0],\n    [False, 40]]],\n  ['control: scenario 3',\n   [100,\n    [[False, False, 50],\n     [False, False, 20],\n     [True, False, 50],\n     [True, False, 10],\n     [True, False, 20],\n     [True, False, 20],\n     [True, False, 50],\n     [True, False, 50],\n     [True, True, 10],\n     [True, False, 50]]],\n   [[False, 0],\n    [False, 0],\n    [False, 0],\n    [False, 10],\n    [False, 30],\n    [False, 50],\n    [True, 100],\n    [True, 100],\n    [False, 0],\n    [False, 50]]],\n  ['regression: scenario 4',\n   [100,\n    [[True, False, 20],\n     [True, False, 10],\n     [False, False, 20],\n     [True, False, 30],\n     [False, False, 20],\n     [False, False, 30]]],\n   [[False, 0], [False, 10], [False, 10], [False, 10], [False, 10], [False, 10]]]],\n [['regression: reset done timer while disabled',\n   [50, [[True, False, 30], [True, False, 60], [False, False, 10], [False, True, 10], [False, False, 10]]],\n   [[False, 0], [True, 50], [True, 50], [False, 0], [False, 0]]],\n  ['regression: scenario 3',\n   [50,\n    [[True, True, 10],\n     [True, False, 20],\n     [True, False, 10],\n     [True, False, 20],\n     [True, False, 40],\n     [True, False, 50],\n     [True, False, 30],\n     [False, False, 20],\n     [True, False, 40],\n     [False, True, 20]]],\n   [[False, 0],\n    [False, 20],\n    [False, 30],\n    [True, 50],\n    [True, 50],\n    [True, 50],\n    [True, 50],\n    [True, 50],\n    [True, 50],\n    [False, 0]]],\n  ['regression: interrupted timing retained',\n   [100,\n    [[True, False, 30],\n     [True, False, 40],\n     [False, False, 40],\n     [True, False, 40],\n     [True, False, 40],\n     [True, False, 40]]],\n   [[False, 0], [False, 40], [False, 40], [False, 40], [False, 80], [True, 100]]],\n  ['control: reset while enabled',\n   [100, [[True, False, 30], [True, False, 60], [True, True, 30], [True, False, 30], [True, False, 30]]],\n   [[False, 0], [False, 60], [False, 0], [False, 30], [False, 60]]],\n  ['control: reset done timer while enabled',\n   [50,\n    [[True, False, 30],\n     [True, False, 60],\n     [True, False, 10],\n     [True, True, 10],\n     [True, False, 25],\n     [True, False, 25]]],\n   [[False, 0], [True, 50], [True, 50], [False, 0], [False, 25], [True, 50]]],\n  ['regression: scenario 1',\n   [80,\n    [[False, False, 10],\n     [True, False, 30],\n     [True, False, 10],\n     [True, True, 40],\n     [True, False, 50],\n     [False, False, 40],\n     [False, False, 50],\n     [False, False, 40]]],\n   [[False, 0], [False, 0], [False, 10], [False, 0], [False, 50], [False, 50], [False, 50], [False, 50]]],\n  ['regression: scenario 2',\n   [0,\n    [[True, False, 10],\n     [False, False, 30],\n     [True, False, 20],\n     [True, False, 30],\n     [True, False, 50],\n     [True, False, 50],\n     [True, True, 20],\n     [True, False, 20],\n     [False, False, 40]]],\n   [[True, 0], [True, 0], [True, 0], [True, 0], [True, 0], [True, 0], [False, 0], [True, 0], [True, 0]]],\n  ['control: scenario 4',\n   [80,\n    [[False, False, 20],\n     [False, False, 40],\n     [True, False, 50],\n     [True, False, 40],\n     [True, True, 40],\n     [False, False, 10],\n     [True, False, 10],\n     [True, False, 30],\n     [True, False, 50],\n     [True, False, 40],\n     [False, True, 30]]],\n   [[False, 0],\n    [False, 0],\n    [False, 0],\n    [False, 40],\n    [False, 0],\n    [False, 0],\n    [False, 0],\n    [False, 30],\n    [True, 80],\n    [True, 80],\n    [False, 0]]]],\n [['regression: scenario 1',\n   [0,\n    [[False, False, 40],\n     [False, True, 30],\n     [True, False, 10],\n     [True, False, 30],\n     [True, False, 20],\n     [False, True, 30],\n     [True, False, 40],\n     [True, False, 30],\n     [True, False, 30],\n     [False, False, 20],\n     [False, False, 10],\n     [True, False, 30],\n     [True, False, 50],\n     [False, False, 10]]],\n   [[False, 0],\n    [False, 0],\n    [True, 0],\n    [True, 0],\n    [True, 0],\n    [False, 0],\n    [True, 0],\n    [True, 0],\n    [True, 0],\n    [True, 0],\n    [True, 0],\n    [True, 0],\n    [True, 0],\n    [True, 0]]],\n  ['regression: scenario 5',\n   [100,\n    [[True, False, 10],\n     [True, False, 40],\n     [True, False, 20],\n     [True, False, 10],\n     [True, False, 30],\n     [True, False, 50],\n     [False, False, 50],\n     [True, False, 30],\n     [True, False, 40],\n     [False, False, 30]]],\n   [[False, 0],\n    [False, 40],\n    [False, 60],\n    [False, 70],\n    [True, 100],\n    [True, 100],\n    [True, 100],\n    [True, 100],\n    [True, 100],\n    [True, 100]]],\n  ['regression: interrupted timing retained',\n   [100,\n    [[True, False, 30],\n     [True, False, 40],\n     [False, False, 40],\n     [True, False, 40],\n     [True, False, 40],\n     [True, False, 40]]],\n   [[False, 0], [False, 40], [False, 40], [False, 40], [False, 80], [True, 100]]],\n  ['control: reset while enabled',\n   [100, [[True, False, 30], [True, False, 60], [True, True, 30], [True, False, 30], [True, False, 30]]],\n   [[False, 0], [False, 60], [False, 0], [False, 30], [False, 60]]],\n  ['control: reset done timer while enabled',\n   [50,\n    [[True, False, 30],\n     [True, False, 60],\n     [True, False, 10],\n     [True, True, 10],\n     [True, False, 25],\n     [True, False, 25]]],\n   [[False, 0], [True, 50], [True, 50], [False, 0], [False, 25], [True, 50]]],\n  ['regression: reset done timer while disabled',\n   [50, [[True, False, 30], [True, False, 60], [False, False, 10], [False, True, 10], [False, False, 10]]],\n   [[False, 0], [True, 50], [True, 50], [False, 0], [False, 0]]],\n  ['regression: scenario 2',\n   [50,\n    [[True, False, 10],\n     [True, False, 20],\n     [True, False, 50],\n     [True, False, 20],\n     [True, False, 20],\n     [False, False, 50],\n     [False, False, 40],\n     [False, True, 10],\n     [False, False, 10]]],\n   [[False, 0],\n    [False, 20],\n    [True, 50],\n    [True, 50],\n    [True, 50],\n    [True, 50],\n    [True, 50],\n    [False, 0],\n    [False, 0]]],\n  ['regression: scenario 3',\n   [150,\n    [[True, False, 50],\n     [True, False, 30],\n     [False, False, 50],\n     [False, False, 40],\n     [False, False, 50],\n     [False, False, 20]]],\n   [[False, 0], [False, 30], [False, 30], [False, 30], [False, 30], [False, 30]]]],\n [['regression: scenario 2',\n   [100,\n    [[True, False, 20],\n     [True, False, 30],\n     [True, False, 10],\n     [True, True, 10],\n     [True, False, 10],\n     [True, False, 20],\n     [False, False, 50],\n     [False, True, 40],\n     [False, False, 30],\n     [False, False, 40],\n     [True, False, 10],\n     [True, False, 50]]],\n   [[False, 0],\n    [False, 30],\n    [False, 40],\n    [False, 0],\n    [False, 10],\n    [False, 30],\n    [False, 30],\n    [False, 0],\n    [False, 0],\n    [False, 0],\n    [False, 0],\n    [False, 50]]],\n  ['regression: scenario 11',\n   [100,\n    [[True, False, 20],\n     [True, True, 30],\n     [True, True, 20],\n     [True, False, 50],\n     [True, False, 50],\n     [True, False, 30],\n     [False, False, 40],\n     [True, False, 50],\n     [False, False, 40]]],\n   [[False, 0],\n    [False, 0],\n    [False, 0],\n    [False, 50],\n    [True, 100],\n    [True, 100],\n    [True, 100],\n    [True, 100],\n    [True, 100]]],\n  ['regression: interrupted timing retained',\n   [100,\n    [[True, False, 30],\n     [True, False, 40],\n     [False, False, 40],\n     [True, False, 40],\n     [True, False, 40],\n     [True, False, 40]]],\n   [[False, 0], [False, 40], [False, 40], [False, 40], [False, 80], [True, 100]]],\n  ['control: reset while enabled',\n   [100, [[True, False, 30], [True, False, 60], [True, True, 30], [True, False, 30], [True, False, 30]]],\n   [[False, 0], [False, 60], [False, 0], [False, 30], [False, 60]]],\n  ['control: reset done timer while enabled',\n   [50,\n    [[True, False, 30],\n     [True, False, 60],\n     [True, False, 10],\n     [True, True, 10],\n     [True, False, 25],\n     [True, False, 25]]],\n   [[False, 0], [True, 50], [True, 50], [False, 0], [False, 25], [True, 50]]],\n  ['regression: reset done timer while disabled',\n   [50, [[True, False, 30], [True, False, 60], [False, False, 10], [False, True, 10], [False, False, 10]]],\n   [[False, 0], [True, 50], [True, 50], [False, 0], [False, 0]]],\n  ['regression: scenario 1',\n   [0,\n    [[False, False, 50],\n     [False, False, 20],\n     [False, False, 30],\n     [True, True, 40],\n     [False, True, 10],\n     [True, False, 10],\n     [False, False, 30]]],\n   [[False, 0], [False, 0], [False, 0], [False, 0], [False, 0], [True, 0], [True, 0]]],\n  ['control: scenario 3',\n   [100,\n    [[False, False, 10],\n     [True, False, 20],\n     [True, False, 10],\n     [True, True, 50],\n     [True, False, 40],\n     [True, False, 50],\n     [False, True, 50],\n     [False, False, 10],\n     [True, False, 30]]],\n   [[False, 0],\n    [False, 0],\n    [False, 10],\n    [False, 0],\n    [False, 40],\n    [False, 90],\n    [False, 0],\n    [False, 0],\n    [False, 0]]]],\n [['regression: scenario 5',\n   [150,\n    [[True, False, 50],\n     [True, False, 30],\n     [False, False, 40],\n     [True, False, 50],\n     [True, False, 40],\n     [False, False, 50],\n     [False, False, 20],\n     [False, False, 50],\n     [True, False, 40],\n     [False, False, 40],\n     [True, True, 10]]],\n   [[False, 0],\n    [False, 30],\n    [False, 30],\n    [False, 30],\n    [False, 70],\n    [False, 70],\n    [False, 70],\n    [False, 70],\n    [False, 70],\n    [False, 70],\n    [False, 0]]],\n  ['regression: scenario 13',\n   [0,\n    [[True, False, 10],\n     [True, False, 50],\n     [True, False, 50],\n     [False, False, 30],\n     [False, False, 20],\n     [True, False, 10],\n     [True, False, 50],\n     [True, True, 50],\n     [False, False, 10],\n     [True, True, 30],\n     [True, False, 40],\n     [False, False, 20]]],\n   [[True, 0],\n    [True, 0],\n    [True, 0],\n    [True, 0],\n    [True, 0],\n    [True, 0],\n    [True, 0],\n    [False, 0],\n    [False, 0],\n    [False, 0],\n    [True, 0],\n    [True, 0]]],\n  ['regression: interrupted timing retained',\n   [100,\n    [[True, False, 30],\n     [True, False, 40],\n     [False, False, 40],\n     [True, False, 40],\n     [True, False, 40],\n     [True, False, 40]]],\n   [[False, 0], [False, 40], [False, 40], [False, 40], [False, 80], [True, 100]]],\n  ['control: reset while enabled',\n   [100, [[True, False, 30], [True, False, 60], [True, True, 30], [True, False, 30], [True, False, 30]]],\n   [[False, 0], [False, 60], [False, 0], [False, 30], [False, 60]]],\n  ['control: reset done timer while enabled',\n   [50,\n    [[True, False, 30],\n     [True, False, 60],\n     [True, False, 10],\n     [True, True, 10],\n     [True, False, 25],\n     [True, False, 25]]],\n   [[False, 0], [True, 50], [True, 50], [False, 0], [False, 25], [True, 50]]],\n  ['regression: reset done timer while disabled',\n   [50, [[True, False, 30], [True, False, 60], [False, False, 10], [False, True, 10], [False, False, 10]]],\n   [[False, 0], [True, 50], [True, 50], [False, 0], [False, 0]]],\n  ['regression: scenario 1',\n   [0,\n    [[True, False, 30],\n     [True, False, 10],\n     [True, False, 10],\n     [True, False, 40],\n     [False, False, 30],\n     [False, False, 50],\n     [False, True, 40],\n     [True, False, 10],\n     [True, False, 30],\n     [True, False, 50],\n     [False, False, 20],\n     [False, False, 30],\n     [False, False, 40],\n     [False, False, 50]]],\n   [[True, 0],\n    [True, 0],\n    [True, 0],\n    [True, 0],\n    [True, 0],\n    [True, 0],\n    [False, 0],\n    [True, 0],\n    [True, 0],\n    [True, 0],\n    [True, 0],\n    [True, 0],\n    [True, 0],\n    [True, 0]]],\n  ['control: scenario 2',\n   [50,\n    [[True, True, 50],\n     [False, False, 10],\n     [True, False, 50],\n     [False, True, 50],\n     [False, False, 20],\n     [True, False, 20]]],\n   [[False, 0], [False, 0], [False, 0], [False, 0], [False, 0], [False, 0]]]]]\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":"6790256e4ba40cb958245719b5ab349a3fb35448ffb54171200ba5f0ffe10cf4","source":"\"\"\"Failure Map reference implementation. Python standard library only.\"\"\"\nimport json\n\nN = 1\nobservations = []\ndef solve(preset, scans):\n    acc = 0\n    dn = False\n    prev = False\n    out = []\n    for en, res, dt in scans:\n        en = bool(en)\n        if en:\n            if prev:\n                acc = min(preset, acc + dt)\n            if acc >= preset:\n                dn = True\n        else:\n            acc = 0\n            dn = False\n        prev = en\n        if res:\n            acc = 0\n            dn = False\n        out.append([dn, acc])\n    return out\ndef check(label, actual, expected):\n    observations.append({\"check\": label, \"actual\": actual, \"expected\": expected, \"passed\": actual == expected})\nfixtures = [[['regression: interrupted timing retained',\n   [100,\n    [[True, False, 30],\n     [True, False, 40],\n     [False, False, 40],\n     [True, False, 40],\n     [True, False, 40],\n     [True, False, 40]]],\n   [[False, 0], [False, 40], [False, 40], [False, 40], [False, 80], [True, 100]]],\n  ['regression: reset done timer while disabled',\n   [50, [[True, False, 30], [True, False, 60], [False, False, 10], [False, True, 10], [False, False, 10]]],\n   [[False, 0], [True, 50], [True, 50], [False, 0], [False, 0]]],\n  ['control: reset while enabled',\n   [100, [[True, False, 30], [True, False, 60], [True, True, 30], [True, False, 30], [True, False, 30]]],\n   [[False, 0], [False, 60], [False, 0], [False, 30], [False, 60]]],\n  ['control: reset done timer while enabled',\n   [50,\n    [[True, False, 30],\n     [True, False, 60],\n     [True, False, 10],\n     [True, True, 10],\n     [True, False, 25],\n     [True, False, 25]]],\n   [[False, 0], [True, 50], [True, 50], [False, 0], [False, 25], [True, 50]]],\n  ['regression: scenario 1',\n   [100,\n    [[False, False, 10],\n     [False, False, 50],\n     [False, False, 40],\n     [True, True, 20],\n     [False, False, 40],\n     [True, False, 40],\n     [True, False, 20],\n     [False, False, 40]]],\n   [[False, 0], [False, 0], [False, 0], [False, 0], [False, 0], [False, 0], [False, 20], [False, 20]]],\n  ['control: scenario 2',\n   [50,\n    [[False, False, 30],\n     [False, False, 30],\n     [True, False, 50],\n     [False, False, 50],\n     [False, False, 10],\n     [True, False, 30],\n     [False, False, 50],\n     [True, False, 30],\n     [True, False, 40]]],\n   [[False, 0],\n    [False, 0],\n    [False, 0],\n    [False, 0],\n    [False, 0],\n    [False, 0],\n    [False, 0],\n    [False, 0],\n    [False, 40]]],\n  ['control: scenario 3',\n   [100,\n    [[False, False, 50],\n     [False, False, 20],\n     [True, False, 50],\n     [True, False, 10],\n     [True, False, 20],\n     [True, False, 20],\n     [True, False, 50],\n     [True, False, 50],\n     [True, True, 10],\n     [True, False, 50]]],\n   [[False, 0],\n    [False, 0],\n    [False, 0],\n    [False, 10],\n    [False, 30],\n    [False, 50],\n    [True, 100],\n    [True, 100],\n    [False, 0],\n    [False, 50]]],\n  ['regression: scenario 4',\n   [100,\n    [[True, False, 20],\n     [True, False, 10],\n     [False, False, 20],\n     [True, False, 30],\n     [False, False, 20],\n     [False, False, 30]]],\n   [[False, 0], [False, 10], [False, 10], [False, 10], [False, 10], [False, 10]]]],\n [['regression: reset done timer while disabled',\n   [50, [[True, False, 30], [True, False, 60], [False, False, 10], [False, True, 10], [False, False, 10]]],\n   [[False, 0], [True, 50], [True, 50], [False, 0], [False, 0]]],\n  ['regression: scenario 3',\n   [50,\n    [[True, True, 10],\n     [True, False, 20],\n     [True, False, 10],\n     [True, False, 20],\n     [True, False, 40],\n     [True, False, 50],\n     [True, False, 30],\n     [False, False, 20],\n     [True, False, 40],\n     [False, True, 20]]],\n   [[False, 0],\n    [False, 20],\n    [False, 30],\n    [True, 50],\n    [True, 50],\n    [True, 50],\n    [True, 50],\n    [True, 50],\n    [True, 50],\n    [False, 0]]],\n  ['regression: interrupted timing retained',\n   [100,\n    [[True, False, 30],\n     [True, False, 40],\n     [False, False, 40],\n     [True, False, 40],\n     [True, False, 40],\n     [True, False, 40]]],\n   [[False, 0], [False, 40], [False, 40], [False, 40], [False, 80], [True, 100]]],\n  ['control: reset while enabled',\n   [100, [[True, False, 30], [True, False, 60], [True, True, 30], [True, False, 30], [True, False, 30]]],\n   [[False, 0], [False, 60], [False, 0], [False, 30], [False, 60]]],\n  ['control: reset done timer while enabled',\n   [50,\n    [[True, False, 30],\n     [True, False, 60],\n     [True, False, 10],\n     [True, True, 10],\n     [True, False, 25],\n     [True, False, 25]]],\n   [[False, 0], [True, 50], [True, 50], [False, 0], [False, 25], [True, 50]]],\n  ['regression: scenario 1',\n   [80,\n    [[False, False, 10],\n     [True, False, 30],\n     [True, False, 10],\n     [True, True, 40],\n     [True, False, 50],\n     [False, False, 40],\n     [False, False, 50],\n     [False, False, 40]]],\n   [[False, 0], [False, 0], [False, 10], [False, 0], [False, 50], [False, 50], [False, 50], [False, 50]]],\n  ['regression: scenario 2',\n   [0,\n    [[True, False, 10],\n     [False, False, 30],\n     [True, False, 20],\n     [True, False, 30],\n     [True, False, 50],\n     [True, False, 50],\n     [True, True, 20],\n     [True, False, 20],\n     [False, False, 40]]],\n   [[True, 0], [True, 0], [True, 0], [True, 0], [True, 0], [True, 0], [False, 0], [True, 0], [True, 0]]],\n  ['control: scenario 4',\n   [80,\n    [[False, False, 20],\n     [False, False, 40],\n     [True, False, 50],\n     [True, False, 40],\n     [True, True, 40],\n     [False, False, 10],\n     [True, False, 10],\n     [True, False, 30],\n     [True, False, 50],\n     [True, False, 40],\n     [False, True, 30]]],\n   [[False, 0],\n    [False, 0],\n    [False, 0],\n    [False, 40],\n    [False, 0],\n    [False, 0],\n    [False, 0],\n    [False, 30],\n    [True, 80],\n    [True, 80],\n    [False, 0]]]],\n [['regression: scenario 1',\n   [0,\n    [[False, False, 40],\n     [False, True, 30],\n     [True, False, 10],\n     [True, False, 30],\n     [True, False, 20],\n     [False, True, 30],\n     [True, False, 40],\n     [True, False, 30],\n     [True, False, 30],\n     [False, False, 20],\n     [False, False, 10],\n     [True, False, 30],\n     [True, False, 50],\n     [False, False, 10]]],\n   [[False, 0],\n    [False, 0],\n    [True, 0],\n    [True, 0],\n    [True, 0],\n    [False, 0],\n    [True, 0],\n    [True, 0],\n    [True, 0],\n    [True, 0],\n    [True, 0],\n    [True, 0],\n    [True, 0],\n    [True, 0]]],\n  ['regression: scenario 5',\n   [100,\n    [[True, False, 10],\n     [True, False, 40],\n     [True, False, 20],\n     [True, False, 10],\n     [True, False, 30],\n     [True, False, 50],\n     [False, False, 50],\n     [True, False, 30],\n     [True, False, 40],\n     [False, False, 30]]],\n   [[False, 0],\n    [False, 40],\n    [False, 60],\n    [False, 70],\n    [True, 100],\n    [True, 100],\n    [True, 100],\n    [True, 100],\n    [True, 100],\n    [True, 100]]],\n  ['regression: interrupted timing retained',\n   [100,\n    [[True, False, 30],\n     [True, False, 40],\n     [False, False, 40],\n     [True, False, 40],\n     [True, False, 40],\n     [True, False, 40]]],\n   [[False, 0], [False, 40], [False, 40], [False, 40], [False, 80], [True, 100]]],\n  ['control: reset while enabled',\n   [100, [[True, False, 30], [True, False, 60], [True, True, 30], [True, False, 30], [True, False, 30]]],\n   [[False, 0], [False, 60], [False, 0], [False, 30], [False, 60]]],\n  ['control: reset done timer while enabled',\n   [50,\n    [[True, False, 30],\n     [True, False, 60],\n     [True, False, 10],\n     [True, True, 10],\n     [True, False, 25],\n     [True, False, 25]]],\n   [[False, 0], [True, 50], [True, 50], [False, 0], [False, 25], [True, 50]]],\n  ['regression: reset done timer while disabled',\n   [50, [[True, False, 30], [True, False, 60], [False, False, 10], [False, True, 10], [False, False, 10]]],\n   [[False, 0], [True, 50], [True, 50], [False, 0], [False, 0]]],\n  ['regression: scenario 2',\n   [50,\n    [[True, False, 10],\n     [True, False, 20],\n     [True, False, 50],\n     [True, False, 20],\n     [True, False, 20],\n     [False, False, 50],\n     [False, False, 40],\n     [False, True, 10],\n     [False, False, 10]]],\n   [[False, 0],\n    [False, 20],\n    [True, 50],\n    [True, 50],\n    [True, 50],\n    [True, 50],\n    [True, 50],\n    [False, 0],\n    [False, 0]]],\n  ['regression: scenario 3',\n   [150,\n    [[True, False, 50],\n     [True, False, 30],\n     [False, False, 50],\n     [False, False, 40],\n     [False, False, 50],\n     [False, False, 20]]],\n   [[False, 0], [False, 30], [False, 30], [False, 30], [False, 30], [False, 30]]]],\n [['regression: scenario 2',\n   [100,\n    [[True, False, 20],\n     [True, False, 30],\n     [True, False, 10],\n     [True, True, 10],\n     [True, False, 10],\n     [True, False, 20],\n     [False, False, 50],\n     [False, True, 40],\n     [False, False, 30],\n     [False, False, 40],\n     [True, False, 10],\n     [True, False, 50]]],\n   [[False, 0],\n    [False, 30],\n    [False, 40],\n    [False, 0],\n    [False, 10],\n    [False, 30],\n    [False, 30],\n    [False, 0],\n    [False, 0],\n    [False, 0],\n    [False, 0],\n    [False, 50]]],\n  ['regression: scenario 11',\n   [100,\n    [[True, False, 20],\n     [True, True, 30],\n     [True, True, 20],\n     [True, False, 50],\n     [True, False, 50],\n     [True, False, 30],\n     [False, False, 40],\n     [True, False, 50],\n     [False, False, 40]]],\n   [[False, 0],\n    [False, 0],\n    [False, 0],\n    [False, 50],\n    [True, 100],\n    [True, 100],\n    [True, 100],\n    [True, 100],\n    [True, 100]]],\n  ['regression: interrupted timing retained',\n   [100,\n    [[True, False, 30],\n     [True, False, 40],\n     [False, False, 40],\n     [True, False, 40],\n     [True, False, 40],\n     [True, False, 40]]],\n   [[False, 0], [False, 40], [False, 40], [False, 40], [False, 80], [True, 100]]],\n  ['control: reset while enabled',\n   [100, [[True, False, 30], [True, False, 60], [True, True, 30], [True, False, 30], [True, False, 30]]],\n   [[False, 0], [False, 60], [False, 0], [False, 30], [False, 60]]],\n  ['control: reset done timer while enabled',\n   [50,\n    [[True, False, 30],\n     [True, False, 60],\n     [True, False, 10],\n     [True, True, 10],\n     [True, False, 25],\n     [True, False, 25]]],\n   [[False, 0], [True, 50], [True, 50], [False, 0], [False, 25], [True, 50]]],\n  ['regression: reset done timer while disabled',\n   [50, [[True, False, 30], [True, False, 60], [False, False, 10], [False, True, 10], [False, False, 10]]],\n   [[False, 0], [True, 50], [True, 50], [False, 0], [False, 0]]],\n  ['regression: scenario 1',\n   [0,\n    [[False, False, 50],\n     [False, False, 20],\n     [False, False, 30],\n     [True, True, 40],\n     [False, True, 10],\n     [True, False, 10],\n     [False, False, 30]]],\n   [[False, 0], [False, 0], [False, 0], [False, 0], [False, 0], [True, 0], [True, 0]]],\n  ['control: scenario 3',\n   [100,\n    [[False, False, 10],\n     [True, False, 20],\n     [True, False, 10],\n     [True, True, 50],\n     [True, False, 40],\n     [True, False, 50],\n     [False, True, 50],\n     [False, False, 10],\n     [True, False, 30]]],\n   [[False, 0],\n    [False, 0],\n    [False, 10],\n    [False, 0],\n    [False, 40],\n    [False, 90],\n    [False, 0],\n    [False, 0],\n    [False, 0]]]],\n [['regression: scenario 5',\n   [150,\n    [[True, False, 50],\n     [True, False, 30],\n     [False, False, 40],\n     [True, False, 50],\n     [True, False, 40],\n     [False, False, 50],\n     [False, False, 20],\n     [False, False, 50],\n     [True, False, 40],\n     [False, False, 40],\n     [True, True, 10]]],\n   [[False, 0],\n    [False, 30],\n    [False, 30],\n    [False, 30],\n    [False, 70],\n    [False, 70],\n    [False, 70],\n    [False, 70],\n    [False, 70],\n    [False, 70],\n    [False, 0]]],\n  ['regression: scenario 13',\n   [0,\n    [[True, False, 10],\n     [True, False, 50],\n     [True, False, 50],\n     [False, False, 30],\n     [False, False, 20],\n     [True, False, 10],\n     [True, False, 50],\n     [True, True, 50],\n     [False, False, 10],\n     [True, True, 30],\n     [True, False, 40],\n     [False, False, 20]]],\n   [[True, 0],\n    [True, 0],\n    [True, 0],\n    [True, 0],\n    [True, 0],\n    [True, 0],\n    [True, 0],\n    [False, 0],\n    [False, 0],\n    [False, 0],\n    [True, 0],\n    [True, 0]]],\n  ['regression: interrupted timing retained',\n   [100,\n    [[True, False, 30],\n     [True, False, 40],\n     [False, False, 40],\n     [True, False, 40],\n     [True, False, 40],\n     [True, False, 40]]],\n   [[False, 0], [False, 40], [False, 40], [False, 40], [False, 80], [True, 100]]],\n  ['control: reset while enabled',\n   [100, [[True, False, 30], [True, False, 60], [True, True, 30], [True, False, 30], [True, False, 30]]],\n   [[False, 0], [False, 60], [False, 0], [False, 30], [False, 60]]],\n  ['control: reset done timer while enabled',\n   [50,\n    [[True, False, 30],\n     [True, False, 60],\n     [True, False, 10],\n     [True, True, 10],\n     [True, False, 25],\n     [True, False, 25]]],\n   [[False, 0], [True, 50], [True, 50], [False, 0], [False, 25], [True, 50]]],\n  ['regression: reset done timer while disabled',\n   [50, [[True, False, 30], [True, False, 60], [False, False, 10], [False, True, 10], [False, False, 10]]],\n   [[False, 0], [True, 50], [True, 50], [False, 0], [False, 0]]],\n  ['regression: scenario 1',\n   [0,\n    [[True, False, 30],\n     [True, False, 10],\n     [True, False, 10],\n     [True, False, 40],\n     [False, False, 30],\n     [False, False, 50],\n     [False, True, 40],\n     [True, False, 10],\n     [True, False, 30],\n     [True, False, 50],\n     [False, False, 20],\n     [False, False, 30],\n     [False, False, 40],\n     [False, False, 50]]],\n   [[True, 0],\n    [True, 0],\n    [True, 0],\n    [True, 0],\n    [True, 0],\n    [True, 0],\n    [False, 0],\n    [True, 0],\n    [True, 0],\n    [True, 0],\n    [True, 0],\n    [True, 0],\n    [True, 0],\n    [True, 0]]],\n  ['control: scenario 2',\n   [50,\n    [[True, True, 50],\n     [False, False, 10],\n     [True, False, 50],\n     [False, True, 50],\n     [False, False, 20],\n     [True, False, 20]]],\n   [[False, 0], [False, 0], [False, 0], [False, 0], [False, 0], [False, 0]]]]]\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":"e0bb0bf5bfc42f6b0a90bfd61e909ad1520a22653ab94ed8909572e247049917","source":"\"\"\"Failure Map reference implementation. Python standard library only.\"\"\"\nimport json\n\nN = 1\nobservations = []\ndef solve(preset, scans):\n    acc = 0\n    dn = False\n    prev = False\n    out = []\n    for en, res, dt in scans:\n        en = bool(en)\n        if en:\n            if prev:\n                acc = min(preset, acc + dt)\n            if acc >= preset:\n                dn = True\n        prev = en\n        if res:\n            acc = 0\n            dn = False\n        out.append([dn, acc])\n    return out\ndef check(label, actual, expected):\n    observations.append({\"check\": label, \"actual\": actual, \"expected\": expected, \"passed\": actual == expected})\nfixtures = [[['regression: interrupted timing retained',\n   [100,\n    [[True, False, 30],\n     [True, False, 40],\n     [False, False, 40],\n     [True, False, 40],\n     [True, False, 40],\n     [True, False, 40]]],\n   [[False, 0], [False, 40], [False, 40], [False, 40], [False, 80], [True, 100]]],\n  ['regression: reset done timer while disabled',\n   [50, [[True, False, 30], [True, False, 60], [False, False, 10], [False, True, 10], [False, False, 10]]],\n   [[False, 0], [True, 50], [True, 50], [False, 0], [False, 0]]],\n  ['control: reset while enabled',\n   [100, [[True, False, 30], [True, False, 60], [True, True, 30], [True, False, 30], [True, False, 30]]],\n   [[False, 0], [False, 60], [False, 0], [False, 30], [False, 60]]],\n  ['control: reset done timer while enabled',\n   [50,\n    [[True, False, 30],\n     [True, False, 60],\n     [True, False, 10],\n     [True, True, 10],\n     [True, False, 25],\n     [True, False, 25]]],\n   [[False, 0], [True, 50], [True, 50], [False, 0], [False, 25], [True, 50]]],\n  ['regression: scenario 1',\n   [100,\n    [[False, False, 10],\n     [False, False, 50],\n     [False, False, 40],\n     [True, True, 20],\n     [False, False, 40],\n     [True, False, 40],\n     [True, False, 20],\n     [False, False, 40]]],\n   [[False, 0], [False, 0], [False, 0], [False, 0], [False, 0], [False, 0], [False, 20], [False, 20]]],\n  ['control: scenario 2',\n   [50,\n    [[False, False, 30],\n     [False, False, 30],\n     [True, False, 50],\n     [False, False, 50],\n     [False, False, 10],\n     [True, False, 30],\n     [False, False, 50],\n     [True, False, 30],\n     [True, False, 40]]],\n   [[False, 0],\n    [False, 0],\n    [False, 0],\n    [False, 0],\n    [False, 0],\n    [False, 0],\n    [False, 0],\n    [False, 0],\n    [False, 40]]],\n  ['control: scenario 3',\n   [100,\n    [[False, False, 50],\n     [False, False, 20],\n     [True, False, 50],\n     [True, False, 10],\n     [True, False, 20],\n     [True, False, 20],\n     [True, False, 50],\n     [True, False, 50],\n     [True, True, 10],\n     [True, False, 50]]],\n   [[False, 0],\n    [False, 0],\n    [False, 0],\n    [False, 10],\n    [False, 30],\n    [False, 50],\n    [True, 100],\n    [True, 100],\n    [False, 0],\n    [False, 50]]],\n  ['regression: scenario 4',\n   [100,\n    [[True, False, 20],\n     [True, False, 10],\n     [False, False, 20],\n     [True, False, 30],\n     [False, False, 20],\n     [False, False, 30]]],\n   [[False, 0], [False, 10], [False, 10], [False, 10], [False, 10], [False, 10]]]],\n [['regression: reset done timer while disabled',\n   [50, [[True, False, 30], [True, False, 60], [False, False, 10], [False, True, 10], [False, False, 10]]],\n   [[False, 0], [True, 50], [True, 50], [False, 0], [False, 0]]],\n  ['regression: scenario 3',\n   [50,\n    [[True, True, 10],\n     [True, False, 20],\n     [True, False, 10],\n     [True, False, 20],\n     [True, False, 40],\n     [True, False, 50],\n     [True, False, 30],\n     [False, False, 20],\n     [True, False, 40],\n     [False, True, 20]]],\n   [[False, 0],\n    [False, 20],\n    [False, 30],\n    [True, 50],\n    [True, 50],\n    [True, 50],\n    [True, 50],\n    [True, 50],\n    [True, 50],\n    [False, 0]]],\n  ['regression: interrupted timing retained',\n   [100,\n    [[True, False, 30],\n     [True, False, 40],\n     [False, False, 40],\n     [True, False, 40],\n     [True, False, 40],\n     [True, False, 40]]],\n   [[False, 0], [False, 40], [False, 40], [False, 40], [False, 80], [True, 100]]],\n  ['control: reset while enabled',\n   [100, [[True, False, 30], [True, False, 60], [True, True, 30], [True, False, 30], [True, False, 30]]],\n   [[False, 0], [False, 60], [False, 0], [False, 30], [False, 60]]],\n  ['control: reset done timer while enabled',\n   [50,\n    [[True, False, 30],\n     [True, False, 60],\n     [True, False, 10],\n     [True, True, 10],\n     [True, False, 25],\n     [True, False, 25]]],\n   [[False, 0], [True, 50], [True, 50], [False, 0], [False, 25], [True, 50]]],\n  ['regression: scenario 1',\n   [80,\n    [[False, False, 10],\n     [True, False, 30],\n     [True, False, 10],\n     [True, True, 40],\n     [True, False, 50],\n     [False, False, 40],\n     [False, False, 50],\n     [False, False, 40]]],\n   [[False, 0], [False, 0], [False, 10], [False, 0], [False, 50], [False, 50], [False, 50], [False, 50]]],\n  ['regression: scenario 2',\n   [0,\n    [[True, False, 10],\n     [False, False, 30],\n     [True, False, 20],\n     [True, False, 30],\n     [True, False, 50],\n     [True, False, 50],\n     [True, True, 20],\n     [True, False, 20],\n     [False, False, 40]]],\n   [[True, 0], [True, 0], [True, 0], [True, 0], [True, 0], [True, 0], [False, 0], [True, 0], [True, 0]]],\n  ['control: scenario 4',\n   [80,\n    [[False, False, 20],\n     [False, False, 40],\n     [True, False, 50],\n     [True, False, 40],\n     [True, True, 40],\n     [False, False, 10],\n     [True, False, 10],\n     [True, False, 30],\n     [True, False, 50],\n     [True, False, 40],\n     [False, True, 30]]],\n   [[False, 0],\n    [False, 0],\n    [False, 0],\n    [False, 40],\n    [False, 0],\n    [False, 0],\n    [False, 0],\n    [False, 30],\n    [True, 80],\n    [True, 80],\n    [False, 0]]]],\n [['regression: scenario 1',\n   [0,\n    [[False, False, 40],\n     [False, True, 30],\n     [True, False, 10],\n     [True, False, 30],\n     [True, False, 20],\n     [False, True, 30],\n     [True, False, 40],\n     [True, False, 30],\n     [True, False, 30],\n     [False, False, 20],\n     [False, False, 10],\n     [True, False, 30],\n     [True, False, 50],\n     [False, False, 10]]],\n   [[False, 0],\n    [False, 0],\n    [True, 0],\n    [True, 0],\n    [True, 0],\n    [False, 0],\n    [True, 0],\n    [True, 0],\n    [True, 0],\n    [True, 0],\n    [True, 0],\n    [True, 0],\n    [True, 0],\n    [True, 0]]],\n  ['regression: scenario 5',\n   [100,\n    [[True, False, 10],\n     [True, False, 40],\n     [True, False, 20],\n     [True, False, 10],\n     [True, False, 30],\n     [True, False, 50],\n     [False, False, 50],\n     [True, False, 30],\n     [True, False, 40],\n     [False, False, 30]]],\n   [[False, 0],\n    [False, 40],\n    [False, 60],\n    [False, 70],\n    [True, 100],\n    [True, 100],\n    [True, 100],\n    [True, 100],\n    [True, 100],\n    [True, 100]]],\n  ['regression: interrupted timing retained',\n   [100,\n    [[True, False, 30],\n     [True, False, 40],\n     [False, False, 40],\n     [True, False, 40],\n     [True, False, 40],\n     [True, False, 40]]],\n   [[False, 0], [False, 40], [False, 40], [False, 40], [False, 80], [True, 100]]],\n  ['control: reset while enabled',\n   [100, [[True, False, 30], [True, False, 60], [True, True, 30], [True, False, 30], [True, False, 30]]],\n   [[False, 0], [False, 60], [False, 0], [False, 30], [False, 60]]],\n  ['control: reset done timer while enabled',\n   [50,\n    [[True, False, 30],\n     [True, False, 60],\n     [True, False, 10],\n     [True, True, 10],\n     [True, False, 25],\n     [True, False, 25]]],\n   [[False, 0], [True, 50], [True, 50], [False, 0], [False, 25], [True, 50]]],\n  ['regression: reset done timer while disabled',\n   [50, [[True, False, 30], [True, False, 60], [False, False, 10], [False, True, 10], [False, False, 10]]],\n   [[False, 0], [True, 50], [True, 50], [False, 0], [False, 0]]],\n  ['regression: scenario 2',\n   [50,\n    [[True, False, 10],\n     [True, False, 20],\n     [True, False, 50],\n     [True, False, 20],\n     [True, False, 20],\n     [False, False, 50],\n     [False, False, 40],\n     [False, True, 10],\n     [False, False, 10]]],\n   [[False, 0],\n    [False, 20],\n    [True, 50],\n    [True, 50],\n    [True, 50],\n    [True, 50],\n    [True, 50],\n    [False, 0],\n    [False, 0]]],\n  ['regression: scenario 3',\n   [150,\n    [[True, False, 50],\n     [True, False, 30],\n     [False, False, 50],\n     [False, False, 40],\n     [False, False, 50],\n     [False, False, 20]]],\n   [[False, 0], [False, 30], [False, 30], [False, 30], [False, 30], [False, 30]]]],\n [['regression: scenario 2',\n   [100,\n    [[True, False, 20],\n     [True, False, 30],\n     [True, False, 10],\n     [True, True, 10],\n     [True, False, 10],\n     [True, False, 20],\n     [False, False, 50],\n     [False, True, 40],\n     [False, False, 30],\n     [False, False, 40],\n     [True, False, 10],\n     [True, False, 50]]],\n   [[False, 0],\n    [False, 30],\n    [False, 40],\n    [False, 0],\n    [False, 10],\n    [False, 30],\n    [False, 30],\n    [False, 0],\n    [False, 0],\n    [False, 0],\n    [False, 0],\n    [False, 50]]],\n  ['regression: scenario 11',\n   [100,\n    [[True, False, 20],\n     [True, True, 30],\n     [True, True, 20],\n     [True, False, 50],\n     [True, False, 50],\n     [True, False, 30],\n     [False, False, 40],\n     [True, False, 50],\n     [False, False, 40]]],\n   [[False, 0],\n    [False, 0],\n    [False, 0],\n    [False, 50],\n    [True, 100],\n    [True, 100],\n    [True, 100],\n    [True, 100],\n    [True, 100]]],\n  ['regression: interrupted timing retained',\n   [100,\n    [[True, False, 30],\n     [True, False, 40],\n     [False, False, 40],\n     [True, False, 40],\n     [True, False, 40],\n     [True, False, 40]]],\n   [[False, 0], [False, 40], [False, 40], [False, 40], [False, 80], [True, 100]]],\n  ['control: reset while enabled',\n   [100, [[True, False, 30], [True, False, 60], [True, True, 30], [True, False, 30], [True, False, 30]]],\n   [[False, 0], [False, 60], [False, 0], [False, 30], [False, 60]]],\n  ['control: reset done timer while enabled',\n   [50,\n    [[True, False, 30],\n     [True, False, 60],\n     [True, False, 10],\n     [True, True, 10],\n     [True, False, 25],\n     [True, False, 25]]],\n   [[False, 0], [True, 50], [True, 50], [False, 0], [False, 25], [True, 50]]],\n  ['regression: reset done timer while disabled',\n   [50, [[True, False, 30], [True, False, 60], [False, False, 10], [False, True, 10], [False, False, 10]]],\n   [[False, 0], [True, 50], [True, 50], [False, 0], [False, 0]]],\n  ['regression: scenario 1',\n   [0,\n    [[False, False, 50],\n     [False, False, 20],\n     [False, False, 30],\n     [True, True, 40],\n     [False, True, 10],\n     [True, False, 10],\n     [False, False, 30]]],\n   [[False, 0], [False, 0], [False, 0], [False, 0], [False, 0], [True, 0], [True, 0]]],\n  ['control: scenario 3',\n   [100,\n    [[False, False, 10],\n     [True, False, 20],\n     [True, False, 10],\n     [True, True, 50],\n     [True, False, 40],\n     [True, False, 50],\n     [False, True, 50],\n     [False, False, 10],\n     [True, False, 30]]],\n   [[False, 0],\n    [False, 0],\n    [False, 10],\n    [False, 0],\n    [False, 40],\n    [False, 90],\n    [False, 0],\n    [False, 0],\n    [False, 0]]]],\n [['regression: scenario 5',\n   [150,\n    [[True, False, 50],\n     [True, False, 30],\n     [False, False, 40],\n     [True, False, 50],\n     [True, False, 40],\n     [False, False, 50],\n     [False, False, 20],\n     [False, False, 50],\n     [True, False, 40],\n     [False, False, 40],\n     [True, True, 10]]],\n   [[False, 0],\n    [False, 30],\n    [False, 30],\n    [False, 30],\n    [False, 70],\n    [False, 70],\n    [False, 70],\n    [False, 70],\n    [False, 70],\n    [False, 70],\n    [False, 0]]],\n  ['regression: scenario 13',\n   [0,\n    [[True, False, 10],\n     [True, False, 50],\n     [True, False, 50],\n     [False, False, 30],\n     [False, False, 20],\n     [True, False, 10],\n     [True, False, 50],\n     [True, True, 50],\n     [False, False, 10],\n     [True, True, 30],\n     [True, False, 40],\n     [False, False, 20]]],\n   [[True, 0],\n    [True, 0],\n    [True, 0],\n    [True, 0],\n    [True, 0],\n    [True, 0],\n    [True, 0],\n    [False, 0],\n    [False, 0],\n    [False, 0],\n    [True, 0],\n    [True, 0]]],\n  ['regression: interrupted timing retained',\n   [100,\n    [[True, False, 30],\n     [True, False, 40],\n     [False, False, 40],\n     [True, False, 40],\n     [True, False, 40],\n     [True, False, 40]]],\n   [[False, 0], [False, 40], [False, 40], [False, 40], [False, 80], [True, 100]]],\n  ['control: reset while enabled',\n   [100, [[True, False, 30], [True, False, 60], [True, True, 30], [True, False, 30], [True, False, 30]]],\n   [[False, 0], [False, 60], [False, 0], [False, 30], [False, 60]]],\n  ['control: reset done timer while enabled',\n   [50,\n    [[True, False, 30],\n     [True, False, 60],\n     [True, False, 10],\n     [True, True, 10],\n     [True, False, 25],\n     [True, False, 25]]],\n   [[False, 0], [True, 50], [True, 50], [False, 0], [False, 25], [True, 50]]],\n  ['regression: reset done timer while disabled',\n   [50, [[True, False, 30], [True, False, 60], [False, False, 10], [False, True, 10], [False, False, 10]]],\n   [[False, 0], [True, 50], [True, 50], [False, 0], [False, 0]]],\n  ['regression: scenario 1',\n   [0,\n    [[True, False, 30],\n     [True, False, 10],\n     [True, False, 10],\n     [True, False, 40],\n     [False, False, 30],\n     [False, False, 50],\n     [False, True, 40],\n     [True, False, 10],\n     [True, False, 30],\n     [True, False, 50],\n     [False, False, 20],\n     [False, False, 30],\n     [False, False, 40],\n     [False, False, 50]]],\n   [[True, 0],\n    [True, 0],\n    [True, 0],\n    [True, 0],\n    [True, 0],\n    [True, 0],\n    [False, 0],\n    [True, 0],\n    [True, 0],\n    [True, 0],\n    [True, 0],\n    [True, 0],\n    [True, 0],\n    [True, 0]]],\n  ['control: scenario 2',\n   [50,\n    [[True, True, 50],\n     [False, False, 10],\n     [True, False, 50],\n     [False, True, 50],\n     [False, False, 20],\n     [True, False, 20]]],\n   [[False, 0], [False, 0], [False, 0], [False, 0], [False, 0], [False, 0]]]]]\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 bounded teaching model of one PLC instruction or rung pattern evaluated scan by scan. The stated contract is a stipulated toy convention, not a claim of conformance to any vendor controller or IEC 61131-3 runtime. 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-plc-ladder-logic-scan-cycles-rto-retentive-reset-disabled-retention","generated_at":"2026-09-29T14:51:40.436435+00:00","license":"CC0-1.0","python":"3.12.14","seed":1,"split":"open-access"},"relevance":"Ladder programs are executed as repeated scans; each defect here changes what a rung, timer, counter or data-table instruction reports on a particular scan, which is how commissioning and field faults are actually observed.","repair":"Leave ACC and DN unchanged while the RTO rung is false.","root_cause":"The disabled-rung path clears ACC and DN as if the instruction were a TON.","sha256":"6491917241d469d3097a25c39587af5e2d239b2a991f2896e32655a8ea50d37c","title":"RTO discards accumulated time when its rung goes false · case 01","variant":1,"variant_policy":"Five numbered records share a model and may reuse boundary fixtures.","verification":{"attempt":{"elapsed_ms":42.0,"exit_code":1,"observations":[{"actual":[[false,0],[false,40],[false,40],[false,40],[false,80],[true,100]],"check":"regression: interrupted timing retained","expected":[[false,0],[false,40],[false,40],[false,40],[false,80],[true,100]],"passed":true},{"actual":[[false,0],[true,50],[false,50],[false,0],[false,0]],"check":"regression: reset done timer while disabled","expected":[[false,0],[true,50],[true,50],[false,0],[false,0]],"passed":false},{"actual":[[false,0],[false,60],[false,0],[false,30],[false,60]],"check":"control: reset while enabled","expected":[[false,0],[false,60],[false,0],[false,30],[false,60]],"passed":true},{"actual":[[false,0],[true,50],[true,50],[false,0],[false,25],[true,50]],"check":"control: reset done timer while enabled","expected":[[false,0],[true,50],[true,50],[false,0],[false,25],[true,50]],"passed":true},{"actual":[[false,0],[false,0],[false,0],[false,0],[false,0],[false,0],[false,20],[false,20]],"check":"regression: scenario 1","expected":[[false,0],[false,0],[false,0],[false,0],[false,0],[false,0],[false,20],[false,20]],"passed":true},{"actual":[[false,0],[false,0],[false,0],[false,0],[false,0],[false,0],[false,0],[false,0],[false,40]],"check":"control: scenario 2","expected":[[false,0],[false,0],[false,0],[false,0],[false,0],[false,0],[false,0],[false,0],[false,40]],"passed":true},{"actual":[[false,0],[false,0],[false,0],[false,10],[false,30],[false,50],[true,100],[true,100],[false,0],[false,50]],"check":"control: scenario 3","expected":[[false,0],[false,0],[false,0],[false,10],[false,30],[false,50],[true,100],[true,100],[false,0],[false,50]],"passed":true},{"actual":[[false,0],[false,10],[false,10],[false,10],[false,10],[false,10]],"check":"regression: scenario 4","expected":[[false,0],[false,10],[false,10],[false,10],[false,10],[false,10]],"passed":true}],"passed":false,"stderr":"","stdout":"{\"observations\": [{\"check\": \"regression: interrupted timing retained\", \"actual\": [[false, 0], [false, 40], [false, 40], [false, 40], [false, 80], [true, 100]], \"expected\": [[false, 0], [false, 40], [false, 40], [false, 40], [false, 80], [true, 100]], \"passed\": true}, {\"check\": \"regression: reset done timer while disabled\", \"actual\": [[false, 0], [true, 50], [false, 50], [false, 0], [false, 0]], \"expected\": [[false, 0], [true, 50], [true, 50], [false, 0], [false, 0]], \"passed\": false}, {\"check\": \"control: reset while enabled\", \"actual\": [[false, 0], [false, 60], [false, 0], [false, 30], [false, 60]], \"expected\": [[false, 0], [false, 60], [false, 0], [false, 30], [false, 60]], \"passed\": true}, {\"check\": \"control: reset done timer while enabled\", \"actual\": [[false, 0], [true, 50], [true, 50], [false, 0], [false, 25], [true, 50]], \"expected\": [[false, 0], [true, 50], [true, 50], [false, 0], [false, 25], [true, 50]], \"passed\": true}, {\"check\": \"regression: scenario 1\", \"actual\": [[false, 0], [false, 0], [false, 0], [false, 0], [false, 0], [false, 0], [false, 20], [false, 20]], \"expected\": [[false, 0], [false, 0], [false, 0], [false, 0], [false, 0], [false, 0], [false, 20], [false, 20]], \"passed\": true}, {\"check\": \"control: scenario 2\", \"actual\": [[false, 0], [false, 0], [false, 0], [false, 0], [false, 0], [false, 0], [false, 0], [false, 0], [false, 40]], \"expected\": [[false, 0], [false, 0], [false, 0], [false, 0], [false, 0], [false, 0], [false, 0], [false, 0], [false, 40]], \"passed\": true}, {\"check\": \"control: scenario 3\", \"actual\": [[false, 0], [false, 0], [false, 0], [false, 10], [false, 30], [false, 50], [true, 100], [true, 100], [false, 0], [false, 50]], \"expected\": [[false, 0], [false, 0], [false, 0], [false, 10], [false, 30], [false, 50], [true, 100], [true, 100], [false, 0], [false, 50]], \"passed\": true}, {\"check\": \"regression: scenario 4\", \"actual\": [[false, 0], [false, 10], [false, 10], [false, 10], [false, 10], [false, 10]], \"expected\": [[false, 0], [false, 10], [false, 10], [false, 10], [false, 10], [false, 10]], \"passed\": true}], \"passed\": false}\n"},"broken":{"elapsed_ms":43.776,"exit_code":1,"observations":[{"actual":[[false,0],[false,40],[false,0],[false,0],[false,40],[false,80]],"check":"regression: interrupted timing retained","expected":[[false,0],[false,40],[false,40],[false,40],[false,80],[true,100]],"passed":false},{"actual":[[false,0],[true,50],[false,0],[false,0],[false,0]],"check":"regression: reset done timer while disabled","expected":[[false,0],[true,50],[true,50],[false,0],[false,0]],"passed":false},{"actual":[[false,0],[false,60],[false,0],[false,30],[false,60]],"check":"control: reset while enabled","expected":[[false,0],[false,60],[false,0],[false,30],[false,60]],"passed":true},{"actual":[[false,0],[true,50],[true,50],[false,0],[false,25],[true,50]],"check":"control: reset done timer while enabled","expected":[[false,0],[true,50],[true,50],[false,0],[false,25],[true,50]],"passed":true},{"actual":[[false,0],[false,0],[false,0],[false,0],[false,0],[false,0],[false,20],[false,0]],"check":"regression: scenario 1","expected":[[false,0],[false,0],[false,0],[false,0],[false,0],[false,0],[false,20],[false,20]],"passed":false},{"actual":[[false,0],[false,0],[false,0],[false,0],[false,0],[false,0],[false,0],[false,0],[false,40]],"check":"control: scenario 2","expected":[[false,0],[false,0],[false,0],[false,0],[false,0],[false,0],[false,0],[false,0],[false,40]],"passed":true},{"actual":[[false,0],[false,0],[false,0],[false,10],[false,30],[false,50],[true,100],[true,100],[false,0],[false,50]],"check":"control: scenario 3","expected":[[false,0],[false,0],[false,0],[false,10],[false,30],[false,50],[true,100],[true,100],[false,0],[false,50]],"passed":true},{"actual":[[false,0],[false,10],[false,0],[false,0],[false,0],[false,0]],"check":"regression: scenario 4","expected":[[false,0],[false,10],[false,10],[false,10],[false,10],[false,10]],"passed":false}],"passed":false,"stderr":"","stdout":"{\"observations\": [{\"check\": \"regression: interrupted timing retained\", \"actual\": [[false, 0], [false, 40], [false, 0], [false, 0], [false, 40], [false, 80]], \"expected\": [[false, 0], [false, 40], [false, 40], [false, 40], [false, 80], [true, 100]], \"passed\": false}, {\"check\": \"regression: reset done timer while disabled\", \"actual\": [[false, 0], [true, 50], [false, 0], [false, 0], [false, 0]], \"expected\": [[false, 0], [true, 50], [true, 50], [false, 0], [false, 0]], \"passed\": false}, {\"check\": \"control: reset while enabled\", \"actual\": [[false, 0], [false, 60], [false, 0], [false, 30], [false, 60]], \"expected\": [[false, 0], [false, 60], [false, 0], [false, 30], [false, 60]], \"passed\": true}, {\"check\": \"control: reset done timer while enabled\", \"actual\": [[false, 0], [true, 50], [true, 50], [false, 0], [false, 25], [true, 50]], \"expected\": [[false, 0], [true, 50], [true, 50], [false, 0], [false, 25], [true, 50]], \"passed\": true}, {\"check\": \"regression: scenario 1\", \"actual\": [[false, 0], [false, 0], [false, 0], [false, 0], [false, 0], [false, 0], [false, 20], [false, 0]], \"expected\": [[false, 0], [false, 0], [false, 0], [false, 0], [false, 0], [false, 0], [false, 20], [false, 20]], \"passed\": false}, {\"check\": \"control: scenario 2\", \"actual\": [[false, 0], [false, 0], [false, 0], [false, 0], [false, 0], [false, 0], [false, 0], [false, 0], [false, 40]], \"expected\": [[false, 0], [false, 0], [false, 0], [false, 0], [false, 0], [false, 0], [false, 0], [false, 0], [false, 40]], \"passed\": true}, {\"check\": \"control: scenario 3\", \"actual\": [[false, 0], [false, 0], [false, 0], [false, 10], [false, 30], [false, 50], [true, 100], [true, 100], [false, 0], [false, 50]], \"expected\": [[false, 0], [false, 0], [false, 0], [false, 10], [false, 30], [false, 50], [true, 100], [true, 100], [false, 0], [false, 50]], \"passed\": true}, {\"check\": \"regression: scenario 4\", \"actual\": [[false, 0], [false, 10], [false, 0], [false, 0], [false, 0], [false, 0]], \"expected\": [[false, 0], [false, 10], [false, 10], [false, 10], [false, 10], [false, 10]], \"passed\": false}], \"passed\": false}\n"},"fixed":{"elapsed_ms":89.064,"exit_code":0,"observations":[{"actual":[[false,0],[false,40],[false,40],[false,40],[false,80],[true,100]],"check":"regression: interrupted timing retained","expected":[[false,0],[false,40],[false,40],[false,40],[false,80],[true,100]],"passed":true},{"actual":[[false,0],[true,50],[true,50],[false,0],[false,0]],"check":"regression: reset done timer while disabled","expected":[[false,0],[true,50],[true,50],[false,0],[false,0]],"passed":true},{"actual":[[false,0],[false,60],[false,0],[false,30],[false,60]],"check":"control: reset while enabled","expected":[[false,0],[false,60],[false,0],[false,30],[false,60]],"passed":true},{"actual":[[false,0],[true,50],[true,50],[false,0],[false,25],[true,50]],"check":"control: reset done timer while enabled","expected":[[false,0],[true,50],[true,50],[false,0],[false,25],[true,50]],"passed":true},{"actual":[[false,0],[false,0],[false,0],[false,0],[false,0],[false,0],[false,20],[false,20]],"check":"regression: scenario 1","expected":[[false,0],[false,0],[false,0],[false,0],[false,0],[false,0],[false,20],[false,20]],"passed":true},{"actual":[[false,0],[false,0],[false,0],[false,0],[false,0],[false,0],[false,0],[false,0],[false,40]],"check":"control: scenario 2","expected":[[false,0],[false,0],[false,0],[false,0],[false,0],[false,0],[false,0],[false,0],[false,40]],"passed":true},{"actual":[[false,0],[false,0],[false,0],[false,10],[false,30],[false,50],[true,100],[true,100],[false,0],[false,50]],"check":"control: scenario 3","expected":[[false,0],[false,0],[false,0],[false,10],[false,30],[false,50],[true,100],[true,100],[false,0],[false,50]],"passed":true},{"actual":[[false,0],[false,10],[false,10],[false,10],[false,10],[false,10]],"check":"regression: scenario 4","expected":[[false,0],[false,10],[false,10],[false,10],[false,10],[false,10]],"passed":true}],"passed":true,"stderr":"","stdout":"{\"observations\": [{\"check\": \"regression: interrupted timing retained\", \"actual\": [[false, 0], [false, 40], [false, 40], [false, 40], [false, 80], [true, 100]], \"expected\": [[false, 0], [false, 40], [false, 40], [false, 40], [false, 80], [true, 100]], \"passed\": true}, {\"check\": \"regression: reset done timer while disabled\", \"actual\": [[false, 0], [true, 50], [true, 50], [false, 0], [false, 0]], \"expected\": [[false, 0], [true, 50], [true, 50], [false, 0], [false, 0]], \"passed\": true}, {\"check\": \"control: reset while enabled\", \"actual\": [[false, 0], [false, 60], [false, 0], [false, 30], [false, 60]], \"expected\": [[false, 0], [false, 60], [false, 0], [false, 30], [false, 60]], \"passed\": true}, {\"check\": \"control: reset done timer while enabled\", \"actual\": [[false, 0], [true, 50], [true, 50], [false, 0], [false, 25], [true, 50]], \"expected\": [[false, 0], [true, 50], [true, 50], [false, 0], [false, 25], [true, 50]], \"passed\": true}, {\"check\": \"regression: scenario 1\", \"actual\": [[false, 0], [false, 0], [false, 0], [false, 0], [false, 0], [false, 0], [false, 20], [false, 20]], \"expected\": [[false, 0], [false, 0], [false, 0], [false, 0], [false, 0], [false, 0], [false, 20], [false, 20]], \"passed\": true}, {\"check\": \"control: scenario 2\", \"actual\": [[false, 0], [false, 0], [false, 0], [false, 0], [false, 0], [false, 0], [false, 0], [false, 0], [false, 40]], \"expected\": [[false, 0], [false, 0], [false, 0], [false, 0], [false, 0], [false, 0], [false, 0], [false, 0], [false, 40]], \"passed\": true}, {\"check\": \"control: scenario 3\", \"actual\": [[false, 0], [false, 0], [false, 0], [false, 10], [false, 30], [false, 50], [true, 100], [true, 100], [false, 0], [false, 50]], \"expected\": [[false, 0], [false, 0], [false, 0], [false, 10], [false, 30], [false, 50], [true, 100], [true, 100], [false, 0], [false, 50]], \"passed\": true}, {\"check\": \"regression: scenario 4\", \"actual\": [[false, 0], [false, 10], [false, 10], [false, 10], [false, 10], [false, 10]], \"expected\": [[false, 0], [false, 10], [false, 10], [false, 10], [false, 10], [false, 10]], \"passed\": true}], \"passed\": true}\n"}},"verified":true,"visibility":"public"}