{"abstract":"Zones waiting for the opposite mode lose a minute every time the current mode finishes.","category":"HVAC thermostat control","checks":8,"contract":"Zoned single-unit system arbitration per minute; each sample maps zone -> heat, cool or None. When idle the system picks the mode with more calling zones (ties go to heat). A mode ends when no zone calls for it, and a new mode may be chosen in the same minute. If zones call for the opposite mode, the system switches once the current mode has run max_run minutes, restarting the run timer. Dampers open only for zones calling the active mode. Return [mode, sorted open zones] per minute.","contract_signature":"max_run, samples","evaluation_group":"w2-hvac-thermostat-control-zoned-mode-arbitration","failed_approach":"Skipping selection on the first minute makes a call at power-up wait a minute.","family":"w2-hvac-thermostat-control-zoned-mode-arbitration-same-minute-reselect","id":"FA-92831","implementations":{"attempt":{"sha256":"9b8dbf7bca7e78a695793c4c004762fd3d4a98ba976521e7dc5dd00e2e59fda3","source":"\"\"\"Failure Map reference implementation. Python standard library only.\"\"\"\nimport json\n\nN = 1\nobservations = []\ndef solve(max_run, samples):\n    mode = None\n    since = 0\n    out = []\n    for minute, calls in enumerate(samples):\n        heat = sorted(z for z, c in calls.items() if c == 'heat')\n        cool = sorted(z for z, c in calls.items() if c == 'cool')\n        want = {'heat': heat, 'cool': cool}\n        if mode is not None:\n            other = 'cool' if mode == 'heat' else 'heat'\n            if not want[mode]:\n                mode = None\n            elif want[other] and minute - since >= max_run:\n                mode = other\n                since = minute\n        if mode is None and (heat or cool) and minute > 0:\n            mode = 'heat' if len(heat) >= len(cool) else 'cool'\n            since = minute\n        out.append([mode, want[mode] if mode else []])\n    return out\ndef check(label, actual, expected):\n    observations.append({\"check\": label, \"actual\": actual, \"expected\": expected, \"passed\": actual == expected})\nfixtures = [[['regression: tie goes to heat',\n   [2, [{'a': 'heat', 'b': 'cool'}, {'a': 'heat', 'b': 'cool'}, {'b': 'cool'}]],\n   [['heat', ['a']], ['heat', ['a']], ['cool', ['b']]]],\n  ['regression: majority then forced switch',\n   [3,\n    [{'a': 'heat', 'b': 'cool', 'c': 'cool'},\n     {'a': 'heat', 'b': 'cool'},\n     {'a': 'heat', 'b': 'cool'},\n     {'a': 'heat', 'b': 'cool'},\n     {'a': 'heat'},\n     {}]],\n   [['cool', ['b', 'c']], ['cool', ['b']], ['cool', ['b']], ['heat', ['a']], ['heat', ['a']], [None, []]]],\n  ['regression: ping pong guard',\n   [2,\n    [{'a': 'heat', 'b': 'cool'},\n     {'a': 'heat', 'b': 'cool'},\n     {'a': 'heat', 'b': 'cool'},\n     {'a': 'heat', 'b': 'cool'},\n     {'a': 'heat', 'b': 'cool'},\n     {'a': 'heat', 'b': 'cool'},\n     {'a': 'heat', 'b': 'cool'}]],\n   [['heat', ['a']],\n    ['heat', ['a']],\n    ['cool', ['b']],\n    ['cool', ['b']],\n    ['heat', ['a']],\n    ['heat', ['a']],\n    ['cool', ['b']]]],\n  ['regression: satisfied then opposite',\n   [5, [{'a': 'cool'}, {'a': 'cool', 'b': 'heat'}, {'b': 'heat'}, {'b': 'heat'}]],\n   [['cool', ['a']], ['cool', ['a']], ['heat', ['b']], ['heat', ['b']]]],\n  ['regression: first minute call',\n   [3, [{'a': 'cool'}, {'a': 'cool'}, {}]],\n   [['cool', ['a']], ['cool', ['a']], [None, []]]],\n  ['regression: scenario 1',\n   [5,\n    [{'z1': 'cool', 'z3': None, 'z4': None},\n     {'z1': 'heat', 'z2': 'heat', 'z3': None, 'z4': 'cool'},\n     {'z1': 'heat', 'z2': 'heat', 'z3': 'heat', 'z4': 'cool'},\n     {'z1': 'heat', 'z2': 'heat', 'z3': 'heat', 'z4': 'cool'},\n     {'z1': 'heat', 'z2': 'cool', 'z3': 'cool', 'z4': 'cool'},\n     {'z1': 'heat', 'z2': 'cool', 'z3': 'cool', 'z4': 'cool'},\n     {'z1': 'heat', 'z2': 'cool', 'z4': 'cool'},\n     {'z1': 'heat', 'z2': 'cool', 'z3': None, 'z4': 'cool'},\n     {'z2': 'cool', 'z4': 'heat'},\n     {'z1': None, 'z2': 'cool', 'z3': 'heat', 'z4': 'heat'}]],\n   [['cool', ['z1']],\n    ['cool', ['z4']],\n    ['cool', ['z4']],\n    ['cool', ['z4']],\n    ['cool', ['z2', 'z3', 'z4']],\n    ['heat', ['z1']],\n    ['heat', ['z1']],\n    ['heat', ['z1']],\n    ['heat', ['z4']],\n    ['heat', ['z3', 'z4']]]],\n  ['regression: scenario 2',\n   [5,\n    [{'z1': 'cool', 'z2': None, 'z3': 'cool'},\n     {'z1': 'cool', 'z2': None, 'z3': 'cool'},\n     {'z1': 'cool', 'z3': 'cool'},\n     {'z1': 'cool', 'z2': None, 'z3': 'cool'},\n     {'z1': 'cool', 'z2': None, 'z3': 'cool'},\n     {'z1': 'cool', 'z3': 'heat', 'z4': None},\n     {'z1': 'cool', 'z2': None, 'z3': 'heat'},\n     {'z1': 'cool', 'z2': None, 'z3': 'heat'},\n     {'z1': 'heat'},\n     {'z1': 'heat', 'z2': None, 'z4': None},\n     {'z1': 'heat', 'z4': None},\n     {'z1': 'heat', 'z2': None, 'z4': None},\n     {'z1': 'heat', 'z3': 'heat', 'z4': None}]],\n   [['cool', ['z1', 'z3']],\n    ['cool', ['z1', 'z3']],\n    ['cool', ['z1', 'z3']],\n    ['cool', ['z1', 'z3']],\n    ['cool', ['z1', 'z3']],\n    ['heat', ['z3']],\n    ['heat', ['z3']],\n    ['heat', ['z3']],\n    ['heat', ['z1']],\n    ['heat', ['z1']],\n    ['heat', ['z1']],\n    ['heat', ['z1']],\n    ['heat', ['z1', 'z3']]]],\n  ['regression: scenario 3',\n   [2,\n    [{'z1': 'cool', 'z2': 'heat', 'z3': 'cool', 'z4': None},\n     {'z2': 'cool', 'z3': 'cool', 'z4': None},\n     {'z1': 'cool', 'z2': 'cool', 'z3': 'cool', 'z4': None},\n     {'z1': 'cool', 'z2': 'heat', 'z3': 'cool'},\n     {'z1': 'cool', 'z2': 'heat', 'z3': 'cool', 'z4': 'heat'},\n     {'z1': 'cool', 'z2': 'cool', 'z3': 'cool', 'z4': 'heat'},\n     {'z1': 'cool', 'z3': 'cool', 'z4': None},\n     {'z1': 'cool', 'z3': 'heat', 'z4': None},\n     {'z1': 'cool', 'z2': None, 'z3': 'heat'},\n     {'z1': 'cool', 'z3': 'heat'}]],\n   [['cool', ['z1', 'z3']],\n    ['cool', ['z2', 'z3']],\n    ['cool', ['z1', 'z2', 'z3']],\n    ['heat', ['z2']],\n    ['heat', ['z2', 'z4']],\n    ['cool', ['z1', 'z2', 'z3']],\n    ['cool', ['z1', 'z3']],\n    ['heat', ['z3']],\n    ['heat', ['z3']],\n    ['cool', ['z1']]]]],\n [['regression: satisfied then opposite',\n   [5, [{'a': 'cool'}, {'a': 'cool', 'b': 'heat'}, {'b': 'heat'}, {'b': 'heat'}]],\n   [['cool', ['a']], ['cool', ['a']], ['heat', ['b']], ['heat', ['b']]]],\n  ['regression: tie goes to heat',\n   [2, [{'a': 'heat', 'b': 'cool'}, {'a': 'heat', 'b': 'cool'}, {'b': 'cool'}]],\n   [['heat', ['a']], ['heat', ['a']], ['cool', ['b']]]],\n  ['regression: majority then forced switch',\n   [3,\n    [{'a': 'heat', 'b': 'cool', 'c': 'cool'},\n     {'a': 'heat', 'b': 'cool'},\n     {'a': 'heat', 'b': 'cool'},\n     {'a': 'heat', 'b': 'cool'},\n     {'a': 'heat'},\n     {}]],\n   [['cool', ['b', 'c']], ['cool', ['b']], ['cool', ['b']], ['heat', ['a']], ['heat', ['a']], [None, []]]],\n  ['regression: ping pong guard',\n   [2,\n    [{'a': 'heat', 'b': 'cool'},\n     {'a': 'heat', 'b': 'cool'},\n     {'a': 'heat', 'b': 'cool'},\n     {'a': 'heat', 'b': 'cool'},\n     {'a': 'heat', 'b': 'cool'},\n     {'a': 'heat', 'b': 'cool'},\n     {'a': 'heat', 'b': 'cool'}]],\n   [['heat', ['a']],\n    ['heat', ['a']],\n    ['cool', ['b']],\n    ['cool', ['b']],\n    ['heat', ['a']],\n    ['heat', ['a']],\n    ['cool', ['b']]]],\n  ['regression: first minute call',\n   [3, [{'a': 'cool'}, {'a': 'cool'}, {}]],\n   [['cool', ['a']], ['cool', ['a']], [None, []]]],\n  ['regression: scenario 1',\n   [3,\n    [{'z1': 'heat', 'z2': 'cool', 'z3': 'heat', 'z4': 'heat'},\n     {'z1': 'heat', 'z3': 'heat', 'z4': 'heat'},\n     {'z1': 'heat', 'z2': None, 'z3': 'heat', 'z4': 'heat'},\n     {'z1': None, 'z2': None, 'z3': 'heat', 'z4': 'heat'},\n     {'z1': 'heat', 'z3': 'heat', 'z4': 'heat'},\n     {'z1': 'heat', 'z2': None, 'z3': 'heat', 'z4': 'heat'},\n     {'z1': 'heat', 'z2': None, 'z3': 'heat', 'z4': 'cool'},\n     {'z1': 'heat', 'z2': None, 'z3': 'heat', 'z4': None},\n     {'z1': 'heat', 'z3': 'heat', 'z4': None},\n     {'z1': 'heat', 'z3': 'heat', 'z4': 'heat'},\n     {'z1': 'heat', 'z2': None, 'z3': 'heat', 'z4': 'heat'},\n     {'z1': 'heat', 'z2': 'heat', 'z4': 'heat'},\n     {'z1': 'heat', 'z2': 'heat'},\n     {'z1': 'heat', 'z2': 'heat', 'z3': 'heat'},\n     {'z1': 'heat', 'z2': 'heat', 'z3': 'cool'}]],\n   [['heat', ['z1', 'z3', 'z4']],\n    ['heat', ['z1', 'z3', 'z4']],\n    ['heat', ['z1', 'z3', 'z4']],\n    ['heat', ['z3', 'z4']],\n    ['heat', ['z1', 'z3', 'z4']],\n    ['heat', ['z1', 'z3', 'z4']],\n    ['cool', ['z4']],\n    ['heat', ['z1', 'z3']],\n    ['heat', ['z1', 'z3']],\n    ['heat', ['z1', 'z3', 'z4']],\n    ['heat', ['z1', 'z3', 'z4']],\n    ['heat', ['z1', 'z2', 'z4']],\n    ['heat', ['z1', 'z2']],\n    ['heat', ['z1', 'z2', 'z3']],\n    ['cool', ['z3']]]],\n  ['regression: scenario 2',\n   [3,\n    [{'z1': None, 'z2': 'cool', 'z3': 'heat', 'z4': 'heat'},\n     {'z3': 'heat', 'z4': 'heat'},\n     {'z1': None, 'z2': None, 'z3': 'cool', 'z4': 'cool'},\n     {'z3': 'cool'},\n     {'z2': None, 'z3': 'cool', 'z4': None},\n     {'z1': 'heat', 'z2': 'cool', 'z3': 'cool'},\n     {'z1': 'cool', 'z2': 'cool', 'z3': 'cool', 'z4': None},\n     {'z1': 'cool', 'z2': 'cool', 'z3': 'cool'},\n     {'z1': 'cool', 'z2': 'cool', 'z3': 'cool'},\n     {'z1': 'cool', 'z2': 'cool', 'z3': 'cool', 'z4': 'heat'},\n     {'z1': 'cool', 'z2': 'cool', 'z3': 'cool', 'z4': 'heat'},\n     {'z1': 'cool', 'z2': 'cool', 'z4': 'heat'},\n     {'z1': 'cool', 'z2': 'cool', 'z4': 'heat'},\n     {'z1': 'heat', 'z2': 'cool', 'z3': 'cool', 'z4': 'heat'},\n     {'z1': 'heat', 'z2': 'cool', 'z3': 'cool', 'z4': 'heat'}]],\n   [['heat', ['z3', 'z4']],\n    ['heat', ['z3', 'z4']],\n    ['cool', ['z3', 'z4']],\n    ['cool', ['z3']],\n    ['cool', ['z3']],\n    ['heat', ['z1']],\n    ['cool', ['z1', 'z2', 'z3']],\n    ['cool', ['z1', 'z2', 'z3']],\n    ['cool', ['z1', 'z2', 'z3']],\n    ['heat', ['z4']],\n    ['heat', ['z4']],\n    ['heat', ['z4']],\n    ['cool', ['z1', 'z2']],\n    ['cool', ['z2', 'z3']],\n    ['cool', ['z2', 'z3']]]],\n  ['regression: scenario 3',\n   [3,\n    [{'z1': 'cool', 'z2': 'cool', 'z3': 'cool', 'z4': 'heat'},\n     {'z1': 'cool', 'z2': 'cool', 'z3': 'cool', 'z4': 'heat'},\n     {'z1': 'cool', 'z2': 'cool', 'z3': 'cool', 'z4': 'heat'},\n     {'z2': 'cool', 'z3': 'cool', 'z4': 'heat'},\n     {'z2': 'cool', 'z3': 'cool', 'z4': 'heat'},\n     {'z1': None, 'z2': 'cool', 'z3': 'cool', 'z4': 'heat'},\n     {'z2': 'cool', 'z3': 'heat', 'z4': 'heat'},\n     {'z1': None, 'z2': 'cool', 'z3': 'heat', 'z4': 'heat'},\n     {'z2': 'cool', 'z3': 'heat', 'z4': 'heat'},\n     {'z1': None, 'z2': 'cool', 'z3': 'cool', 'z4': 'heat'},\n     {'z2': 'heat', 'z3': 'cool', 'z4': 'heat'},\n     {'z1': None, 'z2': 'heat', 'z3': 'cool', 'z4': 'cool'}]],\n   [['cool', ['z1', 'z2', 'z3']],\n    ['cool', ['z1', 'z2', 'z3']],\n    ['cool', ['z1', 'z2', 'z3']],\n    ['heat', ['z4']],\n    ['heat', ['z4']],\n    ['heat', ['z4']],\n    ['cool', ['z2']],\n    ['cool', ['z2']],\n    ['cool', ['z2']],\n    ['heat', ['z4']],\n    ['heat', ['z2', 'z4']],\n    ['heat', ['z2']]]]],\n [['regression: scenario 1',\n   [3,\n    [{'z1': 'heat', 'z2': 'heat', 'z3': None, 'z4': 'cool'},\n     {'z1': 'heat', 'z2': 'heat', 'z3': 'cool', 'z4': 'cool'},\n     {'z1': 'heat', 'z2': 'heat', 'z3': 'cool', 'z4': 'cool'},\n     {'z1': 'heat', 'z2': 'heat', 'z3': 'cool', 'z4': 'cool'},\n     {'z1': 'heat', 'z2': 'heat', 'z3': 'cool', 'z4': 'heat'},\n     {'z1': 'heat', 'z2': 'heat', 'z3': 'cool', 'z4': 'heat'},\n     {'z1': 'heat', 'z2': 'heat', 'z3': 'cool', 'z4': 'heat'},\n     {'z1': 'heat', 'z2': 'heat', 'z3': None},\n     {'z1': 'heat', 'z2': 'heat'},\n     {'z1': 'heat', 'z2': 'heat', 'z3': None, 'z4': 'cool'},\n     {'z1': 'heat', 'z2': 'heat', 'z3': None, 'z4': None}]],\n   [['heat', ['z1', 'z2']],\n    ['heat', ['z1', 'z2']],\n    ['heat', ['z1', 'z2']],\n    ['cool', ['z3', 'z4']],\n    ['cool', ['z3']],\n    ['cool', ['z3']],\n    ['heat', ['z1', 'z2', 'z4']],\n    ['heat', ['z1', 'z2']],\n    ['heat', ['z1', 'z2']],\n    ['cool', ['z4']],\n    ['heat', ['z1', 'z2']]]],\n  ['regression: ping pong guard',\n   [2,\n    [{'a': 'heat', 'b': 'cool'},\n     {'a': 'heat', 'b': 'cool'},\n     {'a': 'heat', 'b': 'cool'},\n     {'a': 'heat', 'b': 'cool'},\n     {'a': 'heat', 'b': 'cool'},\n     {'a': 'heat', 'b': 'cool'},\n     {'a': 'heat', 'b': 'cool'}]],\n   [['heat', ['a']],\n    ['heat', ['a']],\n    ['cool', ['b']],\n    ['cool', ['b']],\n    ['heat', ['a']],\n    ['heat', ['a']],\n    ['cool', ['b']]]],\n  ['regression: majority then forced switch',\n   [3,\n    [{'a': 'heat', 'b': 'cool', 'c': 'cool'},\n     {'a': 'heat', 'b': 'cool'},\n     {'a': 'heat', 'b': 'cool'},\n     {'a': 'heat', 'b': 'cool'},\n     {'a': 'heat'},\n     {}]],\n   [['cool', ['b', 'c']], ['cool', ['b']], ['cool', ['b']], ['heat', ['a']], ['heat', ['a']], [None, []]]],\n  ['regression: tie goes to heat',\n   [2, [{'a': 'heat', 'b': 'cool'}, {'a': 'heat', 'b': 'cool'}, {'b': 'cool'}]],\n   [['heat', ['a']], ['heat', ['a']], ['cool', ['b']]]],\n  ['regression: satisfied then opposite',\n   [5, [{'a': 'cool'}, {'a': 'cool', 'b': 'heat'}, {'b': 'heat'}, {'b': 'heat'}]],\n   [['cool', ['a']], ['cool', ['a']], ['heat', ['b']], ['heat', ['b']]]],\n  ['regression: first minute call',\n   [3, [{'a': 'cool'}, {'a': 'cool'}, {}]],\n   [['cool', ['a']], ['cool', ['a']], [None, []]]],\n  ['regression: scenario 2',\n   [2,\n    [{'z1': 'heat', 'z3': 'cool', 'z4': 'cool'},\n     {'z1': 'cool', 'z2': None, 'z3': 'cool', 'z4': 'heat'},\n     {'z1': 'cool', 'z2': None, 'z3': 'cool', 'z4': 'heat'},\n     {'z1': 'cool', 'z4': 'heat'},\n     {'z1': None, 'z2': 'cool', 'z3': None, 'z4': 'heat'},\n     {'z1': None, 'z2': 'cool', 'z3': None, 'z4': 'heat'},\n     {'z2': 'cool', 'z4': 'heat'},\n     {'z3': None}]],\n   [['cool', ['z3', 'z4']],\n    ['cool', ['z1', 'z3']],\n    ['heat', ['z4']],\n    ['heat', ['z4']],\n    ['cool', ['z2']],\n    ['cool', ['z2']],\n    ['heat', ['z4']],\n    [None, []]]],\n  ['regression: scenario 3',\n   [2,\n    [{'z1': 'heat', 'z2': 'cool', 'z3': 'heat', 'z4': None},\n     {'z1': 'heat', 'z2': 'cool', 'z3': 'heat'},\n     {'z1': 'heat', 'z2': 'cool', 'z3': 'cool'},\n     {'z1': 'heat', 'z2': 'cool', 'z3': 'cool', 'z4': None},\n     {'z2': 'cool', 'z3': 'cool'},\n     {'z2': 'cool', 'z3': 'cool', 'z4': None},\n     {'z1': None, 'z2': 'cool', 'z3': 'cool', 'z4': 'heat'},\n     {'z2': 'cool', 'z3': 'cool', 'z4': 'heat'},\n     {'z2': 'cool', 'z3': 'cool', 'z4': 'heat'},\n     {'z2': 'heat', 'z3': 'cool', 'z4': 'cool'},\n     {'z1': None, 'z2': 'heat', 'z3': 'cool', 'z4': 'heat'}]],\n   [['heat', ['z1', 'z3']],\n    ['heat', ['z1', 'z3']],\n    ['cool', ['z2', 'z3']],\n    ['cool', ['z2', 'z3']],\n    ['cool', ['z2', 'z3']],\n    ['cool', ['z2', 'z3']],\n    ['heat', ['z4']],\n    ['heat', ['z4']],\n    ['cool', ['z2', 'z3']],\n    ['cool', ['z3', 'z4']],\n    ['heat', ['z2', 'z4']]]]],\n [['regression: scenario 2',\n   [2,\n    [{'z1': 'cool', 'z2': None, 'z3': 'heat'},\n     {'z1': 'cool', 'z2': 'cool', 'z3': 'cool'},\n     {'z2': 'cool', 'z3': 'cool'},\n     {'z1': None, 'z2': 'cool', 'z3': 'cool'},\n     {'z2': 'cool', 'z3': 'cool', 'z4': None},\n     {'z1': None, 'z2': 'cool', 'z3': 'cool'},\n     {'z2': 'cool', 'z3': 'cool'},\n     {'z2': 'cool', 'z3': 'cool', 'z4': None},\n     {'z2': None, 'z3': 'cool'}]],\n   [['heat', ['z3']],\n    ['cool', ['z1', 'z2', 'z3']],\n    ['cool', ['z2', 'z3']],\n    ['cool', ['z2', 'z3']],\n    ['cool', ['z2', 'z3']],\n    ['cool', ['z2', 'z3']],\n    ['cool', ['z2', 'z3']],\n    ['cool', ['z2', 'z3']],\n    ['cool', ['z3']]]],\n  ['regression: satisfied then opposite',\n   [5, [{'a': 'cool'}, {'a': 'cool', 'b': 'heat'}, {'b': 'heat'}, {'b': 'heat'}]],\n   [['cool', ['a']], ['cool', ['a']], ['heat', ['b']], ['heat', ['b']]]],\n  ['regression: majority then forced switch',\n   [3,\n    [{'a': 'heat', 'b': 'cool', 'c': 'cool'},\n     {'a': 'heat', 'b': 'cool'},\n     {'a': 'heat', 'b': 'cool'},\n     {'a': 'heat', 'b': 'cool'},\n     {'a': 'heat'},\n     {}]],\n   [['cool', ['b', 'c']], ['cool', ['b']], ['cool', ['b']], ['heat', ['a']], ['heat', ['a']], [None, []]]],\n  ['regression: tie goes to heat',\n   [2, [{'a': 'heat', 'b': 'cool'}, {'a': 'heat', 'b': 'cool'}, {'b': 'cool'}]],\n   [['heat', ['a']], ['heat', ['a']], ['cool', ['b']]]],\n  ['regression: ping pong guard',\n   [2,\n    [{'a': 'heat', 'b': 'cool'},\n     {'a': 'heat', 'b': 'cool'},\n     {'a': 'heat', 'b': 'cool'},\n     {'a': 'heat', 'b': 'cool'},\n     {'a': 'heat', 'b': 'cool'},\n     {'a': 'heat', 'b': 'cool'},\n     {'a': 'heat', 'b': 'cool'}]],\n   [['heat', ['a']],\n    ['heat', ['a']],\n    ['cool', ['b']],\n    ['cool', ['b']],\n    ['heat', ['a']],\n    ['heat', ['a']],\n    ['cool', ['b']]]],\n  ['regression: first minute call',\n   [3, [{'a': 'cool'}, {'a': 'cool'}, {}]],\n   [['cool', ['a']], ['cool', ['a']], [None, []]]],\n  ['regression: scenario 1',\n   [5,\n    [{'z1': 'cool', 'z2': 'heat', 'z3': 'cool', 'z4': 'heat'},\n     {'z2': 'heat', 'z3': 'cool', 'z4': 'heat'},\n     {'z1': None, 'z3': 'cool', 'z4': 'heat'},\n     {'z1': None, 'z3': 'cool', 'z4': 'heat'},\n     {'z1': None, 'z2': None, 'z3': 'cool', 'z4': 'heat'},\n     {'z1': None, 'z2': 'heat', 'z3': 'cool', 'z4': 'heat'},\n     {'z1': 'cool', 'z2': 'heat', 'z4': 'heat'},\n     {'z1': None, 'z2': 'heat', 'z4': 'heat'},\n     {'z2': 'heat', 'z3': 'cool', 'z4': 'cool'},\n     {'z2': 'heat', 'z3': 'cool', 'z4': 'cool'},\n     {'z2': 'heat', 'z3': 'heat', 'z4': 'cool'}]],\n   [['heat', ['z2', 'z4']],\n    ['heat', ['z2', 'z4']],\n    ['heat', ['z4']],\n    ['heat', ['z4']],\n    ['heat', ['z4']],\n    ['cool', ['z3']],\n    ['cool', ['z1']],\n    ['heat', ['z2', 'z4']],\n    ['heat', ['z2']],\n    ['heat', ['z2']],\n    ['heat', ['z2', 'z3']]]],\n  ['regression: scenario 3',\n   [5,\n    [{'z1': 'cool', 'z2': 'cool', 'z3': 'cool', 'z4': 'heat'},\n     {'z1': 'cool', 'z2': 'cool', 'z3': 'cool', 'z4': 'heat'},\n     {'z1': 'cool', 'z2': 'cool', 'z3': 'cool', 'z4': 'heat'},\n     {'z1': 'cool', 'z2': 'cool', 'z3': 'cool', 'z4': 'heat'},\n     {'z1': 'cool', 'z2': 'heat', 'z3': 'cool', 'z4': 'heat'},\n     {'z1': 'cool', 'z2': 'cool', 'z3': 'cool', 'z4': 'heat'},\n     {'z1': 'cool', 'z2': 'cool', 'z3': 'cool', 'z4': 'heat'},\n     {'z1': 'cool', 'z2': 'cool', 'z3': 'cool', 'z4': 'heat'},\n     {'z1': 'cool', 'z2': 'cool', 'z3': 'cool', 'z4': 'heat'},\n     {'z1': 'heat', 'z2': 'cool', 'z3': 'cool', 'z4': 'heat'},\n     {'z2': 'cool', 'z3': 'cool', 'z4': 'heat'}]],\n   [['cool', ['z1', 'z2', 'z3']],\n    ['cool', ['z1', 'z2', 'z3']],\n    ['cool', ['z1', 'z2', 'z3']],\n    ['cool', ['z1', 'z2', 'z3']],\n    ['cool', ['z1', 'z3']],\n    ['heat', ['z4']],\n    ['heat', ['z4']],\n    ['heat', ['z4']],\n    ['heat', ['z4']],\n    ['heat', ['z1', 'z4']],\n    ['cool', ['z2', 'z3']]]]],\n [['regression: scenario 6',\n   [2,\n    [{'z1': 'cool', 'z2': 'heat', 'z3': 'heat', 'z4': 'cool'},\n     {'z1': 'cool', 'z2': 'heat', 'z3': 'heat', 'z4': 'cool'},\n     {'z1': 'cool', 'z2': 'heat', 'z3': 'heat', 'z4': 'cool'},\n     {'z1': 'cool', 'z2': 'heat', 'z3': 'heat', 'z4': 'cool'},\n     {'z1': 'cool', 'z2': 'heat', 'z3': 'heat', 'z4': 'cool'},\n     {'z1': 'cool', 'z2': 'heat', 'z3': None, 'z4': 'cool'},\n     {'z1': 'cool', 'z2': 'heat', 'z4': 'cool'},\n     {'z1': 'cool', 'z2': 'heat', 'z3': None, 'z4': 'cool'},\n     {'z1': 'cool', 'z2': 'heat', 'z3': None, 'z4': 'cool'},\n     {'z1': 'cool', 'z3': 'cool'}]],\n   [['heat', ['z2', 'z3']],\n    ['heat', ['z2', 'z3']],\n    ['cool', ['z1', 'z4']],\n    ['cool', ['z1', 'z4']],\n    ['heat', ['z2', 'z3']],\n    ['heat', ['z2']],\n    ['cool', ['z1', 'z4']],\n    ['cool', ['z1', 'z4']],\n    ['heat', ['z2']],\n    ['cool', ['z1', 'z3']]]],\n  ['regression: first minute call',\n   [3, [{'a': 'cool'}, {'a': 'cool'}, {}]],\n   [['cool', ['a']], ['cool', ['a']], [None, []]]],\n  ['regression: majority then forced switch',\n   [3,\n    [{'a': 'heat', 'b': 'cool', 'c': 'cool'},\n     {'a': 'heat', 'b': 'cool'},\n     {'a': 'heat', 'b': 'cool'},\n     {'a': 'heat', 'b': 'cool'},\n     {'a': 'heat'},\n     {}]],\n   [['cool', ['b', 'c']], ['cool', ['b']], ['cool', ['b']], ['heat', ['a']], ['heat', ['a']], [None, []]]],\n  ['regression: tie goes to heat',\n   [2, [{'a': 'heat', 'b': 'cool'}, {'a': 'heat', 'b': 'cool'}, {'b': 'cool'}]],\n   [['heat', ['a']], ['heat', ['a']], ['cool', ['b']]]],\n  ['regression: ping pong guard',\n   [2,\n    [{'a': 'heat', 'b': 'cool'},\n     {'a': 'heat', 'b': 'cool'},\n     {'a': 'heat', 'b': 'cool'},\n     {'a': 'heat', 'b': 'cool'},\n     {'a': 'heat', 'b': 'cool'},\n     {'a': 'heat', 'b': 'cool'},\n     {'a': 'heat', 'b': 'cool'}]],\n   [['heat', ['a']],\n    ['heat', ['a']],\n    ['cool', ['b']],\n    ['cool', ['b']],\n    ['heat', ['a']],\n    ['heat', ['a']],\n    ['cool', ['b']]]],\n  ['regression: satisfied then opposite',\n   [5, [{'a': 'cool'}, {'a': 'cool', 'b': 'heat'}, {'b': 'heat'}, {'b': 'heat'}]],\n   [['cool', ['a']], ['cool', ['a']], ['heat', ['b']], ['heat', ['b']]]],\n  ['regression: scenario 1',\n   [3,\n    [{'z1': 'heat', 'z2': 'heat', 'z3': 'heat', 'z4': 'heat'},\n     {'z1': 'heat', 'z2': 'heat', 'z3': 'heat'},\n     {'z1': 'heat', 'z2': 'heat', 'z3': 'heat', 'z4': 'heat'},\n     {'z1': 'heat', 'z2': 'heat', 'z3': 'cool', 'z4': 'heat'},\n     {'z1': 'heat', 'z2': 'heat', 'z3': 'cool', 'z4': 'heat'},\n     {'z2': 'heat'},\n     {'z2': 'heat', 'z4': 'heat'},\n     {'z1': None, 'z2': 'heat', 'z3': None, 'z4': 'heat'},\n     {'z2': 'heat', 'z3': None, 'z4': 'heat'}]],\n   [['heat', ['z1', 'z2', 'z3', 'z4']],\n    ['heat', ['z1', 'z2', 'z3']],\n    ['heat', ['z1', 'z2', 'z3', 'z4']],\n    ['cool', ['z3']],\n    ['cool', ['z3']],\n    ['heat', ['z2']],\n    ['heat', ['z2', 'z4']],\n    ['heat', ['z2', 'z4']],\n    ['heat', ['z2', 'z4']]]],\n  ['regression: scenario 2',\n   [5,\n    [{'z1': 'cool', 'z2': None, 'z3': 'heat', 'z4': 'cool'},\n     {'z1': 'cool', 'z3': 'heat', 'z4': 'cool'},\n     {'z1': 'cool', 'z3': 'heat', 'z4': None},\n     {'z2': 'cool', 'z3': 'heat', 'z4': None},\n     {'z1': None, 'z2': 'cool', 'z3': 'heat', 'z4': None},\n     {'z1': None, 'z2': 'cool', 'z3': 'heat'},\n     {'z2': 'cool', 'z3': 'heat'},\n     {'z2': 'cool', 'z3': 'heat', 'z4': None},\n     {'z1': 'heat', 'z2': 'cool', 'z3': 'heat'},\n     {'z1': 'heat', 'z2': 'cool', 'z3': 'heat', 'z4': None},\n     {'z2': 'cool', 'z3': 'heat', 'z4': None}]],\n   [['cool', ['z1', 'z4']],\n    ['cool', ['z1', 'z4']],\n    ['cool', ['z1']],\n    ['cool', ['z2']],\n    ['cool', ['z2']],\n    ['heat', ['z3']],\n    ['heat', ['z3']],\n    ['heat', ['z3']],\n    ['heat', ['z1', 'z3']],\n    ['heat', ['z1', 'z3']],\n    ['cool', ['z2']]]]]]\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":"90ab998fb1f1c1954d89884466d00efa29fd8492bc0945501058ca0aef44c002","source":"\"\"\"Failure Map reference implementation. Python standard library only.\"\"\"\nimport json\n\nN = 1\nobservations = []\ndef solve(max_run, samples):\n    mode = None\n    since = 0\n    out = []\n    for minute, calls in enumerate(samples):\n        heat = sorted(z for z, c in calls.items() if c == 'heat')\n        cool = sorted(z for z, c in calls.items() if c == 'cool')\n        want = {'heat': heat, 'cool': cool}\n        if mode is not None:\n            other = 'cool' if mode == 'heat' else 'heat'\n            if not want[mode]:\n                mode = None\n            elif want[other] and minute - since >= max_run:\n                mode = other\n                since = minute\n        elif heat or cool:\n            mode = 'heat' if len(heat) >= len(cool) else 'cool'\n            since = minute\n        out.append([mode, want[mode] if mode else []])\n    return out\ndef check(label, actual, expected):\n    observations.append({\"check\": label, \"actual\": actual, \"expected\": expected, \"passed\": actual == expected})\nfixtures = [[['regression: tie goes to heat',\n   [2, [{'a': 'heat', 'b': 'cool'}, {'a': 'heat', 'b': 'cool'}, {'b': 'cool'}]],\n   [['heat', ['a']], ['heat', ['a']], ['cool', ['b']]]],\n  ['regression: majority then forced switch',\n   [3,\n    [{'a': 'heat', 'b': 'cool', 'c': 'cool'},\n     {'a': 'heat', 'b': 'cool'},\n     {'a': 'heat', 'b': 'cool'},\n     {'a': 'heat', 'b': 'cool'},\n     {'a': 'heat'},\n     {}]],\n   [['cool', ['b', 'c']], ['cool', ['b']], ['cool', ['b']], ['heat', ['a']], ['heat', ['a']], [None, []]]],\n  ['regression: ping pong guard',\n   [2,\n    [{'a': 'heat', 'b': 'cool'},\n     {'a': 'heat', 'b': 'cool'},\n     {'a': 'heat', 'b': 'cool'},\n     {'a': 'heat', 'b': 'cool'},\n     {'a': 'heat', 'b': 'cool'},\n     {'a': 'heat', 'b': 'cool'},\n     {'a': 'heat', 'b': 'cool'}]],\n   [['heat', ['a']],\n    ['heat', ['a']],\n    ['cool', ['b']],\n    ['cool', ['b']],\n    ['heat', ['a']],\n    ['heat', ['a']],\n    ['cool', ['b']]]],\n  ['regression: satisfied then opposite',\n   [5, [{'a': 'cool'}, {'a': 'cool', 'b': 'heat'}, {'b': 'heat'}, {'b': 'heat'}]],\n   [['cool', ['a']], ['cool', ['a']], ['heat', ['b']], ['heat', ['b']]]],\n  ['regression: first minute call',\n   [3, [{'a': 'cool'}, {'a': 'cool'}, {}]],\n   [['cool', ['a']], ['cool', ['a']], [None, []]]],\n  ['regression: scenario 1',\n   [5,\n    [{'z1': 'cool', 'z3': None, 'z4': None},\n     {'z1': 'heat', 'z2': 'heat', 'z3': None, 'z4': 'cool'},\n     {'z1': 'heat', 'z2': 'heat', 'z3': 'heat', 'z4': 'cool'},\n     {'z1': 'heat', 'z2': 'heat', 'z3': 'heat', 'z4': 'cool'},\n     {'z1': 'heat', 'z2': 'cool', 'z3': 'cool', 'z4': 'cool'},\n     {'z1': 'heat', 'z2': 'cool', 'z3': 'cool', 'z4': 'cool'},\n     {'z1': 'heat', 'z2': 'cool', 'z4': 'cool'},\n     {'z1': 'heat', 'z2': 'cool', 'z3': None, 'z4': 'cool'},\n     {'z2': 'cool', 'z4': 'heat'},\n     {'z1': None, 'z2': 'cool', 'z3': 'heat', 'z4': 'heat'}]],\n   [['cool', ['z1']],\n    ['cool', ['z4']],\n    ['cool', ['z4']],\n    ['cool', ['z4']],\n    ['cool', ['z2', 'z3', 'z4']],\n    ['heat', ['z1']],\n    ['heat', ['z1']],\n    ['heat', ['z1']],\n    ['heat', ['z4']],\n    ['heat', ['z3', 'z4']]]],\n  ['regression: scenario 2',\n   [5,\n    [{'z1': 'cool', 'z2': None, 'z3': 'cool'},\n     {'z1': 'cool', 'z2': None, 'z3': 'cool'},\n     {'z1': 'cool', 'z3': 'cool'},\n     {'z1': 'cool', 'z2': None, 'z3': 'cool'},\n     {'z1': 'cool', 'z2': None, 'z3': 'cool'},\n     {'z1': 'cool', 'z3': 'heat', 'z4': None},\n     {'z1': 'cool', 'z2': None, 'z3': 'heat'},\n     {'z1': 'cool', 'z2': None, 'z3': 'heat'},\n     {'z1': 'heat'},\n     {'z1': 'heat', 'z2': None, 'z4': None},\n     {'z1': 'heat', 'z4': None},\n     {'z1': 'heat', 'z2': None, 'z4': None},\n     {'z1': 'heat', 'z3': 'heat', 'z4': None}]],\n   [['cool', ['z1', 'z3']],\n    ['cool', ['z1', 'z3']],\n    ['cool', ['z1', 'z3']],\n    ['cool', ['z1', 'z3']],\n    ['cool', ['z1', 'z3']],\n    ['heat', ['z3']],\n    ['heat', ['z3']],\n    ['heat', ['z3']],\n    ['heat', ['z1']],\n    ['heat', ['z1']],\n    ['heat', ['z1']],\n    ['heat', ['z1']],\n    ['heat', ['z1', 'z3']]]],\n  ['regression: scenario 3',\n   [2,\n    [{'z1': 'cool', 'z2': 'heat', 'z3': 'cool', 'z4': None},\n     {'z2': 'cool', 'z3': 'cool', 'z4': None},\n     {'z1': 'cool', 'z2': 'cool', 'z3': 'cool', 'z4': None},\n     {'z1': 'cool', 'z2': 'heat', 'z3': 'cool'},\n     {'z1': 'cool', 'z2': 'heat', 'z3': 'cool', 'z4': 'heat'},\n     {'z1': 'cool', 'z2': 'cool', 'z3': 'cool', 'z4': 'heat'},\n     {'z1': 'cool', 'z3': 'cool', 'z4': None},\n     {'z1': 'cool', 'z3': 'heat', 'z4': None},\n     {'z1': 'cool', 'z2': None, 'z3': 'heat'},\n     {'z1': 'cool', 'z3': 'heat'}]],\n   [['cool', ['z1', 'z3']],\n    ['cool', ['z2', 'z3']],\n    ['cool', ['z1', 'z2', 'z3']],\n    ['heat', ['z2']],\n    ['heat', ['z2', 'z4']],\n    ['cool', ['z1', 'z2', 'z3']],\n    ['cool', ['z1', 'z3']],\n    ['heat', ['z3']],\n    ['heat', ['z3']],\n    ['cool', ['z1']]]]],\n [['regression: satisfied then opposite',\n   [5, [{'a': 'cool'}, {'a': 'cool', 'b': 'heat'}, {'b': 'heat'}, {'b': 'heat'}]],\n   [['cool', ['a']], ['cool', ['a']], ['heat', ['b']], ['heat', ['b']]]],\n  ['regression: tie goes to heat',\n   [2, [{'a': 'heat', 'b': 'cool'}, {'a': 'heat', 'b': 'cool'}, {'b': 'cool'}]],\n   [['heat', ['a']], ['heat', ['a']], ['cool', ['b']]]],\n  ['regression: majority then forced switch',\n   [3,\n    [{'a': 'heat', 'b': 'cool', 'c': 'cool'},\n     {'a': 'heat', 'b': 'cool'},\n     {'a': 'heat', 'b': 'cool'},\n     {'a': 'heat', 'b': 'cool'},\n     {'a': 'heat'},\n     {}]],\n   [['cool', ['b', 'c']], ['cool', ['b']], ['cool', ['b']], ['heat', ['a']], ['heat', ['a']], [None, []]]],\n  ['regression: ping pong guard',\n   [2,\n    [{'a': 'heat', 'b': 'cool'},\n     {'a': 'heat', 'b': 'cool'},\n     {'a': 'heat', 'b': 'cool'},\n     {'a': 'heat', 'b': 'cool'},\n     {'a': 'heat', 'b': 'cool'},\n     {'a': 'heat', 'b': 'cool'},\n     {'a': 'heat', 'b': 'cool'}]],\n   [['heat', ['a']],\n    ['heat', ['a']],\n    ['cool', ['b']],\n    ['cool', ['b']],\n    ['heat', ['a']],\n    ['heat', ['a']],\n    ['cool', ['b']]]],\n  ['regression: first minute call',\n   [3, [{'a': 'cool'}, {'a': 'cool'}, {}]],\n   [['cool', ['a']], ['cool', ['a']], [None, []]]],\n  ['regression: scenario 1',\n   [3,\n    [{'z1': 'heat', 'z2': 'cool', 'z3': 'heat', 'z4': 'heat'},\n     {'z1': 'heat', 'z3': 'heat', 'z4': 'heat'},\n     {'z1': 'heat', 'z2': None, 'z3': 'heat', 'z4': 'heat'},\n     {'z1': None, 'z2': None, 'z3': 'heat', 'z4': 'heat'},\n     {'z1': 'heat', 'z3': 'heat', 'z4': 'heat'},\n     {'z1': 'heat', 'z2': None, 'z3': 'heat', 'z4': 'heat'},\n     {'z1': 'heat', 'z2': None, 'z3': 'heat', 'z4': 'cool'},\n     {'z1': 'heat', 'z2': None, 'z3': 'heat', 'z4': None},\n     {'z1': 'heat', 'z3': 'heat', 'z4': None},\n     {'z1': 'heat', 'z3': 'heat', 'z4': 'heat'},\n     {'z1': 'heat', 'z2': None, 'z3': 'heat', 'z4': 'heat'},\n     {'z1': 'heat', 'z2': 'heat', 'z4': 'heat'},\n     {'z1': 'heat', 'z2': 'heat'},\n     {'z1': 'heat', 'z2': 'heat', 'z3': 'heat'},\n     {'z1': 'heat', 'z2': 'heat', 'z3': 'cool'}]],\n   [['heat', ['z1', 'z3', 'z4']],\n    ['heat', ['z1', 'z3', 'z4']],\n    ['heat', ['z1', 'z3', 'z4']],\n    ['heat', ['z3', 'z4']],\n    ['heat', ['z1', 'z3', 'z4']],\n    ['heat', ['z1', 'z3', 'z4']],\n    ['cool', ['z4']],\n    ['heat', ['z1', 'z3']],\n    ['heat', ['z1', 'z3']],\n    ['heat', ['z1', 'z3', 'z4']],\n    ['heat', ['z1', 'z3', 'z4']],\n    ['heat', ['z1', 'z2', 'z4']],\n    ['heat', ['z1', 'z2']],\n    ['heat', ['z1', 'z2', 'z3']],\n    ['cool', ['z3']]]],\n  ['regression: scenario 2',\n   [3,\n    [{'z1': None, 'z2': 'cool', 'z3': 'heat', 'z4': 'heat'},\n     {'z3': 'heat', 'z4': 'heat'},\n     {'z1': None, 'z2': None, 'z3': 'cool', 'z4': 'cool'},\n     {'z3': 'cool'},\n     {'z2': None, 'z3': 'cool', 'z4': None},\n     {'z1': 'heat', 'z2': 'cool', 'z3': 'cool'},\n     {'z1': 'cool', 'z2': 'cool', 'z3': 'cool', 'z4': None},\n     {'z1': 'cool', 'z2': 'cool', 'z3': 'cool'},\n     {'z1': 'cool', 'z2': 'cool', 'z3': 'cool'},\n     {'z1': 'cool', 'z2': 'cool', 'z3': 'cool', 'z4': 'heat'},\n     {'z1': 'cool', 'z2': 'cool', 'z3': 'cool', 'z4': 'heat'},\n     {'z1': 'cool', 'z2': 'cool', 'z4': 'heat'},\n     {'z1': 'cool', 'z2': 'cool', 'z4': 'heat'},\n     {'z1': 'heat', 'z2': 'cool', 'z3': 'cool', 'z4': 'heat'},\n     {'z1': 'heat', 'z2': 'cool', 'z3': 'cool', 'z4': 'heat'}]],\n   [['heat', ['z3', 'z4']],\n    ['heat', ['z3', 'z4']],\n    ['cool', ['z3', 'z4']],\n    ['cool', ['z3']],\n    ['cool', ['z3']],\n    ['heat', ['z1']],\n    ['cool', ['z1', 'z2', 'z3']],\n    ['cool', ['z1', 'z2', 'z3']],\n    ['cool', ['z1', 'z2', 'z3']],\n    ['heat', ['z4']],\n    ['heat', ['z4']],\n    ['heat', ['z4']],\n    ['cool', ['z1', 'z2']],\n    ['cool', ['z2', 'z3']],\n    ['cool', ['z2', 'z3']]]],\n  ['regression: scenario 3',\n   [3,\n    [{'z1': 'cool', 'z2': 'cool', 'z3': 'cool', 'z4': 'heat'},\n     {'z1': 'cool', 'z2': 'cool', 'z3': 'cool', 'z4': 'heat'},\n     {'z1': 'cool', 'z2': 'cool', 'z3': 'cool', 'z4': 'heat'},\n     {'z2': 'cool', 'z3': 'cool', 'z4': 'heat'},\n     {'z2': 'cool', 'z3': 'cool', 'z4': 'heat'},\n     {'z1': None, 'z2': 'cool', 'z3': 'cool', 'z4': 'heat'},\n     {'z2': 'cool', 'z3': 'heat', 'z4': 'heat'},\n     {'z1': None, 'z2': 'cool', 'z3': 'heat', 'z4': 'heat'},\n     {'z2': 'cool', 'z3': 'heat', 'z4': 'heat'},\n     {'z1': None, 'z2': 'cool', 'z3': 'cool', 'z4': 'heat'},\n     {'z2': 'heat', 'z3': 'cool', 'z4': 'heat'},\n     {'z1': None, 'z2': 'heat', 'z3': 'cool', 'z4': 'cool'}]],\n   [['cool', ['z1', 'z2', 'z3']],\n    ['cool', ['z1', 'z2', 'z3']],\n    ['cool', ['z1', 'z2', 'z3']],\n    ['heat', ['z4']],\n    ['heat', ['z4']],\n    ['heat', ['z4']],\n    ['cool', ['z2']],\n    ['cool', ['z2']],\n    ['cool', ['z2']],\n    ['heat', ['z4']],\n    ['heat', ['z2', 'z4']],\n    ['heat', ['z2']]]]],\n [['regression: scenario 1',\n   [3,\n    [{'z1': 'heat', 'z2': 'heat', 'z3': None, 'z4': 'cool'},\n     {'z1': 'heat', 'z2': 'heat', 'z3': 'cool', 'z4': 'cool'},\n     {'z1': 'heat', 'z2': 'heat', 'z3': 'cool', 'z4': 'cool'},\n     {'z1': 'heat', 'z2': 'heat', 'z3': 'cool', 'z4': 'cool'},\n     {'z1': 'heat', 'z2': 'heat', 'z3': 'cool', 'z4': 'heat'},\n     {'z1': 'heat', 'z2': 'heat', 'z3': 'cool', 'z4': 'heat'},\n     {'z1': 'heat', 'z2': 'heat', 'z3': 'cool', 'z4': 'heat'},\n     {'z1': 'heat', 'z2': 'heat', 'z3': None},\n     {'z1': 'heat', 'z2': 'heat'},\n     {'z1': 'heat', 'z2': 'heat', 'z3': None, 'z4': 'cool'},\n     {'z1': 'heat', 'z2': 'heat', 'z3': None, 'z4': None}]],\n   [['heat', ['z1', 'z2']],\n    ['heat', ['z1', 'z2']],\n    ['heat', ['z1', 'z2']],\n    ['cool', ['z3', 'z4']],\n    ['cool', ['z3']],\n    ['cool', ['z3']],\n    ['heat', ['z1', 'z2', 'z4']],\n    ['heat', ['z1', 'z2']],\n    ['heat', ['z1', 'z2']],\n    ['cool', ['z4']],\n    ['heat', ['z1', 'z2']]]],\n  ['regression: ping pong guard',\n   [2,\n    [{'a': 'heat', 'b': 'cool'},\n     {'a': 'heat', 'b': 'cool'},\n     {'a': 'heat', 'b': 'cool'},\n     {'a': 'heat', 'b': 'cool'},\n     {'a': 'heat', 'b': 'cool'},\n     {'a': 'heat', 'b': 'cool'},\n     {'a': 'heat', 'b': 'cool'}]],\n   [['heat', ['a']],\n    ['heat', ['a']],\n    ['cool', ['b']],\n    ['cool', ['b']],\n    ['heat', ['a']],\n    ['heat', ['a']],\n    ['cool', ['b']]]],\n  ['regression: majority then forced switch',\n   [3,\n    [{'a': 'heat', 'b': 'cool', 'c': 'cool'},\n     {'a': 'heat', 'b': 'cool'},\n     {'a': 'heat', 'b': 'cool'},\n     {'a': 'heat', 'b': 'cool'},\n     {'a': 'heat'},\n     {}]],\n   [['cool', ['b', 'c']], ['cool', ['b']], ['cool', ['b']], ['heat', ['a']], ['heat', ['a']], [None, []]]],\n  ['regression: tie goes to heat',\n   [2, [{'a': 'heat', 'b': 'cool'}, {'a': 'heat', 'b': 'cool'}, {'b': 'cool'}]],\n   [['heat', ['a']], ['heat', ['a']], ['cool', ['b']]]],\n  ['regression: satisfied then opposite',\n   [5, [{'a': 'cool'}, {'a': 'cool', 'b': 'heat'}, {'b': 'heat'}, {'b': 'heat'}]],\n   [['cool', ['a']], ['cool', ['a']], ['heat', ['b']], ['heat', ['b']]]],\n  ['regression: first minute call',\n   [3, [{'a': 'cool'}, {'a': 'cool'}, {}]],\n   [['cool', ['a']], ['cool', ['a']], [None, []]]],\n  ['regression: scenario 2',\n   [2,\n    [{'z1': 'heat', 'z3': 'cool', 'z4': 'cool'},\n     {'z1': 'cool', 'z2': None, 'z3': 'cool', 'z4': 'heat'},\n     {'z1': 'cool', 'z2': None, 'z3': 'cool', 'z4': 'heat'},\n     {'z1': 'cool', 'z4': 'heat'},\n     {'z1': None, 'z2': 'cool', 'z3': None, 'z4': 'heat'},\n     {'z1': None, 'z2': 'cool', 'z3': None, 'z4': 'heat'},\n     {'z2': 'cool', 'z4': 'heat'},\n     {'z3': None}]],\n   [['cool', ['z3', 'z4']],\n    ['cool', ['z1', 'z3']],\n    ['heat', ['z4']],\n    ['heat', ['z4']],\n    ['cool', ['z2']],\n    ['cool', ['z2']],\n    ['heat', ['z4']],\n    [None, []]]],\n  ['regression: scenario 3',\n   [2,\n    [{'z1': 'heat', 'z2': 'cool', 'z3': 'heat', 'z4': None},\n     {'z1': 'heat', 'z2': 'cool', 'z3': 'heat'},\n     {'z1': 'heat', 'z2': 'cool', 'z3': 'cool'},\n     {'z1': 'heat', 'z2': 'cool', 'z3': 'cool', 'z4': None},\n     {'z2': 'cool', 'z3': 'cool'},\n     {'z2': 'cool', 'z3': 'cool', 'z4': None},\n     {'z1': None, 'z2': 'cool', 'z3': 'cool', 'z4': 'heat'},\n     {'z2': 'cool', 'z3': 'cool', 'z4': 'heat'},\n     {'z2': 'cool', 'z3': 'cool', 'z4': 'heat'},\n     {'z2': 'heat', 'z3': 'cool', 'z4': 'cool'},\n     {'z1': None, 'z2': 'heat', 'z3': 'cool', 'z4': 'heat'}]],\n   [['heat', ['z1', 'z3']],\n    ['heat', ['z1', 'z3']],\n    ['cool', ['z2', 'z3']],\n    ['cool', ['z2', 'z3']],\n    ['cool', ['z2', 'z3']],\n    ['cool', ['z2', 'z3']],\n    ['heat', ['z4']],\n    ['heat', ['z4']],\n    ['cool', ['z2', 'z3']],\n    ['cool', ['z3', 'z4']],\n    ['heat', ['z2', 'z4']]]]],\n [['regression: scenario 2',\n   [2,\n    [{'z1': 'cool', 'z2': None, 'z3': 'heat'},\n     {'z1': 'cool', 'z2': 'cool', 'z3': 'cool'},\n     {'z2': 'cool', 'z3': 'cool'},\n     {'z1': None, 'z2': 'cool', 'z3': 'cool'},\n     {'z2': 'cool', 'z3': 'cool', 'z4': None},\n     {'z1': None, 'z2': 'cool', 'z3': 'cool'},\n     {'z2': 'cool', 'z3': 'cool'},\n     {'z2': 'cool', 'z3': 'cool', 'z4': None},\n     {'z2': None, 'z3': 'cool'}]],\n   [['heat', ['z3']],\n    ['cool', ['z1', 'z2', 'z3']],\n    ['cool', ['z2', 'z3']],\n    ['cool', ['z2', 'z3']],\n    ['cool', ['z2', 'z3']],\n    ['cool', ['z2', 'z3']],\n    ['cool', ['z2', 'z3']],\n    ['cool', ['z2', 'z3']],\n    ['cool', ['z3']]]],\n  ['regression: satisfied then opposite',\n   [5, [{'a': 'cool'}, {'a': 'cool', 'b': 'heat'}, {'b': 'heat'}, {'b': 'heat'}]],\n   [['cool', ['a']], ['cool', ['a']], ['heat', ['b']], ['heat', ['b']]]],\n  ['regression: majority then forced switch',\n   [3,\n    [{'a': 'heat', 'b': 'cool', 'c': 'cool'},\n     {'a': 'heat', 'b': 'cool'},\n     {'a': 'heat', 'b': 'cool'},\n     {'a': 'heat', 'b': 'cool'},\n     {'a': 'heat'},\n     {}]],\n   [['cool', ['b', 'c']], ['cool', ['b']], ['cool', ['b']], ['heat', ['a']], ['heat', ['a']], [None, []]]],\n  ['regression: tie goes to heat',\n   [2, [{'a': 'heat', 'b': 'cool'}, {'a': 'heat', 'b': 'cool'}, {'b': 'cool'}]],\n   [['heat', ['a']], ['heat', ['a']], ['cool', ['b']]]],\n  ['regression: ping pong guard',\n   [2,\n    [{'a': 'heat', 'b': 'cool'},\n     {'a': 'heat', 'b': 'cool'},\n     {'a': 'heat', 'b': 'cool'},\n     {'a': 'heat', 'b': 'cool'},\n     {'a': 'heat', 'b': 'cool'},\n     {'a': 'heat', 'b': 'cool'},\n     {'a': 'heat', 'b': 'cool'}]],\n   [['heat', ['a']],\n    ['heat', ['a']],\n    ['cool', ['b']],\n    ['cool', ['b']],\n    ['heat', ['a']],\n    ['heat', ['a']],\n    ['cool', ['b']]]],\n  ['regression: first minute call',\n   [3, [{'a': 'cool'}, {'a': 'cool'}, {}]],\n   [['cool', ['a']], ['cool', ['a']], [None, []]]],\n  ['regression: scenario 1',\n   [5,\n    [{'z1': 'cool', 'z2': 'heat', 'z3': 'cool', 'z4': 'heat'},\n     {'z2': 'heat', 'z3': 'cool', 'z4': 'heat'},\n     {'z1': None, 'z3': 'cool', 'z4': 'heat'},\n     {'z1': None, 'z3': 'cool', 'z4': 'heat'},\n     {'z1': None, 'z2': None, 'z3': 'cool', 'z4': 'heat'},\n     {'z1': None, 'z2': 'heat', 'z3': 'cool', 'z4': 'heat'},\n     {'z1': 'cool', 'z2': 'heat', 'z4': 'heat'},\n     {'z1': None, 'z2': 'heat', 'z4': 'heat'},\n     {'z2': 'heat', 'z3': 'cool', 'z4': 'cool'},\n     {'z2': 'heat', 'z3': 'cool', 'z4': 'cool'},\n     {'z2': 'heat', 'z3': 'heat', 'z4': 'cool'}]],\n   [['heat', ['z2', 'z4']],\n    ['heat', ['z2', 'z4']],\n    ['heat', ['z4']],\n    ['heat', ['z4']],\n    ['heat', ['z4']],\n    ['cool', ['z3']],\n    ['cool', ['z1']],\n    ['heat', ['z2', 'z4']],\n    ['heat', ['z2']],\n    ['heat', ['z2']],\n    ['heat', ['z2', 'z3']]]],\n  ['regression: scenario 3',\n   [5,\n    [{'z1': 'cool', 'z2': 'cool', 'z3': 'cool', 'z4': 'heat'},\n     {'z1': 'cool', 'z2': 'cool', 'z3': 'cool', 'z4': 'heat'},\n     {'z1': 'cool', 'z2': 'cool', 'z3': 'cool', 'z4': 'heat'},\n     {'z1': 'cool', 'z2': 'cool', 'z3': 'cool', 'z4': 'heat'},\n     {'z1': 'cool', 'z2': 'heat', 'z3': 'cool', 'z4': 'heat'},\n     {'z1': 'cool', 'z2': 'cool', 'z3': 'cool', 'z4': 'heat'},\n     {'z1': 'cool', 'z2': 'cool', 'z3': 'cool', 'z4': 'heat'},\n     {'z1': 'cool', 'z2': 'cool', 'z3': 'cool', 'z4': 'heat'},\n     {'z1': 'cool', 'z2': 'cool', 'z3': 'cool', 'z4': 'heat'},\n     {'z1': 'heat', 'z2': 'cool', 'z3': 'cool', 'z4': 'heat'},\n     {'z2': 'cool', 'z3': 'cool', 'z4': 'heat'}]],\n   [['cool', ['z1', 'z2', 'z3']],\n    ['cool', ['z1', 'z2', 'z3']],\n    ['cool', ['z1', 'z2', 'z3']],\n    ['cool', ['z1', 'z2', 'z3']],\n    ['cool', ['z1', 'z3']],\n    ['heat', ['z4']],\n    ['heat', ['z4']],\n    ['heat', ['z4']],\n    ['heat', ['z4']],\n    ['heat', ['z1', 'z4']],\n    ['cool', ['z2', 'z3']]]]],\n [['regression: scenario 6',\n   [2,\n    [{'z1': 'cool', 'z2': 'heat', 'z3': 'heat', 'z4': 'cool'},\n     {'z1': 'cool', 'z2': 'heat', 'z3': 'heat', 'z4': 'cool'},\n     {'z1': 'cool', 'z2': 'heat', 'z3': 'heat', 'z4': 'cool'},\n     {'z1': 'cool', 'z2': 'heat', 'z3': 'heat', 'z4': 'cool'},\n     {'z1': 'cool', 'z2': 'heat', 'z3': 'heat', 'z4': 'cool'},\n     {'z1': 'cool', 'z2': 'heat', 'z3': None, 'z4': 'cool'},\n     {'z1': 'cool', 'z2': 'heat', 'z4': 'cool'},\n     {'z1': 'cool', 'z2': 'heat', 'z3': None, 'z4': 'cool'},\n     {'z1': 'cool', 'z2': 'heat', 'z3': None, 'z4': 'cool'},\n     {'z1': 'cool', 'z3': 'cool'}]],\n   [['heat', ['z2', 'z3']],\n    ['heat', ['z2', 'z3']],\n    ['cool', ['z1', 'z4']],\n    ['cool', ['z1', 'z4']],\n    ['heat', ['z2', 'z3']],\n    ['heat', ['z2']],\n    ['cool', ['z1', 'z4']],\n    ['cool', ['z1', 'z4']],\n    ['heat', ['z2']],\n    ['cool', ['z1', 'z3']]]],\n  ['regression: first minute call',\n   [3, [{'a': 'cool'}, {'a': 'cool'}, {}]],\n   [['cool', ['a']], ['cool', ['a']], [None, []]]],\n  ['regression: majority then forced switch',\n   [3,\n    [{'a': 'heat', 'b': 'cool', 'c': 'cool'},\n     {'a': 'heat', 'b': 'cool'},\n     {'a': 'heat', 'b': 'cool'},\n     {'a': 'heat', 'b': 'cool'},\n     {'a': 'heat'},\n     {}]],\n   [['cool', ['b', 'c']], ['cool', ['b']], ['cool', ['b']], ['heat', ['a']], ['heat', ['a']], [None, []]]],\n  ['regression: tie goes to heat',\n   [2, [{'a': 'heat', 'b': 'cool'}, {'a': 'heat', 'b': 'cool'}, {'b': 'cool'}]],\n   [['heat', ['a']], ['heat', ['a']], ['cool', ['b']]]],\n  ['regression: ping pong guard',\n   [2,\n    [{'a': 'heat', 'b': 'cool'},\n     {'a': 'heat', 'b': 'cool'},\n     {'a': 'heat', 'b': 'cool'},\n     {'a': 'heat', 'b': 'cool'},\n     {'a': 'heat', 'b': 'cool'},\n     {'a': 'heat', 'b': 'cool'},\n     {'a': 'heat', 'b': 'cool'}]],\n   [['heat', ['a']],\n    ['heat', ['a']],\n    ['cool', ['b']],\n    ['cool', ['b']],\n    ['heat', ['a']],\n    ['heat', ['a']],\n    ['cool', ['b']]]],\n  ['regression: satisfied then opposite',\n   [5, [{'a': 'cool'}, {'a': 'cool', 'b': 'heat'}, {'b': 'heat'}, {'b': 'heat'}]],\n   [['cool', ['a']], ['cool', ['a']], ['heat', ['b']], ['heat', ['b']]]],\n  ['regression: scenario 1',\n   [3,\n    [{'z1': 'heat', 'z2': 'heat', 'z3': 'heat', 'z4': 'heat'},\n     {'z1': 'heat', 'z2': 'heat', 'z3': 'heat'},\n     {'z1': 'heat', 'z2': 'heat', 'z3': 'heat', 'z4': 'heat'},\n     {'z1': 'heat', 'z2': 'heat', 'z3': 'cool', 'z4': 'heat'},\n     {'z1': 'heat', 'z2': 'heat', 'z3': 'cool', 'z4': 'heat'},\n     {'z2': 'heat'},\n     {'z2': 'heat', 'z4': 'heat'},\n     {'z1': None, 'z2': 'heat', 'z3': None, 'z4': 'heat'},\n     {'z2': 'heat', 'z3': None, 'z4': 'heat'}]],\n   [['heat', ['z1', 'z2', 'z3', 'z4']],\n    ['heat', ['z1', 'z2', 'z3']],\n    ['heat', ['z1', 'z2', 'z3', 'z4']],\n    ['cool', ['z3']],\n    ['cool', ['z3']],\n    ['heat', ['z2']],\n    ['heat', ['z2', 'z4']],\n    ['heat', ['z2', 'z4']],\n    ['heat', ['z2', 'z4']]]],\n  ['regression: scenario 2',\n   [5,\n    [{'z1': 'cool', 'z2': None, 'z3': 'heat', 'z4': 'cool'},\n     {'z1': 'cool', 'z3': 'heat', 'z4': 'cool'},\n     {'z1': 'cool', 'z3': 'heat', 'z4': None},\n     {'z2': 'cool', 'z3': 'heat', 'z4': None},\n     {'z1': None, 'z2': 'cool', 'z3': 'heat', 'z4': None},\n     {'z1': None, 'z2': 'cool', 'z3': 'heat'},\n     {'z2': 'cool', 'z3': 'heat'},\n     {'z2': 'cool', 'z3': 'heat', 'z4': None},\n     {'z1': 'heat', 'z2': 'cool', 'z3': 'heat'},\n     {'z1': 'heat', 'z2': 'cool', 'z3': 'heat', 'z4': None},\n     {'z2': 'cool', 'z3': 'heat', 'z4': None}]],\n   [['cool', ['z1', 'z4']],\n    ['cool', ['z1', 'z4']],\n    ['cool', ['z1']],\n    ['cool', ['z2']],\n    ['cool', ['z2']],\n    ['heat', ['z3']],\n    ['heat', ['z3']],\n    ['heat', ['z3']],\n    ['heat', ['z1', 'z3']],\n    ['heat', ['z1', 'z3']],\n    ['cool', ['z2']]]]]]\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 thermostat or HVAC controller decision evaluated per sample. Temperatures are integer tenths of a degree Fahrenheit unless stated otherwise. The contract is a stipulated toy convention, not a claim of conformance to any manufacturer, ASHRAE guideline or code. 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-hvac-thermostat-control-zoned-mode-arbitration-same-minute-reselect","generated_at":"2026-09-29T14:51:49.707995+00:00","license":"CC0-1.0","python":"3.12.14","seed":1,"split":"open-access"},"relevance":"Residential and light-commercial thermostats make these decisions sample by sample; each defect changes equipment calls in a way that shows up as short cycling, comfort complaints or equipment stress.","root_cause":"Idle mode selection only runs when the system was already idle at the start of the minute.","sha256":"cf0db70136d658a7c93c9318829e53329caa29344709a01640b9cabb9a1da187","title":"Zoned system idles for a minute after a mode is satisfied · 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":44.935,"exit_code":1,"observations":[{"actual":[[null,[]],["heat",["a"]],["cool",["b"]]],"check":"regression: tie goes to heat","expected":[["heat",["a"]],["heat",["a"]],["cool",["b"]]],"passed":false},{"actual":[[null,[]],["heat",["a"]],["heat",["a"]],["heat",["a"]],["heat",["a"]],[null,[]]],"check":"regression: majority then forced switch","expected":[["cool",["b","c"]],["cool",["b"]],["cool",["b"]],["heat",["a"]],["heat",["a"]],[null,[]]],"passed":false},{"actual":[[null,[]],["heat",["a"]],["heat",["a"]],["cool",["b"]],["cool",["b"]],["heat",["a"]],["heat",["a"]]],"check":"regression: ping pong guard","expected":[["heat",["a"]],["heat",["a"]],["cool",["b"]],["cool",["b"]],["heat",["a"]],["heat",["a"]],["cool",["b"]]],"passed":false},{"actual":[[null,[]],["heat",["b"]],["heat",["b"]],["heat",["b"]]],"check":"regression: satisfied then opposite","expected":[["cool",["a"]],["cool",["a"]],["heat",["b"]],["heat",["b"]]],"passed":false},{"actual":[[null,[]],["cool",["a"]],[null,[]]],"check":"regression: first minute call","expected":[["cool",["a"]],["cool",["a"]],[null,[]]],"passed":false},{"actual":[[null,[]],["heat",["z1","z2"]],["heat",["z1","z2","z3"]],["heat",["z1","z2","z3"]],["heat",["z1"]],["heat",["z1"]],["cool",["z2","z4"]],["cool",["z2","z4"]],["cool",["z2"]],["cool",["z2"]]],"check":"regression: scenario 1","expected":[["cool",["z1"]],["cool",["z4"]],["cool",["z4"]],["cool",["z4"]],["cool",["z2","z3","z4"]],["heat",["z1"]],["heat",["z1"]],["heat",["z1"]],["heat",["z4"]],["heat",["z3","z4"]]],"passed":false},{"actual":[[null,[]],["cool",["z1","z3"]],["cool",["z1","z3"]],["cool",["z1","z3"]],["cool",["z1","z3"]],["cool",["z1"]],["heat",["z3"]],["heat",["z3"]],["heat",["z1"]],["heat",["z1"]],["heat",["z1"]],["heat",["z1"]],["heat",["z1","z3"]]],"check":"regression: scenario 2","expected":[["cool",["z1","z3"]],["cool",["z1","z3"]],["cool",["z1","z3"]],["cool",["z1","z3"]],["cool",["z1","z3"]],["heat",["z3"]],["heat",["z3"]],["heat",["z3"]],["heat",["z1"]],["heat",["z1"]],["heat",["z1"]],["heat",["z1"]],["heat",["z1","z3"]]],"passed":false},{"actual":[[null,[]],["cool",["z2","z3"]],["cool",["z1","z2","z3"]],["heat",["z2"]],["heat",["z2","z4"]],["cool",["z1","z2","z3"]],["cool",["z1","z3"]],["heat",["z3"]],["heat",["z3"]],["cool",["z1"]]],"check":"regression: scenario 3","expected":[["cool",["z1","z3"]],["cool",["z2","z3"]],["cool",["z1","z2","z3"]],["heat",["z2"]],["heat",["z2","z4"]],["cool",["z1","z2","z3"]],["cool",["z1","z3"]],["heat",["z3"]],["heat",["z3"]],["cool",["z1"]]],"passed":false}],"passed":false,"stderr":"","stdout":"{\"observations\": [{\"check\": \"regression: tie goes to heat\", \"actual\": [[null, []], [\"heat\", [\"a\"]], [\"cool\", [\"b\"]]], \"expected\": [[\"heat\", [\"a\"]], [\"heat\", [\"a\"]], [\"cool\", [\"b\"]]], \"passed\": false}, {\"check\": \"regression: majority then forced switch\", \"actual\": [[null, []], [\"heat\", [\"a\"]], [\"heat\", [\"a\"]], [\"heat\", [\"a\"]], [\"heat\", [\"a\"]], [null, []]], \"expected\": [[\"cool\", [\"b\", \"c\"]], [\"cool\", [\"b\"]], [\"cool\", [\"b\"]], [\"heat\", [\"a\"]], [\"heat\", [\"a\"]], [null, []]], \"passed\": false}, {\"check\": \"regression: ping pong guard\", \"actual\": [[null, []], [\"heat\", [\"a\"]], [\"heat\", [\"a\"]], [\"cool\", [\"b\"]], [\"cool\", [\"b\"]], [\"heat\", [\"a\"]], [\"heat\", [\"a\"]]], \"expected\": [[\"heat\", [\"a\"]], [\"heat\", [\"a\"]], [\"cool\", [\"b\"]], [\"cool\", [\"b\"]], [\"heat\", [\"a\"]], [\"heat\", [\"a\"]], [\"cool\", [\"b\"]]], \"passed\": false}, {\"check\": \"regression: satisfied then opposite\", \"actual\": [[null, []], [\"heat\", [\"b\"]], [\"heat\", [\"b\"]], [\"heat\", [\"b\"]]], \"expected\": [[\"cool\", [\"a\"]], [\"cool\", [\"a\"]], [\"heat\", [\"b\"]], [\"heat\", [\"b\"]]], \"passed\": false}, {\"check\": \"regression: first minute call\", \"actual\": [[null, []], [\"cool\", [\"a\"]], [null, []]], \"expected\": [[\"cool\", [\"a\"]], [\"cool\", [\"a\"]], [null, []]], \"passed\": false}, {\"check\": \"regression: scenario 1\", \"actual\": [[null, []], [\"heat\", [\"z1\", \"z2\"]], [\"heat\", [\"z1\", \"z2\", \"z3\"]], [\"heat\", [\"z1\", \"z2\", \"z3\"]], [\"heat\", [\"z1\"]], [\"heat\", [\"z1\"]], [\"cool\", [\"z2\", \"z4\"]], [\"cool\", [\"z2\", \"z4\"]], [\"cool\", [\"z2\"]], [\"cool\", [\"z2\"]]], \"expected\": [[\"cool\", [\"z1\"]], [\"cool\", [\"z4\"]], [\"cool\", [\"z4\"]], [\"cool\", [\"z4\"]], [\"cool\", [\"z2\", \"z3\", \"z4\"]], [\"heat\", [\"z1\"]], [\"heat\", [\"z1\"]], [\"heat\", [\"z1\"]], [\"heat\", [\"z4\"]], [\"heat\", [\"z3\", \"z4\"]]], \"passed\": false}, {\"check\": \"regression: scenario 2\", \"actual\": [[null, []], [\"cool\", [\"z1\", \"z3\"]], [\"cool\", [\"z1\", \"z3\"]], [\"cool\", [\"z1\", \"z3\"]], [\"cool\", [\"z1\", \"z3\"]], [\"cool\", [\"z1\"]], [\"heat\", [\"z3\"]], [\"heat\", [\"z3\"]], [\"heat\", [\"z1\"]], [\"heat\", [\"z1\"]], [\"heat\", [\"z1\"]], [\"heat\", [\"z1\"]], [\"heat\", [\"z1\", \"z3\"]]], \"expected\": [[\"cool\", [\"z1\", \"z3\"]], [\"cool\", [\"z1\", \"z3\"]], [\"cool\", [\"z1\", \"z3\"]], [\"cool\", [\"z1\", \"z3\"]], [\"cool\", [\"z1\", \"z3\"]], [\"heat\", [\"z3\"]], [\"heat\", [\"z3\"]], [\"heat\", [\"z3\"]], [\"heat\", [\"z1\"]], [\"heat\", [\"z1\"]], [\"heat\", [\"z1\"]], [\"heat\", [\"z1\"]], [\"heat\", [\"z1\", \"z3\"]]], \"passed\": false}, {\"check\": \"regression: scenario 3\", \"actual\": [[null, []], [\"cool\", [\"z2\", \"z3\"]], [\"cool\", [\"z1\", \"z2\", \"z3\"]], [\"heat\", [\"z2\"]], [\"heat\", [\"z2\", \"z4\"]], [\"cool\", [\"z1\", \"z2\", \"z3\"]], [\"cool\", [\"z1\", \"z3\"]], [\"heat\", [\"z3\"]], [\"heat\", [\"z3\"]], [\"cool\", [\"z1\"]]], \"expected\": [[\"cool\", [\"z1\", \"z3\"]], [\"cool\", [\"z2\", \"z3\"]], [\"cool\", [\"z1\", \"z2\", \"z3\"]], [\"heat\", [\"z2\"]], [\"heat\", [\"z2\", \"z4\"]], [\"cool\", [\"z1\", \"z2\", \"z3\"]], [\"cool\", [\"z1\", \"z3\"]], [\"heat\", [\"z3\"]], [\"heat\", [\"z3\"]], [\"cool\", [\"z1\"]]], \"passed\": false}], \"passed\": false}\n"},"broken":{"elapsed_ms":44.797,"exit_code":1,"observations":[{"actual":[["heat",["a"]],["heat",["a"]],[null,[]]],"check":"regression: tie goes to heat","expected":[["heat",["a"]],["heat",["a"]],["cool",["b"]]],"passed":false},{"actual":[["cool",["b","c"]],["cool",["b"]],["cool",["b"]],["heat",["a"]],["heat",["a"]],[null,[]]],"check":"regression: majority then forced switch","expected":[["cool",["b","c"]],["cool",["b"]],["cool",["b"]],["heat",["a"]],["heat",["a"]],[null,[]]],"passed":true},{"actual":[["heat",["a"]],["heat",["a"]],["cool",["b"]],["cool",["b"]],["heat",["a"]],["heat",["a"]],["cool",["b"]]],"check":"regression: ping pong guard","expected":[["heat",["a"]],["heat",["a"]],["cool",["b"]],["cool",["b"]],["heat",["a"]],["heat",["a"]],["cool",["b"]]],"passed":true},{"actual":[["cool",["a"]],["cool",["a"]],[null,[]],["heat",["b"]]],"check":"regression: satisfied then opposite","expected":[["cool",["a"]],["cool",["a"]],["heat",["b"]],["heat",["b"]]],"passed":false},{"actual":[["cool",["a"]],["cool",["a"]],[null,[]]],"check":"regression: first minute call","expected":[["cool",["a"]],["cool",["a"]],[null,[]]],"passed":true},{"actual":[["cool",["z1"]],["cool",["z4"]],["cool",["z4"]],["cool",["z4"]],["cool",["z2","z3","z4"]],["heat",["z1"]],["heat",["z1"]],["heat",["z1"]],["heat",["z4"]],["heat",["z3","z4"]]],"check":"regression: scenario 1","expected":[["cool",["z1"]],["cool",["z4"]],["cool",["z4"]],["cool",["z4"]],["cool",["z2","z3","z4"]],["heat",["z1"]],["heat",["z1"]],["heat",["z1"]],["heat",["z4"]],["heat",["z3","z4"]]],"passed":true},{"actual":[["cool",["z1","z3"]],["cool",["z1","z3"]],["cool",["z1","z3"]],["cool",["z1","z3"]],["cool",["z1","z3"]],["heat",["z3"]],["heat",["z3"]],["heat",["z3"]],["heat",["z1"]],["heat",["z1"]],["heat",["z1"]],["heat",["z1"]],["heat",["z1","z3"]]],"check":"regression: scenario 2","expected":[["cool",["z1","z3"]],["cool",["z1","z3"]],["cool",["z1","z3"]],["cool",["z1","z3"]],["cool",["z1","z3"]],["heat",["z3"]],["heat",["z3"]],["heat",["z3"]],["heat",["z1"]],["heat",["z1"]],["heat",["z1"]],["heat",["z1"]],["heat",["z1","z3"]]],"passed":true},{"actual":[["cool",["z1","z3"]],["cool",["z2","z3"]],["cool",["z1","z2","z3"]],["heat",["z2"]],["heat",["z2","z4"]],["cool",["z1","z2","z3"]],["cool",["z1","z3"]],["heat",["z3"]],["heat",["z3"]],["cool",["z1"]]],"check":"regression: scenario 3","expected":[["cool",["z1","z3"]],["cool",["z2","z3"]],["cool",["z1","z2","z3"]],["heat",["z2"]],["heat",["z2","z4"]],["cool",["z1","z2","z3"]],["cool",["z1","z3"]],["heat",["z3"]],["heat",["z3"]],["cool",["z1"]]],"passed":true}],"passed":false,"stderr":"","stdout":"{\"observations\": [{\"check\": \"regression: tie goes to heat\", \"actual\": [[\"heat\", [\"a\"]], [\"heat\", [\"a\"]], [null, []]], \"expected\": [[\"heat\", [\"a\"]], [\"heat\", [\"a\"]], [\"cool\", [\"b\"]]], \"passed\": false}, {\"check\": \"regression: majority then forced switch\", \"actual\": [[\"cool\", [\"b\", \"c\"]], [\"cool\", [\"b\"]], [\"cool\", [\"b\"]], [\"heat\", [\"a\"]], [\"heat\", [\"a\"]], [null, []]], \"expected\": [[\"cool\", [\"b\", \"c\"]], [\"cool\", [\"b\"]], [\"cool\", [\"b\"]], [\"heat\", [\"a\"]], [\"heat\", [\"a\"]], [null, []]], \"passed\": true}, {\"check\": \"regression: ping pong guard\", \"actual\": [[\"heat\", [\"a\"]], [\"heat\", [\"a\"]], [\"cool\", [\"b\"]], [\"cool\", [\"b\"]], [\"heat\", [\"a\"]], [\"heat\", [\"a\"]], [\"cool\", [\"b\"]]], \"expected\": [[\"heat\", [\"a\"]], [\"heat\", [\"a\"]], [\"cool\", [\"b\"]], [\"cool\", [\"b\"]], [\"heat\", [\"a\"]], [\"heat\", [\"a\"]], [\"cool\", [\"b\"]]], \"passed\": true}, {\"check\": \"regression: satisfied then opposite\", \"actual\": [[\"cool\", [\"a\"]], [\"cool\", [\"a\"]], [null, []], [\"heat\", [\"b\"]]], \"expected\": [[\"cool\", [\"a\"]], [\"cool\", [\"a\"]], [\"heat\", [\"b\"]], [\"heat\", [\"b\"]]], \"passed\": false}, {\"check\": \"regression: first minute call\", \"actual\": [[\"cool\", [\"a\"]], [\"cool\", [\"a\"]], [null, []]], \"expected\": [[\"cool\", [\"a\"]], [\"cool\", [\"a\"]], [null, []]], \"passed\": true}, {\"check\": \"regression: scenario 1\", \"actual\": [[\"cool\", [\"z1\"]], [\"cool\", [\"z4\"]], [\"cool\", [\"z4\"]], [\"cool\", [\"z4\"]], [\"cool\", [\"z2\", \"z3\", \"z4\"]], [\"heat\", [\"z1\"]], [\"heat\", [\"z1\"]], [\"heat\", [\"z1\"]], [\"heat\", [\"z4\"]], [\"heat\", [\"z3\", \"z4\"]]], \"expected\": [[\"cool\", [\"z1\"]], [\"cool\", [\"z4\"]], [\"cool\", [\"z4\"]], [\"cool\", [\"z4\"]], [\"cool\", [\"z2\", \"z3\", \"z4\"]], [\"heat\", [\"z1\"]], [\"heat\", [\"z1\"]], [\"heat\", [\"z1\"]], [\"heat\", [\"z4\"]], [\"heat\", [\"z3\", \"z4\"]]], \"passed\": true}, {\"check\": \"regression: scenario 2\", \"actual\": [[\"cool\", [\"z1\", \"z3\"]], [\"cool\", [\"z1\", \"z3\"]], [\"cool\", [\"z1\", \"z3\"]], [\"cool\", [\"z1\", \"z3\"]], [\"cool\", [\"z1\", \"z3\"]], [\"heat\", [\"z3\"]], [\"heat\", [\"z3\"]], [\"heat\", [\"z3\"]], [\"heat\", [\"z1\"]], [\"heat\", [\"z1\"]], [\"heat\", [\"z1\"]], [\"heat\", [\"z1\"]], [\"heat\", [\"z1\", \"z3\"]]], \"expected\": [[\"cool\", [\"z1\", \"z3\"]], [\"cool\", [\"z1\", \"z3\"]], [\"cool\", [\"z1\", \"z3\"]], [\"cool\", [\"z1\", \"z3\"]], [\"cool\", [\"z1\", \"z3\"]], [\"heat\", [\"z3\"]], [\"heat\", [\"z3\"]], [\"heat\", [\"z3\"]], [\"heat\", [\"z1\"]], [\"heat\", [\"z1\"]], [\"heat\", [\"z1\"]], [\"heat\", [\"z1\"]], [\"heat\", [\"z1\", \"z3\"]]], \"passed\": true}, {\"check\": \"regression: scenario 3\", \"actual\": [[\"cool\", [\"z1\", \"z3\"]], [\"cool\", [\"z2\", \"z3\"]], [\"cool\", [\"z1\", \"z2\", \"z3\"]], [\"heat\", [\"z2\"]], [\"heat\", [\"z2\", \"z4\"]], [\"cool\", [\"z1\", \"z2\", \"z3\"]], [\"cool\", [\"z1\", \"z3\"]], [\"heat\", [\"z3\"]], [\"heat\", [\"z3\"]], [\"cool\", [\"z1\"]]], \"expected\": [[\"cool\", [\"z1\", \"z3\"]], [\"cool\", [\"z2\", \"z3\"]], [\"cool\", [\"z1\", \"z2\", \"z3\"]], [\"heat\", [\"z2\"]], [\"heat\", [\"z2\", \"z4\"]], [\"cool\", [\"z1\", \"z2\", \"z3\"]], [\"cool\", [\"z1\", \"z3\"]], [\"heat\", [\"z3\"]], [\"heat\", [\"z3\"]], [\"cool\", [\"z1\"]]], \"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."}}