{"abstract":"Hail arriving along the axis tilts rows to the positive side.","category":"Solar tracker geometry","checks":7,"contract":"Priority: wind >= 20 m/s gives [0.0, 'wind']; then a manual angle (clamped to +-max_angle) gives 'manual'; then hail from azimuth hail_from gives +max_angle when (hail_from - axis_az) mod 360 is strictly between 0 and 180, else -max_angle ('hail'); then snow alternates rows: even rows +max_angle, odd rows -max_angle ('snow'); otherwise [None, 'normal'].","evaluation_group":"w2-solar_tracker_geometry-hazard-stow-selection","failed_approach":"Including 180 moves the ambiguity to the other end of the axis.","family":"w2-solar_tracker_geometry-hazard-stow-selection-hail-bearing-boundary","id":"FA-93791","implementations":{"attempt":{"sha256":"75d1b367547178f9be9914e23b7647d6a1af4b42084a9dce406c6de13d9ee324","source":"\"\"\"Failure Map reference implementation. Python standard library only.\"\"\"\nimport json\n\nN = 1\nobservations = []\ndef solve(hazards, row, axis_az, max_angle, manual):\n    wind = hazards.get('wind', 0)\n    if wind >= 20:\n        return [0.0, 'wind']\n    if manual is not None:\n        return [float(max(-max_angle, min(max_angle, manual))), 'manual']\n    hail = hazards.get('hail_from')\n    if hail is not None:\n        rel = (hail - axis_az) % 360\n        return [float(max_angle if 0 < rel <= 180 else -max_angle), 'hail']\n    if hazards.get('snow'):\n        return [float(max_angle if row % 2 == 0 else -max_angle), 'snow']\n    return [None, 'normal']\ndef check(label, actual, expected):\n    observations.append({\"check\": label, \"actual\": actual, \"expected\": expected, \"passed\": actual == expected})\nfixtures = [[['boundary: wind exactly at stow limit', [{'wind': 20}, 0, 180, 60, 30], [0.0, 'wind']],\n  ['boundary: hail along the axis', [{'hail_from': 180}, 1, 180, 60, None], [-60.0, 'hail']],\n  ['normal: snow on odd row', [{'snow': True}, 3, 180, 60, None], [-60.0, 'snow']],\n  ['regression: hail bearing boundary', [{'wind': 5, 'hail_from': 0, 'snow': True}, 4, 0, 60, None],\n   [-60.0, 'hail']],\n  ['regression: hail bearing boundary (partial repair)', [{'hail_from': 0}, 2, 180, 60, None],\n   [-60.0, 'hail']],\n  ['control 1', [{'wind': 15, 'hail_from': 180}, 5, 180, 50, 0], [0.0, 'manual']],\n  ['control 2', [{'wind': 20, 'hail_from': 90, 'snow': False}, 2, 180, 50, -70], [0.0, 'wind']]],\n [['boundary: wind exactly at stow limit', [{'wind': 20}, 0, 180, 60, 30], [0.0, 'wind']],\n  ['boundary: hail along the axis', [{'hail_from': 180}, 1, 180, 60, None], [-60.0, 'hail']],\n  ['normal: snow on odd row', [{'snow': True}, 3, 180, 60, None], [-60.0, 'snow']],\n  ['regression: hail bearing boundary', [{'hail_from': 0, 'snow': True}, 2, 0, 50, None],\n   [-50.0, 'hail']],\n  ['regression: hail bearing boundary (partial repair)',\n   [{'wind': 19, 'hail_from': 0, 'snow': True}, 2, 180, 60, None], [-60.0, 'hail']],\n  ['control 1', [{}, 3, 0, 60, 65], [60.0, 'manual']],\n  ['control 2', [{'wind': 21, 'hail_from': 225, 'snow': True}, 1, 180, 60, -70], [0.0, 'wind']]],\n [['boundary: wind exactly at stow limit', [{'wind': 20}, 0, 180, 60, 30], [0.0, 'wind']],\n  ['boundary: hail along the axis', [{'hail_from': 180}, 1, 180, 60, None], [-60.0, 'hail']],\n  ['normal: snow on odd row', [{'snow': True}, 3, 180, 60, None], [-60.0, 'snow']],\n  ['regression: hail bearing boundary', [{'hail_from': 0, 'snow': True}, 2, 0, 50, None],\n   [-50.0, 'hail']],\n  ['regression: hail bearing boundary (partial repair)',\n   [{'wind': 19, 'hail_from': 0, 'snow': True}, 2, 180, 60, None], [-60.0, 'hail']],\n  ['control 1', [{}, 3, 180, 50, -20], [-20.0, 'manual']],\n  ['control 2', [{'wind': 21, 'snow': False}, 1, 0, 60, 65], [0.0, 'wind']]],\n [['boundary: wind exactly at stow limit', [{'wind': 20}, 0, 180, 60, 30], [0.0, 'wind']],\n  ['boundary: hail along the axis', [{'hail_from': 180}, 1, 180, 60, None], [-60.0, 'hail']],\n  ['normal: snow on odd row', [{'snow': True}, 3, 180, 60, None], [-60.0, 'snow']],\n  ['regression: hail bearing boundary', [{'hail_from': 0, 'snow': True}, 2, 0, 50, None],\n   [-50.0, 'hail']],\n  ['regression: hail bearing boundary (partial repair)', [{'hail_from': 0}, 1, 180, 50, None],\n   [-50.0, 'hail']],\n  ['control 1', [{'hail_from': None, 'snow': True}, 1, 180, 50, 30], [30.0, 'manual']],\n  ['control 2', [{'wind': 15, 'snow': True}, 3, 0, 50, -20], [-20.0, 'manual']]],\n [['boundary: wind exactly at stow limit', [{'wind': 20}, 0, 180, 60, 30], [0.0, 'wind']],\n  ['boundary: hail along the axis', [{'hail_from': 180}, 1, 180, 60, None], [-60.0, 'hail']],\n  ['normal: snow on odd row', [{'snow': True}, 3, 180, 60, None], [-60.0, 'snow']],\n  ['regression: hail bearing boundary', [{'hail_from': 0, 'snow': True}, 2, 0, 50, None],\n   [-50.0, 'hail']],\n  ['regression: hail bearing boundary (partial repair)', [{'hail_from': 0}, 2, 180, 60, None],\n   [-60.0, 'hail']],\n  ['control 1', [{'wind': 19, 'snow': False}, 1, 180, 60, None], [None, 'normal']],\n  ['control 2', [{'snow': True}, 4, 0, 50, -20], [-20.0, 'manual']]]]\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":"2818dc8f0c3b138635f252e130f4247caf6b9da5bf7fafe549238f37d566ea37","source":"\"\"\"Failure Map reference implementation. Python standard library only.\"\"\"\nimport json\n\nN = 1\nobservations = []\ndef solve(hazards, row, axis_az, max_angle, manual):\n    wind = hazards.get('wind', 0)\n    if wind >= 20:\n        return [0.0, 'wind']\n    if manual is not None:\n        return [float(max(-max_angle, min(max_angle, manual))), 'manual']\n    hail = hazards.get('hail_from')\n    if hail is not None:\n        rel = (hail - axis_az) % 360\n        return [float(max_angle if 0 <= rel < 180 else -max_angle), 'hail']\n    if hazards.get('snow'):\n        return [float(max_angle if row % 2 == 0 else -max_angle), 'snow']\n    return [None, 'normal']\ndef check(label, actual, expected):\n    observations.append({\"check\": label, \"actual\": actual, \"expected\": expected, \"passed\": actual == expected})\nfixtures = [[['boundary: wind exactly at stow limit', [{'wind': 20}, 0, 180, 60, 30], [0.0, 'wind']],\n  ['boundary: hail along the axis', [{'hail_from': 180}, 1, 180, 60, None], [-60.0, 'hail']],\n  ['normal: snow on odd row', [{'snow': True}, 3, 180, 60, None], [-60.0, 'snow']],\n  ['regression: hail bearing boundary', [{'wind': 5, 'hail_from': 0, 'snow': True}, 4, 0, 60, None],\n   [-60.0, 'hail']],\n  ['regression: hail bearing boundary (partial repair)', [{'hail_from': 0}, 2, 180, 60, None],\n   [-60.0, 'hail']],\n  ['control 1', [{'wind': 15, 'hail_from': 180}, 5, 180, 50, 0], [0.0, 'manual']],\n  ['control 2', [{'wind': 20, 'hail_from': 90, 'snow': False}, 2, 180, 50, -70], [0.0, 'wind']]],\n [['boundary: wind exactly at stow limit', [{'wind': 20}, 0, 180, 60, 30], [0.0, 'wind']],\n  ['boundary: hail along the axis', [{'hail_from': 180}, 1, 180, 60, None], [-60.0, 'hail']],\n  ['normal: snow on odd row', [{'snow': True}, 3, 180, 60, None], [-60.0, 'snow']],\n  ['regression: hail bearing boundary', [{'hail_from': 0, 'snow': True}, 2, 0, 50, None],\n   [-50.0, 'hail']],\n  ['regression: hail bearing boundary (partial repair)',\n   [{'wind': 19, 'hail_from': 0, 'snow': True}, 2, 180, 60, None], [-60.0, 'hail']],\n  ['control 1', [{}, 3, 0, 60, 65], [60.0, 'manual']],\n  ['control 2', [{'wind': 21, 'hail_from': 225, 'snow': True}, 1, 180, 60, -70], [0.0, 'wind']]],\n [['boundary: wind exactly at stow limit', [{'wind': 20}, 0, 180, 60, 30], [0.0, 'wind']],\n  ['boundary: hail along the axis', [{'hail_from': 180}, 1, 180, 60, None], [-60.0, 'hail']],\n  ['normal: snow on odd row', [{'snow': True}, 3, 180, 60, None], [-60.0, 'snow']],\n  ['regression: hail bearing boundary', [{'hail_from': 0, 'snow': True}, 2, 0, 50, None],\n   [-50.0, 'hail']],\n  ['regression: hail bearing boundary (partial repair)',\n   [{'wind': 19, 'hail_from': 0, 'snow': True}, 2, 180, 60, None], [-60.0, 'hail']],\n  ['control 1', [{}, 3, 180, 50, -20], [-20.0, 'manual']],\n  ['control 2', [{'wind': 21, 'snow': False}, 1, 0, 60, 65], [0.0, 'wind']]],\n [['boundary: wind exactly at stow limit', [{'wind': 20}, 0, 180, 60, 30], [0.0, 'wind']],\n  ['boundary: hail along the axis', [{'hail_from': 180}, 1, 180, 60, None], [-60.0, 'hail']],\n  ['normal: snow on odd row', [{'snow': True}, 3, 180, 60, None], [-60.0, 'snow']],\n  ['regression: hail bearing boundary', [{'hail_from': 0, 'snow': True}, 2, 0, 50, None],\n   [-50.0, 'hail']],\n  ['regression: hail bearing boundary (partial repair)', [{'hail_from': 0}, 1, 180, 50, None],\n   [-50.0, 'hail']],\n  ['control 1', [{'hail_from': None, 'snow': True}, 1, 180, 50, 30], [30.0, 'manual']],\n  ['control 2', [{'wind': 15, 'snow': True}, 3, 0, 50, -20], [-20.0, 'manual']]],\n [['boundary: wind exactly at stow limit', [{'wind': 20}, 0, 180, 60, 30], [0.0, 'wind']],\n  ['boundary: hail along the axis', [{'hail_from': 180}, 1, 180, 60, None], [-60.0, 'hail']],\n  ['normal: snow on odd row', [{'snow': True}, 3, 180, 60, None], [-60.0, 'snow']],\n  ['regression: hail bearing boundary', [{'hail_from': 0, 'snow': True}, 2, 0, 50, None],\n   [-50.0, 'hail']],\n  ['regression: hail bearing boundary (partial repair)', [{'hail_from': 0}, 2, 180, 60, None],\n   [-60.0, 'hail']],\n  ['control 1', [{'wind': 19, 'snow': False}, 1, 180, 60, None], [None, 'normal']],\n  ['control 2', [{'snow': True}, 4, 0, 50, -20], [-20.0, 'manual']]]]\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":"5cbd8b77c249b2ad277172a3ee107f4cc4f254309d56c4e71b9215c71dd58d39","source":"\"\"\"Failure Map reference implementation. Python standard library only.\"\"\"\nimport json\n\nN = 1\nobservations = []\ndef solve(hazards, row, axis_az, max_angle, manual):\n    wind = hazards.get('wind', 0)\n    if wind >= 20:\n        return [0.0, 'wind']\n    if manual is not None:\n        return [float(max(-max_angle, min(max_angle, manual))), 'manual']\n    hail = hazards.get('hail_from')\n    if hail is not None:\n        rel = (hail - axis_az) % 360\n        return [float(max_angle if 0 < rel < 180 else -max_angle), 'hail']\n    if hazards.get('snow'):\n        return [float(max_angle if row % 2 == 0 else -max_angle), 'snow']\n    return [None, 'normal']\ndef check(label, actual, expected):\n    observations.append({\"check\": label, \"actual\": actual, \"expected\": expected, \"passed\": actual == expected})\nfixtures = [[['boundary: wind exactly at stow limit', [{'wind': 20}, 0, 180, 60, 30], [0.0, 'wind']],\n  ['boundary: hail along the axis', [{'hail_from': 180}, 1, 180, 60, None], [-60.0, 'hail']],\n  ['normal: snow on odd row', [{'snow': True}, 3, 180, 60, None], [-60.0, 'snow']],\n  ['regression: hail bearing boundary', [{'wind': 5, 'hail_from': 0, 'snow': True}, 4, 0, 60, None],\n   [-60.0, 'hail']],\n  ['regression: hail bearing boundary (partial repair)', [{'hail_from': 0}, 2, 180, 60, None],\n   [-60.0, 'hail']],\n  ['control 1', [{'wind': 15, 'hail_from': 180}, 5, 180, 50, 0], [0.0, 'manual']],\n  ['control 2', [{'wind': 20, 'hail_from': 90, 'snow': False}, 2, 180, 50, -70], [0.0, 'wind']]],\n [['boundary: wind exactly at stow limit', [{'wind': 20}, 0, 180, 60, 30], [0.0, 'wind']],\n  ['boundary: hail along the axis', [{'hail_from': 180}, 1, 180, 60, None], [-60.0, 'hail']],\n  ['normal: snow on odd row', [{'snow': True}, 3, 180, 60, None], [-60.0, 'snow']],\n  ['regression: hail bearing boundary', [{'hail_from': 0, 'snow': True}, 2, 0, 50, None],\n   [-50.0, 'hail']],\n  ['regression: hail bearing boundary (partial repair)',\n   [{'wind': 19, 'hail_from': 0, 'snow': True}, 2, 180, 60, None], [-60.0, 'hail']],\n  ['control 1', [{}, 3, 0, 60, 65], [60.0, 'manual']],\n  ['control 2', [{'wind': 21, 'hail_from': 225, 'snow': True}, 1, 180, 60, -70], [0.0, 'wind']]],\n [['boundary: wind exactly at stow limit', [{'wind': 20}, 0, 180, 60, 30], [0.0, 'wind']],\n  ['boundary: hail along the axis', [{'hail_from': 180}, 1, 180, 60, None], [-60.0, 'hail']],\n  ['normal: snow on odd row', [{'snow': True}, 3, 180, 60, None], [-60.0, 'snow']],\n  ['regression: hail bearing boundary', [{'hail_from': 0, 'snow': True}, 2, 0, 50, None],\n   [-50.0, 'hail']],\n  ['regression: hail bearing boundary (partial repair)',\n   [{'wind': 19, 'hail_from': 0, 'snow': True}, 2, 180, 60, None], [-60.0, 'hail']],\n  ['control 1', [{}, 3, 180, 50, -20], [-20.0, 'manual']],\n  ['control 2', [{'wind': 21, 'snow': False}, 1, 0, 60, 65], [0.0, 'wind']]],\n [['boundary: wind exactly at stow limit', [{'wind': 20}, 0, 180, 60, 30], [0.0, 'wind']],\n  ['boundary: hail along the axis', [{'hail_from': 180}, 1, 180, 60, None], [-60.0, 'hail']],\n  ['normal: snow on odd row', [{'snow': True}, 3, 180, 60, None], [-60.0, 'snow']],\n  ['regression: hail bearing boundary', [{'hail_from': 0, 'snow': True}, 2, 0, 50, None],\n   [-50.0, 'hail']],\n  ['regression: hail bearing boundary (partial repair)', [{'hail_from': 0}, 1, 180, 50, None],\n   [-50.0, 'hail']],\n  ['control 1', [{'hail_from': None, 'snow': True}, 1, 180, 50, 30], [30.0, 'manual']],\n  ['control 2', [{'wind': 15, 'snow': True}, 3, 0, 50, -20], [-20.0, 'manual']]],\n [['boundary: wind exactly at stow limit', [{'wind': 20}, 0, 180, 60, 30], [0.0, 'wind']],\n  ['boundary: hail along the axis', [{'hail_from': 180}, 1, 180, 60, None], [-60.0, 'hail']],\n  ['normal: snow on odd row', [{'snow': True}, 3, 180, 60, None], [-60.0, 'snow']],\n  ['regression: hail bearing boundary', [{'hail_from': 0, 'snow': True}, 2, 0, 50, None],\n   [-50.0, 'hail']],\n  ['regression: hail bearing boundary (partial repair)', [{'hail_from': 0}, 2, 180, 60, None],\n   [-60.0, 'hail']],\n  ['control 1', [{'wind': 19, 'snow': False}, 1, 180, 60, None], [None, 'normal']],\n  ['control 2', [{'snow': True}, 4, 0, 50, -20], [-20.0, 'manual']]]]\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-hazard-stow-selection-hail-bearing-boundary","generated_at":"2026-09-29T14:51:58.327051+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":"Only bearings strictly between 0 and 180 are positive.","root_cause":"A bearing of exactly 0 counts as the positive side.","sha256":"9b202db2b3ecd45016cb081525fcba88ee7205cda836cd5f95edb53641bcd9b9","title":"Hazard stow angle selection: hail bearing boundary · case 01","variant":1,"variant_policy":"Five numbered records share a model and may reuse boundary fixtures.","verification":{"attempt":{"elapsed_ms":43.926,"exit_code":1,"observations":[{"actual":[0.0,"wind"],"check":"boundary: wind exactly at stow limit","expected":[0.0,"wind"],"passed":true},{"actual":[-60.0,"hail"],"check":"boundary: hail along the axis","expected":[-60.0,"hail"],"passed":true},{"actual":[-60.0,"snow"],"check":"normal: snow on odd row","expected":[-60.0,"snow"],"passed":true},{"actual":[-60.0,"hail"],"check":"regression: hail bearing boundary","expected":[-60.0,"hail"],"passed":true},{"actual":[60.0,"hail"],"check":"regression: hail bearing boundary (partial repair)","expected":[-60.0,"hail"],"passed":false},{"actual":[0.0,"manual"],"check":"control 1","expected":[0.0,"manual"],"passed":true},{"actual":[0.0,"wind"],"check":"control 2","expected":[0.0,"wind"],"passed":true}],"passed":false,"stderr":"","stdout":"{\"observations\": [{\"check\": \"boundary: wind exactly at stow limit\", \"actual\": [0.0, \"wind\"], \"expected\": [0.0, \"wind\"], \"passed\": true}, {\"check\": \"boundary: hail along the axis\", \"actual\": [-60.0, \"hail\"], \"expected\": [-60.0, \"hail\"], \"passed\": true}, {\"check\": \"normal: snow on odd row\", \"actual\": [-60.0, \"snow\"], \"expected\": [-60.0, \"snow\"], \"passed\": true}, {\"check\": \"regression: hail bearing boundary\", \"actual\": [-60.0, \"hail\"], \"expected\": [-60.0, \"hail\"], \"passed\": true}, {\"check\": \"regression: hail bearing boundary (partial repair)\", \"actual\": [60.0, \"hail\"], \"expected\": [-60.0, \"hail\"], \"passed\": false}, {\"check\": \"control 1\", \"actual\": [0.0, \"manual\"], \"expected\": [0.0, \"manual\"], \"passed\": true}, {\"check\": \"control 2\", \"actual\": [0.0, \"wind\"], \"expected\": [0.0, \"wind\"], \"passed\": true}], \"passed\": false}\n"},"broken":{"elapsed_ms":41.075,"exit_code":1,"observations":[{"actual":[0.0,"wind"],"check":"boundary: wind exactly at stow limit","expected":[0.0,"wind"],"passed":true},{"actual":[60.0,"hail"],"check":"boundary: hail along the axis","expected":[-60.0,"hail"],"passed":false},{"actual":[-60.0,"snow"],"check":"normal: snow on odd row","expected":[-60.0,"snow"],"passed":true},{"actual":[60.0,"hail"],"check":"regression: hail bearing boundary","expected":[-60.0,"hail"],"passed":false},{"actual":[-60.0,"hail"],"check":"regression: hail bearing boundary (partial repair)","expected":[-60.0,"hail"],"passed":true},{"actual":[0.0,"manual"],"check":"control 1","expected":[0.0,"manual"],"passed":true},{"actual":[0.0,"wind"],"check":"control 2","expected":[0.0,"wind"],"passed":true}],"passed":false,"stderr":"","stdout":"{\"observations\": [{\"check\": \"boundary: wind exactly at stow limit\", \"actual\": [0.0, \"wind\"], \"expected\": [0.0, \"wind\"], \"passed\": true}, {\"check\": \"boundary: hail along the axis\", \"actual\": [60.0, \"hail\"], \"expected\": [-60.0, \"hail\"], \"passed\": false}, {\"check\": \"normal: snow on odd row\", \"actual\": [-60.0, \"snow\"], \"expected\": [-60.0, \"snow\"], \"passed\": true}, {\"check\": \"regression: hail bearing boundary\", \"actual\": [60.0, \"hail\"], \"expected\": [-60.0, \"hail\"], \"passed\": false}, {\"check\": \"regression: hail bearing boundary (partial repair)\", \"actual\": [-60.0, \"hail\"], \"expected\": [-60.0, \"hail\"], \"passed\": true}, {\"check\": \"control 1\", \"actual\": [0.0, \"manual\"], \"expected\": [0.0, \"manual\"], \"passed\": true}, {\"check\": \"control 2\", \"actual\": [0.0, \"wind\"], \"expected\": [0.0, \"wind\"], \"passed\": true}], \"passed\": false}\n"},"fixed":{"elapsed_ms":41.28,"exit_code":0,"observations":[{"actual":[0.0,"wind"],"check":"boundary: wind exactly at stow limit","expected":[0.0,"wind"],"passed":true},{"actual":[-60.0,"hail"],"check":"boundary: hail along the axis","expected":[-60.0,"hail"],"passed":true},{"actual":[-60.0,"snow"],"check":"normal: snow on odd row","expected":[-60.0,"snow"],"passed":true},{"actual":[-60.0,"hail"],"check":"regression: hail bearing boundary","expected":[-60.0,"hail"],"passed":true},{"actual":[-60.0,"hail"],"check":"regression: hail bearing boundary (partial repair)","expected":[-60.0,"hail"],"passed":true},{"actual":[0.0,"manual"],"check":"control 1","expected":[0.0,"manual"],"passed":true},{"actual":[0.0,"wind"],"check":"control 2","expected":[0.0,"wind"],"passed":true}],"passed":true,"stderr":"","stdout":"{\"observations\": [{\"check\": \"boundary: wind exactly at stow limit\", \"actual\": [0.0, \"wind\"], \"expected\": [0.0, \"wind\"], \"passed\": true}, {\"check\": \"boundary: hail along the axis\", \"actual\": [-60.0, \"hail\"], \"expected\": [-60.0, \"hail\"], \"passed\": true}, {\"check\": \"normal: snow on odd row\", \"actual\": [-60.0, \"snow\"], \"expected\": [-60.0, \"snow\"], \"passed\": true}, {\"check\": \"regression: hail bearing boundary\", \"actual\": [-60.0, \"hail\"], \"expected\": [-60.0, \"hail\"], \"passed\": true}, {\"check\": \"regression: hail bearing boundary (partial repair)\", \"actual\": [-60.0, \"hail\"], \"expected\": [-60.0, \"hail\"], \"passed\": true}, {\"check\": \"control 1\", \"actual\": [0.0, \"manual\"], \"expected\": [0.0, \"manual\"], \"passed\": true}, {\"check\": \"control 2\", \"actual\": [0.0, \"wind\"], \"expected\": [0.0, \"wind\"], \"passed\": true}], \"passed\": true}\n"}},"verified":true,"visibility":"public"}