{"abstract":"Reported ground coverage ratios exceed 1.","category":"Solar tracker geometry","checks":7,"contract":"Rows of slant length length (mm) tilted by tilt degrees face row_az. The shadow reaches forward height*max(cos(sun_az - row_az), 0)/tan(sun_el). Minimum unshaded pitch = length*cos(tilt) + shadow. Return [pitch rounded 3, length/pitch rounded 4]; None when sun_el <= 0.","contract_signature":"length, tilt, sun_el, sun_az, row_az","evaluation_group":"w2-solar_tracker_geometry-fixed-tilt-row-pitch","failed_approach":"Using the horizontal depth understates the coverage ratio for tilted rows.","family":"w2-solar_tracker_geometry-fixed-tilt-row-pitch-ground-coverage-ratio","id":"FA-93581","implementations":{"attempt":{"sha256":"97a65e6321079d3df769d1671056419b380e2f00a7d83075b09052a4d79d9cd9","source":"\"\"\"Failure Map reference implementation. Python standard library only.\"\"\"\nimport json\nimport math\nN = 1\nobservations = []\ndef solve(length, tilt, sun_el, sun_az, row_az):\n    if sun_el <= 0:\n        return None\n    t = math.radians(tilt)\n    rel = math.cos(math.radians(sun_az - row_az))\n    depth = length * math.cos(t)\n    height = length * math.sin(t)\n    shadow = height * max(rel, 0.0) / math.tan(math.radians(sun_el))\n    pitch = depth + shadow\n    return [round(pitch, 3), round(depth / pitch, 4)]\ndef check(label, actual, expected):\n    observations.append({\"check\": label, \"actual\": actual, \"expected\": expected, \"passed\": actual == expected})\nfixtures = [[['normal: winter noon design sun', [2000, 30, 15, 180, 180], [5464.102, 0.366]],\n  ['boundary: flat rows', [2000, 0, 15, 180, 180], [2000.0, 1.0]],\n  ['boundary: sun behind the rows', [2000, 30, 15, 0, 180], [1732.051, 1.1547]],\n  ['regression: ground coverage ratio', [1700, 10, 15, 340, 200], [1674.173, 1.0154]],\n  ['regression: ground coverage ratio (partial repair)', [2300, 30, 30, 0, 180],\n   [1991.858, 1.1547]],\n  ['control 1', [1700, 30, 30, 90, 200], [1472.243, 1.1547]],\n  ['control 2', [1700, 30, 0, 90, 180], None]],\n [['normal: winter noon design sun', [2000, 30, 15, 180, 180], [5464.102, 0.366]],\n  ['boundary: flat rows', [2000, 0, 15, 180, 180], [2000.0, 1.0]],\n  ['boundary: sun behind the rows', [2000, 30, 15, 0, 180], [1732.051, 1.1547]],\n  ['regression: ground coverage ratio', [1700, 20, 10, 300, 180], [1597.477, 1.0642]],\n  ['regression: ground coverage ratio (partial repair)', [1700, 25, 10, 60, 180],\n   [1540.723, 1.1034]],\n  ['control 1', [1700, 30, 0, 225, 170], None],\n  ['control 2', [2000, 30, 30, 135, 180], [2956.796, 0.6764]]],\n [['normal: winter noon design sun', [2000, 30, 15, 180, 180], [5464.102, 0.366]],\n  ['boundary: flat rows', [2000, 0, 15, 180, 180], [2000.0, 1.0]],\n  ['boundary: sun behind the rows', [2000, 30, 15, 0, 180], [1732.051, 1.1547]],\n  ['regression: ground coverage ratio', [2300, 35, 20, 200, 200], [5508.593, 0.4175]],\n  ['regression: ground coverage ratio (partial repair)', [1000, 30, 20, 60, 0], [1552.895, 0.644]],\n  ['control 1', [2000, 0, -2, 315, 0], None], ['control 2', [2000, 30, 0, 30, 0], None]],\n [['normal: winter noon design sun', [2000, 30, 15, 180, 180], [5464.102, 0.366]],\n  ['boundary: flat rows', [2000, 0, 15, 180, 180], [2000.0, 1.0]],\n  ['boundary: sun behind the rows', [2000, 30, 15, 0, 180], [1732.051, 1.1547]],\n  ['regression: ground coverage ratio', [2000, 10, 15, 200, 180], [3187.577, 0.6274]],\n  ['regression: ground coverage ratio (partial repair)', [1000, 25, 10, 135, 200],\n   [1919.234, 0.521]],\n  ['control 1', [2300, 35, 30, 60, 0], [3026.533, 0.7599]],\n  ['control 2', [1000, 30, 20, 250, 180], [1335.872, 0.7486]]],\n [['normal: winter noon design sun', [2000, 30, 15, 180, 180], [5464.102, 0.366]],\n  ['boundary: flat rows', [2000, 0, 15, 180, 180], [2000.0, 1.0]],\n  ['boundary: sun behind the rows', [2000, 30, 15, 0, 180], [1732.051, 1.1547]],\n  ['regression: ground coverage ratio', [2300, 30, 30, 60, 200], [1991.858, 1.1547]],\n  ['regression: ground coverage ratio (partial repair)', [1700, 10, 20, 100, 180],\n   [1815.012, 0.9366]],\n  ['control 1', [2000, 35, -2, 225, 170], None],\n  ['control 2', [1700, 20, 20, 90, 170], [1874.877, 0.9067]]]]\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":"af7d9e4e2dd98fb07870517d36bb1fdda523c5e1dda52300ca0781f8b161f5d3","source":"\"\"\"Failure Map reference implementation. Python standard library only.\"\"\"\nimport json\nimport math\nN = 1\nobservations = []\ndef solve(length, tilt, sun_el, sun_az, row_az):\n    if sun_el <= 0:\n        return None\n    t = math.radians(tilt)\n    rel = math.cos(math.radians(sun_az - row_az))\n    depth = length * math.cos(t)\n    height = length * math.sin(t)\n    shadow = height * max(rel, 0.0) / math.tan(math.radians(sun_el))\n    pitch = depth + shadow\n    return [round(pitch, 3), round(pitch / length, 4)]\ndef check(label, actual, expected):\n    observations.append({\"check\": label, \"actual\": actual, \"expected\": expected, \"passed\": actual == expected})\nfixtures = [[['normal: winter noon design sun', [2000, 30, 15, 180, 180], [5464.102, 0.366]],\n  ['boundary: flat rows', [2000, 0, 15, 180, 180], [2000.0, 1.0]],\n  ['boundary: sun behind the rows', [2000, 30, 15, 0, 180], [1732.051, 1.1547]],\n  ['regression: ground coverage ratio', [1700, 10, 15, 340, 200], [1674.173, 1.0154]],\n  ['regression: ground coverage ratio (partial repair)', [2300, 30, 30, 0, 180],\n   [1991.858, 1.1547]],\n  ['control 1', [1700, 30, 30, 90, 200], [1472.243, 1.1547]],\n  ['control 2', [1700, 30, 0, 90, 180], None]],\n [['normal: winter noon design sun', [2000, 30, 15, 180, 180], [5464.102, 0.366]],\n  ['boundary: flat rows', [2000, 0, 15, 180, 180], [2000.0, 1.0]],\n  ['boundary: sun behind the rows', [2000, 30, 15, 0, 180], [1732.051, 1.1547]],\n  ['regression: ground coverage ratio', [1700, 20, 10, 300, 180], [1597.477, 1.0642]],\n  ['regression: ground coverage ratio (partial repair)', [1700, 25, 10, 60, 180],\n   [1540.723, 1.1034]],\n  ['control 1', [1700, 30, 0, 225, 170], None],\n  ['control 2', [2000, 30, 30, 135, 180], [2956.796, 0.6764]]],\n [['normal: winter noon design sun', [2000, 30, 15, 180, 180], [5464.102, 0.366]],\n  ['boundary: flat rows', [2000, 0, 15, 180, 180], [2000.0, 1.0]],\n  ['boundary: sun behind the rows', [2000, 30, 15, 0, 180], [1732.051, 1.1547]],\n  ['regression: ground coverage ratio', [2300, 35, 20, 200, 200], [5508.593, 0.4175]],\n  ['regression: ground coverage ratio (partial repair)', [1000, 30, 20, 60, 0], [1552.895, 0.644]],\n  ['control 1', [2000, 0, -2, 315, 0], None], ['control 2', [2000, 30, 0, 30, 0], None]],\n [['normal: winter noon design sun', [2000, 30, 15, 180, 180], [5464.102, 0.366]],\n  ['boundary: flat rows', [2000, 0, 15, 180, 180], [2000.0, 1.0]],\n  ['boundary: sun behind the rows', [2000, 30, 15, 0, 180], [1732.051, 1.1547]],\n  ['regression: ground coverage ratio', [2000, 10, 15, 200, 180], [3187.577, 0.6274]],\n  ['regression: ground coverage ratio (partial repair)', [1000, 25, 10, 135, 200],\n   [1919.234, 0.521]],\n  ['control 1', [2300, 35, 30, 60, 0], [3026.533, 0.7599]],\n  ['control 2', [1000, 30, 20, 250, 180], [1335.872, 0.7486]]],\n [['normal: winter noon design sun', [2000, 30, 15, 180, 180], [5464.102, 0.366]],\n  ['boundary: flat rows', [2000, 0, 15, 180, 180], [2000.0, 1.0]],\n  ['boundary: sun behind the rows', [2000, 30, 15, 0, 180], [1732.051, 1.1547]],\n  ['regression: ground coverage ratio', [2300, 30, 30, 60, 200], [1991.858, 1.1547]],\n  ['regression: ground coverage ratio (partial repair)', [1700, 10, 20, 100, 180],\n   [1815.012, 0.9366]],\n  ['control 1', [2000, 35, -2, 225, 170], None],\n  ['control 2', [1700, 20, 20, 90, 170], [1874.877, 0.9067]]]]\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-fixed-tilt-row-pitch-ground-coverage-ratio","generated_at":"2026-09-29T14:51:56.403502+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.","root_cause":"The ratio is inverted.","sha256":"17102b1ac3f25da4995fd860840c47641ff826b87e78398157a8d7e8c753949c","title":"Fixed-tilt row pitch for a design sun: ground coverage ratio · case 01","variant":1,"variant_policy":"Five numbered records share a model and may reuse boundary fixtures.","verified":true,"visibility":"public","verification":{"attempt":{"elapsed_ms":38.653,"exit_code":1,"observations":[{"actual":[5464.102,0.317],"check":"normal: winter noon design sun","expected":[5464.102,0.366],"passed":false},{"actual":[2000.0,1.0],"check":"boundary: flat rows","expected":[2000.0,1.0],"passed":true},{"actual":[1732.051,1.0],"check":"boundary: sun behind the rows","expected":[1732.051,1.1547],"passed":false},{"actual":[1674.173,1.0],"check":"regression: ground coverage ratio","expected":[1674.173,1.0154],"passed":false},{"actual":[1991.858,1.0],"check":"regression: ground coverage ratio (partial repair)","expected":[1991.858,1.1547],"passed":false},{"actual":[1472.243,1.0],"check":"control 1","expected":[1472.243,1.1547],"passed":false},{"actual":null,"check":"control 2","expected":null,"passed":true}],"passed":false,"stderr":"","stdout":"{\"observations\": [{\"check\": \"normal: winter noon design sun\", \"actual\": [5464.102, 0.317], \"expected\": [5464.102, 0.366], \"passed\": false}, {\"check\": \"boundary: flat rows\", \"actual\": [2000.0, 1.0], \"expected\": [2000.0, 1.0], \"passed\": true}, {\"check\": \"boundary: sun behind the rows\", \"actual\": [1732.051, 1.0], \"expected\": [1732.051, 1.1547], \"passed\": false}, {\"check\": \"regression: ground coverage ratio\", \"actual\": [1674.173, 1.0], \"expected\": [1674.173, 1.0154], \"passed\": false}, {\"check\": \"regression: ground coverage ratio (partial repair)\", \"actual\": [1991.858, 1.0], \"expected\": [1991.858, 1.1547], \"passed\": false}, {\"check\": \"control 1\", \"actual\": [1472.243, 1.0], \"expected\": [1472.243, 1.1547], \"passed\": false}, {\"check\": \"control 2\", \"actual\": null, \"expected\": null, \"passed\": true}], \"passed\": false}\n"},"broken":{"elapsed_ms":38.57,"exit_code":1,"observations":[{"actual":[5464.102,2.7321],"check":"normal: winter noon design sun","expected":[5464.102,0.366],"passed":false},{"actual":[2000.0,1.0],"check":"boundary: flat rows","expected":[2000.0,1.0],"passed":true},{"actual":[1732.051,0.866],"check":"boundary: sun behind the rows","expected":[1732.051,1.1547],"passed":false},{"actual":[1674.173,0.9848],"check":"regression: ground coverage ratio","expected":[1674.173,1.0154],"passed":false},{"actual":[1991.858,0.866],"check":"regression: ground coverage ratio (partial repair)","expected":[1991.858,1.1547],"passed":false},{"actual":[1472.243,0.866],"check":"control 1","expected":[1472.243,1.1547],"passed":false},{"actual":null,"check":"control 2","expected":null,"passed":true}],"passed":false,"stderr":"","stdout":"{\"observations\": [{\"check\": \"normal: winter noon design sun\", \"actual\": [5464.102, 2.7321], \"expected\": [5464.102, 0.366], \"passed\": false}, {\"check\": \"boundary: flat rows\", \"actual\": [2000.0, 1.0], \"expected\": [2000.0, 1.0], \"passed\": true}, {\"check\": \"boundary: sun behind the rows\", \"actual\": [1732.051, 0.866], \"expected\": [1732.051, 1.1547], \"passed\": false}, {\"check\": \"regression: ground coverage ratio\", \"actual\": [1674.173, 0.9848], \"expected\": [1674.173, 1.0154], \"passed\": false}, {\"check\": \"regression: ground coverage ratio (partial repair)\", \"actual\": [1991.858, 0.866], \"expected\": [1991.858, 1.1547], \"passed\": false}, {\"check\": \"control 1\", \"actual\": [1472.243, 0.866], \"expected\": [1472.243, 1.1547], \"passed\": false}, {\"check\": \"control 2\", \"actual\": null, \"expected\": null, \"passed\": true}], \"passed\": false}\n"}},"member_only":{"stages":["fixed"],"fields":["implementations.fixed","verification.fixed","harness","repair"],"note":"The verified repair, its recorded checks, the repair description, and the scoring harness are available to members."}}