{"abstract":"With one zone calling heat and one calling cool the system cools first, against the heat-priority rule.","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.","evaluation_group":"w2-hvac-thermostat-control-zoned-mode-arbitration","failed_approach":"Giving heat priority whenever any zone calls heat ignores a cooling majority.","family":"w2-hvac-thermostat-control-zoned-mode-arbitration-tie-break","id":"FA-92816","implementations":{"attempt":{"sha256":"b6a7c6a95a435a868243c3057c161442f6bfdad5cce0838116ef1bfebb0076cf","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):\n            mode = 'heat' if heat 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  ['control: 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  ['control: first minute call',\n   [3, [{'a': 'cool'}, {'a': 'cool'}, {}]],\n   [['cool', ['a']], ['cool', ['a']], [None, []]]],\n  ['control: 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  ['control: 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: 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: 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: 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  ['control: 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  ['control: first minute call',\n   [3, [{'a': 'cool'}, {'a': 'cool'}, {}]],\n   [['cool', ['a']], ['cool', ['a']], [None, []]]],\n  ['control: 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  ['control: 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 5',\n   [2,\n    [{'z1': 'heat', 'z2': 'heat', 'z3': 'cool', 'z4': 'heat'},\n     {'z1': 'cool', 'z2': 'heat', 'z3': 'cool', 'z4': 'heat'},\n     {'z1': 'cool', 'z2': 'heat', 'z3': 'cool', 'z4': 'heat'},\n     {'z1': 'cool', 'z2': 'heat', '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': None, 'z3': None, 'z4': 'heat'},\n     {'z1': 'cool', 'z4': 'heat'},\n     {'z1': None},\n     {'z2': 'cool', 'z4': 'heat'},\n     {'z1': 'heat', 'z2': 'cool', 'z4': 'heat'},\n     {'z1': 'heat', 'z2': 'cool', 'z3': None, 'z4': 'heat'}]],\n   [['heat', ['z1', 'z2', 'z4']],\n    ['heat', ['z2', 'z4']],\n    ['cool', ['z1', 'z3']],\n    ['cool', ['z1', 'z3']],\n    ['heat', ['z2', 'z4']],\n    ['heat', ['z4']],\n    ['cool', ['z1']],\n    ['cool', ['z1']],\n    [None, []],\n    ['heat', ['z4']],\n    ['heat', ['z1', 'z4']],\n    ['cool', ['z2']]]],\n  ['regression: scenario 14',\n   [2,\n    [{'z1': 'cool', 'z2': 'cool', 'z3': None, 'z4': 'heat'},\n     {'z1': 'cool', 'z2': 'cool', 'z3': None, 'z4': None},\n     {'z1': 'cool', 'z2': 'cool', 'z3': None, 'z4': None},\n     {'z1': 'cool', 'z2': 'cool'},\n     {'z1': 'cool', 'z2': 'cool', 'z3': None, 'z4': None},\n     {'z1': 'cool', 'z2': 'cool', 'z3': None, 'z4': None},\n     {'z1': 'cool', 'z2': 'heat', 'z3': None},\n     {'z1': 'cool', 'z2': 'cool', 'z3': None, 'z4': None},\n     {'z1': 'cool', 'z2': 'cool', 'z3': 'cool', 'z4': None},\n     {'z1': 'cool', 'z2': 'cool', 'z3': 'cool', 'z4': 'heat'},\n     {'z1': None, 'z2': 'cool', 'z3': 'cool', 'z4': 'heat'},\n     {'z2': 'cool', 'z3': 'cool', 'z4': 'heat'},\n     {'z2': 'cool', 'z3': 'cool', 'z4': 'heat'}]],\n   [['cool', ['z1', 'z2']],\n    ['cool', ['z1', 'z2']],\n    ['cool', ['z1', 'z2']],\n    ['cool', ['z1', 'z2']],\n    ['cool', ['z1', 'z2']],\n    ['cool', ['z1', 'z2']],\n    ['heat', ['z2']],\n    ['cool', ['z1', 'z2']],\n    ['cool', ['z1', 'z2', 'z3']],\n    ['heat', ['z4']],\n    ['heat', ['z4']],\n    ['cool', ['z2', 'z3']],\n    ['cool', ['z2', 'z3']]]],\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  ['control: 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  ['control: first minute call',\n   [3, [{'a': 'cool'}, {'a': 'cool'}, {}]],\n   [['cool', ['a']], ['cool', ['a']], [None, []]]],\n  ['control: 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: 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: scenario 11',\n   [2,\n    [{'z1': 'cool', 'z2': None, 'z3': 'heat', 'z4': 'cool'},\n     {'z1': 'cool', 'z2': None, 'z3': 'heat', 'z4': 'cool'},\n     {'z1': 'cool', 'z3': 'heat', 'z4': 'cool'},\n     {'z1': 'cool', 'z2': 'cool', 'z3': 'heat', 'z4': 'cool'},\n     {'z2': 'cool', 'z3': 'cool', 'z4': 'cool'},\n     {'z1': None, 'z3': 'heat'},\n     {'z1': None},\n     {'z1': None, 'z3': None, 'z4': None},\n     {'z1': None, 'z4': None},\n     {'z2': None, 'z3': None, 'z4': None},\n     {'z2': 'cool', 'z3': None},\n     {'z1': None, 'z2': 'cool', 'z3': None, 'z4': None}]],\n   [['cool', ['z1', 'z4']],\n    ['cool', ['z1', 'z4']],\n    ['heat', ['z3']],\n    ['heat', ['z3']],\n    ['cool', ['z2', 'z3', 'z4']],\n    ['heat', ['z3']],\n    [None, []],\n    [None, []],\n    [None, []],\n    [None, []],\n    ['cool', ['z2']],\n    ['cool', ['z2']]]],\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  ['control: 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  ['control: 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 13',\n   [3,\n    [{'z1': None, 'z2': 'cool', 'z3': None, 'z4': 'heat'},\n     {'z1': None, 'z2': 'cool', 'z3': None, 'z4': 'heat'},\n     {'z2': 'cool', 'z4': 'heat'},\n     {'z2': 'cool', 'z3': 'heat', 'z4': 'heat'},\n     {'z2': 'cool', 'z3': 'heat', 'z4': 'heat'},\n     {'z1': None, 'z3': 'heat', 'z4': 'heat'},\n     {'z1': None, 'z2': None, 'z3': 'heat', 'z4': 'heat'},\n     {'z3': 'heat', 'z4': 'heat'},\n     {'z1': 'cool', 'z2': None, 'z3': 'heat', 'z4': 'heat'},\n     {'z1': 'cool', 'z2': None, 'z4': 'cool'}]],\n   [['heat', ['z4']],\n    ['heat', ['z4']],\n    ['heat', ['z4']],\n    ['cool', ['z2']],\n    ['cool', ['z2']],\n    ['heat', ['z3', 'z4']],\n    ['heat', ['z3', 'z4']],\n    ['heat', ['z3', 'z4']],\n    ['cool', ['z1']],\n    ['cool', ['z1', 'z4']]]],\n  ['regression: scenario 7',\n   [5,\n    [{'z1': 'heat', 'z2': 'cool', 'z3': 'cool', 'z4': 'cool'},\n     {'z1': 'cool', 'z2': 'cool', 'z3': 'cool', 'z4': 'cool'},\n     {'z1': 'cool', 'z2': 'cool', 'z3': 'cool', 'z4': 'cool'},\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     {'z1': 'heat', 'z2': 'cool', 'z3': None},\n     {'z1': 'heat', 'z2': 'cool', 'z3': 'cool', 'z4': None}]],\n   [['cool', ['z2', 'z3', 'z4']],\n    ['cool', ['z1', 'z2', 'z3', 'z4']],\n    ['cool', ['z1', 'z2', 'z3', 'z4']],\n    ['cool', ['z1', 'z2', 'z3']],\n    ['cool', ['z1', 'z2', 'z3']],\n    ['heat', ['z1', 'z4']],\n    ['heat', ['z1']],\n    ['heat', ['z1']]]],\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  ['control: 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  ['control: first minute call',\n   [3, [{'a': 'cool'}, {'a': 'cool'}, {}]],\n   [['cool', ['a']], ['cool', ['a']], [None, []]]],\n  ['control: 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']]]]]]\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":"332e123d25d93e603e8365f79cfcf8366d42322992dde9ad65657a1f64810e06","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):\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  ['control: 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  ['control: first minute call',\n   [3, [{'a': 'cool'}, {'a': 'cool'}, {}]],\n   [['cool', ['a']], ['cool', ['a']], [None, []]]],\n  ['control: 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  ['control: 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: 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: 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: 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  ['control: 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  ['control: first minute call',\n   [3, [{'a': 'cool'}, {'a': 'cool'}, {}]],\n   [['cool', ['a']], ['cool', ['a']], [None, []]]],\n  ['control: 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  ['control: 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 5',\n   [2,\n    [{'z1': 'heat', 'z2': 'heat', 'z3': 'cool', 'z4': 'heat'},\n     {'z1': 'cool', 'z2': 'heat', 'z3': 'cool', 'z4': 'heat'},\n     {'z1': 'cool', 'z2': 'heat', 'z3': 'cool', 'z4': 'heat'},\n     {'z1': 'cool', 'z2': 'heat', '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': None, 'z3': None, 'z4': 'heat'},\n     {'z1': 'cool', 'z4': 'heat'},\n     {'z1': None},\n     {'z2': 'cool', 'z4': 'heat'},\n     {'z1': 'heat', 'z2': 'cool', 'z4': 'heat'},\n     {'z1': 'heat', 'z2': 'cool', 'z3': None, 'z4': 'heat'}]],\n   [['heat', ['z1', 'z2', 'z4']],\n    ['heat', ['z2', 'z4']],\n    ['cool', ['z1', 'z3']],\n    ['cool', ['z1', 'z3']],\n    ['heat', ['z2', 'z4']],\n    ['heat', ['z4']],\n    ['cool', ['z1']],\n    ['cool', ['z1']],\n    [None, []],\n    ['heat', ['z4']],\n    ['heat', ['z1', 'z4']],\n    ['cool', ['z2']]]],\n  ['regression: scenario 14',\n   [2,\n    [{'z1': 'cool', 'z2': 'cool', 'z3': None, 'z4': 'heat'},\n     {'z1': 'cool', 'z2': 'cool', 'z3': None, 'z4': None},\n     {'z1': 'cool', 'z2': 'cool', 'z3': None, 'z4': None},\n     {'z1': 'cool', 'z2': 'cool'},\n     {'z1': 'cool', 'z2': 'cool', 'z3': None, 'z4': None},\n     {'z1': 'cool', 'z2': 'cool', 'z3': None, 'z4': None},\n     {'z1': 'cool', 'z2': 'heat', 'z3': None},\n     {'z1': 'cool', 'z2': 'cool', 'z3': None, 'z4': None},\n     {'z1': 'cool', 'z2': 'cool', 'z3': 'cool', 'z4': None},\n     {'z1': 'cool', 'z2': 'cool', 'z3': 'cool', 'z4': 'heat'},\n     {'z1': None, 'z2': 'cool', 'z3': 'cool', 'z4': 'heat'},\n     {'z2': 'cool', 'z3': 'cool', 'z4': 'heat'},\n     {'z2': 'cool', 'z3': 'cool', 'z4': 'heat'}]],\n   [['cool', ['z1', 'z2']],\n    ['cool', ['z1', 'z2']],\n    ['cool', ['z1', 'z2']],\n    ['cool', ['z1', 'z2']],\n    ['cool', ['z1', 'z2']],\n    ['cool', ['z1', 'z2']],\n    ['heat', ['z2']],\n    ['cool', ['z1', 'z2']],\n    ['cool', ['z1', 'z2', 'z3']],\n    ['heat', ['z4']],\n    ['heat', ['z4']],\n    ['cool', ['z2', 'z3']],\n    ['cool', ['z2', 'z3']]]],\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  ['control: 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  ['control: first minute call',\n   [3, [{'a': 'cool'}, {'a': 'cool'}, {}]],\n   [['cool', ['a']], ['cool', ['a']], [None, []]]],\n  ['control: 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: 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: scenario 11',\n   [2,\n    [{'z1': 'cool', 'z2': None, 'z3': 'heat', 'z4': 'cool'},\n     {'z1': 'cool', 'z2': None, 'z3': 'heat', 'z4': 'cool'},\n     {'z1': 'cool', 'z3': 'heat', 'z4': 'cool'},\n     {'z1': 'cool', 'z2': 'cool', 'z3': 'heat', 'z4': 'cool'},\n     {'z2': 'cool', 'z3': 'cool', 'z4': 'cool'},\n     {'z1': None, 'z3': 'heat'},\n     {'z1': None},\n     {'z1': None, 'z3': None, 'z4': None},\n     {'z1': None, 'z4': None},\n     {'z2': None, 'z3': None, 'z4': None},\n     {'z2': 'cool', 'z3': None},\n     {'z1': None, 'z2': 'cool', 'z3': None, 'z4': None}]],\n   [['cool', ['z1', 'z4']],\n    ['cool', ['z1', 'z4']],\n    ['heat', ['z3']],\n    ['heat', ['z3']],\n    ['cool', ['z2', 'z3', 'z4']],\n    ['heat', ['z3']],\n    [None, []],\n    [None, []],\n    [None, []],\n    [None, []],\n    ['cool', ['z2']],\n    ['cool', ['z2']]]],\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  ['control: 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  ['control: 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 13',\n   [3,\n    [{'z1': None, 'z2': 'cool', 'z3': None, 'z4': 'heat'},\n     {'z1': None, 'z2': 'cool', 'z3': None, 'z4': 'heat'},\n     {'z2': 'cool', 'z4': 'heat'},\n     {'z2': 'cool', 'z3': 'heat', 'z4': 'heat'},\n     {'z2': 'cool', 'z3': 'heat', 'z4': 'heat'},\n     {'z1': None, 'z3': 'heat', 'z4': 'heat'},\n     {'z1': None, 'z2': None, 'z3': 'heat', 'z4': 'heat'},\n     {'z3': 'heat', 'z4': 'heat'},\n     {'z1': 'cool', 'z2': None, 'z3': 'heat', 'z4': 'heat'},\n     {'z1': 'cool', 'z2': None, 'z4': 'cool'}]],\n   [['heat', ['z4']],\n    ['heat', ['z4']],\n    ['heat', ['z4']],\n    ['cool', ['z2']],\n    ['cool', ['z2']],\n    ['heat', ['z3', 'z4']],\n    ['heat', ['z3', 'z4']],\n    ['heat', ['z3', 'z4']],\n    ['cool', ['z1']],\n    ['cool', ['z1', 'z4']]]],\n  ['regression: scenario 7',\n   [5,\n    [{'z1': 'heat', 'z2': 'cool', 'z3': 'cool', 'z4': 'cool'},\n     {'z1': 'cool', 'z2': 'cool', 'z3': 'cool', 'z4': 'cool'},\n     {'z1': 'cool', 'z2': 'cool', 'z3': 'cool', 'z4': 'cool'},\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     {'z1': 'heat', 'z2': 'cool', 'z3': None},\n     {'z1': 'heat', 'z2': 'cool', 'z3': 'cool', 'z4': None}]],\n   [['cool', ['z2', 'z3', 'z4']],\n    ['cool', ['z1', 'z2', 'z3', 'z4']],\n    ['cool', ['z1', 'z2', 'z3', 'z4']],\n    ['cool', ['z1', 'z2', 'z3']],\n    ['cool', ['z1', 'z2', 'z3']],\n    ['heat', ['z1', 'z4']],\n    ['heat', ['z1']],\n    ['heat', ['z1']]]],\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  ['control: 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  ['control: first minute call',\n   [3, [{'a': 'cool'}, {'a': 'cool'}, {}]],\n   [['cool', ['a']], ['cool', ['a']], [None, []]]],\n  ['control: 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']]]]]]\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"},"fixed":{"sha256":"878b8369caed9c947e51e590e2bce31c75b42490a98b8aafa5a32c367b54de45","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):\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  ['control: 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  ['control: first minute call',\n   [3, [{'a': 'cool'}, {'a': 'cool'}, {}]],\n   [['cool', ['a']], ['cool', ['a']], [None, []]]],\n  ['control: 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  ['control: 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: 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: 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: 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  ['control: 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  ['control: first minute call',\n   [3, [{'a': 'cool'}, {'a': 'cool'}, {}]],\n   [['cool', ['a']], ['cool', ['a']], [None, []]]],\n  ['control: 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  ['control: 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 5',\n   [2,\n    [{'z1': 'heat', 'z2': 'heat', 'z3': 'cool', 'z4': 'heat'},\n     {'z1': 'cool', 'z2': 'heat', 'z3': 'cool', 'z4': 'heat'},\n     {'z1': 'cool', 'z2': 'heat', 'z3': 'cool', 'z4': 'heat'},\n     {'z1': 'cool', 'z2': 'heat', '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': None, 'z3': None, 'z4': 'heat'},\n     {'z1': 'cool', 'z4': 'heat'},\n     {'z1': None},\n     {'z2': 'cool', 'z4': 'heat'},\n     {'z1': 'heat', 'z2': 'cool', 'z4': 'heat'},\n     {'z1': 'heat', 'z2': 'cool', 'z3': None, 'z4': 'heat'}]],\n   [['heat', ['z1', 'z2', 'z4']],\n    ['heat', ['z2', 'z4']],\n    ['cool', ['z1', 'z3']],\n    ['cool', ['z1', 'z3']],\n    ['heat', ['z2', 'z4']],\n    ['heat', ['z4']],\n    ['cool', ['z1']],\n    ['cool', ['z1']],\n    [None, []],\n    ['heat', ['z4']],\n    ['heat', ['z1', 'z4']],\n    ['cool', ['z2']]]],\n  ['regression: scenario 14',\n   [2,\n    [{'z1': 'cool', 'z2': 'cool', 'z3': None, 'z4': 'heat'},\n     {'z1': 'cool', 'z2': 'cool', 'z3': None, 'z4': None},\n     {'z1': 'cool', 'z2': 'cool', 'z3': None, 'z4': None},\n     {'z1': 'cool', 'z2': 'cool'},\n     {'z1': 'cool', 'z2': 'cool', 'z3': None, 'z4': None},\n     {'z1': 'cool', 'z2': 'cool', 'z3': None, 'z4': None},\n     {'z1': 'cool', 'z2': 'heat', 'z3': None},\n     {'z1': 'cool', 'z2': 'cool', 'z3': None, 'z4': None},\n     {'z1': 'cool', 'z2': 'cool', 'z3': 'cool', 'z4': None},\n     {'z1': 'cool', 'z2': 'cool', 'z3': 'cool', 'z4': 'heat'},\n     {'z1': None, 'z2': 'cool', 'z3': 'cool', 'z4': 'heat'},\n     {'z2': 'cool', 'z3': 'cool', 'z4': 'heat'},\n     {'z2': 'cool', 'z3': 'cool', 'z4': 'heat'}]],\n   [['cool', ['z1', 'z2']],\n    ['cool', ['z1', 'z2']],\n    ['cool', ['z1', 'z2']],\n    ['cool', ['z1', 'z2']],\n    ['cool', ['z1', 'z2']],\n    ['cool', ['z1', 'z2']],\n    ['heat', ['z2']],\n    ['cool', ['z1', 'z2']],\n    ['cool', ['z1', 'z2', 'z3']],\n    ['heat', ['z4']],\n    ['heat', ['z4']],\n    ['cool', ['z2', 'z3']],\n    ['cool', ['z2', 'z3']]]],\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  ['control: 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  ['control: first minute call',\n   [3, [{'a': 'cool'}, {'a': 'cool'}, {}]],\n   [['cool', ['a']], ['cool', ['a']], [None, []]]],\n  ['control: 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: 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: scenario 11',\n   [2,\n    [{'z1': 'cool', 'z2': None, 'z3': 'heat', 'z4': 'cool'},\n     {'z1': 'cool', 'z2': None, 'z3': 'heat', 'z4': 'cool'},\n     {'z1': 'cool', 'z3': 'heat', 'z4': 'cool'},\n     {'z1': 'cool', 'z2': 'cool', 'z3': 'heat', 'z4': 'cool'},\n     {'z2': 'cool', 'z3': 'cool', 'z4': 'cool'},\n     {'z1': None, 'z3': 'heat'},\n     {'z1': None},\n     {'z1': None, 'z3': None, 'z4': None},\n     {'z1': None, 'z4': None},\n     {'z2': None, 'z3': None, 'z4': None},\n     {'z2': 'cool', 'z3': None},\n     {'z1': None, 'z2': 'cool', 'z3': None, 'z4': None}]],\n   [['cool', ['z1', 'z4']],\n    ['cool', ['z1', 'z4']],\n    ['heat', ['z3']],\n    ['heat', ['z3']],\n    ['cool', ['z2', 'z3', 'z4']],\n    ['heat', ['z3']],\n    [None, []],\n    [None, []],\n    [None, []],\n    [None, []],\n    ['cool', ['z2']],\n    ['cool', ['z2']]]],\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  ['control: 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  ['control: 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 13',\n   [3,\n    [{'z1': None, 'z2': 'cool', 'z3': None, 'z4': 'heat'},\n     {'z1': None, 'z2': 'cool', 'z3': None, 'z4': 'heat'},\n     {'z2': 'cool', 'z4': 'heat'},\n     {'z2': 'cool', 'z3': 'heat', 'z4': 'heat'},\n     {'z2': 'cool', 'z3': 'heat', 'z4': 'heat'},\n     {'z1': None, 'z3': 'heat', 'z4': 'heat'},\n     {'z1': None, 'z2': None, 'z3': 'heat', 'z4': 'heat'},\n     {'z3': 'heat', 'z4': 'heat'},\n     {'z1': 'cool', 'z2': None, 'z3': 'heat', 'z4': 'heat'},\n     {'z1': 'cool', 'z2': None, 'z4': 'cool'}]],\n   [['heat', ['z4']],\n    ['heat', ['z4']],\n    ['heat', ['z4']],\n    ['cool', ['z2']],\n    ['cool', ['z2']],\n    ['heat', ['z3', 'z4']],\n    ['heat', ['z3', 'z4']],\n    ['heat', ['z3', 'z4']],\n    ['cool', ['z1']],\n    ['cool', ['z1', 'z4']]]],\n  ['regression: scenario 7',\n   [5,\n    [{'z1': 'heat', 'z2': 'cool', 'z3': 'cool', 'z4': 'cool'},\n     {'z1': 'cool', 'z2': 'cool', 'z3': 'cool', 'z4': 'cool'},\n     {'z1': 'cool', 'z2': 'cool', 'z3': 'cool', 'z4': 'cool'},\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     {'z1': 'heat', 'z2': 'cool', 'z3': None},\n     {'z1': 'heat', 'z2': 'cool', 'z3': 'cool', 'z4': None}]],\n   [['cool', ['z2', 'z3', 'z4']],\n    ['cool', ['z1', 'z2', 'z3', 'z4']],\n    ['cool', ['z1', 'z2', 'z3', 'z4']],\n    ['cool', ['z1', 'z2', 'z3']],\n    ['cool', ['z1', 'z2', 'z3']],\n    ['heat', ['z1', 'z4']],\n    ['heat', ['z1']],\n    ['heat', ['z1']]]],\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  ['control: 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  ['control: first minute call',\n   [3, [{'a': 'cool'}, {'a': 'cool'}, {}]],\n   [['cool', ['a']], ['cool', ['a']], [None, []]]],\n  ['control: 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']]]]]]\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-tie-break","generated_at":"2026-09-29T14:51:49.314281+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.","repair":"Ties go to heat (>=).","root_cause":"The mode vote uses a strict comparison so ties go to cooling.","sha256":"b2568254e06e4363db84df80cb52a406c85d98257586e9973dd8f52ddb206ed4","title":"Zoned system picks cooling on a tied zone vote · case 01","variant":1,"variant_policy":"Five numbered records share a model and may reuse boundary fixtures.","verification":{"attempt":{"elapsed_ms":44.476,"exit_code":1,"observations":[{"actual":[["heat",["a"]],["heat",["a"]],["cool",["b"]]],"check":"regression: tie goes to heat","expected":[["heat",["a"]],["heat",["a"]],["cool",["b"]]],"passed":true},{"actual":[["heat",["a"]],["heat",["a"]],["heat",["a"]],["cool",["b"]],["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":[["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"]],["heat",["b"]],["heat",["b"]]],"check":"control: satisfied then opposite","expected":[["cool",["a"]],["cool",["a"]],["heat",["b"]],["heat",["b"]]],"passed":true},{"actual":[["cool",["a"]],["cool",["a"]],[null,[]]],"check":"control: 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":"control: 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":"control: 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":[["heat",["z2"]],["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\": [[\"heat\", [\"a\"]], [\"heat\", [\"a\"]], [\"cool\", [\"b\"]]], \"expected\": [[\"heat\", [\"a\"]], [\"heat\", [\"a\"]], [\"cool\", [\"b\"]]], \"passed\": true}, {\"check\": \"regression: majority then forced switch\", \"actual\": [[\"heat\", [\"a\"]], [\"heat\", [\"a\"]], [\"heat\", [\"a\"]], [\"cool\", [\"b\"]], [\"heat\", [\"a\"]], [null, []]], \"expected\": [[\"cool\", [\"b\", \"c\"]], [\"cool\", [\"b\"]], [\"cool\", [\"b\"]], [\"heat\", [\"a\"]], [\"heat\", [\"a\"]], [null, []]], \"passed\": false}, {\"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\": \"control: satisfied then opposite\", \"actual\": [[\"cool\", [\"a\"]], [\"cool\", [\"a\"]], [\"heat\", [\"b\"]], [\"heat\", [\"b\"]]], \"expected\": [[\"cool\", [\"a\"]], [\"cool\", [\"a\"]], [\"heat\", [\"b\"]], [\"heat\", [\"b\"]]], \"passed\": true}, {\"check\": \"control: first minute call\", \"actual\": [[\"cool\", [\"a\"]], [\"cool\", [\"a\"]], [null, []]], \"expected\": [[\"cool\", [\"a\"]], [\"cool\", [\"a\"]], [null, []]], \"passed\": true}, {\"check\": \"control: 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\": \"control: 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\": [[\"heat\", [\"z2\"]], [\"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.837,"exit_code":1,"observations":[{"actual":[["cool",["b"]],["cool",["b"]],["cool",["b"]]],"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":[["cool",["b"]],["cool",["b"]],["heat",["a"]],["heat",["a"]],["cool",["b"]],["cool",["b"]],["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":[["cool",["a"]],["cool",["a"]],["heat",["b"]],["heat",["b"]]],"check":"control: satisfied then opposite","expected":[["cool",["a"]],["cool",["a"]],["heat",["b"]],["heat",["b"]]],"passed":true},{"actual":[["cool",["a"]],["cool",["a"]],[null,[]]],"check":"control: 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":"control: 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":"control: 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\": [[\"cool\", [\"b\"]], [\"cool\", [\"b\"]], [\"cool\", [\"b\"]]], \"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\": [[\"cool\", [\"b\"]], [\"cool\", [\"b\"]], [\"heat\", [\"a\"]], [\"heat\", [\"a\"]], [\"cool\", [\"b\"]], [\"cool\", [\"b\"]], [\"heat\", [\"a\"]]], \"expected\": [[\"heat\", [\"a\"]], [\"heat\", [\"a\"]], [\"cool\", [\"b\"]], [\"cool\", [\"b\"]], [\"heat\", [\"a\"]], [\"heat\", [\"a\"]], [\"cool\", [\"b\"]]], \"passed\": false}, {\"check\": \"control: satisfied then opposite\", \"actual\": [[\"cool\", [\"a\"]], [\"cool\", [\"a\"]], [\"heat\", [\"b\"]], [\"heat\", [\"b\"]]], \"expected\": [[\"cool\", [\"a\"]], [\"cool\", [\"a\"]], [\"heat\", [\"b\"]], [\"heat\", [\"b\"]]], \"passed\": true}, {\"check\": \"control: first minute call\", \"actual\": [[\"cool\", [\"a\"]], [\"cool\", [\"a\"]], [null, []]], \"expected\": [[\"cool\", [\"a\"]], [\"cool\", [\"a\"]], [null, []]], \"passed\": true}, {\"check\": \"control: 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\": \"control: 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"},"fixed":{"elapsed_ms":46.051,"exit_code":0,"observations":[{"actual":[["heat",["a"]],["heat",["a"]],["cool",["b"]]],"check":"regression: tie goes to heat","expected":[["heat",["a"]],["heat",["a"]],["cool",["b"]]],"passed":true},{"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"]],["heat",["b"]],["heat",["b"]]],"check":"control: satisfied then opposite","expected":[["cool",["a"]],["cool",["a"]],["heat",["b"]],["heat",["b"]]],"passed":true},{"actual":[["cool",["a"]],["cool",["a"]],[null,[]]],"check":"control: 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":"control: 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":"control: 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":true,"stderr":"","stdout":"{\"observations\": [{\"check\": \"regression: tie goes to heat\", \"actual\": [[\"heat\", [\"a\"]], [\"heat\", [\"a\"]], [\"cool\", [\"b\"]]], \"expected\": [[\"heat\", [\"a\"]], [\"heat\", [\"a\"]], [\"cool\", [\"b\"]]], \"passed\": true}, {\"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\": \"control: satisfied then opposite\", \"actual\": [[\"cool\", [\"a\"]], [\"cool\", [\"a\"]], [\"heat\", [\"b\"]], [\"heat\", [\"b\"]]], \"expected\": [[\"cool\", [\"a\"]], [\"cool\", [\"a\"]], [\"heat\", [\"b\"]], [\"heat\", [\"b\"]]], \"passed\": true}, {\"check\": \"control: first minute call\", \"actual\": [[\"cool\", [\"a\"]], [\"cool\", [\"a\"]], [null, []]], \"expected\": [[\"cool\", [\"a\"]], [\"cool\", [\"a\"]], [null, []]], \"passed\": true}, {\"check\": \"control: 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\": \"control: 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\": true}\n"}},"verified":true,"visibility":"public"}