{"abstract":"After the last step the machine outputs the home pattern and needs an extra advance before step 1.","category":"PLC ladder logic scan cycles","checks":8,"contract":"Sequencer output (SQO). words is the sequencer file whose element 0 is the home step; position starts at 0. On each rising edge of enable the position advances; past the last element it wraps to 1 (not 0). Each advance writes dest = (dest AND NOT mask) OR (word AND mask) in 16 bits. A reset input returns position to 0 without writing dest and has priority over a coincident advance; the enable edge memory is always updated. steps is a list of [enable, reset]; return [position, dest] per scan.","contract_signature":"words, mask, start_dest, steps","evaluation_group":"w2-plc-ladder-logic-scan-cycles-sqo-sequencer","failed_approach":"Computing the wrap as position modulo length breaks a two-element file.","family":"w2-plc-ladder-logic-scan-cycles-sqo-sequencer-wrap-target","id":"FA-92081","implementations":{"attempt":{"sha256":"fd72f02480fb23135c76afd87f85010af2548df2005084cdf770219d1a120fc9","source":"\"\"\"Failure Map reference implementation. Python standard library only.\"\"\"\nimport json\n\nN = 1\nobservations = []\ndef solve(words, mask, start_dest, steps):\n    pos = 0\n    dest = start_dest\n    prev = False\n    length = len(words) - 1\n    out = []\n    for en, res in steps:\n        en = bool(en)\n        if res:\n            pos = 0\n        elif en and not prev:\n            pos += 1\n            if pos > length:\n                pos = pos % length\n            dest = (dest & ~mask & 0xFFFF) | (words[pos] & mask)\n        prev = en\n        out.append([pos, dest])\n    return out\ndef check(label, actual, expected):\n    observations.append({\"check\": label, \"actual\": actual, \"expected\": expected, \"passed\": actual == expected})\nfixtures = [[['regression: wrap past last step',\n   [[0, 17, 34],\n    255,\n    43776,\n    [[True, False], [False, False], [True, False], [False, False], [True, False], [True, False]]],\n   [[1, 43793], [1, 43793], [2, 43810], [2, 43810], [1, 43793], [1, 43793]]],\n  ['regression: two element file',\n   [[5, 9], 65535, 0, [[True, False], [False, False], [True, False], [False, False], [True, False]]],\n   [[1, 9], [1, 9], [1, 9], [1, 9], [1, 9]]],\n  ['control: reset while enabled',\n   [[0, 3, 12], 15, 65520, [[True, False], [True, True], [False, False], [True, False]]],\n   [[1, 65523], [0, 65523], [0, 65523], [1, 65523]]],\n  ['control: reset with advance',\n   [[0, 256, 512], 65280, 170, [[False, False], [True, True], [False, False], [True, False]]],\n   [[0, 170], [0, 170], [0, 170], [1, 426]]],\n  ['control: scenario 1',\n   [[26918, 50611, 8879, 59828],\n    65535,\n    52597,\n    [[False, False],\n     [False, False],\n     [False, False],\n     [True, True],\n     [False, False],\n     [False, False],\n     [False, False],\n     [True, False],\n     [True, False],\n     [False, False]]],\n   [[0, 52597],\n    [0, 52597],\n    [0, 52597],\n    [0, 52597],\n    [0, 52597],\n    [0, 52597],\n    [0, 52597],\n    [1, 50611],\n    [1, 50611],\n    [1, 50611]]],\n  ['control: scenario 2',\n   [[42968, 29173, 43546],\n    255,\n    5794,\n    [[True, False],\n     [False, False],\n     [False, False],\n     [False, False],\n     [True, False],\n     [False, False],\n     [False, False],\n     [False, False],\n     [True, True],\n     [False, False]]],\n   [[1, 5877],\n    [1, 5877],\n    [1, 5877],\n    [1, 5877],\n    [2, 5658],\n    [2, 5658],\n    [2, 5658],\n    [2, 5658],\n    [0, 5658],\n    [0, 5658]]],\n  ['control: scenario 3',\n   [[16785, 47110, 21847, 45361],\n    61440,\n    41889,\n    [[True, False],\n     [True, False],\n     [True, False],\n     [True, False],\n     [True, False],\n     [False, False],\n     [False, False]]],\n   [[1, 45985], [1, 45985], [1, 45985], [1, 45985], [1, 45985], [1, 45985], [1, 45985]]],\n  ['control: scenario 4',\n   [[26660, 61415, 54040],\n    65535,\n    45106,\n    [[True, False], [True, False], [True, False], [False, False], [False, False], [True, False]]],\n   [[1, 61415], [1, 61415], [1, 61415], [1, 61415], [1, 61415], [2, 54040]]]],\n [['regression: two element file',\n   [[5, 9], 65535, 0, [[True, False], [False, False], [True, False], [False, False], [True, False]]],\n   [[1, 9], [1, 9], [1, 9], [1, 9], [1, 9]]],\n  ['regression: scenario 7',\n   [[52955, 10653],\n    61440,\n    49142,\n    [[False, False],\n     [False, False],\n     [False, False],\n     [True, False],\n     [True, False],\n     [False, False],\n     [False, False],\n     [False, False],\n     [False, False],\n     [True, False],\n     [True, False],\n     [True, False],\n     [False, False],\n     [False, False]]],\n   [[0, 49142],\n    [0, 49142],\n    [0, 49142],\n    [1, 12278],\n    [1, 12278],\n    [1, 12278],\n    [1, 12278],\n    [1, 12278],\n    [1, 12278],\n    [1, 12278],\n    [1, 12278],\n    [1, 12278],\n    [1, 12278],\n    [1, 12278]]],\n  ['regression: wrap past last step',\n   [[0, 17, 34],\n    255,\n    43776,\n    [[True, False], [False, False], [True, False], [False, False], [True, False], [True, False]]],\n   [[1, 43793], [1, 43793], [2, 43810], [2, 43810], [1, 43793], [1, 43793]]],\n  ['control: reset while enabled',\n   [[0, 3, 12], 15, 65520, [[True, False], [True, True], [False, False], [True, False]]],\n   [[1, 65523], [0, 65523], [0, 65523], [1, 65523]]],\n  ['control: reset with advance',\n   [[0, 256, 512], 65280, 170, [[False, False], [True, True], [False, False], [True, False]]],\n   [[0, 170], [0, 170], [0, 170], [1, 426]]],\n  ['regression: scenario 1',\n   [[8488, 43469, 38296, 4034],\n    255,\n    44563,\n    [[False, False],\n     [True, False],\n     [True, False],\n     [True, False],\n     [False, False],\n     [True, False],\n     [False, False],\n     [True, False],\n     [False, False],\n     [True, False],\n     [False, False],\n     [True, False]]],\n   [[0, 44563],\n    [1, 44749],\n    [1, 44749],\n    [1, 44749],\n    [1, 44749],\n    [2, 44696],\n    [2, 44696],\n    [3, 44738],\n    [3, 44738],\n    [1, 44749],\n    [1, 44749],\n    [2, 44696]]],\n  ['control: scenario 2',\n   [[43079, 20640, 23622, 26553],\n    255,\n    15109,\n    [[False, False],\n     [False, False],\n     [True, False],\n     [True, False],\n     [False, False],\n     [False, False],\n     [True, False],\n     [True, False],\n     [False, False],\n     [False, False],\n     [True, False],\n     [False, True]]],\n   [[0, 15109],\n    [0, 15109],\n    [1, 15264],\n    [1, 15264],\n    [1, 15264],\n    [1, 15264],\n    [2, 15174],\n    [2, 15174],\n    [2, 15174],\n    [2, 15174],\n    [3, 15289],\n    [0, 15289]]],\n  ['control: scenario 3',\n   [[16618, 36272, 41924, 55813],\n    3855,\n    48911,\n    [[True, False],\n     [True, False],\n     [True, False],\n     [False, False],\n     [False, False],\n     [True, False],\n     [False, False]]],\n   [[1, 48384], [1, 48384], [1, 48384], [1, 48384], [1, 48384], [2, 45828], [2, 45828]]]],\n [['regression: scenario 2',\n   [[36741, 30504],\n    65535,\n    26589,\n    [[True, False],\n     [False, False],\n     [False, False],\n     [True, False],\n     [True, False],\n     [False, False],\n     [False, False],\n     [False, False],\n     [True, True],\n     [True, False],\n     [False, False]]],\n   [[1, 30504],\n    [1, 30504],\n    [1, 30504],\n    [1, 30504],\n    [1, 30504],\n    [1, 30504],\n    [1, 30504],\n    [1, 30504],\n    [0, 30504],\n    [0, 30504],\n    [0, 30504]]],\n  ['regression: scenario 18',\n   [[6005, 39810],\n    255,\n    1846,\n    [[False, False],\n     [True, False],\n     [True, False],\n     [True, False],\n     [False, False],\n     [False, False],\n     [True, False],\n     [True, False],\n     [False, True],\n     [False, False]]],\n   [[0, 1846],\n    [1, 1922],\n    [1, 1922],\n    [1, 1922],\n    [1, 1922],\n    [1, 1922],\n    [1, 1922],\n    [1, 1922],\n    [0, 1922],\n    [0, 1922]]],\n  ['regression: wrap past last step',\n   [[0, 17, 34],\n    255,\n    43776,\n    [[True, False], [False, False], [True, False], [False, False], [True, False], [True, False]]],\n   [[1, 43793], [1, 43793], [2, 43810], [2, 43810], [1, 43793], [1, 43793]]],\n  ['regression: two element file',\n   [[5, 9], 65535, 0, [[True, False], [False, False], [True, False], [False, False], [True, False]]],\n   [[1, 9], [1, 9], [1, 9], [1, 9], [1, 9]]],\n  ['control: reset while enabled',\n   [[0, 3, 12], 15, 65520, [[True, False], [True, True], [False, False], [True, False]]],\n   [[1, 65523], [0, 65523], [0, 65523], [1, 65523]]],\n  ['control: reset with advance',\n   [[0, 256, 512], 65280, 170, [[False, False], [True, True], [False, False], [True, False]]],\n   [[0, 170], [0, 170], [0, 170], [1, 426]]],\n  ['control: scenario 1',\n   [[38610, 2229],\n    65535,\n    14704,\n    [[False, False],\n     [False, False],\n     [False, False],\n     [False, False],\n     [False, False],\n     [True, False],\n     [True, False],\n     [False, True],\n     [False, False]]],\n   [[0, 14704], [0, 14704], [0, 14704], [0, 14704], [0, 14704], [1, 2229], [1, 2229], [0, 2229], [0, 2229]]],\n  ['control: scenario 3',\n   [[45414, 65173, 31151, 4829],\n    3855,\n    46402,\n    [[False, True],\n     [False, False],\n     [True, True],\n     [False, False],\n     [False, False],\n     [False, False],\n     [True, False],\n     [True, False],\n     [True, False]]],\n   [[0, 46402],\n    [0, 46402],\n    [0, 46402],\n    [0, 46402],\n    [0, 46402],\n    [0, 46402],\n    [1, 48709],\n    [1, 48709],\n    [1, 48709]]]],\n [['regression: scenario 2',\n   [[57902, 51779],\n    61440,\n    26811,\n    [[True, False],\n     [True, False],\n     [True, False],\n     [False, False],\n     [True, False],\n     [False, False],\n     [False, False],\n     [True, False]]],\n   [[1, 51387], [1, 51387], [1, 51387], [1, 51387], [1, 51387], [1, 51387], [1, 51387], [1, 51387]]],\n  ['regression: scenario 20',\n   [[9876, 56752],\n    255,\n    50114,\n    [[False, False],\n     [False, False],\n     [False, False],\n     [False, False],\n     [False, False],\n     [False, False],\n     [True, False],\n     [True, False],\n     [False, False],\n     [True, False],\n     [False, False],\n     [True, False]]],\n   [[0, 50114],\n    [0, 50114],\n    [0, 50114],\n    [0, 50114],\n    [0, 50114],\n    [0, 50114],\n    [1, 50096],\n    [1, 50096],\n    [1, 50096],\n    [1, 50096],\n    [1, 50096],\n    [1, 50096]]],\n  ['regression: wrap past last step',\n   [[0, 17, 34],\n    255,\n    43776,\n    [[True, False], [False, False], [True, False], [False, False], [True, False], [True, False]]],\n   [[1, 43793], [1, 43793], [2, 43810], [2, 43810], [1, 43793], [1, 43793]]],\n  ['regression: two element file',\n   [[5, 9], 65535, 0, [[True, False], [False, False], [True, False], [False, False], [True, False]]],\n   [[1, 9], [1, 9], [1, 9], [1, 9], [1, 9]]],\n  ['control: reset while enabled',\n   [[0, 3, 12], 15, 65520, [[True, False], [True, True], [False, False], [True, False]]],\n   [[1, 65523], [0, 65523], [0, 65523], [1, 65523]]],\n  ['control: reset with advance',\n   [[0, 256, 512], 65280, 170, [[False, False], [True, True], [False, False], [True, False]]],\n   [[0, 170], [0, 170], [0, 170], [1, 426]]],\n  ['regression: scenario 1',\n   [[61786, 58708],\n    255,\n    45362,\n    [[False, False],\n     [False, False],\n     [False, False],\n     [True, False],\n     [False, False],\n     [False, False],\n     [True, False]]],\n   [[0, 45362], [0, 45362], [0, 45362], [1, 45396], [1, 45396], [1, 45396], [1, 45396]]],\n  ['control: scenario 3',\n   [[35305, 48952, 41314, 29239, 28773],\n    65535,\n    11028,\n    [[False, False],\n     [False, False],\n     [True, False],\n     [True, False],\n     [True, False],\n     [False, False],\n     [True, False],\n     [True, False],\n     [True, False],\n     [True, False],\n     [False, False],\n     [True, True]]],\n   [[0, 11028],\n    [0, 11028],\n    [1, 48952],\n    [1, 48952],\n    [1, 48952],\n    [1, 48952],\n    [2, 41314],\n    [2, 41314],\n    [2, 41314],\n    [2, 41314],\n    [2, 41314],\n    [0, 41314]]]],\n [['regression: scenario 15',\n   [[10064, 26257],\n    255,\n    24919,\n    [[True, False],\n     [False, False],\n     [False, False],\n     [False, False],\n     [True, False],\n     [True, False],\n     [True, False],\n     [False, True],\n     [True, False],\n     [False, False],\n     [True, False],\n     [True, False],\n     [False, False],\n     [False, False]]],\n   [[1, 24977],\n    [1, 24977],\n    [1, 24977],\n    [1, 24977],\n    [1, 24977],\n    [1, 24977],\n    [1, 24977],\n    [0, 24977],\n    [1, 24977],\n    [1, 24977],\n    [1, 24977],\n    [1, 24977],\n    [1, 24977],\n    [1, 24977]]],\n  ['regression: scenario 21',\n   [[12086, 47767],\n    65535,\n    46065,\n    [[False, False],\n     [False, False],\n     [True, False],\n     [False, False],\n     [False, False],\n     [False, False],\n     [False, False],\n     [True, False],\n     [True, False],\n     [True, True],\n     [True, True],\n     [True, False],\n     [False, False],\n     [False, False]]],\n   [[0, 46065],\n    [0, 46065],\n    [1, 47767],\n    [1, 47767],\n    [1, 47767],\n    [1, 47767],\n    [1, 47767],\n    [1, 47767],\n    [1, 47767],\n    [0, 47767],\n    [0, 47767],\n    [0, 47767],\n    [0, 47767],\n    [0, 47767]]],\n  ['regression: wrap past last step',\n   [[0, 17, 34],\n    255,\n    43776,\n    [[True, False], [False, False], [True, False], [False, False], [True, False], [True, False]]],\n   [[1, 43793], [1, 43793], [2, 43810], [2, 43810], [1, 43793], [1, 43793]]],\n  ['regression: two element file',\n   [[5, 9], 65535, 0, [[True, False], [False, False], [True, False], [False, False], [True, False]]],\n   [[1, 9], [1, 9], [1, 9], [1, 9], [1, 9]]],\n  ['control: reset while enabled',\n   [[0, 3, 12], 15, 65520, [[True, False], [True, True], [False, False], [True, False]]],\n   [[1, 65523], [0, 65523], [0, 65523], [1, 65523]]],\n  ['control: reset with advance',\n   [[0, 256, 512], 65280, 170, [[False, False], [True, True], [False, False], [True, False]]],\n   [[0, 170], [0, 170], [0, 170], [1, 426]]],\n  ['regression: scenario 1',\n   [[39974, 26951],\n    3855,\n    4546,\n    [[False, False],\n     [False, False],\n     [True, False],\n     [False, False],\n     [True, False],\n     [True, False],\n     [False, False],\n     [False, False],\n     [True, False],\n     [True, True]]],\n   [[0, 4546],\n    [0, 4546],\n    [1, 6599],\n    [1, 6599],\n    [1, 6599],\n    [1, 6599],\n    [1, 6599],\n    [1, 6599],\n    [1, 6599],\n    [0, 6599]]],\n  ['control: scenario 2',\n   [[43067, 57880, 6921, 33106, 51712],\n    255,\n    13830,\n    [[True, False],\n     [False, False],\n     [False, False],\n     [True, False],\n     [True, False],\n     [False, False],\n     [True, False],\n     [False, False],\n     [True, True],\n     [True, True],\n     [False, False],\n     [True, False],\n     [False, False]]],\n   [[1, 13848],\n    [1, 13848],\n    [1, 13848],\n    [2, 13833],\n    [2, 13833],\n    [2, 13833],\n    [3, 13906],\n    [3, 13906],\n    [0, 13906],\n    [0, 13906],\n    [0, 13906],\n    [1, 13848],\n    [1, 13848]]]]]\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":"f1a8c7e2820a06916e3a9b06dcb43c02feb58fe07553b5037dc43cdea2e20c80","source":"\"\"\"Failure Map reference implementation. Python standard library only.\"\"\"\nimport json\n\nN = 1\nobservations = []\ndef solve(words, mask, start_dest, steps):\n    pos = 0\n    dest = start_dest\n    prev = False\n    length = len(words) - 1\n    out = []\n    for en, res in steps:\n        en = bool(en)\n        if res:\n            pos = 0\n        elif en and not prev:\n            pos += 1\n            if pos > length:\n                pos = 0\n            dest = (dest & ~mask & 0xFFFF) | (words[pos] & mask)\n        prev = en\n        out.append([pos, dest])\n    return out\ndef check(label, actual, expected):\n    observations.append({\"check\": label, \"actual\": actual, \"expected\": expected, \"passed\": actual == expected})\nfixtures = [[['regression: wrap past last step',\n   [[0, 17, 34],\n    255,\n    43776,\n    [[True, False], [False, False], [True, False], [False, False], [True, False], [True, False]]],\n   [[1, 43793], [1, 43793], [2, 43810], [2, 43810], [1, 43793], [1, 43793]]],\n  ['regression: two element file',\n   [[5, 9], 65535, 0, [[True, False], [False, False], [True, False], [False, False], [True, False]]],\n   [[1, 9], [1, 9], [1, 9], [1, 9], [1, 9]]],\n  ['control: reset while enabled',\n   [[0, 3, 12], 15, 65520, [[True, False], [True, True], [False, False], [True, False]]],\n   [[1, 65523], [0, 65523], [0, 65523], [1, 65523]]],\n  ['control: reset with advance',\n   [[0, 256, 512], 65280, 170, [[False, False], [True, True], [False, False], [True, False]]],\n   [[0, 170], [0, 170], [0, 170], [1, 426]]],\n  ['control: scenario 1',\n   [[26918, 50611, 8879, 59828],\n    65535,\n    52597,\n    [[False, False],\n     [False, False],\n     [False, False],\n     [True, True],\n     [False, False],\n     [False, False],\n     [False, False],\n     [True, False],\n     [True, False],\n     [False, False]]],\n   [[0, 52597],\n    [0, 52597],\n    [0, 52597],\n    [0, 52597],\n    [0, 52597],\n    [0, 52597],\n    [0, 52597],\n    [1, 50611],\n    [1, 50611],\n    [1, 50611]]],\n  ['control: scenario 2',\n   [[42968, 29173, 43546],\n    255,\n    5794,\n    [[True, False],\n     [False, False],\n     [False, False],\n     [False, False],\n     [True, False],\n     [False, False],\n     [False, False],\n     [False, False],\n     [True, True],\n     [False, False]]],\n   [[1, 5877],\n    [1, 5877],\n    [1, 5877],\n    [1, 5877],\n    [2, 5658],\n    [2, 5658],\n    [2, 5658],\n    [2, 5658],\n    [0, 5658],\n    [0, 5658]]],\n  ['control: scenario 3',\n   [[16785, 47110, 21847, 45361],\n    61440,\n    41889,\n    [[True, False],\n     [True, False],\n     [True, False],\n     [True, False],\n     [True, False],\n     [False, False],\n     [False, False]]],\n   [[1, 45985], [1, 45985], [1, 45985], [1, 45985], [1, 45985], [1, 45985], [1, 45985]]],\n  ['control: scenario 4',\n   [[26660, 61415, 54040],\n    65535,\n    45106,\n    [[True, False], [True, False], [True, False], [False, False], [False, False], [True, False]]],\n   [[1, 61415], [1, 61415], [1, 61415], [1, 61415], [1, 61415], [2, 54040]]]],\n [['regression: two element file',\n   [[5, 9], 65535, 0, [[True, False], [False, False], [True, False], [False, False], [True, False]]],\n   [[1, 9], [1, 9], [1, 9], [1, 9], [1, 9]]],\n  ['regression: scenario 7',\n   [[52955, 10653],\n    61440,\n    49142,\n    [[False, False],\n     [False, False],\n     [False, False],\n     [True, False],\n     [True, False],\n     [False, False],\n     [False, False],\n     [False, False],\n     [False, False],\n     [True, False],\n     [True, False],\n     [True, False],\n     [False, False],\n     [False, False]]],\n   [[0, 49142],\n    [0, 49142],\n    [0, 49142],\n    [1, 12278],\n    [1, 12278],\n    [1, 12278],\n    [1, 12278],\n    [1, 12278],\n    [1, 12278],\n    [1, 12278],\n    [1, 12278],\n    [1, 12278],\n    [1, 12278],\n    [1, 12278]]],\n  ['regression: wrap past last step',\n   [[0, 17, 34],\n    255,\n    43776,\n    [[True, False], [False, False], [True, False], [False, False], [True, False], [True, False]]],\n   [[1, 43793], [1, 43793], [2, 43810], [2, 43810], [1, 43793], [1, 43793]]],\n  ['control: reset while enabled',\n   [[0, 3, 12], 15, 65520, [[True, False], [True, True], [False, False], [True, False]]],\n   [[1, 65523], [0, 65523], [0, 65523], [1, 65523]]],\n  ['control: reset with advance',\n   [[0, 256, 512], 65280, 170, [[False, False], [True, True], [False, False], [True, False]]],\n   [[0, 170], [0, 170], [0, 170], [1, 426]]],\n  ['regression: scenario 1',\n   [[8488, 43469, 38296, 4034],\n    255,\n    44563,\n    [[False, False],\n     [True, False],\n     [True, False],\n     [True, False],\n     [False, False],\n     [True, False],\n     [False, False],\n     [True, False],\n     [False, False],\n     [True, False],\n     [False, False],\n     [True, False]]],\n   [[0, 44563],\n    [1, 44749],\n    [1, 44749],\n    [1, 44749],\n    [1, 44749],\n    [2, 44696],\n    [2, 44696],\n    [3, 44738],\n    [3, 44738],\n    [1, 44749],\n    [1, 44749],\n    [2, 44696]]],\n  ['control: scenario 2',\n   [[43079, 20640, 23622, 26553],\n    255,\n    15109,\n    [[False, False],\n     [False, False],\n     [True, False],\n     [True, False],\n     [False, False],\n     [False, False],\n     [True, False],\n     [True, False],\n     [False, False],\n     [False, False],\n     [True, False],\n     [False, True]]],\n   [[0, 15109],\n    [0, 15109],\n    [1, 15264],\n    [1, 15264],\n    [1, 15264],\n    [1, 15264],\n    [2, 15174],\n    [2, 15174],\n    [2, 15174],\n    [2, 15174],\n    [3, 15289],\n    [0, 15289]]],\n  ['control: scenario 3',\n   [[16618, 36272, 41924, 55813],\n    3855,\n    48911,\n    [[True, False],\n     [True, False],\n     [True, False],\n     [False, False],\n     [False, False],\n     [True, False],\n     [False, False]]],\n   [[1, 48384], [1, 48384], [1, 48384], [1, 48384], [1, 48384], [2, 45828], [2, 45828]]]],\n [['regression: scenario 2',\n   [[36741, 30504],\n    65535,\n    26589,\n    [[True, False],\n     [False, False],\n     [False, False],\n     [True, False],\n     [True, False],\n     [False, False],\n     [False, False],\n     [False, False],\n     [True, True],\n     [True, False],\n     [False, False]]],\n   [[1, 30504],\n    [1, 30504],\n    [1, 30504],\n    [1, 30504],\n    [1, 30504],\n    [1, 30504],\n    [1, 30504],\n    [1, 30504],\n    [0, 30504],\n    [0, 30504],\n    [0, 30504]]],\n  ['regression: scenario 18',\n   [[6005, 39810],\n    255,\n    1846,\n    [[False, False],\n     [True, False],\n     [True, False],\n     [True, False],\n     [False, False],\n     [False, False],\n     [True, False],\n     [True, False],\n     [False, True],\n     [False, False]]],\n   [[0, 1846],\n    [1, 1922],\n    [1, 1922],\n    [1, 1922],\n    [1, 1922],\n    [1, 1922],\n    [1, 1922],\n    [1, 1922],\n    [0, 1922],\n    [0, 1922]]],\n  ['regression: wrap past last step',\n   [[0, 17, 34],\n    255,\n    43776,\n    [[True, False], [False, False], [True, False], [False, False], [True, False], [True, False]]],\n   [[1, 43793], [1, 43793], [2, 43810], [2, 43810], [1, 43793], [1, 43793]]],\n  ['regression: two element file',\n   [[5, 9], 65535, 0, [[True, False], [False, False], [True, False], [False, False], [True, False]]],\n   [[1, 9], [1, 9], [1, 9], [1, 9], [1, 9]]],\n  ['control: reset while enabled',\n   [[0, 3, 12], 15, 65520, [[True, False], [True, True], [False, False], [True, False]]],\n   [[1, 65523], [0, 65523], [0, 65523], [1, 65523]]],\n  ['control: reset with advance',\n   [[0, 256, 512], 65280, 170, [[False, False], [True, True], [False, False], [True, False]]],\n   [[0, 170], [0, 170], [0, 170], [1, 426]]],\n  ['control: scenario 1',\n   [[38610, 2229],\n    65535,\n    14704,\n    [[False, False],\n     [False, False],\n     [False, False],\n     [False, False],\n     [False, False],\n     [True, False],\n     [True, False],\n     [False, True],\n     [False, False]]],\n   [[0, 14704], [0, 14704], [0, 14704], [0, 14704], [0, 14704], [1, 2229], [1, 2229], [0, 2229], [0, 2229]]],\n  ['control: scenario 3',\n   [[45414, 65173, 31151, 4829],\n    3855,\n    46402,\n    [[False, True],\n     [False, False],\n     [True, True],\n     [False, False],\n     [False, False],\n     [False, False],\n     [True, False],\n     [True, False],\n     [True, False]]],\n   [[0, 46402],\n    [0, 46402],\n    [0, 46402],\n    [0, 46402],\n    [0, 46402],\n    [0, 46402],\n    [1, 48709],\n    [1, 48709],\n    [1, 48709]]]],\n [['regression: scenario 2',\n   [[57902, 51779],\n    61440,\n    26811,\n    [[True, False],\n     [True, False],\n     [True, False],\n     [False, False],\n     [True, False],\n     [False, False],\n     [False, False],\n     [True, False]]],\n   [[1, 51387], [1, 51387], [1, 51387], [1, 51387], [1, 51387], [1, 51387], [1, 51387], [1, 51387]]],\n  ['regression: scenario 20',\n   [[9876, 56752],\n    255,\n    50114,\n    [[False, False],\n     [False, False],\n     [False, False],\n     [False, False],\n     [False, False],\n     [False, False],\n     [True, False],\n     [True, False],\n     [False, False],\n     [True, False],\n     [False, False],\n     [True, False]]],\n   [[0, 50114],\n    [0, 50114],\n    [0, 50114],\n    [0, 50114],\n    [0, 50114],\n    [0, 50114],\n    [1, 50096],\n    [1, 50096],\n    [1, 50096],\n    [1, 50096],\n    [1, 50096],\n    [1, 50096]]],\n  ['regression: wrap past last step',\n   [[0, 17, 34],\n    255,\n    43776,\n    [[True, False], [False, False], [True, False], [False, False], [True, False], [True, False]]],\n   [[1, 43793], [1, 43793], [2, 43810], [2, 43810], [1, 43793], [1, 43793]]],\n  ['regression: two element file',\n   [[5, 9], 65535, 0, [[True, False], [False, False], [True, False], [False, False], [True, False]]],\n   [[1, 9], [1, 9], [1, 9], [1, 9], [1, 9]]],\n  ['control: reset while enabled',\n   [[0, 3, 12], 15, 65520, [[True, False], [True, True], [False, False], [True, False]]],\n   [[1, 65523], [0, 65523], [0, 65523], [1, 65523]]],\n  ['control: reset with advance',\n   [[0, 256, 512], 65280, 170, [[False, False], [True, True], [False, False], [True, False]]],\n   [[0, 170], [0, 170], [0, 170], [1, 426]]],\n  ['regression: scenario 1',\n   [[61786, 58708],\n    255,\n    45362,\n    [[False, False],\n     [False, False],\n     [False, False],\n     [True, False],\n     [False, False],\n     [False, False],\n     [True, False]]],\n   [[0, 45362], [0, 45362], [0, 45362], [1, 45396], [1, 45396], [1, 45396], [1, 45396]]],\n  ['control: scenario 3',\n   [[35305, 48952, 41314, 29239, 28773],\n    65535,\n    11028,\n    [[False, False],\n     [False, False],\n     [True, False],\n     [True, False],\n     [True, False],\n     [False, False],\n     [True, False],\n     [True, False],\n     [True, False],\n     [True, False],\n     [False, False],\n     [True, True]]],\n   [[0, 11028],\n    [0, 11028],\n    [1, 48952],\n    [1, 48952],\n    [1, 48952],\n    [1, 48952],\n    [2, 41314],\n    [2, 41314],\n    [2, 41314],\n    [2, 41314],\n    [2, 41314],\n    [0, 41314]]]],\n [['regression: scenario 15',\n   [[10064, 26257],\n    255,\n    24919,\n    [[True, False],\n     [False, False],\n     [False, False],\n     [False, False],\n     [True, False],\n     [True, False],\n     [True, False],\n     [False, True],\n     [True, False],\n     [False, False],\n     [True, False],\n     [True, False],\n     [False, False],\n     [False, False]]],\n   [[1, 24977],\n    [1, 24977],\n    [1, 24977],\n    [1, 24977],\n    [1, 24977],\n    [1, 24977],\n    [1, 24977],\n    [0, 24977],\n    [1, 24977],\n    [1, 24977],\n    [1, 24977],\n    [1, 24977],\n    [1, 24977],\n    [1, 24977]]],\n  ['regression: scenario 21',\n   [[12086, 47767],\n    65535,\n    46065,\n    [[False, False],\n     [False, False],\n     [True, False],\n     [False, False],\n     [False, False],\n     [False, False],\n     [False, False],\n     [True, False],\n     [True, False],\n     [True, True],\n     [True, True],\n     [True, False],\n     [False, False],\n     [False, False]]],\n   [[0, 46065],\n    [0, 46065],\n    [1, 47767],\n    [1, 47767],\n    [1, 47767],\n    [1, 47767],\n    [1, 47767],\n    [1, 47767],\n    [1, 47767],\n    [0, 47767],\n    [0, 47767],\n    [0, 47767],\n    [0, 47767],\n    [0, 47767]]],\n  ['regression: wrap past last step',\n   [[0, 17, 34],\n    255,\n    43776,\n    [[True, False], [False, False], [True, False], [False, False], [True, False], [True, False]]],\n   [[1, 43793], [1, 43793], [2, 43810], [2, 43810], [1, 43793], [1, 43793]]],\n  ['regression: two element file',\n   [[5, 9], 65535, 0, [[True, False], [False, False], [True, False], [False, False], [True, False]]],\n   [[1, 9], [1, 9], [1, 9], [1, 9], [1, 9]]],\n  ['control: reset while enabled',\n   [[0, 3, 12], 15, 65520, [[True, False], [True, True], [False, False], [True, False]]],\n   [[1, 65523], [0, 65523], [0, 65523], [1, 65523]]],\n  ['control: reset with advance',\n   [[0, 256, 512], 65280, 170, [[False, False], [True, True], [False, False], [True, False]]],\n   [[0, 170], [0, 170], [0, 170], [1, 426]]],\n  ['regression: scenario 1',\n   [[39974, 26951],\n    3855,\n    4546,\n    [[False, False],\n     [False, False],\n     [True, False],\n     [False, False],\n     [True, False],\n     [True, False],\n     [False, False],\n     [False, False],\n     [True, False],\n     [True, True]]],\n   [[0, 4546],\n    [0, 4546],\n    [1, 6599],\n    [1, 6599],\n    [1, 6599],\n    [1, 6599],\n    [1, 6599],\n    [1, 6599],\n    [1, 6599],\n    [0, 6599]]],\n  ['control: scenario 2',\n   [[43067, 57880, 6921, 33106, 51712],\n    255,\n    13830,\n    [[True, False],\n     [False, False],\n     [False, False],\n     [True, False],\n     [True, False],\n     [False, False],\n     [True, False],\n     [False, False],\n     [True, True],\n     [True, True],\n     [False, False],\n     [True, False],\n     [False, False]]],\n   [[1, 13848],\n    [1, 13848],\n    [1, 13848],\n    [2, 13833],\n    [2, 13833],\n    [2, 13833],\n    [3, 13906],\n    [3, 13906],\n    [0, 13906],\n    [0, 13906],\n    [0, 13906],\n    [1, 13848],\n    [1, 13848]]]]]\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-sqo-sequencer-wrap-target","generated_at":"2026-09-29T14:51:42.336089+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":"The wrap assigns position 0.","sha256":"06a12ae86f40b30821d4785f5a75a9910428cdb16405d602cf81cdbebb5f1292","title":"Sequencer wraps to the home element instead of step 1 · 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.316,"exit_code":1,"observations":[{"actual":[[1,43793],[1,43793],[2,43810],[2,43810],[1,43793],[1,43793]],"check":"regression: wrap past last step","expected":[[1,43793],[1,43793],[2,43810],[2,43810],[1,43793],[1,43793]],"passed":true},{"actual":[[1,9],[1,9],[0,5],[0,5],[1,9]],"check":"regression: two element file","expected":[[1,9],[1,9],[1,9],[1,9],[1,9]],"passed":false},{"actual":[[1,65523],[0,65523],[0,65523],[1,65523]],"check":"control: reset while enabled","expected":[[1,65523],[0,65523],[0,65523],[1,65523]],"passed":true},{"actual":[[0,170],[0,170],[0,170],[1,426]],"check":"control: reset with advance","expected":[[0,170],[0,170],[0,170],[1,426]],"passed":true},{"actual":[[0,52597],[0,52597],[0,52597],[0,52597],[0,52597],[0,52597],[0,52597],[1,50611],[1,50611],[1,50611]],"check":"control: scenario 1","expected":[[0,52597],[0,52597],[0,52597],[0,52597],[0,52597],[0,52597],[0,52597],[1,50611],[1,50611],[1,50611]],"passed":true},{"actual":[[1,5877],[1,5877],[1,5877],[1,5877],[2,5658],[2,5658],[2,5658],[2,5658],[0,5658],[0,5658]],"check":"control: scenario 2","expected":[[1,5877],[1,5877],[1,5877],[1,5877],[2,5658],[2,5658],[2,5658],[2,5658],[0,5658],[0,5658]],"passed":true},{"actual":[[1,45985],[1,45985],[1,45985],[1,45985],[1,45985],[1,45985],[1,45985]],"check":"control: scenario 3","expected":[[1,45985],[1,45985],[1,45985],[1,45985],[1,45985],[1,45985],[1,45985]],"passed":true},{"actual":[[1,61415],[1,61415],[1,61415],[1,61415],[1,61415],[2,54040]],"check":"control: scenario 4","expected":[[1,61415],[1,61415],[1,61415],[1,61415],[1,61415],[2,54040]],"passed":true}],"passed":false,"stderr":"","stdout":"{\"observations\": [{\"check\": \"regression: wrap past last step\", \"actual\": [[1, 43793], [1, 43793], [2, 43810], [2, 43810], [1, 43793], [1, 43793]], \"expected\": [[1, 43793], [1, 43793], [2, 43810], [2, 43810], [1, 43793], [1, 43793]], \"passed\": true}, {\"check\": \"regression: two element file\", \"actual\": [[1, 9], [1, 9], [0, 5], [0, 5], [1, 9]], \"expected\": [[1, 9], [1, 9], [1, 9], [1, 9], [1, 9]], \"passed\": false}, {\"check\": \"control: reset while enabled\", \"actual\": [[1, 65523], [0, 65523], [0, 65523], [1, 65523]], \"expected\": [[1, 65523], [0, 65523], [0, 65523], [1, 65523]], \"passed\": true}, {\"check\": \"control: reset with advance\", \"actual\": [[0, 170], [0, 170], [0, 170], [1, 426]], \"expected\": [[0, 170], [0, 170], [0, 170], [1, 426]], \"passed\": true}, {\"check\": \"control: scenario 1\", \"actual\": [[0, 52597], [0, 52597], [0, 52597], [0, 52597], [0, 52597], [0, 52597], [0, 52597], [1, 50611], [1, 50611], [1, 50611]], \"expected\": [[0, 52597], [0, 52597], [0, 52597], [0, 52597], [0, 52597], [0, 52597], [0, 52597], [1, 50611], [1, 50611], [1, 50611]], \"passed\": true}, {\"check\": \"control: scenario 2\", \"actual\": [[1, 5877], [1, 5877], [1, 5877], [1, 5877], [2, 5658], [2, 5658], [2, 5658], [2, 5658], [0, 5658], [0, 5658]], \"expected\": [[1, 5877], [1, 5877], [1, 5877], [1, 5877], [2, 5658], [2, 5658], [2, 5658], [2, 5658], [0, 5658], [0, 5658]], \"passed\": true}, {\"check\": \"control: scenario 3\", \"actual\": [[1, 45985], [1, 45985], [1, 45985], [1, 45985], [1, 45985], [1, 45985], [1, 45985]], \"expected\": [[1, 45985], [1, 45985], [1, 45985], [1, 45985], [1, 45985], [1, 45985], [1, 45985]], \"passed\": true}, {\"check\": \"control: scenario 4\", \"actual\": [[1, 61415], [1, 61415], [1, 61415], [1, 61415], [1, 61415], [2, 54040]], \"expected\": [[1, 61415], [1, 61415], [1, 61415], [1, 61415], [1, 61415], [2, 54040]], \"passed\": true}], \"passed\": false}\n"},"broken":{"elapsed_ms":40.672,"exit_code":1,"observations":[{"actual":[[1,43793],[1,43793],[2,43810],[2,43810],[0,43776],[0,43776]],"check":"regression: wrap past last step","expected":[[1,43793],[1,43793],[2,43810],[2,43810],[1,43793],[1,43793]],"passed":false},{"actual":[[1,9],[1,9],[0,5],[0,5],[1,9]],"check":"regression: two element file","expected":[[1,9],[1,9],[1,9],[1,9],[1,9]],"passed":false},{"actual":[[1,65523],[0,65523],[0,65523],[1,65523]],"check":"control: reset while enabled","expected":[[1,65523],[0,65523],[0,65523],[1,65523]],"passed":true},{"actual":[[0,170],[0,170],[0,170],[1,426]],"check":"control: reset with advance","expected":[[0,170],[0,170],[0,170],[1,426]],"passed":true},{"actual":[[0,52597],[0,52597],[0,52597],[0,52597],[0,52597],[0,52597],[0,52597],[1,50611],[1,50611],[1,50611]],"check":"control: scenario 1","expected":[[0,52597],[0,52597],[0,52597],[0,52597],[0,52597],[0,52597],[0,52597],[1,50611],[1,50611],[1,50611]],"passed":true},{"actual":[[1,5877],[1,5877],[1,5877],[1,5877],[2,5658],[2,5658],[2,5658],[2,5658],[0,5658],[0,5658]],"check":"control: scenario 2","expected":[[1,5877],[1,5877],[1,5877],[1,5877],[2,5658],[2,5658],[2,5658],[2,5658],[0,5658],[0,5658]],"passed":true},{"actual":[[1,45985],[1,45985],[1,45985],[1,45985],[1,45985],[1,45985],[1,45985]],"check":"control: scenario 3","expected":[[1,45985],[1,45985],[1,45985],[1,45985],[1,45985],[1,45985],[1,45985]],"passed":true},{"actual":[[1,61415],[1,61415],[1,61415],[1,61415],[1,61415],[2,54040]],"check":"control: scenario 4","expected":[[1,61415],[1,61415],[1,61415],[1,61415],[1,61415],[2,54040]],"passed":true}],"passed":false,"stderr":"","stdout":"{\"observations\": [{\"check\": \"regression: wrap past last step\", \"actual\": [[1, 43793], [1, 43793], [2, 43810], [2, 43810], [0, 43776], [0, 43776]], \"expected\": [[1, 43793], [1, 43793], [2, 43810], [2, 43810], [1, 43793], [1, 43793]], \"passed\": false}, {\"check\": \"regression: two element file\", \"actual\": [[1, 9], [1, 9], [0, 5], [0, 5], [1, 9]], \"expected\": [[1, 9], [1, 9], [1, 9], [1, 9], [1, 9]], \"passed\": false}, {\"check\": \"control: reset while enabled\", \"actual\": [[1, 65523], [0, 65523], [0, 65523], [1, 65523]], \"expected\": [[1, 65523], [0, 65523], [0, 65523], [1, 65523]], \"passed\": true}, {\"check\": \"control: reset with advance\", \"actual\": [[0, 170], [0, 170], [0, 170], [1, 426]], \"expected\": [[0, 170], [0, 170], [0, 170], [1, 426]], \"passed\": true}, {\"check\": \"control: scenario 1\", \"actual\": [[0, 52597], [0, 52597], [0, 52597], [0, 52597], [0, 52597], [0, 52597], [0, 52597], [1, 50611], [1, 50611], [1, 50611]], \"expected\": [[0, 52597], [0, 52597], [0, 52597], [0, 52597], [0, 52597], [0, 52597], [0, 52597], [1, 50611], [1, 50611], [1, 50611]], \"passed\": true}, {\"check\": \"control: scenario 2\", \"actual\": [[1, 5877], [1, 5877], [1, 5877], [1, 5877], [2, 5658], [2, 5658], [2, 5658], [2, 5658], [0, 5658], [0, 5658]], \"expected\": [[1, 5877], [1, 5877], [1, 5877], [1, 5877], [2, 5658], [2, 5658], [2, 5658], [2, 5658], [0, 5658], [0, 5658]], \"passed\": true}, {\"check\": \"control: scenario 3\", \"actual\": [[1, 45985], [1, 45985], [1, 45985], [1, 45985], [1, 45985], [1, 45985], [1, 45985]], \"expected\": [[1, 45985], [1, 45985], [1, 45985], [1, 45985], [1, 45985], [1, 45985], [1, 45985]], \"passed\": true}, {\"check\": \"control: scenario 4\", \"actual\": [[1, 61415], [1, 61415], [1, 61415], [1, 61415], [1, 61415], [2, 54040]], \"expected\": [[1, 61415], [1, 61415], [1, 61415], [1, 61415], [1, 61415], [2, 54040]], \"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."}}