{"abstract":"A gust exactly at the stow limit does not stow the rows.","category":"Solar tracker geometry","checks":7,"contract":"winds are per-sample speeds. avg is the mean of the last win samples (fewer at the start). Tracking rows enter stow when the sample >= gust_limit or avg >= mean_limit (one entry each time). Stowed rows return to tracking after hold consecutive samples with avg < release; any sample with avg >= release resets the count. Return [modes per sample, stow entries].","evaluation_group":"w2-solar_tracker_geometry-wind-stow-hysteresis","failed_approach":"Comparing the mean against the gust limit ignores short gusts.","family":"w2-solar_tracker_geometry-wind-stow-hysteresis-gust-trigger-comparison","id":"FA-93461","implementations":{"attempt":{"sha256":"76505fcabbf43c7f2a0ac1cbb057511371ec56968a898cc0d88c7ac10f353c95","source":"\"\"\"Failure Map reference implementation. Python standard library only.\"\"\"\nimport json\n\nN = 1\nobservations = []\ndef solve(winds, gust_limit, mean_limit, release, win, hold):\n    mode = 'track'\n    calm = 0\n    entries = 0\n    out = []\n    for i, w in enumerate(winds):\n        recent = winds[max(0, i - win + 1):i + 1]\n        avg = sum(recent) / len(recent)\n        if mode == 'track':\n            if avg >= gust_limit or avg >= mean_limit:\n                mode = 'stow'\n                entries += 1\n                calm = 0\n        else:\n            if avg < release:\n                calm += 1\n                if calm >= hold:\n                    mode = 'track'\n                    calm = 0\n            else:\n                calm = 0\n        out.append(mode)\n    return [out, entries]\ndef check(label, actual, expected):\n    observations.append({\"check\": label, \"actual\": actual, \"expected\": expected, \"passed\": actual == expected})\nfixtures = [[['boundary: gust exactly at limit', [[5, 20, 5, 5, 5], 20, 30, 10, 1, 1],\n   [['track', 'stow', 'track', 'track', 'track'], 1]],\n  ['normal: sustained mean wind', [[14, 15, 16, 15, 4, 4, 4], 25, 15, 10, 3, 2],\n   [['track', 'track', 'stow', 'stow', 'stow', 'stow', 'track'], 1]],\n  ['boundary: calm interrupted before hold', [[25, 5, 12, 5, 5, 5], 20, 30, 10, 1, 2],\n   [['stow', 'stow', 'stow', 'stow', 'track', 'track'], 1]],\n  ['regression: gust trigger comparison',\n   [[4, 0, 10, 18, 14, 8, 4, 14, 8, 4, 4, 0, 2, 14], 18, 14, 10, 3, 1],\n   [['track', 'track', 'track', 'stow', 'stow', 'stow', 'track', 'track', 'track', 'track', 'track',\n     'track', 'track', 'track'],\n    1]],\n  ['regression: gust trigger comparison (partial repair)',\n   [[10, 18, 12, 14, 12, 26, 22, 16, 12, 10, 12, 18, 22, 18], 18, 15, 10, 2, 1],\n   [['track', 'stow', 'stow', 'stow', 'stow', 'stow', 'stow', 'stow', 'stow', 'stow', 'stow',\n     'stow', 'stow', 'stow'],\n    1]],\n  ['control 1', [[29, 15, 15, 15, 13, 19, 11, 11, 11, 13, 15, 15, 25], 20, 15, 10, 3, 2],\n   [['stow', 'stow', 'stow', 'stow', 'stow', 'stow', 'stow', 'stow', 'stow', 'stow', 'stow', 'stow',\n     'stow'],\n    1]],\n  ['control 2', [[6, 6, 6, 18, 4, 0, 10, 8], 18, 15, 8, 4, 2],\n   [['track', 'track', 'track', 'stow', 'stow', 'stow', 'stow', 'stow'], 1]]],\n [['boundary: gust exactly at limit', [[5, 20, 5, 5, 5], 20, 30, 10, 1, 1],\n   [['track', 'stow', 'track', 'track', 'track'], 1]],\n  ['normal: sustained mean wind', [[14, 15, 16, 15, 4, 4, 4], 25, 15, 10, 3, 2],\n   [['track', 'track', 'stow', 'stow', 'stow', 'stow', 'track'], 1]],\n  ['boundary: calm interrupted before hold', [[25, 5, 12, 5, 5, 5], 20, 30, 10, 1, 2],\n   [['stow', 'stow', 'stow', 'stow', 'track', 'track'], 1]],\n  ['regression: gust trigger comparison', [[2, 6, 2, 8, 0, 18, 0, 0], 18, 15, 10, 3, 2],\n   [['track', 'track', 'track', 'track', 'track', 'stow', 'stow', 'track'], 1]],\n  ['regression: gust trigger comparison (partial repair)',\n   [[12, 10, 22, 18, 8, 12, 18], 18, 15, 10, 3, 1],\n   [['track', 'track', 'stow', 'stow', 'stow', 'stow', 'stow'], 1]],\n  ['control 1', [[12, 18, 12, 26, 14, 12, 22, 10, 12, 22, 18], 18, 15, 10, 2, 2],\n   [['track', 'stow', 'stow', 'stow', 'stow', 'stow', 'stow', 'stow', 'stow', 'stow', 'stow'], 1]],\n  ['control 2', [[0, 2, 18, 14, 10, 2, 6, 18, 8], 18, 15, 10, 2, 1],\n   [['track', 'track', 'stow', 'stow', 'stow', 'track', 'track', 'stow', 'stow'], 2]]],\n [['boundary: gust exactly at limit', [[5, 20, 5, 5, 5], 20, 30, 10, 1, 1],\n   [['track', 'stow', 'track', 'track', 'track'], 1]],\n  ['normal: sustained mean wind', [[14, 15, 16, 15, 4, 4, 4], 25, 15, 10, 3, 2],\n   [['track', 'track', 'stow', 'stow', 'stow', 'stow', 'track'], 1]],\n  ['boundary: calm interrupted before hold', [[25, 5, 12, 5, 5, 5], 20, 30, 10, 1, 2],\n   [['stow', 'stow', 'stow', 'stow', 'track', 'track'], 1]],\n  ['regression: gust trigger comparison', [[6, 14, 10, 6, 22, 18, 22], 22, 14, 10, 4, 2],\n   [['track', 'track', 'track', 'track', 'stow', 'stow', 'stow'], 1]],\n  ['regression: gust trigger comparison (partial repair)',\n   [[6, 22, 10, 18, 8, 22, 12, 8, 6], 20, 15, 8, 2, 1],\n   [['track', 'stow', 'stow', 'stow', 'stow', 'stow', 'stow', 'stow', 'track'], 1]],\n  ['control 1', [[12, 16, 26, 18, 16, 10, 22, 26, 12, 14, 22, 22, 10, 14], 22, 12, 10, 2, 1],\n   [['stow', 'stow', 'stow', 'stow', 'stow', 'stow', 'stow', 'stow', 'stow', 'stow', 'stow', 'stow',\n     'stow', 'stow'],\n    1]],\n  ['control 2', [[14, 12, 6, 8, 4, 6, 4, 8, 12, 6, 22, 8, 18, 22], 20, 15, 8, 3, 1],\n   [['track', 'track', 'track', 'track', 'track', 'track', 'track', 'track', 'track', 'track',\n     'stow', 'stow', 'stow', 'stow'],\n    1]]],\n [['boundary: gust exactly at limit', [[5, 20, 5, 5, 5], 20, 30, 10, 1, 1],\n   [['track', 'stow', 'track', 'track', 'track'], 1]],\n  ['normal: sustained mean wind', [[14, 15, 16, 15, 4, 4, 4], 25, 15, 10, 3, 2],\n   [['track', 'track', 'stow', 'stow', 'stow', 'stow', 'track'], 1]],\n  ['boundary: calm interrupted before hold', [[25, 5, 12, 5, 5, 5], 20, 30, 10, 1, 2],\n   [['stow', 'stow', 'stow', 'stow', 'track', 'track'], 1]],\n  ['regression: gust trigger comparison', [[12, 4, 8, 4, 18, 8, 22, 10, 4, 8], 18, 14, 8, 4, 1],\n   [['track', 'track', 'track', 'track', 'stow', 'stow', 'stow', 'stow', 'stow', 'stow'], 1]],\n  ['regression: gust trigger comparison (partial repair)',\n   [[14, 8, 10, 4, 6, 0, 6, 14, 8, 18], 18, 15, 8, 2, 3],\n   [['track', 'track', 'track', 'track', 'track', 'track', 'track', 'track', 'track', 'stow'], 1]],\n  ['control 1', [[22, 10, 18, 8, 16, 10, 22, 16, 10, 18], 22, 15, 10, 4, 3],\n   [['stow', 'stow', 'stow', 'stow', 'stow', 'stow', 'stow', 'stow', 'stow', 'stow'], 1]],\n  ['control 2', [[4, 2, 0, 14, 6, 4, 18, 4, 18, 6, 4], 20, 14, 10, 4, 1],\n   [['track', 'track', 'track', 'track', 'track', 'track', 'track', 'track', 'track', 'track',\n     'track'],\n    0]]],\n [['boundary: gust exactly at limit', [[5, 20, 5, 5, 5], 20, 30, 10, 1, 1],\n   [['track', 'stow', 'track', 'track', 'track'], 1]],\n  ['normal: sustained mean wind', [[14, 15, 16, 15, 4, 4, 4], 25, 15, 10, 3, 2],\n   [['track', 'track', 'stow', 'stow', 'stow', 'stow', 'track'], 1]],\n  ['boundary: calm interrupted before hold', [[25, 5, 12, 5, 5, 5], 20, 30, 10, 1, 2],\n   [['stow', 'stow', 'stow', 'stow', 'track', 'track'], 1]],\n  ['regression: gust trigger comparison',\n   [[4, 0, 10, 18, 14, 8, 4, 14, 8, 4, 4, 0, 2, 14], 18, 14, 10, 3, 1],\n   [['track', 'track', 'track', 'stow', 'stow', 'stow', 'track', 'track', 'track', 'track', 'track',\n     'track', 'track', 'track'],\n    1]],\n  ['regression: gust trigger comparison (partial repair)',\n   [[10, 18, 12, 14, 12, 26, 22, 16, 12, 10, 12, 18, 22, 18], 18, 15, 10, 2, 1],\n   [['track', 'stow', 'stow', 'stow', 'stow', 'stow', 'stow', 'stow', 'stow', 'stow', 'stow',\n     'stow', 'stow', 'stow'],\n    1]],\n  ['control 1', [[12, 4, 10, 4, 18, 4, 4, 6, 8, 10], 18, 14, 8, 1, 3],\n   [['track', 'track', 'track', 'track', 'stow', 'stow', 'stow', 'track', 'track', 'track'], 1]],\n  ['control 2', [[14, 8, 22, 4, 22, 10, 6, 14, 10, 8, 6], 20, 12, 10, 4, 3],\n   [['stow', 'stow', 'stow', 'stow', 'stow', 'stow', 'stow', 'stow', 'stow', 'stow', 'stow'], 1]]]]\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":"a50bed289661ccaa5d5fef2caa396e738795c097e75988f700cb07b9d67d6467","source":"\"\"\"Failure Map reference implementation. Python standard library only.\"\"\"\nimport json\n\nN = 1\nobservations = []\ndef solve(winds, gust_limit, mean_limit, release, win, hold):\n    mode = 'track'\n    calm = 0\n    entries = 0\n    out = []\n    for i, w in enumerate(winds):\n        recent = winds[max(0, i - win + 1):i + 1]\n        avg = sum(recent) / len(recent)\n        if mode == 'track':\n            if w > gust_limit or avg >= mean_limit:\n                mode = 'stow'\n                entries += 1\n                calm = 0\n        else:\n            if avg < release:\n                calm += 1\n                if calm >= hold:\n                    mode = 'track'\n                    calm = 0\n            else:\n                calm = 0\n        out.append(mode)\n    return [out, entries]\ndef check(label, actual, expected):\n    observations.append({\"check\": label, \"actual\": actual, \"expected\": expected, \"passed\": actual == expected})\nfixtures = [[['boundary: gust exactly at limit', [[5, 20, 5, 5, 5], 20, 30, 10, 1, 1],\n   [['track', 'stow', 'track', 'track', 'track'], 1]],\n  ['normal: sustained mean wind', [[14, 15, 16, 15, 4, 4, 4], 25, 15, 10, 3, 2],\n   [['track', 'track', 'stow', 'stow', 'stow', 'stow', 'track'], 1]],\n  ['boundary: calm interrupted before hold', [[25, 5, 12, 5, 5, 5], 20, 30, 10, 1, 2],\n   [['stow', 'stow', 'stow', 'stow', 'track', 'track'], 1]],\n  ['regression: gust trigger comparison',\n   [[4, 0, 10, 18, 14, 8, 4, 14, 8, 4, 4, 0, 2, 14], 18, 14, 10, 3, 1],\n   [['track', 'track', 'track', 'stow', 'stow', 'stow', 'track', 'track', 'track', 'track', 'track',\n     'track', 'track', 'track'],\n    1]],\n  ['regression: gust trigger comparison (partial repair)',\n   [[10, 18, 12, 14, 12, 26, 22, 16, 12, 10, 12, 18, 22, 18], 18, 15, 10, 2, 1],\n   [['track', 'stow', 'stow', 'stow', 'stow', 'stow', 'stow', 'stow', 'stow', 'stow', 'stow',\n     'stow', 'stow', 'stow'],\n    1]],\n  ['control 1', [[29, 15, 15, 15, 13, 19, 11, 11, 11, 13, 15, 15, 25], 20, 15, 10, 3, 2],\n   [['stow', 'stow', 'stow', 'stow', 'stow', 'stow', 'stow', 'stow', 'stow', 'stow', 'stow', 'stow',\n     'stow'],\n    1]],\n  ['control 2', [[6, 6, 6, 18, 4, 0, 10, 8], 18, 15, 8, 4, 2],\n   [['track', 'track', 'track', 'stow', 'stow', 'stow', 'stow', 'stow'], 1]]],\n [['boundary: gust exactly at limit', [[5, 20, 5, 5, 5], 20, 30, 10, 1, 1],\n   [['track', 'stow', 'track', 'track', 'track'], 1]],\n  ['normal: sustained mean wind', [[14, 15, 16, 15, 4, 4, 4], 25, 15, 10, 3, 2],\n   [['track', 'track', 'stow', 'stow', 'stow', 'stow', 'track'], 1]],\n  ['boundary: calm interrupted before hold', [[25, 5, 12, 5, 5, 5], 20, 30, 10, 1, 2],\n   [['stow', 'stow', 'stow', 'stow', 'track', 'track'], 1]],\n  ['regression: gust trigger comparison', [[2, 6, 2, 8, 0, 18, 0, 0], 18, 15, 10, 3, 2],\n   [['track', 'track', 'track', 'track', 'track', 'stow', 'stow', 'track'], 1]],\n  ['regression: gust trigger comparison (partial repair)',\n   [[12, 10, 22, 18, 8, 12, 18], 18, 15, 10, 3, 1],\n   [['track', 'track', 'stow', 'stow', 'stow', 'stow', 'stow'], 1]],\n  ['control 1', [[12, 18, 12, 26, 14, 12, 22, 10, 12, 22, 18], 18, 15, 10, 2, 2],\n   [['track', 'stow', 'stow', 'stow', 'stow', 'stow', 'stow', 'stow', 'stow', 'stow', 'stow'], 1]],\n  ['control 2', [[0, 2, 18, 14, 10, 2, 6, 18, 8], 18, 15, 10, 2, 1],\n   [['track', 'track', 'stow', 'stow', 'stow', 'track', 'track', 'stow', 'stow'], 2]]],\n [['boundary: gust exactly at limit', [[5, 20, 5, 5, 5], 20, 30, 10, 1, 1],\n   [['track', 'stow', 'track', 'track', 'track'], 1]],\n  ['normal: sustained mean wind', [[14, 15, 16, 15, 4, 4, 4], 25, 15, 10, 3, 2],\n   [['track', 'track', 'stow', 'stow', 'stow', 'stow', 'track'], 1]],\n  ['boundary: calm interrupted before hold', [[25, 5, 12, 5, 5, 5], 20, 30, 10, 1, 2],\n   [['stow', 'stow', 'stow', 'stow', 'track', 'track'], 1]],\n  ['regression: gust trigger comparison', [[6, 14, 10, 6, 22, 18, 22], 22, 14, 10, 4, 2],\n   [['track', 'track', 'track', 'track', 'stow', 'stow', 'stow'], 1]],\n  ['regression: gust trigger comparison (partial repair)',\n   [[6, 22, 10, 18, 8, 22, 12, 8, 6], 20, 15, 8, 2, 1],\n   [['track', 'stow', 'stow', 'stow', 'stow', 'stow', 'stow', 'stow', 'track'], 1]],\n  ['control 1', [[12, 16, 26, 18, 16, 10, 22, 26, 12, 14, 22, 22, 10, 14], 22, 12, 10, 2, 1],\n   [['stow', 'stow', 'stow', 'stow', 'stow', 'stow', 'stow', 'stow', 'stow', 'stow', 'stow', 'stow',\n     'stow', 'stow'],\n    1]],\n  ['control 2', [[14, 12, 6, 8, 4, 6, 4, 8, 12, 6, 22, 8, 18, 22], 20, 15, 8, 3, 1],\n   [['track', 'track', 'track', 'track', 'track', 'track', 'track', 'track', 'track', 'track',\n     'stow', 'stow', 'stow', 'stow'],\n    1]]],\n [['boundary: gust exactly at limit', [[5, 20, 5, 5, 5], 20, 30, 10, 1, 1],\n   [['track', 'stow', 'track', 'track', 'track'], 1]],\n  ['normal: sustained mean wind', [[14, 15, 16, 15, 4, 4, 4], 25, 15, 10, 3, 2],\n   [['track', 'track', 'stow', 'stow', 'stow', 'stow', 'track'], 1]],\n  ['boundary: calm interrupted before hold', [[25, 5, 12, 5, 5, 5], 20, 30, 10, 1, 2],\n   [['stow', 'stow', 'stow', 'stow', 'track', 'track'], 1]],\n  ['regression: gust trigger comparison', [[12, 4, 8, 4, 18, 8, 22, 10, 4, 8], 18, 14, 8, 4, 1],\n   [['track', 'track', 'track', 'track', 'stow', 'stow', 'stow', 'stow', 'stow', 'stow'], 1]],\n  ['regression: gust trigger comparison (partial repair)',\n   [[14, 8, 10, 4, 6, 0, 6, 14, 8, 18], 18, 15, 8, 2, 3],\n   [['track', 'track', 'track', 'track', 'track', 'track', 'track', 'track', 'track', 'stow'], 1]],\n  ['control 1', [[22, 10, 18, 8, 16, 10, 22, 16, 10, 18], 22, 15, 10, 4, 3],\n   [['stow', 'stow', 'stow', 'stow', 'stow', 'stow', 'stow', 'stow', 'stow', 'stow'], 1]],\n  ['control 2', [[4, 2, 0, 14, 6, 4, 18, 4, 18, 6, 4], 20, 14, 10, 4, 1],\n   [['track', 'track', 'track', 'track', 'track', 'track', 'track', 'track', 'track', 'track',\n     'track'],\n    0]]],\n [['boundary: gust exactly at limit', [[5, 20, 5, 5, 5], 20, 30, 10, 1, 1],\n   [['track', 'stow', 'track', 'track', 'track'], 1]],\n  ['normal: sustained mean wind', [[14, 15, 16, 15, 4, 4, 4], 25, 15, 10, 3, 2],\n   [['track', 'track', 'stow', 'stow', 'stow', 'stow', 'track'], 1]],\n  ['boundary: calm interrupted before hold', [[25, 5, 12, 5, 5, 5], 20, 30, 10, 1, 2],\n   [['stow', 'stow', 'stow', 'stow', 'track', 'track'], 1]],\n  ['regression: gust trigger comparison',\n   [[4, 0, 10, 18, 14, 8, 4, 14, 8, 4, 4, 0, 2, 14], 18, 14, 10, 3, 1],\n   [['track', 'track', 'track', 'stow', 'stow', 'stow', 'track', 'track', 'track', 'track', 'track',\n     'track', 'track', 'track'],\n    1]],\n  ['regression: gust trigger comparison (partial repair)',\n   [[10, 18, 12, 14, 12, 26, 22, 16, 12, 10, 12, 18, 22, 18], 18, 15, 10, 2, 1],\n   [['track', 'stow', 'stow', 'stow', 'stow', 'stow', 'stow', 'stow', 'stow', 'stow', 'stow',\n     'stow', 'stow', 'stow'],\n    1]],\n  ['control 1', [[12, 4, 10, 4, 18, 4, 4, 6, 8, 10], 18, 14, 8, 1, 3],\n   [['track', 'track', 'track', 'track', 'stow', 'stow', 'stow', 'track', 'track', 'track'], 1]],\n  ['control 2', [[14, 8, 22, 4, 22, 10, 6, 14, 10, 8, 6], 20, 12, 10, 4, 3],\n   [['stow', 'stow', 'stow', 'stow', 'stow', 'stow', 'stow', 'stow', 'stow', 'stow', 'stow'], 1]]]]\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":"70e1ff8a2e897d954ea8c34fd787aa6937fc1b45a40660191f63c1459288fa61","source":"\"\"\"Failure Map reference implementation. Python standard library only.\"\"\"\nimport json\n\nN = 1\nobservations = []\ndef solve(winds, gust_limit, mean_limit, release, win, hold):\n    mode = 'track'\n    calm = 0\n    entries = 0\n    out = []\n    for i, w in enumerate(winds):\n        recent = winds[max(0, i - win + 1):i + 1]\n        avg = sum(recent) / len(recent)\n        if mode == 'track':\n            if w >= gust_limit or avg >= mean_limit:\n                mode = 'stow'\n                entries += 1\n                calm = 0\n        else:\n            if avg < release:\n                calm += 1\n                if calm >= hold:\n                    mode = 'track'\n                    calm = 0\n            else:\n                calm = 0\n        out.append(mode)\n    return [out, entries]\ndef check(label, actual, expected):\n    observations.append({\"check\": label, \"actual\": actual, \"expected\": expected, \"passed\": actual == expected})\nfixtures = [[['boundary: gust exactly at limit', [[5, 20, 5, 5, 5], 20, 30, 10, 1, 1],\n   [['track', 'stow', 'track', 'track', 'track'], 1]],\n  ['normal: sustained mean wind', [[14, 15, 16, 15, 4, 4, 4], 25, 15, 10, 3, 2],\n   [['track', 'track', 'stow', 'stow', 'stow', 'stow', 'track'], 1]],\n  ['boundary: calm interrupted before hold', [[25, 5, 12, 5, 5, 5], 20, 30, 10, 1, 2],\n   [['stow', 'stow', 'stow', 'stow', 'track', 'track'], 1]],\n  ['regression: gust trigger comparison',\n   [[4, 0, 10, 18, 14, 8, 4, 14, 8, 4, 4, 0, 2, 14], 18, 14, 10, 3, 1],\n   [['track', 'track', 'track', 'stow', 'stow', 'stow', 'track', 'track', 'track', 'track', 'track',\n     'track', 'track', 'track'],\n    1]],\n  ['regression: gust trigger comparison (partial repair)',\n   [[10, 18, 12, 14, 12, 26, 22, 16, 12, 10, 12, 18, 22, 18], 18, 15, 10, 2, 1],\n   [['track', 'stow', 'stow', 'stow', 'stow', 'stow', 'stow', 'stow', 'stow', 'stow', 'stow',\n     'stow', 'stow', 'stow'],\n    1]],\n  ['control 1', [[29, 15, 15, 15, 13, 19, 11, 11, 11, 13, 15, 15, 25], 20, 15, 10, 3, 2],\n   [['stow', 'stow', 'stow', 'stow', 'stow', 'stow', 'stow', 'stow', 'stow', 'stow', 'stow', 'stow',\n     'stow'],\n    1]],\n  ['control 2', [[6, 6, 6, 18, 4, 0, 10, 8], 18, 15, 8, 4, 2],\n   [['track', 'track', 'track', 'stow', 'stow', 'stow', 'stow', 'stow'], 1]]],\n [['boundary: gust exactly at limit', [[5, 20, 5, 5, 5], 20, 30, 10, 1, 1],\n   [['track', 'stow', 'track', 'track', 'track'], 1]],\n  ['normal: sustained mean wind', [[14, 15, 16, 15, 4, 4, 4], 25, 15, 10, 3, 2],\n   [['track', 'track', 'stow', 'stow', 'stow', 'stow', 'track'], 1]],\n  ['boundary: calm interrupted before hold', [[25, 5, 12, 5, 5, 5], 20, 30, 10, 1, 2],\n   [['stow', 'stow', 'stow', 'stow', 'track', 'track'], 1]],\n  ['regression: gust trigger comparison', [[2, 6, 2, 8, 0, 18, 0, 0], 18, 15, 10, 3, 2],\n   [['track', 'track', 'track', 'track', 'track', 'stow', 'stow', 'track'], 1]],\n  ['regression: gust trigger comparison (partial repair)',\n   [[12, 10, 22, 18, 8, 12, 18], 18, 15, 10, 3, 1],\n   [['track', 'track', 'stow', 'stow', 'stow', 'stow', 'stow'], 1]],\n  ['control 1', [[12, 18, 12, 26, 14, 12, 22, 10, 12, 22, 18], 18, 15, 10, 2, 2],\n   [['track', 'stow', 'stow', 'stow', 'stow', 'stow', 'stow', 'stow', 'stow', 'stow', 'stow'], 1]],\n  ['control 2', [[0, 2, 18, 14, 10, 2, 6, 18, 8], 18, 15, 10, 2, 1],\n   [['track', 'track', 'stow', 'stow', 'stow', 'track', 'track', 'stow', 'stow'], 2]]],\n [['boundary: gust exactly at limit', [[5, 20, 5, 5, 5], 20, 30, 10, 1, 1],\n   [['track', 'stow', 'track', 'track', 'track'], 1]],\n  ['normal: sustained mean wind', [[14, 15, 16, 15, 4, 4, 4], 25, 15, 10, 3, 2],\n   [['track', 'track', 'stow', 'stow', 'stow', 'stow', 'track'], 1]],\n  ['boundary: calm interrupted before hold', [[25, 5, 12, 5, 5, 5], 20, 30, 10, 1, 2],\n   [['stow', 'stow', 'stow', 'stow', 'track', 'track'], 1]],\n  ['regression: gust trigger comparison', [[6, 14, 10, 6, 22, 18, 22], 22, 14, 10, 4, 2],\n   [['track', 'track', 'track', 'track', 'stow', 'stow', 'stow'], 1]],\n  ['regression: gust trigger comparison (partial repair)',\n   [[6, 22, 10, 18, 8, 22, 12, 8, 6], 20, 15, 8, 2, 1],\n   [['track', 'stow', 'stow', 'stow', 'stow', 'stow', 'stow', 'stow', 'track'], 1]],\n  ['control 1', [[12, 16, 26, 18, 16, 10, 22, 26, 12, 14, 22, 22, 10, 14], 22, 12, 10, 2, 1],\n   [['stow', 'stow', 'stow', 'stow', 'stow', 'stow', 'stow', 'stow', 'stow', 'stow', 'stow', 'stow',\n     'stow', 'stow'],\n    1]],\n  ['control 2', [[14, 12, 6, 8, 4, 6, 4, 8, 12, 6, 22, 8, 18, 22], 20, 15, 8, 3, 1],\n   [['track', 'track', 'track', 'track', 'track', 'track', 'track', 'track', 'track', 'track',\n     'stow', 'stow', 'stow', 'stow'],\n    1]]],\n [['boundary: gust exactly at limit', [[5, 20, 5, 5, 5], 20, 30, 10, 1, 1],\n   [['track', 'stow', 'track', 'track', 'track'], 1]],\n  ['normal: sustained mean wind', [[14, 15, 16, 15, 4, 4, 4], 25, 15, 10, 3, 2],\n   [['track', 'track', 'stow', 'stow', 'stow', 'stow', 'track'], 1]],\n  ['boundary: calm interrupted before hold', [[25, 5, 12, 5, 5, 5], 20, 30, 10, 1, 2],\n   [['stow', 'stow', 'stow', 'stow', 'track', 'track'], 1]],\n  ['regression: gust trigger comparison', [[12, 4, 8, 4, 18, 8, 22, 10, 4, 8], 18, 14, 8, 4, 1],\n   [['track', 'track', 'track', 'track', 'stow', 'stow', 'stow', 'stow', 'stow', 'stow'], 1]],\n  ['regression: gust trigger comparison (partial repair)',\n   [[14, 8, 10, 4, 6, 0, 6, 14, 8, 18], 18, 15, 8, 2, 3],\n   [['track', 'track', 'track', 'track', 'track', 'track', 'track', 'track', 'track', 'stow'], 1]],\n  ['control 1', [[22, 10, 18, 8, 16, 10, 22, 16, 10, 18], 22, 15, 10, 4, 3],\n   [['stow', 'stow', 'stow', 'stow', 'stow', 'stow', 'stow', 'stow', 'stow', 'stow'], 1]],\n  ['control 2', [[4, 2, 0, 14, 6, 4, 18, 4, 18, 6, 4], 20, 14, 10, 4, 1],\n   [['track', 'track', 'track', 'track', 'track', 'track', 'track', 'track', 'track', 'track',\n     'track'],\n    0]]],\n [['boundary: gust exactly at limit', [[5, 20, 5, 5, 5], 20, 30, 10, 1, 1],\n   [['track', 'stow', 'track', 'track', 'track'], 1]],\n  ['normal: sustained mean wind', [[14, 15, 16, 15, 4, 4, 4], 25, 15, 10, 3, 2],\n   [['track', 'track', 'stow', 'stow', 'stow', 'stow', 'track'], 1]],\n  ['boundary: calm interrupted before hold', [[25, 5, 12, 5, 5, 5], 20, 30, 10, 1, 2],\n   [['stow', 'stow', 'stow', 'stow', 'track', 'track'], 1]],\n  ['regression: gust trigger comparison',\n   [[4, 0, 10, 18, 14, 8, 4, 14, 8, 4, 4, 0, 2, 14], 18, 14, 10, 3, 1],\n   [['track', 'track', 'track', 'stow', 'stow', 'stow', 'track', 'track', 'track', 'track', 'track',\n     'track', 'track', 'track'],\n    1]],\n  ['regression: gust trigger comparison (partial repair)',\n   [[10, 18, 12, 14, 12, 26, 22, 16, 12, 10, 12, 18, 22, 18], 18, 15, 10, 2, 1],\n   [['track', 'stow', 'stow', 'stow', 'stow', 'stow', 'stow', 'stow', 'stow', 'stow', 'stow',\n     'stow', 'stow', 'stow'],\n    1]],\n  ['control 1', [[12, 4, 10, 4, 18, 4, 4, 6, 8, 10], 18, 14, 8, 1, 3],\n   [['track', 'track', 'track', 'track', 'stow', 'stow', 'stow', 'track', 'track', 'track'], 1]],\n  ['control 2', [[14, 8, 22, 4, 22, 10, 6, 14, 10, 8, 6], 20, 12, 10, 4, 3],\n   [['stow', 'stow', 'stow', 'stow', 'stow', 'stow', 'stow', 'stow', 'stow', 'stow', 'stow'], 1]]]]\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":"Deterministic stipulated toy contract for teaching; no claim of conformance with any standard, vendor protocol or production controller. 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-solar_tracker_geometry-wind-stow-hysteresis-gust-trigger-comparison","generated_at":"2026-09-29T14:51:55.505125+00:00","license":"CC0-1.0","python":"3.12.14","seed":1,"split":"open-access"},"relevance":"Single-axis and dual-axis solar trackers turn a sun direction into actuator commands; a sign, frame or limit mistake points a whole plant away from the sun or into a mechanical stop.","repair":"Stow when a sample reaches gust_limit.","root_cause":"The gust comparison is strict.","sha256":"ea6cd39d264c833f2f39cfc624b26abe384910157f6f753c310cebba420e7714","title":"Wind stow with gust and mean triggers: gust trigger comparison · case 01","variant":1,"variant_policy":"Five numbered records share a model and may reuse boundary fixtures.","verification":{"attempt":{"elapsed_ms":39.722,"exit_code":1,"observations":[{"actual":[["track","stow","track","track","track"],1],"check":"boundary: gust exactly at limit","expected":[["track","stow","track","track","track"],1],"passed":true},{"actual":[["track","track","stow","stow","stow","stow","track"],1],"check":"normal: sustained mean wind","expected":[["track","track","stow","stow","stow","stow","track"],1],"passed":true},{"actual":[["stow","stow","stow","stow","track","track"],1],"check":"boundary: calm interrupted before hold","expected":[["stow","stow","stow","stow","track","track"],1],"passed":true},{"actual":[["track","track","track","track","stow","stow","track","track","track","track","track","track","track","track"],1],"check":"regression: gust trigger comparison","expected":[["track","track","track","stow","stow","stow","track","track","track","track","track","track","track","track"],1],"passed":false},{"actual":[["track","track","stow","stow","stow","stow","stow","stow","stow","stow","stow","stow","stow","stow"],1],"check":"regression: gust trigger comparison (partial repair)","expected":[["track","stow","stow","stow","stow","stow","stow","stow","stow","stow","stow","stow","stow","stow"],1],"passed":false},{"actual":[["stow","stow","stow","stow","stow","stow","stow","stow","stow","stow","stow","stow","stow"],1],"check":"control 1","expected":[["stow","stow","stow","stow","stow","stow","stow","stow","stow","stow","stow","stow","stow"],1],"passed":true},{"actual":[["track","track","track","track","track","track","track","track"],0],"check":"control 2","expected":[["track","track","track","stow","stow","stow","stow","stow"],1],"passed":false}],"passed":false,"stderr":"","stdout":"{\"observations\": [{\"check\": \"boundary: gust exactly at limit\", \"actual\": [[\"track\", \"stow\", \"track\", \"track\", \"track\"], 1], \"expected\": [[\"track\", \"stow\", \"track\", \"track\", \"track\"], 1], \"passed\": true}, {\"check\": \"normal: sustained mean wind\", \"actual\": [[\"track\", \"track\", \"stow\", \"stow\", \"stow\", \"stow\", \"track\"], 1], \"expected\": [[\"track\", \"track\", \"stow\", \"stow\", \"stow\", \"stow\", \"track\"], 1], \"passed\": true}, {\"check\": \"boundary: calm interrupted before hold\", \"actual\": [[\"stow\", \"stow\", \"stow\", \"stow\", \"track\", \"track\"], 1], \"expected\": [[\"stow\", \"stow\", \"stow\", \"stow\", \"track\", \"track\"], 1], \"passed\": true}, {\"check\": \"regression: gust trigger comparison\", \"actual\": [[\"track\", \"track\", \"track\", \"track\", \"stow\", \"stow\", \"track\", \"track\", \"track\", \"track\", \"track\", \"track\", \"track\", \"track\"], 1], \"expected\": [[\"track\", \"track\", \"track\", \"stow\", \"stow\", \"stow\", \"track\", \"track\", \"track\", \"track\", \"track\", \"track\", \"track\", \"track\"], 1], \"passed\": false}, {\"check\": \"regression: gust trigger comparison (partial repair)\", \"actual\": [[\"track\", \"track\", \"stow\", \"stow\", \"stow\", \"stow\", \"stow\", \"stow\", \"stow\", \"stow\", \"stow\", \"stow\", \"stow\", \"stow\"], 1], \"expected\": [[\"track\", \"stow\", \"stow\", \"stow\", \"stow\", \"stow\", \"stow\", \"stow\", \"stow\", \"stow\", \"stow\", \"stow\", \"stow\", \"stow\"], 1], \"passed\": false}, {\"check\": \"control 1\", \"actual\": [[\"stow\", \"stow\", \"stow\", \"stow\", \"stow\", \"stow\", \"stow\", \"stow\", \"stow\", \"stow\", \"stow\", \"stow\", \"stow\"], 1], \"expected\": [[\"stow\", \"stow\", \"stow\", \"stow\", \"stow\", \"stow\", \"stow\", \"stow\", \"stow\", \"stow\", \"stow\", \"stow\", \"stow\"], 1], \"passed\": true}, {\"check\": \"control 2\", \"actual\": [[\"track\", \"track\", \"track\", \"track\", \"track\", \"track\", \"track\", \"track\"], 0], \"expected\": [[\"track\", \"track\", \"track\", \"stow\", \"stow\", \"stow\", \"stow\", \"stow\"], 1], \"passed\": false}], \"passed\": false}\n"},"broken":{"elapsed_ms":45.748,"exit_code":1,"observations":[{"actual":[["track","track","track","track","track"],0],"check":"boundary: gust exactly at limit","expected":[["track","stow","track","track","track"],1],"passed":false},{"actual":[["track","track","stow","stow","stow","stow","track"],1],"check":"normal: sustained mean wind","expected":[["track","track","stow","stow","stow","stow","track"],1],"passed":true},{"actual":[["stow","stow","stow","stow","track","track"],1],"check":"boundary: calm interrupted before hold","expected":[["stow","stow","stow","stow","track","track"],1],"passed":true},{"actual":[["track","track","track","track","stow","stow","track","track","track","track","track","track","track","track"],1],"check":"regression: gust trigger comparison","expected":[["track","track","track","stow","stow","stow","track","track","track","track","track","track","track","track"],1],"passed":false},{"actual":[["track","track","stow","stow","stow","stow","stow","stow","stow","stow","stow","stow","stow","stow"],1],"check":"regression: gust trigger comparison (partial repair)","expected":[["track","stow","stow","stow","stow","stow","stow","stow","stow","stow","stow","stow","stow","stow"],1],"passed":false},{"actual":[["stow","stow","stow","stow","stow","stow","stow","stow","stow","stow","stow","stow","stow"],1],"check":"control 1","expected":[["stow","stow","stow","stow","stow","stow","stow","stow","stow","stow","stow","stow","stow"],1],"passed":true},{"actual":[["track","track","track","track","track","track","track","track"],0],"check":"control 2","expected":[["track","track","track","stow","stow","stow","stow","stow"],1],"passed":false}],"passed":false,"stderr":"","stdout":"{\"observations\": [{\"check\": \"boundary: gust exactly at limit\", \"actual\": [[\"track\", \"track\", \"track\", \"track\", \"track\"], 0], \"expected\": [[\"track\", \"stow\", \"track\", \"track\", \"track\"], 1], \"passed\": false}, {\"check\": \"normal: sustained mean wind\", \"actual\": [[\"track\", \"track\", \"stow\", \"stow\", \"stow\", \"stow\", \"track\"], 1], \"expected\": [[\"track\", \"track\", \"stow\", \"stow\", \"stow\", \"stow\", \"track\"], 1], \"passed\": true}, {\"check\": \"boundary: calm interrupted before hold\", \"actual\": [[\"stow\", \"stow\", \"stow\", \"stow\", \"track\", \"track\"], 1], \"expected\": [[\"stow\", \"stow\", \"stow\", \"stow\", \"track\", \"track\"], 1], \"passed\": true}, {\"check\": \"regression: gust trigger comparison\", \"actual\": [[\"track\", \"track\", \"track\", \"track\", \"stow\", \"stow\", \"track\", \"track\", \"track\", \"track\", \"track\", \"track\", \"track\", \"track\"], 1], \"expected\": [[\"track\", \"track\", \"track\", \"stow\", \"stow\", \"stow\", \"track\", \"track\", \"track\", \"track\", \"track\", \"track\", \"track\", \"track\"], 1], \"passed\": false}, {\"check\": \"regression: gust trigger comparison (partial repair)\", \"actual\": [[\"track\", \"track\", \"stow\", \"stow\", \"stow\", \"stow\", \"stow\", \"stow\", \"stow\", \"stow\", \"stow\", \"stow\", \"stow\", \"stow\"], 1], \"expected\": [[\"track\", \"stow\", \"stow\", \"stow\", \"stow\", \"stow\", \"stow\", \"stow\", \"stow\", \"stow\", \"stow\", \"stow\", \"stow\", \"stow\"], 1], \"passed\": false}, {\"check\": \"control 1\", \"actual\": [[\"stow\", \"stow\", \"stow\", \"stow\", \"stow\", \"stow\", \"stow\", \"stow\", \"stow\", \"stow\", \"stow\", \"stow\", \"stow\"], 1], \"expected\": [[\"stow\", \"stow\", \"stow\", \"stow\", \"stow\", \"stow\", \"stow\", \"stow\", \"stow\", \"stow\", \"stow\", \"stow\", \"stow\"], 1], \"passed\": true}, {\"check\": \"control 2\", \"actual\": [[\"track\", \"track\", \"track\", \"track\", \"track\", \"track\", \"track\", \"track\"], 0], \"expected\": [[\"track\", \"track\", \"track\", \"stow\", \"stow\", \"stow\", \"stow\", \"stow\"], 1], \"passed\": false}], \"passed\": false}\n"},"fixed":{"elapsed_ms":39.863,"exit_code":0,"observations":[{"actual":[["track","stow","track","track","track"],1],"check":"boundary: gust exactly at limit","expected":[["track","stow","track","track","track"],1],"passed":true},{"actual":[["track","track","stow","stow","stow","stow","track"],1],"check":"normal: sustained mean wind","expected":[["track","track","stow","stow","stow","stow","track"],1],"passed":true},{"actual":[["stow","stow","stow","stow","track","track"],1],"check":"boundary: calm interrupted before hold","expected":[["stow","stow","stow","stow","track","track"],1],"passed":true},{"actual":[["track","track","track","stow","stow","stow","track","track","track","track","track","track","track","track"],1],"check":"regression: gust trigger comparison","expected":[["track","track","track","stow","stow","stow","track","track","track","track","track","track","track","track"],1],"passed":true},{"actual":[["track","stow","stow","stow","stow","stow","stow","stow","stow","stow","stow","stow","stow","stow"],1],"check":"regression: gust trigger comparison (partial repair)","expected":[["track","stow","stow","stow","stow","stow","stow","stow","stow","stow","stow","stow","stow","stow"],1],"passed":true},{"actual":[["stow","stow","stow","stow","stow","stow","stow","stow","stow","stow","stow","stow","stow"],1],"check":"control 1","expected":[["stow","stow","stow","stow","stow","stow","stow","stow","stow","stow","stow","stow","stow"],1],"passed":true},{"actual":[["track","track","track","stow","stow","stow","stow","stow"],1],"check":"control 2","expected":[["track","track","track","stow","stow","stow","stow","stow"],1],"passed":true}],"passed":true,"stderr":"","stdout":"{\"observations\": [{\"check\": \"boundary: gust exactly at limit\", \"actual\": [[\"track\", \"stow\", \"track\", \"track\", \"track\"], 1], \"expected\": [[\"track\", \"stow\", \"track\", \"track\", \"track\"], 1], \"passed\": true}, {\"check\": \"normal: sustained mean wind\", \"actual\": [[\"track\", \"track\", \"stow\", \"stow\", \"stow\", \"stow\", \"track\"], 1], \"expected\": [[\"track\", \"track\", \"stow\", \"stow\", \"stow\", \"stow\", \"track\"], 1], \"passed\": true}, {\"check\": \"boundary: calm interrupted before hold\", \"actual\": [[\"stow\", \"stow\", \"stow\", \"stow\", \"track\", \"track\"], 1], \"expected\": [[\"stow\", \"stow\", \"stow\", \"stow\", \"track\", \"track\"], 1], \"passed\": true}, {\"check\": \"regression: gust trigger comparison\", \"actual\": [[\"track\", \"track\", \"track\", \"stow\", \"stow\", \"stow\", \"track\", \"track\", \"track\", \"track\", \"track\", \"track\", \"track\", \"track\"], 1], \"expected\": [[\"track\", \"track\", \"track\", \"stow\", \"stow\", \"stow\", \"track\", \"track\", \"track\", \"track\", \"track\", \"track\", \"track\", \"track\"], 1], \"passed\": true}, {\"check\": \"regression: gust trigger comparison (partial repair)\", \"actual\": [[\"track\", \"stow\", \"stow\", \"stow\", \"stow\", \"stow\", \"stow\", \"stow\", \"stow\", \"stow\", \"stow\", \"stow\", \"stow\", \"stow\"], 1], \"expected\": [[\"track\", \"stow\", \"stow\", \"stow\", \"stow\", \"stow\", \"stow\", \"stow\", \"stow\", \"stow\", \"stow\", \"stow\", \"stow\", \"stow\"], 1], \"passed\": true}, {\"check\": \"control 1\", \"actual\": [[\"stow\", \"stow\", \"stow\", \"stow\", \"stow\", \"stow\", \"stow\", \"stow\", \"stow\", \"stow\", \"stow\", \"stow\", \"stow\"], 1], \"expected\": [[\"stow\", \"stow\", \"stow\", \"stow\", \"stow\", \"stow\", \"stow\", \"stow\", \"stow\", \"stow\", \"stow\", \"stow\", \"stow\"], 1], \"passed\": true}, {\"check\": \"control 2\", \"actual\": [[\"track\", \"track\", \"track\", \"stow\", \"stow\", \"stow\", \"stow\", \"stow\"], 1], \"expected\": [[\"track\", \"track\", \"track\", \"stow\", \"stow\", \"stow\", \"stow\", \"stow\"], 1], \"passed\": true}], \"passed\": true}\n"}},"verified":true,"visibility":"public"}