{"abstract":"A delay that spans the 65535-to-0 rollover reports negative elapsed time and never finishes.","category":"PLC ladder logic scan cycles","checks":8,"contract":"Delay timer built on a 16-bit free-running clock register (ticks wrap from 65535 to 0). samples is a list of [enable, clock] read each scan. The first enabled scan captures the start tick; elapsed is (clock - start) modulo 65536. Done latches once elapsed >= preset and stays set while enabled even if the elapsed value later wraps. A disabled scan clears start and done. Return [done, elapsed capped at preset once done] per scan, [False, 0] when disabled.","contract_signature":"preset, samples","evaluation_group":"w2-plc-ladder-logic-scan-cycles-free-running-clock-timer","failed_approach":"Taking the absolute difference measures the wrong interval across the rollover.","family":"w2-plc-ladder-logic-scan-cycles-free-running-clock-timer-clock-wrap","id":"FA-92251","implementations":{"attempt":{"sha256":"a950e29f8281441ac939797c4211386389b03a3d8b7d12f30ca8380523a425ab","source":"\"\"\"Failure Map reference implementation. Python standard library only.\"\"\"\nimport json\n\nN = 1\nobservations = []\ndef solve(preset, samples):\n    start = None\n    done = False\n    out = []\n    for enable, clock in samples:\n        if not enable:\n            start = None\n            done = False\n            out.append([False, 0])\n            continue\n        if start is None:\n            start = clock\n        elapsed = abs(clock - start)\n        if elapsed >= preset:\n            done = True\n        out.append([done, preset if done else elapsed])\n    return out\ndef check(label, actual, expected):\n    observations.append({\"check\": label, \"actual\": actual, \"expected\": expected, \"passed\": actual == expected})\nfixtures = [[['regression: clock wrap',\n   [100, [[True, 65500], [True, 65530], [True, 40], [True, 64], [False, 70]]],\n   [[False, 0], [False, 30], [False, 76], [True, 100], [False, 0]]],\n  ['regression: scenario 6',\n   [40000,\n    [[True, 63614],\n     [True, 63728],\n     [True, 22150],\n     [True, 22324],\n     [True, 22510],\n     [True, 22616],\n     [True, 22811],\n     [True, 26381],\n     [True, 40962],\n     [True, 4300],\n     [True, 4446],\n     [True, 6819]]],\n   [[False, 0],\n    [False, 114],\n    [False, 24072],\n    [False, 24246],\n    [False, 24432],\n    [False, 24538],\n    [False, 24733],\n    [False, 28303],\n    [True, 40000],\n    [True, 40000],\n    [True, 40000],\n    [True, 40000]]],\n  ['control: long enable past a full wrap',\n   [1000, [[True, 100], [True, 30100], [True, 60100], [True, 24564], [True, 700]]],\n   [[False, 0], [True, 1000], [True, 1000], [True, 1000], [True, 1000]]],\n  ['control: elapsed returns to zero',\n   [5, [[True, 10], [True, 20], [True, 10], [True, 12]]],\n   [[False, 0], [True, 5], [True, 5], [True, 5]]],\n  ['control: enable after idle',\n   [50, [[False, 0], [False, 400], [True, 900], [True, 930], [True, 960]]],\n   [[False, 0], [False, 0], [False, 0], [False, 30], [True, 50]]],\n  ['regression: scenario 1',\n   [100,\n    [[True, 53593],\n     [True, 53635],\n     [True, 10212],\n     [False, 10250],\n     [True, 24553],\n     [True, 35364],\n     [True, 35501],\n     [True, 35591],\n     [True, 65279],\n     [True, 65379],\n     [True, 65509]]],\n   [[False, 0],\n    [False, 42],\n    [True, 100],\n    [False, 0],\n    [False, 0],\n    [True, 100],\n    [True, 100],\n    [True, 100],\n    [True, 100],\n    [True, 100],\n    [True, 100]]],\n  ['control: scenario 2',\n   [100,\n    [[True, 17304],\n     [True, 20531],\n     [True, 27559],\n     [False, 57396],\n     [True, 19489],\n     [True, 46000],\n     [True, 46035],\n     [True, 46209],\n     [True, 5526]]],\n   [[False, 0],\n    [True, 100],\n    [True, 100],\n    [False, 0],\n    [False, 0],\n    [True, 100],\n    [True, 100],\n    [True, 100],\n    [True, 100]]],\n  ['control: scenario 3',\n   [40000,\n    [[True, 42783],\n     [False, 4625],\n     [True, 4670],\n     [True, 8857],\n     [False, 15422],\n     [False, 15500],\n     [True, 15560],\n     [True, 27335],\n     [True, 27471]]],\n   [[False, 0],\n    [False, 0],\n    [False, 0],\n    [False, 4187],\n    [False, 0],\n    [False, 0],\n    [False, 0],\n    [False, 11775],\n    [False, 11911]]]],\n [['regression: scenario 1',\n   [1000,\n    [[False, 39404],\n     [False, 39599],\n     [True, 39752],\n     [True, 39914],\n     [False, 49270],\n     [True, 53547],\n     [True, 53700],\n     [True, 4426]]],\n   [[False, 0], [False, 0], [False, 0], [False, 162], [False, 0], [False, 0], [False, 153], [True, 1000]]],\n  ['regression: scenario 9',\n   [65535,\n    [[True, 50243],\n     [True, 50414],\n     [True, 54443],\n     [True, 54585],\n     [True, 54684],\n     [False, 63787],\n     [True, 63849],\n     [True, 7734]]],\n   [[False, 0],\n    [False, 171],\n    [False, 4200],\n    [False, 4342],\n    [False, 4441],\n    [False, 0],\n    [False, 0],\n    [False, 9421]]],\n  ['regression: clock wrap',\n   [100, [[True, 65500], [True, 65530], [True, 40], [True, 64], [False, 70]]],\n   [[False, 0], [False, 30], [False, 76], [True, 100], [False, 0]]],\n  ['control: long enable past a full wrap',\n   [1000, [[True, 100], [True, 30100], [True, 60100], [True, 24564], [True, 700]]],\n   [[False, 0], [True, 1000], [True, 1000], [True, 1000], [True, 1000]]],\n  ['control: elapsed returns to zero',\n   [5, [[True, 10], [True, 20], [True, 10], [True, 12]]],\n   [[False, 0], [True, 5], [True, 5], [True, 5]]],\n  ['control: enable after idle',\n   [50, [[False, 0], [False, 400], [True, 900], [True, 930], [True, 960]]],\n   [[False, 0], [False, 0], [False, 0], [False, 30], [True, 50]]],\n  ['control: scenario 2',\n   [5,\n    [[True, 40525],\n     [True, 40666],\n     [True, 40725],\n     [True, 58227],\n     [True, 18319],\n     [False, 25775],\n     [True, 25797],\n     [True, 25799]]],\n   [[False, 0], [True, 5], [True, 5], [True, 5], [True, 5], [False, 0], [False, 0], [False, 2]]],\n  ['control: scenario 3',\n   [5,\n    [[False, 30258],\n     [True, 30296],\n     [True, 45510],\n     [True, 2343],\n     [True, 12538],\n     [True, 12596],\n     [False, 12635],\n     [True, 37410],\n     [True, 53676],\n     [True, 10497],\n     [True, 10628],\n     [False, 10824],\n     [True, 27527],\n     [True, 55148]]],\n   [[False, 0],\n    [False, 0],\n    [True, 5],\n    [True, 5],\n    [True, 5],\n    [True, 5],\n    [False, 0],\n    [False, 0],\n    [True, 5],\n    [True, 5],\n    [True, 5],\n    [False, 0],\n    [False, 0],\n    [True, 5]]]],\n [['regression: scenario 5',\n   [5,\n    [[True, 36141],\n     [True, 56668],\n     [False, 56831],\n     [True, 56893],\n     [True, 6106],\n     [True, 24708],\n     [True, 45326],\n     [True, 65076],\n     [True, 65184]]],\n   [[False, 0], [True, 5], [False, 0], [False, 0], [True, 5], [True, 5], [True, 5], [True, 5], [True, 5]]],\n  ['regression: scenario 9',\n   [65535,\n    [[True, 44901],\n     [False, 62429],\n     [True, 62596],\n     [True, 62792],\n     [True, 21296],\n     [True, 21309],\n     [False, 21419],\n     [False, 21455],\n     [True, 21477]]],\n   [[False, 0],\n    [False, 0],\n    [False, 0],\n    [False, 196],\n    [False, 24236],\n    [False, 24249],\n    [False, 0],\n    [False, 0],\n    [False, 0]]],\n  ['regression: clock wrap',\n   [100, [[True, 65500], [True, 65530], [True, 40], [True, 64], [False, 70]]],\n   [[False, 0], [False, 30], [False, 76], [True, 100], [False, 0]]],\n  ['control: long enable past a full wrap',\n   [1000, [[True, 100], [True, 30100], [True, 60100], [True, 24564], [True, 700]]],\n   [[False, 0], [True, 1000], [True, 1000], [True, 1000], [True, 1000]]],\n  ['control: elapsed returns to zero',\n   [5, [[True, 10], [True, 20], [True, 10], [True, 12]]],\n   [[False, 0], [True, 5], [True, 5], [True, 5]]],\n  ['control: enable after idle',\n   [50, [[False, 0], [False, 400], [True, 900], [True, 930], [True, 960]]],\n   [[False, 0], [False, 0], [False, 0], [False, 30], [True, 50]]],\n  ['control: scenario 1',\n   [100,\n    [[False, 22859],\n     [True, 23009],\n     [True, 46893],\n     [True, 47082],\n     [True, 47173],\n     [True, 47274],\n     [False, 47358],\n     [True, 47448],\n     [True, 54303],\n     [True, 54477],\n     [False, 54574]]],\n   [[False, 0],\n    [False, 0],\n    [True, 100],\n    [True, 100],\n    [True, 100],\n    [True, 100],\n    [False, 0],\n    [False, 0],\n    [True, 100],\n    [True, 100],\n    [False, 0]]],\n  ['regression: scenario 2',\n   [40000,\n    [[True, 54821],\n     [True, 18035],\n     [True, 32212],\n     [True, 38340],\n     [True, 38521],\n     [True, 38565],\n     [True, 38691],\n     [True, 52834],\n     [True, 6573],\n     [False, 6717],\n     [True, 13602]]],\n   [[False, 0],\n    [False, 28750],\n    [True, 40000],\n    [True, 40000],\n    [True, 40000],\n    [True, 40000],\n    [True, 40000],\n    [True, 40000],\n    [True, 40000],\n    [False, 0],\n    [False, 0]]]],\n [['regression: scenario 12',\n   [1000,\n    [[True, 53638],\n     [True, 11442],\n     [False, 11564],\n     [True, 24156],\n     [False, 44990],\n     [True, 45016],\n     [True, 539],\n     [False, 562],\n     [True, 677],\n     [True, 8181],\n     [True, 18211],\n     [False, 18406],\n     [True, 18528],\n     [True, 18593]]],\n   [[False, 0],\n    [True, 1000],\n    [False, 0],\n    [False, 0],\n    [False, 0],\n    [False, 0],\n    [True, 1000],\n    [False, 0],\n    [False, 0],\n    [True, 1000],\n    [True, 1000],\n    [False, 0],\n    [False, 0],\n    [False, 65]]],\n  ['regression: scenario 26',\n   [40000,\n    [[False, 62137],\n     [True, 62189],\n     [True, 62205],\n     [True, 3058],\n     [True, 3093],\n     [True, 3203],\n     [True, 3254],\n     [False, 3435],\n     [False, 3460],\n     [True, 3482],\n     [True, 3516],\n     [True, 3537],\n     [False, 3676],\n     [True, 22059]]],\n   [[False, 0],\n    [False, 0],\n    [False, 16],\n    [False, 6405],\n    [False, 6440],\n    [False, 6550],\n    [False, 6601],\n    [False, 0],\n    [False, 0],\n    [False, 0],\n    [False, 34],\n    [False, 55],\n    [False, 0],\n    [False, 0]]],\n  ['regression: clock wrap',\n   [100, [[True, 65500], [True, 65530], [True, 40], [True, 64], [False, 70]]],\n   [[False, 0], [False, 30], [False, 76], [True, 100], [False, 0]]],\n  ['control: long enable past a full wrap',\n   [1000, [[True, 100], [True, 30100], [True, 60100], [True, 24564], [True, 700]]],\n   [[False, 0], [True, 1000], [True, 1000], [True, 1000], [True, 1000]]],\n  ['control: elapsed returns to zero',\n   [5, [[True, 10], [True, 20], [True, 10], [True, 12]]],\n   [[False, 0], [True, 5], [True, 5], [True, 5]]],\n  ['control: enable after idle',\n   [50, [[False, 0], [False, 400], [True, 900], [True, 930], [True, 960]]],\n   [[False, 0], [False, 0], [False, 0], [False, 30], [True, 50]]],\n  ['control: scenario 1',\n   [65535,\n    [[False, 3784],\n     [False, 8211],\n     [False, 33966],\n     [True, 50163],\n     [True, 63009],\n     [False, 63184],\n     [True, 63243],\n     [True, 63325]]],\n   [[False, 0], [False, 0], [False, 0], [False, 0], [False, 12846], [False, 0], [False, 0], [False, 82]]],\n  ['control: scenario 2',\n   [1000,\n    [[False, 46148],\n     [True, 57365],\n     [False, 57416],\n     [True, 57439],\n     [True, 57613],\n     [True, 57776],\n     [True, 61872],\n     [True, 62038],\n     [True, 9532],\n     [True, 32841],\n     [True, 32973]]],\n   [[False, 0],\n    [False, 0],\n    [False, 0],\n    [False, 0],\n    [False, 174],\n    [False, 337],\n    [True, 1000],\n    [True, 1000],\n    [True, 1000],\n    [True, 1000],\n    [True, 1000]]]],\n [['regression: scenario 13',\n   [65535,\n    [[True, 49642],\n     [True, 49736],\n     [True, 12136],\n     [False, 12149],\n     [False, 22343],\n     [True, 34105],\n     [True, 34175],\n     [True, 49582],\n     [False, 8498],\n     [True, 10010],\n     [True, 10081],\n     [True, 10163],\n     [True, 38620],\n     [True, 62085]]],\n   [[False, 0],\n    [False, 94],\n    [False, 28030],\n    [False, 0],\n    [False, 0],\n    [False, 0],\n    [False, 70],\n    [False, 15477],\n    [False, 0],\n    [False, 0],\n    [False, 71],\n    [False, 153],\n    [False, 28610],\n    [False, 52075]]],\n  ['regression: scenario 28',\n   [40000,\n    [[True, 34331],\n     [False, 34410],\n     [False, 34523],\n     [True, 34686],\n     [True, 34828],\n     [True, 35005],\n     [True, 43248],\n     [True, 221]]],\n   [[False, 0],\n    [False, 0],\n    [False, 0],\n    [False, 0],\n    [False, 142],\n    [False, 319],\n    [False, 8562],\n    [False, 31071]]],\n  ['regression: clock wrap',\n   [100, [[True, 65500], [True, 65530], [True, 40], [True, 64], [False, 70]]],\n   [[False, 0], [False, 30], [False, 76], [True, 100], [False, 0]]],\n  ['control: long enable past a full wrap',\n   [1000, [[True, 100], [True, 30100], [True, 60100], [True, 24564], [True, 700]]],\n   [[False, 0], [True, 1000], [True, 1000], [True, 1000], [True, 1000]]],\n  ['control: elapsed returns to zero',\n   [5, [[True, 10], [True, 20], [True, 10], [True, 12]]],\n   [[False, 0], [True, 5], [True, 5], [True, 5]]],\n  ['control: enable after idle',\n   [50, [[False, 0], [False, 400], [True, 900], [True, 930], [True, 960]]],\n   [[False, 0], [False, 0], [False, 0], [False, 30], [True, 50]]],\n  ['control: scenario 1',\n   [40000,\n    [[True, 14860],\n     [True, 43167],\n     [True, 43310],\n     [True, 43470],\n     [False, 65246],\n     [False, 2333],\n     [True, 20092],\n     [True, 45967],\n     [False, 64834],\n     [True, 20225],\n     [False, 20250],\n     [True, 21773],\n     [True, 26780]]],\n   [[False, 0],\n    [False, 28307],\n    [False, 28450],\n    [False, 28610],\n    [False, 0],\n    [False, 0],\n    [False, 0],\n    [False, 25875],\n    [False, 0],\n    [False, 0],\n    [False, 0],\n    [False, 0],\n    [False, 5007]]],\n  ['control: scenario 2',\n   [1000,\n    [[True, 51184],\n     [True, 56535],\n     [True, 13279],\n     [True, 24517],\n     [True, 24685],\n     [True, 32146],\n     [True, 59255],\n     [False, 21739],\n     [True, 21822],\n     [True, 43196]]],\n   [[False, 0],\n    [True, 1000],\n    [True, 1000],\n    [True, 1000],\n    [True, 1000],\n    [True, 1000],\n    [True, 1000],\n    [False, 0],\n    [False, 0],\n    [True, 1000]]]]]\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":"cbec1045f2ae5130283e04af934ae6624599f62b629c8b8b78c4faa80b7c205b","source":"\"\"\"Failure Map reference implementation. Python standard library only.\"\"\"\nimport json\n\nN = 1\nobservations = []\ndef solve(preset, samples):\n    start = None\n    done = False\n    out = []\n    for enable, clock in samples:\n        if not enable:\n            start = None\n            done = False\n            out.append([False, 0])\n            continue\n        if start is None:\n            start = clock\n        elapsed = clock - start\n        if elapsed >= preset:\n            done = True\n        out.append([done, preset if done else elapsed])\n    return out\ndef check(label, actual, expected):\n    observations.append({\"check\": label, \"actual\": actual, \"expected\": expected, \"passed\": actual == expected})\nfixtures = [[['regression: clock wrap',\n   [100, [[True, 65500], [True, 65530], [True, 40], [True, 64], [False, 70]]],\n   [[False, 0], [False, 30], [False, 76], [True, 100], [False, 0]]],\n  ['regression: scenario 6',\n   [40000,\n    [[True, 63614],\n     [True, 63728],\n     [True, 22150],\n     [True, 22324],\n     [True, 22510],\n     [True, 22616],\n     [True, 22811],\n     [True, 26381],\n     [True, 40962],\n     [True, 4300],\n     [True, 4446],\n     [True, 6819]]],\n   [[False, 0],\n    [False, 114],\n    [False, 24072],\n    [False, 24246],\n    [False, 24432],\n    [False, 24538],\n    [False, 24733],\n    [False, 28303],\n    [True, 40000],\n    [True, 40000],\n    [True, 40000],\n    [True, 40000]]],\n  ['control: long enable past a full wrap',\n   [1000, [[True, 100], [True, 30100], [True, 60100], [True, 24564], [True, 700]]],\n   [[False, 0], [True, 1000], [True, 1000], [True, 1000], [True, 1000]]],\n  ['control: elapsed returns to zero',\n   [5, [[True, 10], [True, 20], [True, 10], [True, 12]]],\n   [[False, 0], [True, 5], [True, 5], [True, 5]]],\n  ['control: enable after idle',\n   [50, [[False, 0], [False, 400], [True, 900], [True, 930], [True, 960]]],\n   [[False, 0], [False, 0], [False, 0], [False, 30], [True, 50]]],\n  ['regression: scenario 1',\n   [100,\n    [[True, 53593],\n     [True, 53635],\n     [True, 10212],\n     [False, 10250],\n     [True, 24553],\n     [True, 35364],\n     [True, 35501],\n     [True, 35591],\n     [True, 65279],\n     [True, 65379],\n     [True, 65509]]],\n   [[False, 0],\n    [False, 42],\n    [True, 100],\n    [False, 0],\n    [False, 0],\n    [True, 100],\n    [True, 100],\n    [True, 100],\n    [True, 100],\n    [True, 100],\n    [True, 100]]],\n  ['control: scenario 2',\n   [100,\n    [[True, 17304],\n     [True, 20531],\n     [True, 27559],\n     [False, 57396],\n     [True, 19489],\n     [True, 46000],\n     [True, 46035],\n     [True, 46209],\n     [True, 5526]]],\n   [[False, 0],\n    [True, 100],\n    [True, 100],\n    [False, 0],\n    [False, 0],\n    [True, 100],\n    [True, 100],\n    [True, 100],\n    [True, 100]]],\n  ['control: scenario 3',\n   [40000,\n    [[True, 42783],\n     [False, 4625],\n     [True, 4670],\n     [True, 8857],\n     [False, 15422],\n     [False, 15500],\n     [True, 15560],\n     [True, 27335],\n     [True, 27471]]],\n   [[False, 0],\n    [False, 0],\n    [False, 0],\n    [False, 4187],\n    [False, 0],\n    [False, 0],\n    [False, 0],\n    [False, 11775],\n    [False, 11911]]]],\n [['regression: scenario 1',\n   [1000,\n    [[False, 39404],\n     [False, 39599],\n     [True, 39752],\n     [True, 39914],\n     [False, 49270],\n     [True, 53547],\n     [True, 53700],\n     [True, 4426]]],\n   [[False, 0], [False, 0], [False, 0], [False, 162], [False, 0], [False, 0], [False, 153], [True, 1000]]],\n  ['regression: scenario 9',\n   [65535,\n    [[True, 50243],\n     [True, 50414],\n     [True, 54443],\n     [True, 54585],\n     [True, 54684],\n     [False, 63787],\n     [True, 63849],\n     [True, 7734]]],\n   [[False, 0],\n    [False, 171],\n    [False, 4200],\n    [False, 4342],\n    [False, 4441],\n    [False, 0],\n    [False, 0],\n    [False, 9421]]],\n  ['regression: clock wrap',\n   [100, [[True, 65500], [True, 65530], [True, 40], [True, 64], [False, 70]]],\n   [[False, 0], [False, 30], [False, 76], [True, 100], [False, 0]]],\n  ['control: long enable past a full wrap',\n   [1000, [[True, 100], [True, 30100], [True, 60100], [True, 24564], [True, 700]]],\n   [[False, 0], [True, 1000], [True, 1000], [True, 1000], [True, 1000]]],\n  ['control: elapsed returns to zero',\n   [5, [[True, 10], [True, 20], [True, 10], [True, 12]]],\n   [[False, 0], [True, 5], [True, 5], [True, 5]]],\n  ['control: enable after idle',\n   [50, [[False, 0], [False, 400], [True, 900], [True, 930], [True, 960]]],\n   [[False, 0], [False, 0], [False, 0], [False, 30], [True, 50]]],\n  ['control: scenario 2',\n   [5,\n    [[True, 40525],\n     [True, 40666],\n     [True, 40725],\n     [True, 58227],\n     [True, 18319],\n     [False, 25775],\n     [True, 25797],\n     [True, 25799]]],\n   [[False, 0], [True, 5], [True, 5], [True, 5], [True, 5], [False, 0], [False, 0], [False, 2]]],\n  ['control: scenario 3',\n   [5,\n    [[False, 30258],\n     [True, 30296],\n     [True, 45510],\n     [True, 2343],\n     [True, 12538],\n     [True, 12596],\n     [False, 12635],\n     [True, 37410],\n     [True, 53676],\n     [True, 10497],\n     [True, 10628],\n     [False, 10824],\n     [True, 27527],\n     [True, 55148]]],\n   [[False, 0],\n    [False, 0],\n    [True, 5],\n    [True, 5],\n    [True, 5],\n    [True, 5],\n    [False, 0],\n    [False, 0],\n    [True, 5],\n    [True, 5],\n    [True, 5],\n    [False, 0],\n    [False, 0],\n    [True, 5]]]],\n [['regression: scenario 5',\n   [5,\n    [[True, 36141],\n     [True, 56668],\n     [False, 56831],\n     [True, 56893],\n     [True, 6106],\n     [True, 24708],\n     [True, 45326],\n     [True, 65076],\n     [True, 65184]]],\n   [[False, 0], [True, 5], [False, 0], [False, 0], [True, 5], [True, 5], [True, 5], [True, 5], [True, 5]]],\n  ['regression: scenario 9',\n   [65535,\n    [[True, 44901],\n     [False, 62429],\n     [True, 62596],\n     [True, 62792],\n     [True, 21296],\n     [True, 21309],\n     [False, 21419],\n     [False, 21455],\n     [True, 21477]]],\n   [[False, 0],\n    [False, 0],\n    [False, 0],\n    [False, 196],\n    [False, 24236],\n    [False, 24249],\n    [False, 0],\n    [False, 0],\n    [False, 0]]],\n  ['regression: clock wrap',\n   [100, [[True, 65500], [True, 65530], [True, 40], [True, 64], [False, 70]]],\n   [[False, 0], [False, 30], [False, 76], [True, 100], [False, 0]]],\n  ['control: long enable past a full wrap',\n   [1000, [[True, 100], [True, 30100], [True, 60100], [True, 24564], [True, 700]]],\n   [[False, 0], [True, 1000], [True, 1000], [True, 1000], [True, 1000]]],\n  ['control: elapsed returns to zero',\n   [5, [[True, 10], [True, 20], [True, 10], [True, 12]]],\n   [[False, 0], [True, 5], [True, 5], [True, 5]]],\n  ['control: enable after idle',\n   [50, [[False, 0], [False, 400], [True, 900], [True, 930], [True, 960]]],\n   [[False, 0], [False, 0], [False, 0], [False, 30], [True, 50]]],\n  ['control: scenario 1',\n   [100,\n    [[False, 22859],\n     [True, 23009],\n     [True, 46893],\n     [True, 47082],\n     [True, 47173],\n     [True, 47274],\n     [False, 47358],\n     [True, 47448],\n     [True, 54303],\n     [True, 54477],\n     [False, 54574]]],\n   [[False, 0],\n    [False, 0],\n    [True, 100],\n    [True, 100],\n    [True, 100],\n    [True, 100],\n    [False, 0],\n    [False, 0],\n    [True, 100],\n    [True, 100],\n    [False, 0]]],\n  ['regression: scenario 2',\n   [40000,\n    [[True, 54821],\n     [True, 18035],\n     [True, 32212],\n     [True, 38340],\n     [True, 38521],\n     [True, 38565],\n     [True, 38691],\n     [True, 52834],\n     [True, 6573],\n     [False, 6717],\n     [True, 13602]]],\n   [[False, 0],\n    [False, 28750],\n    [True, 40000],\n    [True, 40000],\n    [True, 40000],\n    [True, 40000],\n    [True, 40000],\n    [True, 40000],\n    [True, 40000],\n    [False, 0],\n    [False, 0]]]],\n [['regression: scenario 12',\n   [1000,\n    [[True, 53638],\n     [True, 11442],\n     [False, 11564],\n     [True, 24156],\n     [False, 44990],\n     [True, 45016],\n     [True, 539],\n     [False, 562],\n     [True, 677],\n     [True, 8181],\n     [True, 18211],\n     [False, 18406],\n     [True, 18528],\n     [True, 18593]]],\n   [[False, 0],\n    [True, 1000],\n    [False, 0],\n    [False, 0],\n    [False, 0],\n    [False, 0],\n    [True, 1000],\n    [False, 0],\n    [False, 0],\n    [True, 1000],\n    [True, 1000],\n    [False, 0],\n    [False, 0],\n    [False, 65]]],\n  ['regression: scenario 26',\n   [40000,\n    [[False, 62137],\n     [True, 62189],\n     [True, 62205],\n     [True, 3058],\n     [True, 3093],\n     [True, 3203],\n     [True, 3254],\n     [False, 3435],\n     [False, 3460],\n     [True, 3482],\n     [True, 3516],\n     [True, 3537],\n     [False, 3676],\n     [True, 22059]]],\n   [[False, 0],\n    [False, 0],\n    [False, 16],\n    [False, 6405],\n    [False, 6440],\n    [False, 6550],\n    [False, 6601],\n    [False, 0],\n    [False, 0],\n    [False, 0],\n    [False, 34],\n    [False, 55],\n    [False, 0],\n    [False, 0]]],\n  ['regression: clock wrap',\n   [100, [[True, 65500], [True, 65530], [True, 40], [True, 64], [False, 70]]],\n   [[False, 0], [False, 30], [False, 76], [True, 100], [False, 0]]],\n  ['control: long enable past a full wrap',\n   [1000, [[True, 100], [True, 30100], [True, 60100], [True, 24564], [True, 700]]],\n   [[False, 0], [True, 1000], [True, 1000], [True, 1000], [True, 1000]]],\n  ['control: elapsed returns to zero',\n   [5, [[True, 10], [True, 20], [True, 10], [True, 12]]],\n   [[False, 0], [True, 5], [True, 5], [True, 5]]],\n  ['control: enable after idle',\n   [50, [[False, 0], [False, 400], [True, 900], [True, 930], [True, 960]]],\n   [[False, 0], [False, 0], [False, 0], [False, 30], [True, 50]]],\n  ['control: scenario 1',\n   [65535,\n    [[False, 3784],\n     [False, 8211],\n     [False, 33966],\n     [True, 50163],\n     [True, 63009],\n     [False, 63184],\n     [True, 63243],\n     [True, 63325]]],\n   [[False, 0], [False, 0], [False, 0], [False, 0], [False, 12846], [False, 0], [False, 0], [False, 82]]],\n  ['control: scenario 2',\n   [1000,\n    [[False, 46148],\n     [True, 57365],\n     [False, 57416],\n     [True, 57439],\n     [True, 57613],\n     [True, 57776],\n     [True, 61872],\n     [True, 62038],\n     [True, 9532],\n     [True, 32841],\n     [True, 32973]]],\n   [[False, 0],\n    [False, 0],\n    [False, 0],\n    [False, 0],\n    [False, 174],\n    [False, 337],\n    [True, 1000],\n    [True, 1000],\n    [True, 1000],\n    [True, 1000],\n    [True, 1000]]]],\n [['regression: scenario 13',\n   [65535,\n    [[True, 49642],\n     [True, 49736],\n     [True, 12136],\n     [False, 12149],\n     [False, 22343],\n     [True, 34105],\n     [True, 34175],\n     [True, 49582],\n     [False, 8498],\n     [True, 10010],\n     [True, 10081],\n     [True, 10163],\n     [True, 38620],\n     [True, 62085]]],\n   [[False, 0],\n    [False, 94],\n    [False, 28030],\n    [False, 0],\n    [False, 0],\n    [False, 0],\n    [False, 70],\n    [False, 15477],\n    [False, 0],\n    [False, 0],\n    [False, 71],\n    [False, 153],\n    [False, 28610],\n    [False, 52075]]],\n  ['regression: scenario 28',\n   [40000,\n    [[True, 34331],\n     [False, 34410],\n     [False, 34523],\n     [True, 34686],\n     [True, 34828],\n     [True, 35005],\n     [True, 43248],\n     [True, 221]]],\n   [[False, 0],\n    [False, 0],\n    [False, 0],\n    [False, 0],\n    [False, 142],\n    [False, 319],\n    [False, 8562],\n    [False, 31071]]],\n  ['regression: clock wrap',\n   [100, [[True, 65500], [True, 65530], [True, 40], [True, 64], [False, 70]]],\n   [[False, 0], [False, 30], [False, 76], [True, 100], [False, 0]]],\n  ['control: long enable past a full wrap',\n   [1000, [[True, 100], [True, 30100], [True, 60100], [True, 24564], [True, 700]]],\n   [[False, 0], [True, 1000], [True, 1000], [True, 1000], [True, 1000]]],\n  ['control: elapsed returns to zero',\n   [5, [[True, 10], [True, 20], [True, 10], [True, 12]]],\n   [[False, 0], [True, 5], [True, 5], [True, 5]]],\n  ['control: enable after idle',\n   [50, [[False, 0], [False, 400], [True, 900], [True, 930], [True, 960]]],\n   [[False, 0], [False, 0], [False, 0], [False, 30], [True, 50]]],\n  ['control: scenario 1',\n   [40000,\n    [[True, 14860],\n     [True, 43167],\n     [True, 43310],\n     [True, 43470],\n     [False, 65246],\n     [False, 2333],\n     [True, 20092],\n     [True, 45967],\n     [False, 64834],\n     [True, 20225],\n     [False, 20250],\n     [True, 21773],\n     [True, 26780]]],\n   [[False, 0],\n    [False, 28307],\n    [False, 28450],\n    [False, 28610],\n    [False, 0],\n    [False, 0],\n    [False, 0],\n    [False, 25875],\n    [False, 0],\n    [False, 0],\n    [False, 0],\n    [False, 0],\n    [False, 5007]]],\n  ['control: scenario 2',\n   [1000,\n    [[True, 51184],\n     [True, 56535],\n     [True, 13279],\n     [True, 24517],\n     [True, 24685],\n     [True, 32146],\n     [True, 59255],\n     [False, 21739],\n     [True, 21822],\n     [True, 43196]]],\n   [[False, 0],\n    [True, 1000],\n    [True, 1000],\n    [True, 1000],\n    [True, 1000],\n    [True, 1000],\n    [True, 1000],\n    [False, 0],\n    [False, 0],\n    [True, 1000]]]]]\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-free-running-clock-timer-clock-wrap","generated_at":"2026-09-29T14:51:43.910331+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":"Elapsed is computed as a plain difference without modulo-65536 wrap.","sha256":"1cf6ef2b0a7d3d1a4aa581ad8d64f3ff194a96acd66e35cfa72ab5d9ec941364","title":"Free-running clock timer mishandles the tick counter rollover · 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":41.772,"exit_code":1,"observations":[{"actual":[[false,0],[false,30],[true,100],[true,100],[false,0]],"check":"regression: clock wrap","expected":[[false,0],[false,30],[false,76],[true,100],[false,0]],"passed":false},{"actual":[[false,0],[false,114],[true,40000],[true,40000],[true,40000],[true,40000],[true,40000],[true,40000],[true,40000],[true,40000],[true,40000],[true,40000]],"check":"regression: scenario 6","expected":[[false,0],[false,114],[false,24072],[false,24246],[false,24432],[false,24538],[false,24733],[false,28303],[true,40000],[true,40000],[true,40000],[true,40000]],"passed":false},{"actual":[[false,0],[true,1000],[true,1000],[true,1000],[true,1000]],"check":"control: long enable past a full wrap","expected":[[false,0],[true,1000],[true,1000],[true,1000],[true,1000]],"passed":true},{"actual":[[false,0],[true,5],[true,5],[true,5]],"check":"control: elapsed returns to zero","expected":[[false,0],[true,5],[true,5],[true,5]],"passed":true},{"actual":[[false,0],[false,0],[false,0],[false,30],[true,50]],"check":"control: enable after idle","expected":[[false,0],[false,0],[false,0],[false,30],[true,50]],"passed":true},{"actual":[[false,0],[false,42],[true,100],[false,0],[false,0],[true,100],[true,100],[true,100],[true,100],[true,100],[true,100]],"check":"regression: scenario 1","expected":[[false,0],[false,42],[true,100],[false,0],[false,0],[true,100],[true,100],[true,100],[true,100],[true,100],[true,100]],"passed":true},{"actual":[[false,0],[true,100],[true,100],[false,0],[false,0],[true,100],[true,100],[true,100],[true,100]],"check":"control: scenario 2","expected":[[false,0],[true,100],[true,100],[false,0],[false,0],[true,100],[true,100],[true,100],[true,100]],"passed":true},{"actual":[[false,0],[false,0],[false,0],[false,4187],[false,0],[false,0],[false,0],[false,11775],[false,11911]],"check":"control: scenario 3","expected":[[false,0],[false,0],[false,0],[false,4187],[false,0],[false,0],[false,0],[false,11775],[false,11911]],"passed":true}],"passed":false,"stderr":"","stdout":"{\"observations\": [{\"check\": \"regression: clock wrap\", \"actual\": [[false, 0], [false, 30], [true, 100], [true, 100], [false, 0]], \"expected\": [[false, 0], [false, 30], [false, 76], [true, 100], [false, 0]], \"passed\": false}, {\"check\": \"regression: scenario 6\", \"actual\": [[false, 0], [false, 114], [true, 40000], [true, 40000], [true, 40000], [true, 40000], [true, 40000], [true, 40000], [true, 40000], [true, 40000], [true, 40000], [true, 40000]], \"expected\": [[false, 0], [false, 114], [false, 24072], [false, 24246], [false, 24432], [false, 24538], [false, 24733], [false, 28303], [true, 40000], [true, 40000], [true, 40000], [true, 40000]], \"passed\": false}, {\"check\": \"control: long enable past a full wrap\", \"actual\": [[false, 0], [true, 1000], [true, 1000], [true, 1000], [true, 1000]], \"expected\": [[false, 0], [true, 1000], [true, 1000], [true, 1000], [true, 1000]], \"passed\": true}, {\"check\": \"control: elapsed returns to zero\", \"actual\": [[false, 0], [true, 5], [true, 5], [true, 5]], \"expected\": [[false, 0], [true, 5], [true, 5], [true, 5]], \"passed\": true}, {\"check\": \"control: enable after idle\", \"actual\": [[false, 0], [false, 0], [false, 0], [false, 30], [true, 50]], \"expected\": [[false, 0], [false, 0], [false, 0], [false, 30], [true, 50]], \"passed\": true}, {\"check\": \"regression: scenario 1\", \"actual\": [[false, 0], [false, 42], [true, 100], [false, 0], [false, 0], [true, 100], [true, 100], [true, 100], [true, 100], [true, 100], [true, 100]], \"expected\": [[false, 0], [false, 42], [true, 100], [false, 0], [false, 0], [true, 100], [true, 100], [true, 100], [true, 100], [true, 100], [true, 100]], \"passed\": true}, {\"check\": \"control: scenario 2\", \"actual\": [[false, 0], [true, 100], [true, 100], [false, 0], [false, 0], [true, 100], [true, 100], [true, 100], [true, 100]], \"expected\": [[false, 0], [true, 100], [true, 100], [false, 0], [false, 0], [true, 100], [true, 100], [true, 100], [true, 100]], \"passed\": true}, {\"check\": \"control: scenario 3\", \"actual\": [[false, 0], [false, 0], [false, 0], [false, 4187], [false, 0], [false, 0], [false, 0], [false, 11775], [false, 11911]], \"expected\": [[false, 0], [false, 0], [false, 0], [false, 4187], [false, 0], [false, 0], [false, 0], [false, 11775], [false, 11911]], \"passed\": true}], \"passed\": false}\n"},"broken":{"elapsed_ms":42.933,"exit_code":1,"observations":[{"actual":[[false,0],[false,30],[false,-65460],[false,-65436],[false,0]],"check":"regression: clock wrap","expected":[[false,0],[false,30],[false,76],[true,100],[false,0]],"passed":false},{"actual":[[false,0],[false,114],[false,-41464],[false,-41290],[false,-41104],[false,-40998],[false,-40803],[false,-37233],[false,-22652],[false,-59314],[false,-59168],[false,-56795]],"check":"regression: scenario 6","expected":[[false,0],[false,114],[false,24072],[false,24246],[false,24432],[false,24538],[false,24733],[false,28303],[true,40000],[true,40000],[true,40000],[true,40000]],"passed":false},{"actual":[[false,0],[true,1000],[true,1000],[true,1000],[true,1000]],"check":"control: long enable past a full wrap","expected":[[false,0],[true,1000],[true,1000],[true,1000],[true,1000]],"passed":true},{"actual":[[false,0],[true,5],[true,5],[true,5]],"check":"control: elapsed returns to zero","expected":[[false,0],[true,5],[true,5],[true,5]],"passed":true},{"actual":[[false,0],[false,0],[false,0],[false,30],[true,50]],"check":"control: enable after idle","expected":[[false,0],[false,0],[false,0],[false,30],[true,50]],"passed":true},{"actual":[[false,0],[false,42],[false,-43381],[false,0],[false,0],[true,100],[true,100],[true,100],[true,100],[true,100],[true,100]],"check":"regression: scenario 1","expected":[[false,0],[false,42],[true,100],[false,0],[false,0],[true,100],[true,100],[true,100],[true,100],[true,100],[true,100]],"passed":false},{"actual":[[false,0],[true,100],[true,100],[false,0],[false,0],[true,100],[true,100],[true,100],[true,100]],"check":"control: scenario 2","expected":[[false,0],[true,100],[true,100],[false,0],[false,0],[true,100],[true,100],[true,100],[true,100]],"passed":true},{"actual":[[false,0],[false,0],[false,0],[false,4187],[false,0],[false,0],[false,0],[false,11775],[false,11911]],"check":"control: scenario 3","expected":[[false,0],[false,0],[false,0],[false,4187],[false,0],[false,0],[false,0],[false,11775],[false,11911]],"passed":true}],"passed":false,"stderr":"","stdout":"{\"observations\": [{\"check\": \"regression: clock wrap\", \"actual\": [[false, 0], [false, 30], [false, -65460], [false, -65436], [false, 0]], \"expected\": [[false, 0], [false, 30], [false, 76], [true, 100], [false, 0]], \"passed\": false}, {\"check\": \"regression: scenario 6\", \"actual\": [[false, 0], [false, 114], [false, -41464], [false, -41290], [false, -41104], [false, -40998], [false, -40803], [false, -37233], [false, -22652], [false, -59314], [false, -59168], [false, -56795]], \"expected\": [[false, 0], [false, 114], [false, 24072], [false, 24246], [false, 24432], [false, 24538], [false, 24733], [false, 28303], [true, 40000], [true, 40000], [true, 40000], [true, 40000]], \"passed\": false}, {\"check\": \"control: long enable past a full wrap\", \"actual\": [[false, 0], [true, 1000], [true, 1000], [true, 1000], [true, 1000]], \"expected\": [[false, 0], [true, 1000], [true, 1000], [true, 1000], [true, 1000]], \"passed\": true}, {\"check\": \"control: elapsed returns to zero\", \"actual\": [[false, 0], [true, 5], [true, 5], [true, 5]], \"expected\": [[false, 0], [true, 5], [true, 5], [true, 5]], \"passed\": true}, {\"check\": \"control: enable after idle\", \"actual\": [[false, 0], [false, 0], [false, 0], [false, 30], [true, 50]], \"expected\": [[false, 0], [false, 0], [false, 0], [false, 30], [true, 50]], \"passed\": true}, {\"check\": \"regression: scenario 1\", \"actual\": [[false, 0], [false, 42], [false, -43381], [false, 0], [false, 0], [true, 100], [true, 100], [true, 100], [true, 100], [true, 100], [true, 100]], \"expected\": [[false, 0], [false, 42], [true, 100], [false, 0], [false, 0], [true, 100], [true, 100], [true, 100], [true, 100], [true, 100], [true, 100]], \"passed\": false}, {\"check\": \"control: scenario 2\", \"actual\": [[false, 0], [true, 100], [true, 100], [false, 0], [false, 0], [true, 100], [true, 100], [true, 100], [true, 100]], \"expected\": [[false, 0], [true, 100], [true, 100], [false, 0], [false, 0], [true, 100], [true, 100], [true, 100], [true, 100]], \"passed\": true}, {\"check\": \"control: scenario 3\", \"actual\": [[false, 0], [false, 0], [false, 0], [false, 4187], [false, 0], [false, 0], [false, 0], [false, 11775], [false, 11911]], \"expected\": [[false, 0], [false, 0], [false, 0], [false, 4187], [false, 0], [false, 0], [false, 0], [false, 11775], [false, 11911]], \"passed\": true}], \"passed\": false}\n"}},"member_only":{"stages":["fixed"],"fields":["implementations.fixed","verification.fixed","harness","repair"],"note":"The verified repair, its recorded checks, the repair description, and the scoring harness are available to members."}}