{"abstract":"An alarm present when the panel starts never flashes or sounds the horn.","category":"PLC ladder logic scan cycles","checks":8,"contract":"Stack light and horn logic. alarms is a list of [name, high|low]; each scan gives the active alarm names plus optional ack and silence buttons. An alarm becomes unacknowledged on its inactive-to-active transition and stops being unacknowledged when it clears or ack is pressed. Any new activation cancels silence; silence (pressed after that) mutes the horn. The lamp is red if any high alarm is active, else amber if any alarm is active, else off; it flashes if an unacknowledged alarm of the displayed level exists. The horn sounds while any unacknowledged alarm exists and not silenced. Return [color, flashing, horn] per scan.","contract_signature":"alarms, scans","evaluation_group":"w2-plc-ladder-logic-scan-cycles-stack-light-horn","failed_approach":"Treating every active-but-acknowledged alarm as new re-announces alarms immediately after ack.","family":"w2-plc-ladder-logic-scan-cycles-stack-light-horn-activation-edge","id":"FA-92291","implementations":{"attempt":{"sha256":"2991ebfc2a91c5cc370f983b71d5fe343da40164af7d611fba68174ddd7ec17c","source":"\"\"\"Failure Map reference implementation. Python standard library only.\"\"\"\nimport json\n\nN = 1\nobservations = []\ndef solve(alarms, scans):\n    level = dict(alarms)\n    prev = set()\n    unacked = set()\n    silenced = False\n    out = []\n    for s in scans:\n        active = set(s.get('active', []))\n        new = active - (prev & unacked)\n        if new:\n            silenced = False\n        unacked = (unacked | new) & active\n        if s.get('ack'):\n            unacked = set()\n        if s.get('silence'):\n            silenced = True\n        if any(level[a] == 'high' for a in active):\n            shown = 'high'\n        elif active:\n            shown = 'low'\n        else:\n            shown = None\n        color = {'high': 'red', 'low': 'amber', None: 'off'}[shown]\n        flashing = any(level[a] == shown for a in unacked)\n        horn = bool(unacked) and not silenced\n        prev = active\n        out.append([color, flashing, horn])\n    return out\ndef check(label, actual, expected):\n    observations.append({\"check\": label, \"actual\": actual, \"expected\": expected, \"passed\": actual == expected})\nfixtures = [[['regression: escalation sequence',\n   [[['A', 'high'], ['B', 'low']],\n    [{'active': ['B']},\n     {'active': ['B'], 'silence': True},\n     {'active': ['A', 'B']},\n     {'active': ['A', 'B'], 'ack': True},\n     {'active': ['B']},\n     {}]],\n   [['amber', True, True],\n    ['amber', True, False],\n    ['red', True, True],\n    ['red', False, False],\n    ['amber', False, False],\n    ['off', False, False]]],\n  ['regression: low alarm while high acked',\n   [[['A', 'high'], ['B', 'low']],\n    [{'active': ['A'], 'ack': True},\n     {'active': ['A', 'B']},\n     {'active': ['A', 'B'], 'silence': True},\n     {'active': ['A', 'B']}]],\n   [['red', False, False], ['red', False, True], ['red', False, False], ['red', False, False]]],\n  ['regression: alarm clears unacknowledged',\n   [[['A', 'high'], ['B', 'low']], [{'active': ['A']}, {}, {'active': ['B']}]],\n   [['red', True, True], ['off', False, False], ['amber', True, True]]],\n  ['regression: alarm present at first scan',\n   [[['A', 'high'], ['B', 'low']], [{'active': ['A']}, {'active': ['A']}]],\n   [['red', True, True], ['red', True, True]]],\n  ['regression: silence then new low alarm',\n   [[['A', 'high'], ['B', 'low']],\n    [{'active': ['A']}, {'active': ['A'], 'silence': True}, {'active': ['A', 'B']}]],\n   [['red', True, True], ['red', True, False], ['red', True, True]]],\n  ['regression: scenario 1',\n   [[['PT101', 'high'], ['LT200', 'low'], ['TT300', 'low'], ['ZS400', 'high']],\n    [{'active': ['TT300'], 'ack': True},\n     {'active': ['TT300']},\n     {'active': ['ZS400'], 'ack': True, 'silence': True},\n     {'active': []},\n     {'active': ['ZS400'], 'silence': True},\n     {'active': ['TT300', 'ZS400']},\n     {'active': ['LT200', 'TT300', 'ZS400']},\n     {'active': ['LT200', 'TT300', 'ZS400']},\n     {'active': ['LT200', 'ZS400'], 'ack': True}]],\n   [['amber', False, False],\n    ['amber', False, False],\n    ['red', False, False],\n    ['off', False, False],\n    ['red', True, False],\n    ['red', True, True],\n    ['red', True, True],\n    ['red', True, True],\n    ['red', False, False]]],\n  ['regression: scenario 2',\n   [[['PT101', 'high'], ['LT200', 'low'], ['TT300', 'low'], ['ZS400', 'high']],\n    [{'active': ['TT300'], 'silence': True},\n     {'active': ['ZS400']},\n     {'active': ['LT200', 'TT300']},\n     {'active': ['LT200', 'PT101', 'TT300', 'ZS400']},\n     {'active': ['LT200', 'PT101', 'TT300'], 'silence': True},\n     {'active': ['LT200', 'PT101', 'TT300'], 'silence': True}]],\n   [['amber', True, False],\n    ['red', True, True],\n    ['amber', True, True],\n    ['red', True, True],\n    ['red', True, False],\n    ['red', True, False]]],\n  ['regression: scenario 3',\n   [[['PT101', 'high'], ['LT200', 'low'], ['TT300', 'low'], ['ZS400', 'high']],\n    [{'active': [], 'ack': True},\n     {'active': []},\n     {'active': ['ZS400']},\n     {'active': ['ZS400']},\n     {'active': ['LT200', 'PT101', 'ZS400'], 'silence': True},\n     {'active': ['LT200', 'PT101'], 'ack': True}]],\n   [['off', False, False],\n    ['off', False, False],\n    ['red', True, True],\n    ['red', True, True],\n    ['red', True, False],\n    ['red', False, False]]]],\n [['regression: alarm clears unacknowledged',\n   [[['A', 'high'], ['B', 'low']], [{'active': ['A']}, {}, {'active': ['B']}]],\n   [['red', True, True], ['off', False, False], ['amber', True, True]]],\n  ['regression: low alarm while high acked',\n   [[['A', 'high'], ['B', 'low']],\n    [{'active': ['A'], 'ack': True},\n     {'active': ['A', 'B']},\n     {'active': ['A', 'B'], 'silence': True},\n     {'active': ['A', 'B']}]],\n   [['red', False, False], ['red', False, True], ['red', False, False], ['red', False, False]]],\n  ['regression: escalation sequence',\n   [[['A', 'high'], ['B', 'low']],\n    [{'active': ['B']},\n     {'active': ['B'], 'silence': True},\n     {'active': ['A', 'B']},\n     {'active': ['A', 'B'], 'ack': True},\n     {'active': ['B']},\n     {}]],\n   [['amber', True, True],\n    ['amber', True, False],\n    ['red', True, True],\n    ['red', False, False],\n    ['amber', False, False],\n    ['off', False, False]]],\n  ['regression: alarm present at first scan',\n   [[['A', 'high'], ['B', 'low']], [{'active': ['A']}, {'active': ['A']}]],\n   [['red', True, True], ['red', True, True]]],\n  ['regression: silence then new low alarm',\n   [[['A', 'high'], ['B', 'low']],\n    [{'active': ['A']}, {'active': ['A'], 'silence': True}, {'active': ['A', 'B']}]],\n   [['red', True, True], ['red', True, False], ['red', True, True]]],\n  ['regression: scenario 1',\n   [[['PT101', 'high'], ['LT200', 'low'], ['TT300', 'low'], ['ZS400', 'high']],\n    [{'active': ['ZS400'], 'silence': True},\n     {'active': ['LT200', 'ZS400']},\n     {'active': ['LT200', 'ZS400']},\n     {'active': ['LT200', 'ZS400']},\n     {'active': ['LT200', 'ZS400']},\n     {'active': ['LT200']}]],\n   [['red', True, False],\n    ['red', True, True],\n    ['red', True, True],\n    ['red', True, True],\n    ['red', True, True],\n    ['amber', True, True]]],\n  ['regression: scenario 2',\n   [[['PT101', 'high'], ['LT200', 'low'], ['TT300', 'low'], ['ZS400', 'high']],\n    [{'active': ['PT101']},\n     {'active': ['ZS400'], 'ack': True},\n     {'active': ['TT300']},\n     {'active': ['TT300']},\n     {'active': ['PT101', 'TT300']},\n     {'active': ['PT101']},\n     {'active': ['LT200', 'ZS400']},\n     {'active': ['LT200', 'PT101', 'TT300', 'ZS400']},\n     {'active': ['LT200', 'TT300', 'ZS400']},\n     {'active': ['LT200', 'PT101', 'TT300', 'ZS400']},\n     {'active': ['LT200', 'TT300'], 'ack': True},\n     {'active': ['LT200', 'TT300']}]],\n   [['red', True, True],\n    ['red', False, False],\n    ['amber', True, True],\n    ['amber', True, True],\n    ['red', True, True],\n    ['red', True, True],\n    ['red', True, True],\n    ['red', True, True],\n    ['red', True, True],\n    ['red', True, True],\n    ['amber', False, False],\n    ['amber', False, False]]],\n  ['regression: scenario 3',\n   [[['PT101', 'high'], ['LT200', 'low'], ['TT300', 'low'], ['ZS400', 'high']],\n    [{'active': ['LT200', 'PT101', 'ZS400']},\n     {'active': ['LT200', 'PT101', 'TT300', 'ZS400']},\n     {'active': ['LT200', 'PT101', 'TT300', 'ZS400']},\n     {'active': ['LT200', 'PT101', 'ZS400'], 'ack': True},\n     {'active': ['LT200', 'PT101']},\n     {'active': ['LT200', 'PT101', 'TT300', 'ZS400']},\n     {'active': ['ZS400']},\n     {'active': ['PT101', 'ZS400']},\n     {'active': ['PT101', 'ZS400'], 'ack': True},\n     {'active': ['PT101', 'ZS400']}]],\n   [['red', True, True],\n    ['red', True, True],\n    ['red', True, True],\n    ['red', False, False],\n    ['red', False, False],\n    ['red', True, True],\n    ['red', True, True],\n    ['red', True, True],\n    ['red', False, False],\n    ['red', False, False]]]],\n [['regression: alarm present at first scan',\n   [[['A', 'high'], ['B', 'low']], [{'active': ['A']}, {'active': ['A']}]],\n   [['red', True, True], ['red', True, True]]],\n  ['regression: scenario 5',\n   [[['PT101', 'high'], ['LT200', 'low'], ['TT300', 'low'], ['ZS400', 'high']],\n    [{'active': ['LT200', 'PT101', 'TT300']},\n     {'active': ['PT101', 'TT300']},\n     {'active': ['PT101', 'TT300', 'ZS400'], 'ack': True},\n     {'active': ['ZS400'], 'silence': True},\n     {'active': ['ZS400']},\n     {'active': [], 'ack': True}]],\n   [['red', True, True],\n    ['red', True, True],\n    ['red', False, False],\n    ['red', False, False],\n    ['red', False, False],\n    ['off', False, False]]],\n  ['regression: escalation sequence',\n   [[['A', 'high'], ['B', 'low']],\n    [{'active': ['B']},\n     {'active': ['B'], 'silence': True},\n     {'active': ['A', 'B']},\n     {'active': ['A', 'B'], 'ack': True},\n     {'active': ['B']},\n     {}]],\n   [['amber', True, True],\n    ['amber', True, False],\n    ['red', True, True],\n    ['red', False, False],\n    ['amber', False, False],\n    ['off', False, False]]],\n  ['regression: alarm clears unacknowledged',\n   [[['A', 'high'], ['B', 'low']], [{'active': ['A']}, {}, {'active': ['B']}]],\n   [['red', True, True], ['off', False, False], ['amber', True, True]]],\n  ['regression: low alarm while high acked',\n   [[['A', 'high'], ['B', 'low']],\n    [{'active': ['A'], 'ack': True},\n     {'active': ['A', 'B']},\n     {'active': ['A', 'B'], 'silence': True},\n     {'active': ['A', 'B']}]],\n   [['red', False, False], ['red', False, True], ['red', False, False], ['red', False, False]]],\n  ['regression: silence then new low alarm',\n   [[['A', 'high'], ['B', 'low']],\n    [{'active': ['A']}, {'active': ['A'], 'silence': True}, {'active': ['A', 'B']}]],\n   [['red', True, True], ['red', True, False], ['red', True, True]]],\n  ['regression: scenario 1',\n   [[['PT101', 'high'], ['LT200', 'low'], ['TT300', 'low'], ['ZS400', 'high']],\n    [{'active': ['PT101']},\n     {'active': ['LT200', 'PT101']},\n     {'active': ['LT200', 'PT101']},\n     {'active': ['LT200', 'PT101'], 'silence': True},\n     {'active': ['LT200', 'PT101']},\n     {'active': []},\n     {'active': []},\n     {'active': []},\n     {'active': [], 'ack': True},\n     {'active': ['LT200']},\n     {'active': ['LT200', 'TT300']}]],\n   [['red', True, True],\n    ['red', True, True],\n    ['red', True, True],\n    ['red', True, False],\n    ['red', True, False],\n    ['off', False, False],\n    ['off', False, False],\n    ['off', False, False],\n    ['off', False, False],\n    ['amber', True, True],\n    ['amber', True, True]]],\n  ['regression: scenario 2',\n   [[['PT101', 'high'], ['LT200', 'low'], ['TT300', 'low'], ['ZS400', 'high']],\n    [{'active': []},\n     {'active': ['ZS400']},\n     {'active': ['ZS400']},\n     {'active': ['ZS400'], 'silence': True},\n     {'active': ['ZS400']},\n     {'active': []},\n     {'active': ['LT200', 'ZS400']},\n     {'active': ['LT200', 'PT101', 'ZS400']},\n     {'active': ['PT101', 'TT300', 'ZS400']}]],\n   [['off', False, False],\n    ['red', True, True],\n    ['red', True, True],\n    ['red', True, False],\n    ['red', True, False],\n    ['off', False, False],\n    ['red', True, True],\n    ['red', True, True],\n    ['red', True, True]]]],\n [['regression: silence then new low alarm',\n   [[['A', 'high'], ['B', 'low']],\n    [{'active': ['A']}, {'active': ['A'], 'silence': True}, {'active': ['A', 'B']}]],\n   [['red', True, True], ['red', True, False], ['red', True, True]]],\n  ['regression: scenario 2',\n   [[['PT101', 'high'], ['LT200', 'low'], ['TT300', 'low'], ['ZS400', 'high']],\n    [{'active': []},\n     {'active': ['PT101', 'TT300']},\n     {'active': ['PT101', 'TT300'], 'ack': True},\n     {'active': ['PT101', 'ZS400'], 'silence': True},\n     {'active': ['PT101']},\n     {'active': ['PT101'], 'silence': True}]],\n   [['off', False, False],\n    ['red', True, True],\n    ['red', False, False],\n    ['red', True, False],\n    ['red', False, False],\n    ['red', False, False]]],\n  ['regression: escalation sequence',\n   [[['A', 'high'], ['B', 'low']],\n    [{'active': ['B']},\n     {'active': ['B'], 'silence': True},\n     {'active': ['A', 'B']},\n     {'active': ['A', 'B'], 'ack': True},\n     {'active': ['B']},\n     {}]],\n   [['amber', True, True],\n    ['amber', True, False],\n    ['red', True, True],\n    ['red', False, False],\n    ['amber', False, False],\n    ['off', False, False]]],\n  ['regression: alarm clears unacknowledged',\n   [[['A', 'high'], ['B', 'low']], [{'active': ['A']}, {}, {'active': ['B']}]],\n   [['red', True, True], ['off', False, False], ['amber', True, True]]],\n  ['regression: low alarm while high acked',\n   [[['A', 'high'], ['B', 'low']],\n    [{'active': ['A'], 'ack': True},\n     {'active': ['A', 'B']},\n     {'active': ['A', 'B'], 'silence': True},\n     {'active': ['A', 'B']}]],\n   [['red', False, False], ['red', False, True], ['red', False, False], ['red', False, False]]],\n  ['regression: alarm present at first scan',\n   [[['A', 'high'], ['B', 'low']], [{'active': ['A']}, {'active': ['A']}]],\n   [['red', True, True], ['red', True, True]]],\n  ['regression: scenario 1',\n   [[['PT101', 'high'], ['LT200', 'low'], ['TT300', 'low'], ['ZS400', 'high']],\n    [{'active': ['PT101'], 'ack': True},\n     {'active': ['PT101']},\n     {'active': ['PT101'], 'ack': True},\n     {'active': ['PT101']},\n     {'active': ['PT101']},\n     {'active': ['LT200', 'PT101', 'TT300']},\n     {'active': ['LT200', 'PT101', 'TT300'], 'ack': True},\n     {'active': ['LT200', 'TT300']}]],\n   [['red', False, False],\n    ['red', False, False],\n    ['red', False, False],\n    ['red', False, False],\n    ['red', False, False],\n    ['red', False, True],\n    ['red', False, False],\n    ['amber', False, False]]],\n  ['regression: scenario 3',\n   [[['PT101', 'high'], ['LT200', 'low'], ['TT300', 'low'], ['ZS400', 'high']],\n    [{'active': ['LT200', 'PT101', 'TT300']},\n     {'active': ['LT200', 'PT101', 'TT300', 'ZS400']},\n     {'active': ['LT200', 'PT101', 'TT300'], 'silence': True},\n     {'active': ['LT200', 'PT101', 'TT300']},\n     {'active': ['PT101', 'TT300']},\n     {'active': ['TT300'], 'ack': True},\n     {'active': ['ZS400']},\n     {'active': ['TT300', 'ZS400']}]],\n   [['red', True, True],\n    ['red', True, True],\n    ['red', True, False],\n    ['red', True, False],\n    ['red', True, False],\n    ['amber', False, False],\n    ['red', True, True],\n    ['red', True, True]]]],\n [['regression: scenario 1',\n   [[['PT101', 'high'], ['LT200', 'low'], ['TT300', 'low'], ['ZS400', 'high']],\n    [{'active': [], 'silence': True},\n     {'active': [], 'silence': True},\n     {'active': [], 'silence': True},\n     {'active': []},\n     {'active': ['ZS400']},\n     {'active': ['ZS400'], 'ack': True},\n     {'active': ['TT300']},\n     {'active': ['PT101', 'TT300'], 'ack': True},\n     {'active': ['PT101', 'TT300']},\n     {'active': ['PT101', 'TT300'], 'silence': True},\n     {'active': ['LT200', 'PT101', 'TT300'], 'silence': True},\n     {'active': ['LT200', 'PT101', 'TT300']}]],\n   [['off', False, False],\n    ['off', False, False],\n    ['off', False, False],\n    ['off', False, False],\n    ['red', True, True],\n    ['red', False, False],\n    ['amber', True, True],\n    ['red', False, False],\n    ['red', False, False],\n    ['red', False, False],\n    ['red', False, False],\n    ['red', False, False]]],\n  ['regression: scenario 4',\n   [[['PT101', 'high'], ['LT200', 'low'], ['TT300', 'low'], ['ZS400', 'high']],\n    [{'active': ['PT101', 'TT300']},\n     {'active': ['PT101', 'TT300']},\n     {'active': ['TT300'], 'ack': True},\n     {'active': ['PT101', 'TT300']},\n     {'active': ['TT300', 'ZS400']},\n     {'active': ['ZS400'], 'silence': True},\n     {'active': ['PT101', 'ZS400'], 'ack': True},\n     {'active': ['LT200', 'PT101', 'ZS400'], 'ack': True, 'silence': True},\n     {'active': ['LT200', 'PT101', 'TT300', 'ZS400']}]],\n   [['red', True, True],\n    ['red', True, True],\n    ['amber', False, False],\n    ['red', True, True],\n    ['red', True, True],\n    ['red', True, False],\n    ['red', False, False],\n    ['red', False, False],\n    ['red', False, True]]],\n  ['regression: escalation sequence',\n   [[['A', 'high'], ['B', 'low']],\n    [{'active': ['B']},\n     {'active': ['B'], 'silence': True},\n     {'active': ['A', 'B']},\n     {'active': ['A', 'B'], 'ack': True},\n     {'active': ['B']},\n     {}]],\n   [['amber', True, True],\n    ['amber', True, False],\n    ['red', True, True],\n    ['red', False, False],\n    ['amber', False, False],\n    ['off', False, False]]],\n  ['regression: alarm clears unacknowledged',\n   [[['A', 'high'], ['B', 'low']], [{'active': ['A']}, {}, {'active': ['B']}]],\n   [['red', True, True], ['off', False, False], ['amber', True, True]]],\n  ['regression: low alarm while high acked',\n   [[['A', 'high'], ['B', 'low']],\n    [{'active': ['A'], 'ack': True},\n     {'active': ['A', 'B']},\n     {'active': ['A', 'B'], 'silence': True},\n     {'active': ['A', 'B']}]],\n   [['red', False, False], ['red', False, True], ['red', False, False], ['red', False, False]]],\n  ['regression: alarm present at first scan',\n   [[['A', 'high'], ['B', 'low']], [{'active': ['A']}, {'active': ['A']}]],\n   [['red', True, True], ['red', True, True]]],\n  ['regression: silence then new low alarm',\n   [[['A', 'high'], ['B', 'low']],\n    [{'active': ['A']}, {'active': ['A'], 'silence': True}, {'active': ['A', 'B']}]],\n   [['red', True, True], ['red', True, False], ['red', True, True]]],\n  ['regression: scenario 2',\n   [[['PT101', 'high'], ['LT200', 'low'], ['TT300', 'low'], ['ZS400', 'high']],\n    [{'active': ['LT200']},\n     {'active': ['LT200'], 'ack': True},\n     {'active': []},\n     {'active': ['PT101'], 'ack': True},\n     {'active': ['PT101'], 'ack': True},\n     {'active': ['PT101']},\n     {'active': ['LT200', 'PT101', 'TT300']}]],\n   [['amber', True, True],\n    ['amber', False, False],\n    ['off', False, False],\n    ['red', False, False],\n    ['red', False, False],\n    ['red', False, False],\n    ['red', False, True]]]]]\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":"5384da96452783e304d412fc455cb776438b6ffa02a54632347850739d271927","source":"\"\"\"Failure Map reference implementation. Python standard library only.\"\"\"\nimport json\n\nN = 1\nobservations = []\ndef solve(alarms, scans):\n    level = dict(alarms)\n    prev = set()\n    unacked = set()\n    silenced = False\n    out = []\n    for s in scans:\n        active = set(s.get('active', []))\n        new = active - prev if prev else set()\n        if new:\n            silenced = False\n        unacked = (unacked | new) & active\n        if s.get('ack'):\n            unacked = set()\n        if s.get('silence'):\n            silenced = True\n        if any(level[a] == 'high' for a in active):\n            shown = 'high'\n        elif active:\n            shown = 'low'\n        else:\n            shown = None\n        color = {'high': 'red', 'low': 'amber', None: 'off'}[shown]\n        flashing = any(level[a] == shown for a in unacked)\n        horn = bool(unacked) and not silenced\n        prev = active\n        out.append([color, flashing, horn])\n    return out\ndef check(label, actual, expected):\n    observations.append({\"check\": label, \"actual\": actual, \"expected\": expected, \"passed\": actual == expected})\nfixtures = [[['regression: escalation sequence',\n   [[['A', 'high'], ['B', 'low']],\n    [{'active': ['B']},\n     {'active': ['B'], 'silence': True},\n     {'active': ['A', 'B']},\n     {'active': ['A', 'B'], 'ack': True},\n     {'active': ['B']},\n     {}]],\n   [['amber', True, True],\n    ['amber', True, False],\n    ['red', True, True],\n    ['red', False, False],\n    ['amber', False, False],\n    ['off', False, False]]],\n  ['regression: low alarm while high acked',\n   [[['A', 'high'], ['B', 'low']],\n    [{'active': ['A'], 'ack': True},\n     {'active': ['A', 'B']},\n     {'active': ['A', 'B'], 'silence': True},\n     {'active': ['A', 'B']}]],\n   [['red', False, False], ['red', False, True], ['red', False, False], ['red', False, False]]],\n  ['regression: alarm clears unacknowledged',\n   [[['A', 'high'], ['B', 'low']], [{'active': ['A']}, {}, {'active': ['B']}]],\n   [['red', True, True], ['off', False, False], ['amber', True, True]]],\n  ['regression: alarm present at first scan',\n   [[['A', 'high'], ['B', 'low']], [{'active': ['A']}, {'active': ['A']}]],\n   [['red', True, True], ['red', True, True]]],\n  ['regression: silence then new low alarm',\n   [[['A', 'high'], ['B', 'low']],\n    [{'active': ['A']}, {'active': ['A'], 'silence': True}, {'active': ['A', 'B']}]],\n   [['red', True, True], ['red', True, False], ['red', True, True]]],\n  ['regression: scenario 1',\n   [[['PT101', 'high'], ['LT200', 'low'], ['TT300', 'low'], ['ZS400', 'high']],\n    [{'active': ['TT300'], 'ack': True},\n     {'active': ['TT300']},\n     {'active': ['ZS400'], 'ack': True, 'silence': True},\n     {'active': []},\n     {'active': ['ZS400'], 'silence': True},\n     {'active': ['TT300', 'ZS400']},\n     {'active': ['LT200', 'TT300', 'ZS400']},\n     {'active': ['LT200', 'TT300', 'ZS400']},\n     {'active': ['LT200', 'ZS400'], 'ack': True}]],\n   [['amber', False, False],\n    ['amber', False, False],\n    ['red', False, False],\n    ['off', False, False],\n    ['red', True, False],\n    ['red', True, True],\n    ['red', True, True],\n    ['red', True, True],\n    ['red', False, False]]],\n  ['regression: scenario 2',\n   [[['PT101', 'high'], ['LT200', 'low'], ['TT300', 'low'], ['ZS400', 'high']],\n    [{'active': ['TT300'], 'silence': True},\n     {'active': ['ZS400']},\n     {'active': ['LT200', 'TT300']},\n     {'active': ['LT200', 'PT101', 'TT300', 'ZS400']},\n     {'active': ['LT200', 'PT101', 'TT300'], 'silence': True},\n     {'active': ['LT200', 'PT101', 'TT300'], 'silence': True}]],\n   [['amber', True, False],\n    ['red', True, True],\n    ['amber', True, True],\n    ['red', True, True],\n    ['red', True, False],\n    ['red', True, False]]],\n  ['regression: scenario 3',\n   [[['PT101', 'high'], ['LT200', 'low'], ['TT300', 'low'], ['ZS400', 'high']],\n    [{'active': [], 'ack': True},\n     {'active': []},\n     {'active': ['ZS400']},\n     {'active': ['ZS400']},\n     {'active': ['LT200', 'PT101', 'ZS400'], 'silence': True},\n     {'active': ['LT200', 'PT101'], 'ack': True}]],\n   [['off', False, False],\n    ['off', False, False],\n    ['red', True, True],\n    ['red', True, True],\n    ['red', True, False],\n    ['red', False, False]]]],\n [['regression: alarm clears unacknowledged',\n   [[['A', 'high'], ['B', 'low']], [{'active': ['A']}, {}, {'active': ['B']}]],\n   [['red', True, True], ['off', False, False], ['amber', True, True]]],\n  ['regression: low alarm while high acked',\n   [[['A', 'high'], ['B', 'low']],\n    [{'active': ['A'], 'ack': True},\n     {'active': ['A', 'B']},\n     {'active': ['A', 'B'], 'silence': True},\n     {'active': ['A', 'B']}]],\n   [['red', False, False], ['red', False, True], ['red', False, False], ['red', False, False]]],\n  ['regression: escalation sequence',\n   [[['A', 'high'], ['B', 'low']],\n    [{'active': ['B']},\n     {'active': ['B'], 'silence': True},\n     {'active': ['A', 'B']},\n     {'active': ['A', 'B'], 'ack': True},\n     {'active': ['B']},\n     {}]],\n   [['amber', True, True],\n    ['amber', True, False],\n    ['red', True, True],\n    ['red', False, False],\n    ['amber', False, False],\n    ['off', False, False]]],\n  ['regression: alarm present at first scan',\n   [[['A', 'high'], ['B', 'low']], [{'active': ['A']}, {'active': ['A']}]],\n   [['red', True, True], ['red', True, True]]],\n  ['regression: silence then new low alarm',\n   [[['A', 'high'], ['B', 'low']],\n    [{'active': ['A']}, {'active': ['A'], 'silence': True}, {'active': ['A', 'B']}]],\n   [['red', True, True], ['red', True, False], ['red', True, True]]],\n  ['regression: scenario 1',\n   [[['PT101', 'high'], ['LT200', 'low'], ['TT300', 'low'], ['ZS400', 'high']],\n    [{'active': ['ZS400'], 'silence': True},\n     {'active': ['LT200', 'ZS400']},\n     {'active': ['LT200', 'ZS400']},\n     {'active': ['LT200', 'ZS400']},\n     {'active': ['LT200', 'ZS400']},\n     {'active': ['LT200']}]],\n   [['red', True, False],\n    ['red', True, True],\n    ['red', True, True],\n    ['red', True, True],\n    ['red', True, True],\n    ['amber', True, True]]],\n  ['regression: scenario 2',\n   [[['PT101', 'high'], ['LT200', 'low'], ['TT300', 'low'], ['ZS400', 'high']],\n    [{'active': ['PT101']},\n     {'active': ['ZS400'], 'ack': True},\n     {'active': ['TT300']},\n     {'active': ['TT300']},\n     {'active': ['PT101', 'TT300']},\n     {'active': ['PT101']},\n     {'active': ['LT200', 'ZS400']},\n     {'active': ['LT200', 'PT101', 'TT300', 'ZS400']},\n     {'active': ['LT200', 'TT300', 'ZS400']},\n     {'active': ['LT200', 'PT101', 'TT300', 'ZS400']},\n     {'active': ['LT200', 'TT300'], 'ack': True},\n     {'active': ['LT200', 'TT300']}]],\n   [['red', True, True],\n    ['red', False, False],\n    ['amber', True, True],\n    ['amber', True, True],\n    ['red', True, True],\n    ['red', True, True],\n    ['red', True, True],\n    ['red', True, True],\n    ['red', True, True],\n    ['red', True, True],\n    ['amber', False, False],\n    ['amber', False, False]]],\n  ['regression: scenario 3',\n   [[['PT101', 'high'], ['LT200', 'low'], ['TT300', 'low'], ['ZS400', 'high']],\n    [{'active': ['LT200', 'PT101', 'ZS400']},\n     {'active': ['LT200', 'PT101', 'TT300', 'ZS400']},\n     {'active': ['LT200', 'PT101', 'TT300', 'ZS400']},\n     {'active': ['LT200', 'PT101', 'ZS400'], 'ack': True},\n     {'active': ['LT200', 'PT101']},\n     {'active': ['LT200', 'PT101', 'TT300', 'ZS400']},\n     {'active': ['ZS400']},\n     {'active': ['PT101', 'ZS400']},\n     {'active': ['PT101', 'ZS400'], 'ack': True},\n     {'active': ['PT101', 'ZS400']}]],\n   [['red', True, True],\n    ['red', True, True],\n    ['red', True, True],\n    ['red', False, False],\n    ['red', False, False],\n    ['red', True, True],\n    ['red', True, True],\n    ['red', True, True],\n    ['red', False, False],\n    ['red', False, False]]]],\n [['regression: alarm present at first scan',\n   [[['A', 'high'], ['B', 'low']], [{'active': ['A']}, {'active': ['A']}]],\n   [['red', True, True], ['red', True, True]]],\n  ['regression: scenario 5',\n   [[['PT101', 'high'], ['LT200', 'low'], ['TT300', 'low'], ['ZS400', 'high']],\n    [{'active': ['LT200', 'PT101', 'TT300']},\n     {'active': ['PT101', 'TT300']},\n     {'active': ['PT101', 'TT300', 'ZS400'], 'ack': True},\n     {'active': ['ZS400'], 'silence': True},\n     {'active': ['ZS400']},\n     {'active': [], 'ack': True}]],\n   [['red', True, True],\n    ['red', True, True],\n    ['red', False, False],\n    ['red', False, False],\n    ['red', False, False],\n    ['off', False, False]]],\n  ['regression: escalation sequence',\n   [[['A', 'high'], ['B', 'low']],\n    [{'active': ['B']},\n     {'active': ['B'], 'silence': True},\n     {'active': ['A', 'B']},\n     {'active': ['A', 'B'], 'ack': True},\n     {'active': ['B']},\n     {}]],\n   [['amber', True, True],\n    ['amber', True, False],\n    ['red', True, True],\n    ['red', False, False],\n    ['amber', False, False],\n    ['off', False, False]]],\n  ['regression: alarm clears unacknowledged',\n   [[['A', 'high'], ['B', 'low']], [{'active': ['A']}, {}, {'active': ['B']}]],\n   [['red', True, True], ['off', False, False], ['amber', True, True]]],\n  ['regression: low alarm while high acked',\n   [[['A', 'high'], ['B', 'low']],\n    [{'active': ['A'], 'ack': True},\n     {'active': ['A', 'B']},\n     {'active': ['A', 'B'], 'silence': True},\n     {'active': ['A', 'B']}]],\n   [['red', False, False], ['red', False, True], ['red', False, False], ['red', False, False]]],\n  ['regression: silence then new low alarm',\n   [[['A', 'high'], ['B', 'low']],\n    [{'active': ['A']}, {'active': ['A'], 'silence': True}, {'active': ['A', 'B']}]],\n   [['red', True, True], ['red', True, False], ['red', True, True]]],\n  ['regression: scenario 1',\n   [[['PT101', 'high'], ['LT200', 'low'], ['TT300', 'low'], ['ZS400', 'high']],\n    [{'active': ['PT101']},\n     {'active': ['LT200', 'PT101']},\n     {'active': ['LT200', 'PT101']},\n     {'active': ['LT200', 'PT101'], 'silence': True},\n     {'active': ['LT200', 'PT101']},\n     {'active': []},\n     {'active': []},\n     {'active': []},\n     {'active': [], 'ack': True},\n     {'active': ['LT200']},\n     {'active': ['LT200', 'TT300']}]],\n   [['red', True, True],\n    ['red', True, True],\n    ['red', True, True],\n    ['red', True, False],\n    ['red', True, False],\n    ['off', False, False],\n    ['off', False, False],\n    ['off', False, False],\n    ['off', False, False],\n    ['amber', True, True],\n    ['amber', True, True]]],\n  ['regression: scenario 2',\n   [[['PT101', 'high'], ['LT200', 'low'], ['TT300', 'low'], ['ZS400', 'high']],\n    [{'active': []},\n     {'active': ['ZS400']},\n     {'active': ['ZS400']},\n     {'active': ['ZS400'], 'silence': True},\n     {'active': ['ZS400']},\n     {'active': []},\n     {'active': ['LT200', 'ZS400']},\n     {'active': ['LT200', 'PT101', 'ZS400']},\n     {'active': ['PT101', 'TT300', 'ZS400']}]],\n   [['off', False, False],\n    ['red', True, True],\n    ['red', True, True],\n    ['red', True, False],\n    ['red', True, False],\n    ['off', False, False],\n    ['red', True, True],\n    ['red', True, True],\n    ['red', True, True]]]],\n [['regression: silence then new low alarm',\n   [[['A', 'high'], ['B', 'low']],\n    [{'active': ['A']}, {'active': ['A'], 'silence': True}, {'active': ['A', 'B']}]],\n   [['red', True, True], ['red', True, False], ['red', True, True]]],\n  ['regression: scenario 2',\n   [[['PT101', 'high'], ['LT200', 'low'], ['TT300', 'low'], ['ZS400', 'high']],\n    [{'active': []},\n     {'active': ['PT101', 'TT300']},\n     {'active': ['PT101', 'TT300'], 'ack': True},\n     {'active': ['PT101', 'ZS400'], 'silence': True},\n     {'active': ['PT101']},\n     {'active': ['PT101'], 'silence': True}]],\n   [['off', False, False],\n    ['red', True, True],\n    ['red', False, False],\n    ['red', True, False],\n    ['red', False, False],\n    ['red', False, False]]],\n  ['regression: escalation sequence',\n   [[['A', 'high'], ['B', 'low']],\n    [{'active': ['B']},\n     {'active': ['B'], 'silence': True},\n     {'active': ['A', 'B']},\n     {'active': ['A', 'B'], 'ack': True},\n     {'active': ['B']},\n     {}]],\n   [['amber', True, True],\n    ['amber', True, False],\n    ['red', True, True],\n    ['red', False, False],\n    ['amber', False, False],\n    ['off', False, False]]],\n  ['regression: alarm clears unacknowledged',\n   [[['A', 'high'], ['B', 'low']], [{'active': ['A']}, {}, {'active': ['B']}]],\n   [['red', True, True], ['off', False, False], ['amber', True, True]]],\n  ['regression: low alarm while high acked',\n   [[['A', 'high'], ['B', 'low']],\n    [{'active': ['A'], 'ack': True},\n     {'active': ['A', 'B']},\n     {'active': ['A', 'B'], 'silence': True},\n     {'active': ['A', 'B']}]],\n   [['red', False, False], ['red', False, True], ['red', False, False], ['red', False, False]]],\n  ['regression: alarm present at first scan',\n   [[['A', 'high'], ['B', 'low']], [{'active': ['A']}, {'active': ['A']}]],\n   [['red', True, True], ['red', True, True]]],\n  ['regression: scenario 1',\n   [[['PT101', 'high'], ['LT200', 'low'], ['TT300', 'low'], ['ZS400', 'high']],\n    [{'active': ['PT101'], 'ack': True},\n     {'active': ['PT101']},\n     {'active': ['PT101'], 'ack': True},\n     {'active': ['PT101']},\n     {'active': ['PT101']},\n     {'active': ['LT200', 'PT101', 'TT300']},\n     {'active': ['LT200', 'PT101', 'TT300'], 'ack': True},\n     {'active': ['LT200', 'TT300']}]],\n   [['red', False, False],\n    ['red', False, False],\n    ['red', False, False],\n    ['red', False, False],\n    ['red', False, False],\n    ['red', False, True],\n    ['red', False, False],\n    ['amber', False, False]]],\n  ['regression: scenario 3',\n   [[['PT101', 'high'], ['LT200', 'low'], ['TT300', 'low'], ['ZS400', 'high']],\n    [{'active': ['LT200', 'PT101', 'TT300']},\n     {'active': ['LT200', 'PT101', 'TT300', 'ZS400']},\n     {'active': ['LT200', 'PT101', 'TT300'], 'silence': True},\n     {'active': ['LT200', 'PT101', 'TT300']},\n     {'active': ['PT101', 'TT300']},\n     {'active': ['TT300'], 'ack': True},\n     {'active': ['ZS400']},\n     {'active': ['TT300', 'ZS400']}]],\n   [['red', True, True],\n    ['red', True, True],\n    ['red', True, False],\n    ['red', True, False],\n    ['red', True, False],\n    ['amber', False, False],\n    ['red', True, True],\n    ['red', True, True]]]],\n [['regression: scenario 1',\n   [[['PT101', 'high'], ['LT200', 'low'], ['TT300', 'low'], ['ZS400', 'high']],\n    [{'active': [], 'silence': True},\n     {'active': [], 'silence': True},\n     {'active': [], 'silence': True},\n     {'active': []},\n     {'active': ['ZS400']},\n     {'active': ['ZS400'], 'ack': True},\n     {'active': ['TT300']},\n     {'active': ['PT101', 'TT300'], 'ack': True},\n     {'active': ['PT101', 'TT300']},\n     {'active': ['PT101', 'TT300'], 'silence': True},\n     {'active': ['LT200', 'PT101', 'TT300'], 'silence': True},\n     {'active': ['LT200', 'PT101', 'TT300']}]],\n   [['off', False, False],\n    ['off', False, False],\n    ['off', False, False],\n    ['off', False, False],\n    ['red', True, True],\n    ['red', False, False],\n    ['amber', True, True],\n    ['red', False, False],\n    ['red', False, False],\n    ['red', False, False],\n    ['red', False, False],\n    ['red', False, False]]],\n  ['regression: scenario 4',\n   [[['PT101', 'high'], ['LT200', 'low'], ['TT300', 'low'], ['ZS400', 'high']],\n    [{'active': ['PT101', 'TT300']},\n     {'active': ['PT101', 'TT300']},\n     {'active': ['TT300'], 'ack': True},\n     {'active': ['PT101', 'TT300']},\n     {'active': ['TT300', 'ZS400']},\n     {'active': ['ZS400'], 'silence': True},\n     {'active': ['PT101', 'ZS400'], 'ack': True},\n     {'active': ['LT200', 'PT101', 'ZS400'], 'ack': True, 'silence': True},\n     {'active': ['LT200', 'PT101', 'TT300', 'ZS400']}]],\n   [['red', True, True],\n    ['red', True, True],\n    ['amber', False, False],\n    ['red', True, True],\n    ['red', True, True],\n    ['red', True, False],\n    ['red', False, False],\n    ['red', False, False],\n    ['red', False, True]]],\n  ['regression: escalation sequence',\n   [[['A', 'high'], ['B', 'low']],\n    [{'active': ['B']},\n     {'active': ['B'], 'silence': True},\n     {'active': ['A', 'B']},\n     {'active': ['A', 'B'], 'ack': True},\n     {'active': ['B']},\n     {}]],\n   [['amber', True, True],\n    ['amber', True, False],\n    ['red', True, True],\n    ['red', False, False],\n    ['amber', False, False],\n    ['off', False, False]]],\n  ['regression: alarm clears unacknowledged',\n   [[['A', 'high'], ['B', 'low']], [{'active': ['A']}, {}, {'active': ['B']}]],\n   [['red', True, True], ['off', False, False], ['amber', True, True]]],\n  ['regression: low alarm while high acked',\n   [[['A', 'high'], ['B', 'low']],\n    [{'active': ['A'], 'ack': True},\n     {'active': ['A', 'B']},\n     {'active': ['A', 'B'], 'silence': True},\n     {'active': ['A', 'B']}]],\n   [['red', False, False], ['red', False, True], ['red', False, False], ['red', False, False]]],\n  ['regression: alarm present at first scan',\n   [[['A', 'high'], ['B', 'low']], [{'active': ['A']}, {'active': ['A']}]],\n   [['red', True, True], ['red', True, True]]],\n  ['regression: silence then new low alarm',\n   [[['A', 'high'], ['B', 'low']],\n    [{'active': ['A']}, {'active': ['A'], 'silence': True}, {'active': ['A', 'B']}]],\n   [['red', True, True], ['red', True, False], ['red', True, True]]],\n  ['regression: scenario 2',\n   [[['PT101', 'high'], ['LT200', 'low'], ['TT300', 'low'], ['ZS400', 'high']],\n    [{'active': ['LT200']},\n     {'active': ['LT200'], 'ack': True},\n     {'active': []},\n     {'active': ['PT101'], 'ack': True},\n     {'active': ['PT101'], 'ack': True},\n     {'active': ['PT101']},\n     {'active': ['LT200', 'PT101', 'TT300']}]],\n   [['amber', True, True],\n    ['amber', False, False],\n    ['off', False, False],\n    ['red', False, False],\n    ['red', False, False],\n    ['red', False, False],\n    ['red', False, True]]]]]\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-stack-light-horn-activation-edge","generated_at":"2026-09-29T14:51:44.338625+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":"New activations are only computed once a previous scan exists.","sha256":"a161b8908bbc9cc2b9f4ffdc2631a9f2a6e02ea63d6d7653cd6f7c733bbce185","title":"Stack light ignores alarms already active on the first scan · 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":40.42,"exit_code":1,"observations":[{"actual":[["amber",true,true],["amber",true,false],["red",true,true],["red",false,false],["amber",true,true],["off",false,false]],"check":"regression: escalation sequence","expected":[["amber",true,true],["amber",true,false],["red",true,true],["red",false,false],["amber",false,false],["off",false,false]],"passed":false},{"actual":[["red",false,false],["red",true,true],["red",true,false],["red",true,false]],"check":"regression: low alarm while high acked","expected":[["red",false,false],["red",false,true],["red",false,false],["red",false,false]],"passed":false},{"actual":[["red",true,true],["off",false,false],["amber",true,true]],"check":"regression: alarm clears unacknowledged","expected":[["red",true,true],["off",false,false],["amber",true,true]],"passed":true},{"actual":[["red",true,true],["red",true,true]],"check":"regression: alarm present at first scan","expected":[["red",true,true],["red",true,true]],"passed":true},{"actual":[["red",true,true],["red",true,false],["red",true,true]],"check":"regression: silence then new low alarm","expected":[["red",true,true],["red",true,false],["red",true,true]],"passed":true},{"actual":[["amber",false,false],["amber",true,true],["red",false,false],["off",false,false],["red",true,false],["red",true,true],["red",true,true],["red",true,true],["red",false,false]],"check":"regression: scenario 1","expected":[["amber",false,false],["amber",false,false],["red",false,false],["off",false,false],["red",true,false],["red",true,true],["red",true,true],["red",true,true],["red",false,false]],"passed":false},{"actual":[["amber",true,false],["red",true,true],["amber",true,true],["red",true,true],["red",true,false],["red",true,false]],"check":"regression: scenario 2","expected":[["amber",true,false],["red",true,true],["amber",true,true],["red",true,true],["red",true,false],["red",true,false]],"passed":true},{"actual":[["off",false,false],["off",false,false],["red",true,true],["red",true,true],["red",true,false],["red",false,false]],"check":"regression: scenario 3","expected":[["off",false,false],["off",false,false],["red",true,true],["red",true,true],["red",true,false],["red",false,false]],"passed":true}],"passed":false,"stderr":"","stdout":"{\"observations\": [{\"check\": \"regression: escalation sequence\", \"actual\": [[\"amber\", true, true], [\"amber\", true, false], [\"red\", true, true], [\"red\", false, false], [\"amber\", true, true], [\"off\", false, false]], \"expected\": [[\"amber\", true, true], [\"amber\", true, false], [\"red\", true, true], [\"red\", false, false], [\"amber\", false, false], [\"off\", false, false]], \"passed\": false}, {\"check\": \"regression: low alarm while high acked\", \"actual\": [[\"red\", false, false], [\"red\", true, true], [\"red\", true, false], [\"red\", true, false]], \"expected\": [[\"red\", false, false], [\"red\", false, true], [\"red\", false, false], [\"red\", false, false]], \"passed\": false}, {\"check\": \"regression: alarm clears unacknowledged\", \"actual\": [[\"red\", true, true], [\"off\", false, false], [\"amber\", true, true]], \"expected\": [[\"red\", true, true], [\"off\", false, false], [\"amber\", true, true]], \"passed\": true}, {\"check\": \"regression: alarm present at first scan\", \"actual\": [[\"red\", true, true], [\"red\", true, true]], \"expected\": [[\"red\", true, true], [\"red\", true, true]], \"passed\": true}, {\"check\": \"regression: silence then new low alarm\", \"actual\": [[\"red\", true, true], [\"red\", true, false], [\"red\", true, true]], \"expected\": [[\"red\", true, true], [\"red\", true, false], [\"red\", true, true]], \"passed\": true}, {\"check\": \"regression: scenario 1\", \"actual\": [[\"amber\", false, false], [\"amber\", true, true], [\"red\", false, false], [\"off\", false, false], [\"red\", true, false], [\"red\", true, true], [\"red\", true, true], [\"red\", true, true], [\"red\", false, false]], \"expected\": [[\"amber\", false, false], [\"amber\", false, false], [\"red\", false, false], [\"off\", false, false], [\"red\", true, false], [\"red\", true, true], [\"red\", true, true], [\"red\", true, true], [\"red\", false, false]], \"passed\": false}, {\"check\": \"regression: scenario 2\", \"actual\": [[\"amber\", true, false], [\"red\", true, true], [\"amber\", true, true], [\"red\", true, true], [\"red\", true, false], [\"red\", true, false]], \"expected\": [[\"amber\", true, false], [\"red\", true, true], [\"amber\", true, true], [\"red\", true, true], [\"red\", true, false], [\"red\", true, false]], \"passed\": true}, {\"check\": \"regression: scenario 3\", \"actual\": [[\"off\", false, false], [\"off\", false, false], [\"red\", true, true], [\"red\", true, true], [\"red\", true, false], [\"red\", false, false]], \"expected\": [[\"off\", false, false], [\"off\", false, false], [\"red\", true, true], [\"red\", true, true], [\"red\", true, false], [\"red\", false, false]], \"passed\": true}], \"passed\": false}\n"},"broken":{"elapsed_ms":39.604,"exit_code":1,"observations":[{"actual":[["amber",false,false],["amber",false,false],["red",true,true],["red",false,false],["amber",false,false],["off",false,false]],"check":"regression: escalation sequence","expected":[["amber",true,true],["amber",true,false],["red",true,true],["red",false,false],["amber",false,false],["off",false,false]],"passed":false},{"actual":[["red",false,false],["red",false,true],["red",false,false],["red",false,false]],"check":"regression: low alarm while high acked","expected":[["red",false,false],["red",false,true],["red",false,false],["red",false,false]],"passed":true},{"actual":[["red",false,false],["off",false,false],["amber",false,false]],"check":"regression: alarm clears unacknowledged","expected":[["red",true,true],["off",false,false],["amber",true,true]],"passed":false},{"actual":[["red",false,false],["red",false,false]],"check":"regression: alarm present at first scan","expected":[["red",true,true],["red",true,true]],"passed":false},{"actual":[["red",false,false],["red",false,false],["red",false,true]],"check":"regression: silence then new low alarm","expected":[["red",true,true],["red",true,false],["red",true,true]],"passed":false},{"actual":[["amber",false,false],["amber",false,false],["red",false,false],["off",false,false],["red",false,false],["red",false,true],["red",false,true],["red",false,true],["red",false,false]],"check":"regression: scenario 1","expected":[["amber",false,false],["amber",false,false],["red",false,false],["off",false,false],["red",true,false],["red",true,true],["red",true,true],["red",true,true],["red",false,false]],"passed":false},{"actual":[["amber",false,false],["red",true,true],["amber",true,true],["red",true,true],["red",true,false],["red",true,false]],"check":"regression: scenario 2","expected":[["amber",true,false],["red",true,true],["amber",true,true],["red",true,true],["red",true,false],["red",true,false]],"passed":false},{"actual":[["off",false,false],["off",false,false],["red",false,false],["red",false,false],["red",true,false],["red",false,false]],"check":"regression: scenario 3","expected":[["off",false,false],["off",false,false],["red",true,true],["red",true,true],["red",true,false],["red",false,false]],"passed":false}],"passed":false,"stderr":"","stdout":"{\"observations\": [{\"check\": \"regression: escalation sequence\", \"actual\": [[\"amber\", false, false], [\"amber\", false, false], [\"red\", true, true], [\"red\", false, false], [\"amber\", false, false], [\"off\", false, false]], \"expected\": [[\"amber\", true, true], [\"amber\", true, false], [\"red\", true, true], [\"red\", false, false], [\"amber\", false, false], [\"off\", false, false]], \"passed\": false}, {\"check\": \"regression: low alarm while high acked\", \"actual\": [[\"red\", false, false], [\"red\", false, true], [\"red\", false, false], [\"red\", false, false]], \"expected\": [[\"red\", false, false], [\"red\", false, true], [\"red\", false, false], [\"red\", false, false]], \"passed\": true}, {\"check\": \"regression: alarm clears unacknowledged\", \"actual\": [[\"red\", false, false], [\"off\", false, false], [\"amber\", false, false]], \"expected\": [[\"red\", true, true], [\"off\", false, false], [\"amber\", true, true]], \"passed\": false}, {\"check\": \"regression: alarm present at first scan\", \"actual\": [[\"red\", false, false], [\"red\", false, false]], \"expected\": [[\"red\", true, true], [\"red\", true, true]], \"passed\": false}, {\"check\": \"regression: silence then new low alarm\", \"actual\": [[\"red\", false, false], [\"red\", false, false], [\"red\", false, true]], \"expected\": [[\"red\", true, true], [\"red\", true, false], [\"red\", true, true]], \"passed\": false}, {\"check\": \"regression: scenario 1\", \"actual\": [[\"amber\", false, false], [\"amber\", false, false], [\"red\", false, false], [\"off\", false, false], [\"red\", false, false], [\"red\", false, true], [\"red\", false, true], [\"red\", false, true], [\"red\", false, false]], \"expected\": [[\"amber\", false, false], [\"amber\", false, false], [\"red\", false, false], [\"off\", false, false], [\"red\", true, false], [\"red\", true, true], [\"red\", true, true], [\"red\", true, true], [\"red\", false, false]], \"passed\": false}, {\"check\": \"regression: scenario 2\", \"actual\": [[\"amber\", false, false], [\"red\", true, true], [\"amber\", true, true], [\"red\", true, true], [\"red\", true, false], [\"red\", true, false]], \"expected\": [[\"amber\", true, false], [\"red\", true, true], [\"amber\", true, true], [\"red\", true, true], [\"red\", true, false], [\"red\", true, false]], \"passed\": false}, {\"check\": \"regression: scenario 3\", \"actual\": [[\"off\", false, false], [\"off\", false, false], [\"red\", false, false], [\"red\", false, false], [\"red\", true, false], [\"red\", false, false]], \"expected\": [[\"off\", false, false], [\"off\", false, false], [\"red\", true, true], [\"red\", true, true], [\"red\", true, false], [\"red\", false, false]], \"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."}}