{"abstract":"An off-delay that is re-energized mid-delay then expires early on the next drop.","category":"PLC ladder logic scan cycles","checks":8,"contract":"Off-delay timer (TOF) evaluated once per scan; scans is a list of [rung_in, elapsed_ms]. At power-up the timer is expired (ACC = preset, DN false). A true rung clears ACC and sets DN. After the rung drops, ACC accumulates each later false scan's elapsed time (the true-to-false scan itself is not credited), clamped at preset, and DN clears when ACC >= preset. TT is DN and not rung_in. Return [DN, TT, ACC] per scan.","contract_signature":"preset, scans","evaluation_group":"w2-plc-ladder-logic-scan-cycles-tof-off-delay","failed_approach":"Clearing ACC only after a completed delay still carries partial delay time across a re-energization.","family":"w2-plc-ladder-logic-scan-cycles-tof-off-delay-rung-true-reset","id":"FA-91876","implementations":{"attempt":{"sha256":"d28f5b488ca3799dfc00c92607234b82ac4b734a446211f356ffb73600253c37","source":"\"\"\"Failure Map reference implementation. Python standard library only.\"\"\"\nimport json\n\nN = 1\nobservations = []\ndef solve(preset, scans):\n    acc = preset\n    dn = False\n    prev = False\n    out = []\n    for rung_in, dt in scans:\n        rung_in = bool(rung_in)\n        if rung_in:\n            if acc >= preset:\n                acc = 0\n            dn = True\n        elif dn:\n            if not prev:\n                acc = min(preset, acc + dt)\n            if acc >= preset:\n                dn = False\n        tt = dn and not rung_in\n        prev = rung_in\n        out.append([dn, tt, acc])\n    return out\ndef check(label, actual, expected):\n    observations.append({\"check\": label, \"actual\": actual, \"expected\": expected, \"passed\": actual == expected})\nfixtures = [[['regression: power-up with false rung',\n   [60, [[False, 20], [False, 20], [False, 20], [True, 10]]],\n   [[False, False, 60], [False, False, 60], [False, False, 60], [True, False, 0]]],\n  ['regression: re-energized mid delay',\n   [100, [[True, 10], [False, 40], [False, 40], [True, 40], [False, 40], [False, 40], [False, 40]]],\n   [[True, False, 0],\n    [True, True, 0],\n    [True, True, 40],\n    [True, False, 0],\n    [True, True, 0],\n    [True, True, 40],\n    [True, True, 80]]],\n  ['control: zero preset drop',\n   [0, [[True, 10], [False, 10], [False, 10]]],\n   [[True, False, 0], [False, False, 0], [False, False, 0]]],\n  ['regression: exact expiry',\n   [60, [[True, 10], [False, 30], [False, 30], [False, 30], [False, 30]]],\n   [[True, False, 0], [True, True, 0], [True, True, 30], [False, False, 60], [False, False, 60]]],\n  ['regression: scenario 1',\n   [60, [[False, 70], [True, 10], [True, 70], [True, 10], [False, 70], [False, 10], [True, 10], [False, 30]]],\n   [[False, False, 60],\n    [True, False, 0],\n    [True, False, 0],\n    [True, False, 0],\n    [True, True, 0],\n    [True, True, 10],\n    [True, False, 0],\n    [True, True, 0]]],\n  ['regression: scenario 2',\n   [60, [[False, 30], [True, 50], [True, 20], [True, 30], [True, 70], [False, 50], [False, 50], [False, 70]]],\n   [[False, False, 60],\n    [True, False, 0],\n    [True, False, 0],\n    [True, False, 0],\n    [True, False, 0],\n    [True, True, 0],\n    [True, True, 50],\n    [False, False, 60]]],\n  ['regression: scenario 3',\n   [40,\n    [[True, 70],\n     [True, 0],\n     [False, 50],\n     [True, 30],\n     [False, 0],\n     [False, 50],\n     [False, 30],\n     [False, 50],\n     [False, 10],\n     [True, 20]]],\n   [[True, False, 0],\n    [True, False, 0],\n    [True, True, 0],\n    [True, False, 0],\n    [True, True, 0],\n    [False, False, 40],\n    [False, False, 40],\n    [False, False, 40],\n    [False, False, 40],\n    [True, False, 0]]],\n  ['regression: scenario 4',\n   [100,\n    [[False, 30],\n     [False, 70],\n     [True, 30],\n     [False, 30],\n     [False, 20],\n     [False, 50],\n     [False, 70],\n     [True, 50],\n     [True, 50],\n     [False, 20],\n     [False, 50]]],\n   [[False, False, 100],\n    [False, False, 100],\n    [True, False, 0],\n    [True, True, 0],\n    [True, True, 20],\n    [True, True, 70],\n    [False, False, 100],\n    [True, False, 0],\n    [True, False, 0],\n    [True, True, 0],\n    [True, True, 50]]]],\n [['regression: re-energized mid delay',\n   [100, [[True, 10], [False, 40], [False, 40], [True, 40], [False, 40], [False, 40], [False, 40]]],\n   [[True, False, 0],\n    [True, True, 0],\n    [True, True, 40],\n    [True, False, 0],\n    [True, True, 0],\n    [True, True, 40],\n    [True, True, 80]]],\n  ['regression: scenario 5',\n   [40, [[False, 50], [False, 70], [True, 70], [False, 10], [False, 30], [True, 70]]],\n   [[False, False, 40],\n    [False, False, 40],\n    [True, False, 0],\n    [True, True, 0],\n    [True, True, 30],\n    [True, False, 0]]],\n  ['regression: power-up with false rung',\n   [60, [[False, 20], [False, 20], [False, 20], [True, 10]]],\n   [[False, False, 60], [False, False, 60], [False, False, 60], [True, False, 0]]],\n  ['control: zero preset drop',\n   [0, [[True, 10], [False, 10], [False, 10]]],\n   [[True, False, 0], [False, False, 0], [False, False, 0]]],\n  ['regression: exact expiry',\n   [60, [[True, 10], [False, 30], [False, 30], [False, 30], [False, 30]]],\n   [[True, False, 0], [True, True, 0], [True, True, 30], [False, False, 60], [False, False, 60]]],\n  ['control: scenario 1',\n   [0, [[False, 30], [True, 20], [True, 30], [False, 50], [True, 0], [True, 50], [True, 50]]],\n   [[False, False, 0],\n    [True, False, 0],\n    [True, False, 0],\n    [False, False, 0],\n    [True, False, 0],\n    [True, False, 0],\n    [True, False, 0]]],\n  ['control: scenario 2',\n   [0, [[False, 10], [True, 0], [True, 70], [False, 0], [True, 70], [False, 20], [False, 10]]],\n   [[False, False, 0],\n    [True, False, 0],\n    [True, False, 0],\n    [False, False, 0],\n    [True, False, 0],\n    [False, False, 0],\n    [False, False, 0]]],\n  ['regression: scenario 3',\n   [150,\n    [[False, 50],\n     [False, 10],\n     [False, 0],\n     [False, 50],\n     [True, 50],\n     [False, 70],\n     [False, 10],\n     [True, 70],\n     [False, 50],\n     [False, 70],\n     [False, 20],\n     [True, 50],\n     [False, 0],\n     [True, 30]]],\n   [[False, False, 150],\n    [False, False, 150],\n    [False, False, 150],\n    [False, False, 150],\n    [True, False, 0],\n    [True, True, 0],\n    [True, True, 10],\n    [True, False, 0],\n    [True, True, 0],\n    [True, True, 70],\n    [True, True, 90],\n    [True, False, 0],\n    [True, True, 0],\n    [True, False, 0]]]],\n [['regression: exact expiry',\n   [60, [[True, 10], [False, 30], [False, 30], [False, 30], [False, 30]]],\n   [[True, False, 0], [True, True, 0], [True, True, 30], [False, False, 60], [False, False, 60]]],\n  ['regression: scenario 14',\n   [60,\n    [[False, 70],\n     [False, 0],\n     [True, 0],\n     [True, 30],\n     [False, 10],\n     [False, 20],\n     [False, 20],\n     [False, 10],\n     [True, 0],\n     [False, 50],\n     [False, 0],\n     [False, 20]]],\n   [[False, False, 60],\n    [False, False, 60],\n    [True, False, 0],\n    [True, False, 0],\n    [True, True, 0],\n    [True, True, 20],\n    [True, True, 40],\n    [True, True, 50],\n    [True, False, 0],\n    [True, True, 0],\n    [True, True, 0],\n    [True, True, 20]]],\n  ['regression: power-up with false rung',\n   [60, [[False, 20], [False, 20], [False, 20], [True, 10]]],\n   [[False, False, 60], [False, False, 60], [False, False, 60], [True, False, 0]]],\n  ['regression: re-energized mid delay',\n   [100, [[True, 10], [False, 40], [False, 40], [True, 40], [False, 40], [False, 40], [False, 40]]],\n   [[True, False, 0],\n    [True, True, 0],\n    [True, True, 40],\n    [True, False, 0],\n    [True, True, 0],\n    [True, True, 40],\n    [True, True, 80]]],\n  ['control: zero preset drop',\n   [0, [[True, 10], [False, 10], [False, 10]]],\n   [[True, False, 0], [False, False, 0], [False, False, 0]]],\n  ['control: scenario 1',\n   [0,\n    [[False, 50],\n     [True, 10],\n     [False, 0],\n     [True, 20],\n     [False, 70],\n     [False, 50],\n     [True, 70],\n     [False, 10],\n     [False, 10],\n     [False, 20],\n     [True, 70]]],\n   [[False, False, 0],\n    [True, False, 0],\n    [False, False, 0],\n    [True, False, 0],\n    [False, False, 0],\n    [False, False, 0],\n    [True, False, 0],\n    [False, False, 0],\n    [False, False, 0],\n    [False, False, 0],\n    [True, False, 0]]],\n  ['control: scenario 2',\n   [0,\n    [[False, 30],\n     [True, 50],\n     [False, 50],\n     [True, 0],\n     [True, 10],\n     [True, 10],\n     [False, 10],\n     [False, 50],\n     [False, 10]]],\n   [[False, False, 0],\n    [True, False, 0],\n    [False, False, 0],\n    [True, False, 0],\n    [True, False, 0],\n    [True, False, 0],\n    [False, False, 0],\n    [False, False, 0],\n    [False, False, 0]]],\n  ['control: scenario 3',\n   [0,\n    [[False, 10],\n     [False, 10],\n     [False, 70],\n     [False, 30],\n     [True, 50],\n     [False, 10],\n     [False, 0],\n     [True, 20],\n     [False, 70],\n     [True, 10],\n     [False, 70],\n     [True, 20],\n     [False, 70],\n     [True, 0]]],\n   [[False, False, 0],\n    [False, False, 0],\n    [False, False, 0],\n    [False, False, 0],\n    [True, False, 0],\n    [False, False, 0],\n    [False, False, 0],\n    [True, False, 0],\n    [False, False, 0],\n    [True, False, 0],\n    [False, False, 0],\n    [True, False, 0],\n    [False, False, 0],\n    [True, False, 0]]]],\n [['regression: scenario 1',\n   [40, [[True, 70], [True, 20], [True, 20], [False, 30], [False, 30], [False, 0], [False, 70], [False, 20]]],\n   [[True, False, 0],\n    [True, False, 0],\n    [True, False, 0],\n    [True, True, 0],\n    [True, True, 30],\n    [True, True, 30],\n    [False, False, 40],\n    [False, False, 40]]],\n  ['regression: scenario 9',\n   [150,\n    [[True, 10],\n     [True, 70],\n     [True, 50],\n     [False, 50],\n     [False, 20],\n     [False, 50],\n     [True, 50],\n     [True, 0],\n     [True, 70],\n     [False, 30],\n     [True, 0],\n     [False, 20],\n     [False, 10]]],\n   [[True, False, 0],\n    [True, False, 0],\n    [True, False, 0],\n    [True, True, 0],\n    [True, True, 20],\n    [True, True, 70],\n    [True, False, 0],\n    [True, False, 0],\n    [True, False, 0],\n    [True, True, 0],\n    [True, False, 0],\n    [True, True, 0],\n    [True, True, 10]]],\n  ['regression: power-up with false rung',\n   [60, [[False, 20], [False, 20], [False, 20], [True, 10]]],\n   [[False, False, 60], [False, False, 60], [False, False, 60], [True, False, 0]]],\n  ['regression: re-energized mid delay',\n   [100, [[True, 10], [False, 40], [False, 40], [True, 40], [False, 40], [False, 40], [False, 40]]],\n   [[True, False, 0],\n    [True, True, 0],\n    [True, True, 40],\n    [True, False, 0],\n    [True, True, 0],\n    [True, True, 40],\n    [True, True, 80]]],\n  ['control: zero preset drop',\n   [0, [[True, 10], [False, 10], [False, 10]]],\n   [[True, False, 0], [False, False, 0], [False, False, 0]]],\n  ['regression: exact expiry',\n   [60, [[True, 10], [False, 30], [False, 30], [False, 30], [False, 30]]],\n   [[True, False, 0], [True, True, 0], [True, True, 30], [False, False, 60], [False, False, 60]]],\n  ['regression: scenario 2',\n   [100,\n    [[False, 30],\n     [False, 20],\n     [True, 20],\n     [True, 10],\n     [True, 70],\n     [False, 20],\n     [False, 10],\n     [True, 20],\n     [False, 0],\n     [True, 0],\n     [True, 0]]],\n   [[False, False, 100],\n    [False, False, 100],\n    [True, False, 0],\n    [True, False, 0],\n    [True, False, 0],\n    [True, True, 0],\n    [True, True, 10],\n    [True, False, 0],\n    [True, True, 0],\n    [True, False, 0],\n    [True, False, 0]]],\n  ['regression: scenario 3',\n   [60, [[False, 70], [True, 30], [True, 0], [True, 50], [True, 30], [True, 70], [True, 0]]],\n   [[False, False, 60],\n    [True, False, 0],\n    [True, False, 0],\n    [True, False, 0],\n    [True, False, 0],\n    [True, False, 0],\n    [True, False, 0]]]],\n [['regression: scenario 2',\n   [40,\n    [[False, 70],\n     [True, 70],\n     [False, 50],\n     [True, 70],\n     [False, 10],\n     [False, 30],\n     [True, 0],\n     [True, 50],\n     [False, 0],\n     [False, 30]]],\n   [[False, False, 40],\n    [True, False, 0],\n    [True, True, 0],\n    [True, False, 0],\n    [True, True, 0],\n    [True, True, 30],\n    [True, False, 0],\n    [True, False, 0],\n    [True, True, 0],\n    [True, True, 30]]],\n  ['regression: scenario 10',\n   [150,\n    [[False, 30],\n     [True, 70],\n     [False, 20],\n     [False, 30],\n     [False, 20],\n     [False, 10],\n     [False, 20],\n     [False, 30],\n     [True, 70],\n     [True, 10],\n     [False, 70],\n     [False, 20]]],\n   [[False, False, 150],\n    [True, False, 0],\n    [True, True, 0],\n    [True, True, 30],\n    [True, True, 50],\n    [True, True, 60],\n    [True, True, 80],\n    [True, True, 110],\n    [True, False, 0],\n    [True, False, 0],\n    [True, True, 0],\n    [True, True, 20]]],\n  ['regression: power-up with false rung',\n   [60, [[False, 20], [False, 20], [False, 20], [True, 10]]],\n   [[False, False, 60], [False, False, 60], [False, False, 60], [True, False, 0]]],\n  ['regression: re-energized mid delay',\n   [100, [[True, 10], [False, 40], [False, 40], [True, 40], [False, 40], [False, 40], [False, 40]]],\n   [[True, False, 0],\n    [True, True, 0],\n    [True, True, 40],\n    [True, False, 0],\n    [True, True, 0],\n    [True, True, 40],\n    [True, True, 80]]],\n  ['control: zero preset drop',\n   [0, [[True, 10], [False, 10], [False, 10]]],\n   [[True, False, 0], [False, False, 0], [False, False, 0]]],\n  ['regression: exact expiry',\n   [60, [[True, 10], [False, 30], [False, 30], [False, 30], [False, 30]]],\n   [[True, False, 0], [True, True, 0], [True, True, 30], [False, False, 60], [False, False, 60]]],\n  ['regression: scenario 1',\n   [40,\n    [[True, 70], [True, 20], [False, 50], [False, 20], [False, 50], [False, 50], [False, 50], [False, 0]]],\n   [[True, False, 0],\n    [True, False, 0],\n    [True, True, 0],\n    [True, True, 20],\n    [False, False, 40],\n    [False, False, 40],\n    [False, False, 40],\n    [False, False, 40]]],\n  ['control: scenario 3',\n   [0,\n    [[False, 50],\n     [False, 50],\n     [False, 20],\n     [False, 20],\n     [True, 10],\n     [True, 50],\n     [True, 20],\n     [False, 70],\n     [False, 30],\n     [False, 10],\n     [True, 10],\n     [True, 70],\n     [True, 10],\n     [False, 50]]],\n   [[False, False, 0],\n    [False, False, 0],\n    [False, False, 0],\n    [False, False, 0],\n    [True, False, 0],\n    [True, False, 0],\n    [True, False, 0],\n    [False, False, 0],\n    [False, False, 0],\n    [False, False, 0],\n    [True, False, 0],\n    [True, False, 0],\n    [True, False, 0],\n    [False, 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":"2f1d68426989b3f6fa1b2526f33029bd649f025efe6eead81508832752e38b4d","source":"\"\"\"Failure Map reference implementation. Python standard library only.\"\"\"\nimport json\n\nN = 1\nobservations = []\ndef solve(preset, scans):\n    acc = preset\n    dn = False\n    prev = False\n    out = []\n    for rung_in, dt in scans:\n        rung_in = bool(rung_in)\n        if rung_in:\n            dn = True\n        elif dn:\n            if not prev:\n                acc = min(preset, acc + dt)\n            if acc >= preset:\n                dn = False\n        tt = dn and not rung_in\n        prev = rung_in\n        out.append([dn, tt, acc])\n    return out\ndef check(label, actual, expected):\n    observations.append({\"check\": label, \"actual\": actual, \"expected\": expected, \"passed\": actual == expected})\nfixtures = [[['regression: power-up with false rung',\n   [60, [[False, 20], [False, 20], [False, 20], [True, 10]]],\n   [[False, False, 60], [False, False, 60], [False, False, 60], [True, False, 0]]],\n  ['regression: re-energized mid delay',\n   [100, [[True, 10], [False, 40], [False, 40], [True, 40], [False, 40], [False, 40], [False, 40]]],\n   [[True, False, 0],\n    [True, True, 0],\n    [True, True, 40],\n    [True, False, 0],\n    [True, True, 0],\n    [True, True, 40],\n    [True, True, 80]]],\n  ['control: zero preset drop',\n   [0, [[True, 10], [False, 10], [False, 10]]],\n   [[True, False, 0], [False, False, 0], [False, False, 0]]],\n  ['regression: exact expiry',\n   [60, [[True, 10], [False, 30], [False, 30], [False, 30], [False, 30]]],\n   [[True, False, 0], [True, True, 0], [True, True, 30], [False, False, 60], [False, False, 60]]],\n  ['regression: scenario 1',\n   [60, [[False, 70], [True, 10], [True, 70], [True, 10], [False, 70], [False, 10], [True, 10], [False, 30]]],\n   [[False, False, 60],\n    [True, False, 0],\n    [True, False, 0],\n    [True, False, 0],\n    [True, True, 0],\n    [True, True, 10],\n    [True, False, 0],\n    [True, True, 0]]],\n  ['regression: scenario 2',\n   [60, [[False, 30], [True, 50], [True, 20], [True, 30], [True, 70], [False, 50], [False, 50], [False, 70]]],\n   [[False, False, 60],\n    [True, False, 0],\n    [True, False, 0],\n    [True, False, 0],\n    [True, False, 0],\n    [True, True, 0],\n    [True, True, 50],\n    [False, False, 60]]],\n  ['regression: scenario 3',\n   [40,\n    [[True, 70],\n     [True, 0],\n     [False, 50],\n     [True, 30],\n     [False, 0],\n     [False, 50],\n     [False, 30],\n     [False, 50],\n     [False, 10],\n     [True, 20]]],\n   [[True, False, 0],\n    [True, False, 0],\n    [True, True, 0],\n    [True, False, 0],\n    [True, True, 0],\n    [False, False, 40],\n    [False, False, 40],\n    [False, False, 40],\n    [False, False, 40],\n    [True, False, 0]]],\n  ['regression: scenario 4',\n   [100,\n    [[False, 30],\n     [False, 70],\n     [True, 30],\n     [False, 30],\n     [False, 20],\n     [False, 50],\n     [False, 70],\n     [True, 50],\n     [True, 50],\n     [False, 20],\n     [False, 50]]],\n   [[False, False, 100],\n    [False, False, 100],\n    [True, False, 0],\n    [True, True, 0],\n    [True, True, 20],\n    [True, True, 70],\n    [False, False, 100],\n    [True, False, 0],\n    [True, False, 0],\n    [True, True, 0],\n    [True, True, 50]]]],\n [['regression: re-energized mid delay',\n   [100, [[True, 10], [False, 40], [False, 40], [True, 40], [False, 40], [False, 40], [False, 40]]],\n   [[True, False, 0],\n    [True, True, 0],\n    [True, True, 40],\n    [True, False, 0],\n    [True, True, 0],\n    [True, True, 40],\n    [True, True, 80]]],\n  ['regression: scenario 5',\n   [40, [[False, 50], [False, 70], [True, 70], [False, 10], [False, 30], [True, 70]]],\n   [[False, False, 40],\n    [False, False, 40],\n    [True, False, 0],\n    [True, True, 0],\n    [True, True, 30],\n    [True, False, 0]]],\n  ['regression: power-up with false rung',\n   [60, [[False, 20], [False, 20], [False, 20], [True, 10]]],\n   [[False, False, 60], [False, False, 60], [False, False, 60], [True, False, 0]]],\n  ['control: zero preset drop',\n   [0, [[True, 10], [False, 10], [False, 10]]],\n   [[True, False, 0], [False, False, 0], [False, False, 0]]],\n  ['regression: exact expiry',\n   [60, [[True, 10], [False, 30], [False, 30], [False, 30], [False, 30]]],\n   [[True, False, 0], [True, True, 0], [True, True, 30], [False, False, 60], [False, False, 60]]],\n  ['control: scenario 1',\n   [0, [[False, 30], [True, 20], [True, 30], [False, 50], [True, 0], [True, 50], [True, 50]]],\n   [[False, False, 0],\n    [True, False, 0],\n    [True, False, 0],\n    [False, False, 0],\n    [True, False, 0],\n    [True, False, 0],\n    [True, False, 0]]],\n  ['control: scenario 2',\n   [0, [[False, 10], [True, 0], [True, 70], [False, 0], [True, 70], [False, 20], [False, 10]]],\n   [[False, False, 0],\n    [True, False, 0],\n    [True, False, 0],\n    [False, False, 0],\n    [True, False, 0],\n    [False, False, 0],\n    [False, False, 0]]],\n  ['regression: scenario 3',\n   [150,\n    [[False, 50],\n     [False, 10],\n     [False, 0],\n     [False, 50],\n     [True, 50],\n     [False, 70],\n     [False, 10],\n     [True, 70],\n     [False, 50],\n     [False, 70],\n     [False, 20],\n     [True, 50],\n     [False, 0],\n     [True, 30]]],\n   [[False, False, 150],\n    [False, False, 150],\n    [False, False, 150],\n    [False, False, 150],\n    [True, False, 0],\n    [True, True, 0],\n    [True, True, 10],\n    [True, False, 0],\n    [True, True, 0],\n    [True, True, 70],\n    [True, True, 90],\n    [True, False, 0],\n    [True, True, 0],\n    [True, False, 0]]]],\n [['regression: exact expiry',\n   [60, [[True, 10], [False, 30], [False, 30], [False, 30], [False, 30]]],\n   [[True, False, 0], [True, True, 0], [True, True, 30], [False, False, 60], [False, False, 60]]],\n  ['regression: scenario 14',\n   [60,\n    [[False, 70],\n     [False, 0],\n     [True, 0],\n     [True, 30],\n     [False, 10],\n     [False, 20],\n     [False, 20],\n     [False, 10],\n     [True, 0],\n     [False, 50],\n     [False, 0],\n     [False, 20]]],\n   [[False, False, 60],\n    [False, False, 60],\n    [True, False, 0],\n    [True, False, 0],\n    [True, True, 0],\n    [True, True, 20],\n    [True, True, 40],\n    [True, True, 50],\n    [True, False, 0],\n    [True, True, 0],\n    [True, True, 0],\n    [True, True, 20]]],\n  ['regression: power-up with false rung',\n   [60, [[False, 20], [False, 20], [False, 20], [True, 10]]],\n   [[False, False, 60], [False, False, 60], [False, False, 60], [True, False, 0]]],\n  ['regression: re-energized mid delay',\n   [100, [[True, 10], [False, 40], [False, 40], [True, 40], [False, 40], [False, 40], [False, 40]]],\n   [[True, False, 0],\n    [True, True, 0],\n    [True, True, 40],\n    [True, False, 0],\n    [True, True, 0],\n    [True, True, 40],\n    [True, True, 80]]],\n  ['control: zero preset drop',\n   [0, [[True, 10], [False, 10], [False, 10]]],\n   [[True, False, 0], [False, False, 0], [False, False, 0]]],\n  ['control: scenario 1',\n   [0,\n    [[False, 50],\n     [True, 10],\n     [False, 0],\n     [True, 20],\n     [False, 70],\n     [False, 50],\n     [True, 70],\n     [False, 10],\n     [False, 10],\n     [False, 20],\n     [True, 70]]],\n   [[False, False, 0],\n    [True, False, 0],\n    [False, False, 0],\n    [True, False, 0],\n    [False, False, 0],\n    [False, False, 0],\n    [True, False, 0],\n    [False, False, 0],\n    [False, False, 0],\n    [False, False, 0],\n    [True, False, 0]]],\n  ['control: scenario 2',\n   [0,\n    [[False, 30],\n     [True, 50],\n     [False, 50],\n     [True, 0],\n     [True, 10],\n     [True, 10],\n     [False, 10],\n     [False, 50],\n     [False, 10]]],\n   [[False, False, 0],\n    [True, False, 0],\n    [False, False, 0],\n    [True, False, 0],\n    [True, False, 0],\n    [True, False, 0],\n    [False, False, 0],\n    [False, False, 0],\n    [False, False, 0]]],\n  ['control: scenario 3',\n   [0,\n    [[False, 10],\n     [False, 10],\n     [False, 70],\n     [False, 30],\n     [True, 50],\n     [False, 10],\n     [False, 0],\n     [True, 20],\n     [False, 70],\n     [True, 10],\n     [False, 70],\n     [True, 20],\n     [False, 70],\n     [True, 0]]],\n   [[False, False, 0],\n    [False, False, 0],\n    [False, False, 0],\n    [False, False, 0],\n    [True, False, 0],\n    [False, False, 0],\n    [False, False, 0],\n    [True, False, 0],\n    [False, False, 0],\n    [True, False, 0],\n    [False, False, 0],\n    [True, False, 0],\n    [False, False, 0],\n    [True, False, 0]]]],\n [['regression: scenario 1',\n   [40, [[True, 70], [True, 20], [True, 20], [False, 30], [False, 30], [False, 0], [False, 70], [False, 20]]],\n   [[True, False, 0],\n    [True, False, 0],\n    [True, False, 0],\n    [True, True, 0],\n    [True, True, 30],\n    [True, True, 30],\n    [False, False, 40],\n    [False, False, 40]]],\n  ['regression: scenario 9',\n   [150,\n    [[True, 10],\n     [True, 70],\n     [True, 50],\n     [False, 50],\n     [False, 20],\n     [False, 50],\n     [True, 50],\n     [True, 0],\n     [True, 70],\n     [False, 30],\n     [True, 0],\n     [False, 20],\n     [False, 10]]],\n   [[True, False, 0],\n    [True, False, 0],\n    [True, False, 0],\n    [True, True, 0],\n    [True, True, 20],\n    [True, True, 70],\n    [True, False, 0],\n    [True, False, 0],\n    [True, False, 0],\n    [True, True, 0],\n    [True, False, 0],\n    [True, True, 0],\n    [True, True, 10]]],\n  ['regression: power-up with false rung',\n   [60, [[False, 20], [False, 20], [False, 20], [True, 10]]],\n   [[False, False, 60], [False, False, 60], [False, False, 60], [True, False, 0]]],\n  ['regression: re-energized mid delay',\n   [100, [[True, 10], [False, 40], [False, 40], [True, 40], [False, 40], [False, 40], [False, 40]]],\n   [[True, False, 0],\n    [True, True, 0],\n    [True, True, 40],\n    [True, False, 0],\n    [True, True, 0],\n    [True, True, 40],\n    [True, True, 80]]],\n  ['control: zero preset drop',\n   [0, [[True, 10], [False, 10], [False, 10]]],\n   [[True, False, 0], [False, False, 0], [False, False, 0]]],\n  ['regression: exact expiry',\n   [60, [[True, 10], [False, 30], [False, 30], [False, 30], [False, 30]]],\n   [[True, False, 0], [True, True, 0], [True, True, 30], [False, False, 60], [False, False, 60]]],\n  ['regression: scenario 2',\n   [100,\n    [[False, 30],\n     [False, 20],\n     [True, 20],\n     [True, 10],\n     [True, 70],\n     [False, 20],\n     [False, 10],\n     [True, 20],\n     [False, 0],\n     [True, 0],\n     [True, 0]]],\n   [[False, False, 100],\n    [False, False, 100],\n    [True, False, 0],\n    [True, False, 0],\n    [True, False, 0],\n    [True, True, 0],\n    [True, True, 10],\n    [True, False, 0],\n    [True, True, 0],\n    [True, False, 0],\n    [True, False, 0]]],\n  ['regression: scenario 3',\n   [60, [[False, 70], [True, 30], [True, 0], [True, 50], [True, 30], [True, 70], [True, 0]]],\n   [[False, False, 60],\n    [True, False, 0],\n    [True, False, 0],\n    [True, False, 0],\n    [True, False, 0],\n    [True, False, 0],\n    [True, False, 0]]]],\n [['regression: scenario 2',\n   [40,\n    [[False, 70],\n     [True, 70],\n     [False, 50],\n     [True, 70],\n     [False, 10],\n     [False, 30],\n     [True, 0],\n     [True, 50],\n     [False, 0],\n     [False, 30]]],\n   [[False, False, 40],\n    [True, False, 0],\n    [True, True, 0],\n    [True, False, 0],\n    [True, True, 0],\n    [True, True, 30],\n    [True, False, 0],\n    [True, False, 0],\n    [True, True, 0],\n    [True, True, 30]]],\n  ['regression: scenario 10',\n   [150,\n    [[False, 30],\n     [True, 70],\n     [False, 20],\n     [False, 30],\n     [False, 20],\n     [False, 10],\n     [False, 20],\n     [False, 30],\n     [True, 70],\n     [True, 10],\n     [False, 70],\n     [False, 20]]],\n   [[False, False, 150],\n    [True, False, 0],\n    [True, True, 0],\n    [True, True, 30],\n    [True, True, 50],\n    [True, True, 60],\n    [True, True, 80],\n    [True, True, 110],\n    [True, False, 0],\n    [True, False, 0],\n    [True, True, 0],\n    [True, True, 20]]],\n  ['regression: power-up with false rung',\n   [60, [[False, 20], [False, 20], [False, 20], [True, 10]]],\n   [[False, False, 60], [False, False, 60], [False, False, 60], [True, False, 0]]],\n  ['regression: re-energized mid delay',\n   [100, [[True, 10], [False, 40], [False, 40], [True, 40], [False, 40], [False, 40], [False, 40]]],\n   [[True, False, 0],\n    [True, True, 0],\n    [True, True, 40],\n    [True, False, 0],\n    [True, True, 0],\n    [True, True, 40],\n    [True, True, 80]]],\n  ['control: zero preset drop',\n   [0, [[True, 10], [False, 10], [False, 10]]],\n   [[True, False, 0], [False, False, 0], [False, False, 0]]],\n  ['regression: exact expiry',\n   [60, [[True, 10], [False, 30], [False, 30], [False, 30], [False, 30]]],\n   [[True, False, 0], [True, True, 0], [True, True, 30], [False, False, 60], [False, False, 60]]],\n  ['regression: scenario 1',\n   [40,\n    [[True, 70], [True, 20], [False, 50], [False, 20], [False, 50], [False, 50], [False, 50], [False, 0]]],\n   [[True, False, 0],\n    [True, False, 0],\n    [True, True, 0],\n    [True, True, 20],\n    [False, False, 40],\n    [False, False, 40],\n    [False, False, 40],\n    [False, False, 40]]],\n  ['control: scenario 3',\n   [0,\n    [[False, 50],\n     [False, 50],\n     [False, 20],\n     [False, 20],\n     [True, 10],\n     [True, 50],\n     [True, 20],\n     [False, 70],\n     [False, 30],\n     [False, 10],\n     [True, 10],\n     [True, 70],\n     [True, 10],\n     [False, 50]]],\n   [[False, False, 0],\n    [False, False, 0],\n    [False, False, 0],\n    [False, False, 0],\n    [True, False, 0],\n    [True, False, 0],\n    [True, False, 0],\n    [False, False, 0],\n    [False, False, 0],\n    [False, False, 0],\n    [True, False, 0],\n    [True, False, 0],\n    [True, False, 0],\n    [False, 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-tof-off-delay-rung-true-reset","generated_at":"2026-09-29T14:51:40.261841+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.","root_cause":"A true rung sets DN but does not clear the accumulator.","sha256":"cb44d5141163d0bdc9a7463854e0db4b26726904ced581f07299c40ee4fac814","title":"TOF keeps stale delay time when its rung returns · 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":47.522,"exit_code":1,"observations":[{"actual":[[false,false,60],[false,false,60],[false,false,60],[true,false,0]],"check":"regression: power-up with false rung","expected":[[false,false,60],[false,false,60],[false,false,60],[true,false,0]],"passed":true},{"actual":[[true,false,0],[true,true,0],[true,true,40],[true,false,40],[true,true,40],[true,true,80],[false,false,100]],"check":"regression: re-energized mid delay","expected":[[true,false,0],[true,true,0],[true,true,40],[true,false,0],[true,true,0],[true,true,40],[true,true,80]],"passed":false},{"actual":[[true,false,0],[false,false,0],[false,false,0]],"check":"control: zero preset drop","expected":[[true,false,0],[false,false,0],[false,false,0]],"passed":true},{"actual":[[true,false,0],[true,true,0],[true,true,30],[false,false,60],[false,false,60]],"check":"regression: exact expiry","expected":[[true,false,0],[true,true,0],[true,true,30],[false,false,60],[false,false,60]],"passed":true},{"actual":[[false,false,60],[true,false,0],[true,false,0],[true,false,0],[true,true,0],[true,true,10],[true,false,10],[true,true,10]],"check":"regression: scenario 1","expected":[[false,false,60],[true,false,0],[true,false,0],[true,false,0],[true,true,0],[true,true,10],[true,false,0],[true,true,0]],"passed":false},{"actual":[[false,false,60],[true,false,0],[true,false,0],[true,false,0],[true,false,0],[true,true,0],[true,true,50],[false,false,60]],"check":"regression: scenario 2","expected":[[false,false,60],[true,false,0],[true,false,0],[true,false,0],[true,false,0],[true,true,0],[true,true,50],[false,false,60]],"passed":true},{"actual":[[true,false,0],[true,false,0],[true,true,0],[true,false,0],[true,true,0],[false,false,40],[false,false,40],[false,false,40],[false,false,40],[true,false,0]],"check":"regression: scenario 3","expected":[[true,false,0],[true,false,0],[true,true,0],[true,false,0],[true,true,0],[false,false,40],[false,false,40],[false,false,40],[false,false,40],[true,false,0]],"passed":true},{"actual":[[false,false,100],[false,false,100],[true,false,0],[true,true,0],[true,true,20],[true,true,70],[false,false,100],[true,false,0],[true,false,0],[true,true,0],[true,true,50]],"check":"regression: scenario 4","expected":[[false,false,100],[false,false,100],[true,false,0],[true,true,0],[true,true,20],[true,true,70],[false,false,100],[true,false,0],[true,false,0],[true,true,0],[true,true,50]],"passed":true}],"passed":false,"stderr":"","stdout":"{\"observations\": [{\"check\": \"regression: power-up with false rung\", \"actual\": [[false, false, 60], [false, false, 60], [false, false, 60], [true, false, 0]], \"expected\": [[false, false, 60], [false, false, 60], [false, false, 60], [true, false, 0]], \"passed\": true}, {\"check\": \"regression: re-energized mid delay\", \"actual\": [[true, false, 0], [true, true, 0], [true, true, 40], [true, false, 40], [true, true, 40], [true, true, 80], [false, false, 100]], \"expected\": [[true, false, 0], [true, true, 0], [true, true, 40], [true, false, 0], [true, true, 0], [true, true, 40], [true, true, 80]], \"passed\": false}, {\"check\": \"control: zero preset drop\", \"actual\": [[true, false, 0], [false, false, 0], [false, false, 0]], \"expected\": [[true, false, 0], [false, false, 0], [false, false, 0]], \"passed\": true}, {\"check\": \"regression: exact expiry\", \"actual\": [[true, false, 0], [true, true, 0], [true, true, 30], [false, false, 60], [false, false, 60]], \"expected\": [[true, false, 0], [true, true, 0], [true, true, 30], [false, false, 60], [false, false, 60]], \"passed\": true}, {\"check\": \"regression: scenario 1\", \"actual\": [[false, false, 60], [true, false, 0], [true, false, 0], [true, false, 0], [true, true, 0], [true, true, 10], [true, false, 10], [true, true, 10]], \"expected\": [[false, false, 60], [true, false, 0], [true, false, 0], [true, false, 0], [true, true, 0], [true, true, 10], [true, false, 0], [true, true, 0]], \"passed\": false}, {\"check\": \"regression: scenario 2\", \"actual\": [[false, false, 60], [true, false, 0], [true, false, 0], [true, false, 0], [true, false, 0], [true, true, 0], [true, true, 50], [false, false, 60]], \"expected\": [[false, false, 60], [true, false, 0], [true, false, 0], [true, false, 0], [true, false, 0], [true, true, 0], [true, true, 50], [false, false, 60]], \"passed\": true}, {\"check\": \"regression: scenario 3\", \"actual\": [[true, false, 0], [true, false, 0], [true, true, 0], [true, false, 0], [true, true, 0], [false, false, 40], [false, false, 40], [false, false, 40], [false, false, 40], [true, false, 0]], \"expected\": [[true, false, 0], [true, false, 0], [true, true, 0], [true, false, 0], [true, true, 0], [false, false, 40], [false, false, 40], [false, false, 40], [false, false, 40], [true, false, 0]], \"passed\": true}, {\"check\": \"regression: scenario 4\", \"actual\": [[false, false, 100], [false, false, 100], [true, false, 0], [true, true, 0], [true, true, 20], [true, true, 70], [false, false, 100], [true, false, 0], [true, false, 0], [true, true, 0], [true, true, 50]], \"expected\": [[false, false, 100], [false, false, 100], [true, false, 0], [true, true, 0], [true, true, 20], [true, true, 70], [false, false, 100], [true, false, 0], [true, false, 0], [true, true, 0], [true, true, 50]], \"passed\": true}], \"passed\": false}\n"},"broken":{"elapsed_ms":48.316,"exit_code":1,"observations":[{"actual":[[false,false,60],[false,false,60],[false,false,60],[true,false,60]],"check":"regression: power-up with false rung","expected":[[false,false,60],[false,false,60],[false,false,60],[true,false,0]],"passed":false},{"actual":[[true,false,100],[false,false,100],[false,false,100],[true,false,100],[false,false,100],[false,false,100],[false,false,100]],"check":"regression: re-energized mid delay","expected":[[true,false,0],[true,true,0],[true,true,40],[true,false,0],[true,true,0],[true,true,40],[true,true,80]],"passed":false},{"actual":[[true,false,0],[false,false,0],[false,false,0]],"check":"control: zero preset drop","expected":[[true,false,0],[false,false,0],[false,false,0]],"passed":true},{"actual":[[true,false,60],[false,false,60],[false,false,60],[false,false,60],[false,false,60]],"check":"regression: exact expiry","expected":[[true,false,0],[true,true,0],[true,true,30],[false,false,60],[false,false,60]],"passed":false},{"actual":[[false,false,60],[true,false,60],[true,false,60],[true,false,60],[false,false,60],[false,false,60],[true,false,60],[false,false,60]],"check":"regression: scenario 1","expected":[[false,false,60],[true,false,0],[true,false,0],[true,false,0],[true,true,0],[true,true,10],[true,false,0],[true,true,0]],"passed":false},{"actual":[[false,false,60],[true,false,60],[true,false,60],[true,false,60],[true,false,60],[false,false,60],[false,false,60],[false,false,60]],"check":"regression: scenario 2","expected":[[false,false,60],[true,false,0],[true,false,0],[true,false,0],[true,false,0],[true,true,0],[true,true,50],[false,false,60]],"passed":false},{"actual":[[true,false,40],[true,false,40],[false,false,40],[true,false,40],[false,false,40],[false,false,40],[false,false,40],[false,false,40],[false,false,40],[true,false,40]],"check":"regression: scenario 3","expected":[[true,false,0],[true,false,0],[true,true,0],[true,false,0],[true,true,0],[false,false,40],[false,false,40],[false,false,40],[false,false,40],[true,false,0]],"passed":false},{"actual":[[false,false,100],[false,false,100],[true,false,100],[false,false,100],[false,false,100],[false,false,100],[false,false,100],[true,false,100],[true,false,100],[false,false,100],[false,false,100]],"check":"regression: scenario 4","expected":[[false,false,100],[false,false,100],[true,false,0],[true,true,0],[true,true,20],[true,true,70],[false,false,100],[true,false,0],[true,false,0],[true,true,0],[true,true,50]],"passed":false}],"passed":false,"stderr":"","stdout":"{\"observations\": [{\"check\": \"regression: power-up with false rung\", \"actual\": [[false, false, 60], [false, false, 60], [false, false, 60], [true, false, 60]], \"expected\": [[false, false, 60], [false, false, 60], [false, false, 60], [true, false, 0]], \"passed\": false}, {\"check\": \"regression: re-energized mid delay\", \"actual\": [[true, false, 100], [false, false, 100], [false, false, 100], [true, false, 100], [false, false, 100], [false, false, 100], [false, false, 100]], \"expected\": [[true, false, 0], [true, true, 0], [true, true, 40], [true, false, 0], [true, true, 0], [true, true, 40], [true, true, 80]], \"passed\": false}, {\"check\": \"control: zero preset drop\", \"actual\": [[true, false, 0], [false, false, 0], [false, false, 0]], \"expected\": [[true, false, 0], [false, false, 0], [false, false, 0]], \"passed\": true}, {\"check\": \"regression: exact expiry\", \"actual\": [[true, false, 60], [false, false, 60], [false, false, 60], [false, false, 60], [false, false, 60]], \"expected\": [[true, false, 0], [true, true, 0], [true, true, 30], [false, false, 60], [false, false, 60]], \"passed\": false}, {\"check\": \"regression: scenario 1\", \"actual\": [[false, false, 60], [true, false, 60], [true, false, 60], [true, false, 60], [false, false, 60], [false, false, 60], [true, false, 60], [false, false, 60]], \"expected\": [[false, false, 60], [true, false, 0], [true, false, 0], [true, false, 0], [true, true, 0], [true, true, 10], [true, false, 0], [true, true, 0]], \"passed\": false}, {\"check\": \"regression: scenario 2\", \"actual\": [[false, false, 60], [true, false, 60], [true, false, 60], [true, false, 60], [true, false, 60], [false, false, 60], [false, false, 60], [false, false, 60]], \"expected\": [[false, false, 60], [true, false, 0], [true, false, 0], [true, false, 0], [true, false, 0], [true, true, 0], [true, true, 50], [false, false, 60]], \"passed\": false}, {\"check\": \"regression: scenario 3\", \"actual\": [[true, false, 40], [true, false, 40], [false, false, 40], [true, false, 40], [false, false, 40], [false, false, 40], [false, false, 40], [false, false, 40], [false, false, 40], [true, false, 40]], \"expected\": [[true, false, 0], [true, false, 0], [true, true, 0], [true, false, 0], [true, true, 0], [false, false, 40], [false, false, 40], [false, false, 40], [false, false, 40], [true, false, 0]], \"passed\": false}, {\"check\": \"regression: scenario 4\", \"actual\": [[false, false, 100], [false, false, 100], [true, false, 100], [false, false, 100], [false, false, 100], [false, false, 100], [false, false, 100], [true, false, 100], [true, false, 100], [false, false, 100], [false, false, 100]], \"expected\": [[false, false, 100], [false, false, 100], [true, false, 0], [true, true, 0], [true, true, 20], [true, true, 70], [false, false, 100], [true, false, 0], [true, false, 0], [true, true, 0], [true, true, 50]], \"passed\": false}], \"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."}}