{"abstract":"Snow at exactly -5 degC is reported with the wet 10:1 ratio instead of 15:1.","category":"Weather index computation","checks":8,"contract":"hours are [liquid_mm, temp_c]. Snow-to-liquid ratio: T>1 rain (0), 0<T<=1: 5, -5<T<=0: 10, -12<T<=-5: 15, T<=-12: 20. New snow cm = liquid*ratio/10. Each hour the existing depth settles by 2% before the new snow is added; rain (ratio 0, liquid > 0) melts 0.5 cm per mm, floored at 0. Return [total new snowfall rounded 0.1, final depth rounded 0.1].","contract_signature":"hours","evaluation_group":"w2-weather_index_computation-snow-accumulation","failed_approach":"Moving 0 degC into the 5:1 band halves snowfall exactly at freezing.","family":"w2-weather_index_computation-snow-accumulation-freezing-ratio-band","id":"FA-71326","implementations":{"attempt":{"sha256":"a492c56d4d2857e26911924bca0661c42d4d6da42e05ec036f91219aff978e20","source":"\"\"\"Failure Map reference implementation. Python standard library only.\"\"\"\nimport json\n\nN = 1\nobservations = []\ndef solve(hours):\n    total = 0.0\n    depth = 0.0\n    for liq, t in hours:\n        if t > 1:\n            slr = 0\n        elif t >= 0:\n            slr = 5\n        elif t > -5:\n            slr = 10\n        elif t > -12:\n            slr = 15\n        else:\n            slr = 20\n        new = liq * slr / 10.0\n        depth = depth * 0.98 + new\n        total += new\n        if slr == 0 and liq > 0:\n            depth = max(depth - 0.5 * liq, 0.0)\n    return [round(total, 1), round(depth, 1)]\ndef check(label, actual, expected):\n    observations.append({\"check\": label, \"actual\": actual, \"expected\": expected, \"passed\": actual == expected})\nfixtures = [[['storm 0', [[[1.0, -15.0], [1.0, 1.0], [0.0, 0.0], [1.0, 3.0], [2.0, -8.0], [0.5, 0.0]]], [6.0, 5.2]], ['storm 1', [[[0.5, 0.5], [1.0, 0.5], [2.0, -8.0], [0.0, -5.0], [0.0, 1.0], [1.0, -5.0]]], [5.2, 5.0]], ['storm 2', [[[1.0, -8.0], [2.0, 0.0], [0.0, -5.0], [1.0, -0.5], [1.0, 3.0], [4.0, 0.5]]], [6.5, 5.7]], ['storm 3', [[[0.5, -3.0], [0.5, -0.5], [1.0, -8.0], [4.0, -5.0], [4.0, -0.5], [0.5, -8.0]]], [13.2, 12.8]], ['storm 4', [[[2.0, -5.0], [4.0, -0.5], [0.5, -5.0], [0.0, -5.0], [1.0, 1.0], [2.0, -0.5]]], [10.2, 9.6]], ['storm 5', [[[2.0, -5.0], [2.0, -3.0], [0.0, -8.0], [4.0, -8.0], [4.0, 0.5], [0.0, -15.0]]], [13.0, 12.3]], ['storm 6', [[[1.0, -8.0], [1.0, -0.5], [0.0, -12.0], [0.0, 0.5], [1.0, 0.0], [0.0, 0.0]]], [3.5, 3.3]], ['storm 7', [[[0.0, 3.0], [1.0, 0.0], [0.0, -15.0], [4.0, -5.0], [0.5, -15.0], [0.5, 1.0]]], [8.2, 7.9]]], [['storm 5', [[[2.0, -5.0], [2.0, -3.0], [0.0, -8.0], [4.0, -8.0], [4.0, 0.5], [0.0, -15.0]]], [13.0, 12.3]], ['storm 7', [[[0.0, 3.0], [1.0, 0.0], [0.0, -15.0], [4.0, -5.0], [0.5, -15.0], [0.5, 1.0]]], [8.2, 7.9]], ['storm 8', [[[0.0, 1.0], [2.0, -8.0], [2.0, -0.5], [2.0, -8.0], [4.0, 0.5], [2.0, -3.0]]], [12.0, 11.5]], ['storm 9', [[[4.0, 3.0], [1.0, -3.0], [2.0, -3.0], [0.5, -12.0], [0.0, -3.0], [2.0, -3.0]]], [6.0, 5.8]], ['storm 10', [[[0.0, -12.0], [2.0, -15.0], [0.0, 3.0], [2.0, 1.0], [0.0, 0.5], [1.0, -15.0]]], [7.0, 6.6]], ['storm 11', [[[1.0, -8.0], [2.0, -15.0], [1.0, -3.0], [0.0, 1.0], [4.0, -3.0], [0.0, 3.0]]], [10.5, 9.9]], ['storm 12', [[[1.0, -0.5], [4.0, -5.0], [0.5, -12.0], [4.0, 0.5], [1.0, -5.0], [1.0, 3.0]]], [11.5, 10.3]], ['storm 23', [[[2.0, -12.0], [4.0, -8.0], [0.5, -3.0], [4.0, 0.0], [1.0, -8.0], [0.5, 3.0]]], [16.0, 14.7]]], [['storm 6', [[[1.0, -8.0], [1.0, -0.5], [0.0, -12.0], [0.0, 0.5], [1.0, 0.0], [0.0, 0.0]]], [3.5, 3.3]], ['storm 13', [[[4.0, -8.0], [4.0, 0.5], [1.0, -15.0], [4.0, -5.0], [0.5, -12.0], [0.5, -12.0]]], [18.0, 16.9]], ['storm 14', [[[1.0, 1.0], [0.0, -5.0], [2.0, -5.0], [4.0, -8.0], [1.0, -15.0], [4.0, 3.0]]], [11.5, 9.0]], ['storm 15', [[[2.0, -12.0], [2.0, 1.0], [1.0, 3.0], [4.0, -5.0], [2.0, -15.0], [4.0, -3.0]]], [19.0, 17.7]], ['storm 16', [[[4.0, 1.0], [0.0, 0.0], [0.0, -5.0], [4.0, 1.0], [0.0, 0.0], [0.0, 0.0]]], [4.0, 3.7]], ['storm 17', [[[0.0, -12.0], [0.5, 0.0], [2.0, -12.0], [2.0, 0.5], [1.0, 0.5], [2.0, -12.0]]], [10.0, 9.7]], ['storm 18', [[[4.0, 0.5], [0.0, -12.0], [0.0, -3.0], [0.0, -12.0], [0.0, 0.0], [0.5, -5.0]]], [2.8, 2.6]], ['storm 19', [[[4.0, -5.0], [0.5, -3.0], [4.0, 1.0], [0.5, -15.0], [0.0, -15.0], [0.5, 3.0]]], [9.5, 8.5]]], [['storm 18', [[[4.0, 0.5], [0.0, -12.0], [0.0, -3.0], [0.0, -12.0], [0.0, 0.0], [0.5, -5.0]]], [2.8, 2.6]], ['storm 21', [[[0.0, -5.0], [1.0, -15.0], [4.0, 1.0], [4.0, -3.0], [4.0, -12.0], [2.0, -12.0]]], [20.0, 19.4]], ['storm 22', [[[4.0, -8.0], [2.0, -15.0], [0.0, -3.0], [4.0, -8.0], [4.0, -0.5], [4.0, 0.0]]], [24.0, 22.8]], ['storm 23', [[[2.0, -12.0], [4.0, -8.0], [0.5, -3.0], [4.0, 0.0], [1.0, -8.0], [0.5, 3.0]]], [16.0, 14.7]], ['storm 24', [[[0.0, 0.5], [2.0, 3.0], [2.0, -5.0], [4.0, -3.0], [0.0, -0.5], [1.0, 3.0]]], [7.0, 6.2]], ['storm 25', [[[2.0, -3.0], [4.0, -8.0], [1.0, 3.0], [0.0, 0.5], [0.5, -3.0], [0.0, -5.0]]], [8.5, 7.4]], ['storm 26', [[[2.0, 0.0], [1.0, -0.5], [2.0, -12.0], [2.0, -8.0], [4.0, -12.0], [1.0, -12.0]]], [20.0, 19.2]], ['storm 27', [[[4.0, 3.0], [0.5, 0.5], [1.0, -12.0], [1.0, -0.5], [4.0, -8.0], [1.0, -5.0]]], [10.8, 10.5]]], [['storm 0', [[[1.0, -15.0], [1.0, 1.0], [0.0, 0.0], [1.0, 3.0], [2.0, -8.0], [0.5, 0.0]]], [6.0, 5.2]], ['storm 7', [[[0.0, 3.0], [1.0, 0.0], [0.0, -15.0], [4.0, -5.0], [0.5, -15.0], [0.5, 1.0]]], [8.2, 7.9]], ['storm 24', [[[0.0, 0.5], [2.0, 3.0], [2.0, -5.0], [4.0, -3.0], [0.0, -0.5], [1.0, 3.0]]], [7.0, 6.2]], ['storm 28', [[[0.0, -3.0], [0.5, -3.0], [2.0, -3.0], [2.0, 3.0], [0.0, 1.0], [2.0, -15.0]]], [6.5, 5.4]], ['storm 29', [[[0.5, -5.0], [4.0, 1.0], [1.0, -3.0], [0.5, 0.5], [1.0, 1.0], [1.0, -5.0]]], [6.0, 5.7]], ['rain on snowpack', [[[5.0, -8.0], [3.0, 2.0], [10.0, 3.0]]], [7.5, 0.7]], ['exactly freezing', [[[2.0, 0.0], [2.0, 0.0]]], [4.0, 4.0]], ['single burst then settling', [[[4.0, -6.0], [0.0, -6.0], [0.0, -6.0]]], [6.0, 5.8]]]]\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":"80e4c66abdfbcc642c9cd1198e4c78cf7b3e1429d438314e484729d9e9ab6c93","source":"\"\"\"Failure Map reference implementation. Python standard library only.\"\"\"\nimport json\n\nN = 1\nobservations = []\ndef solve(hours):\n    total = 0.0\n    depth = 0.0\n    for liq, t in hours:\n        if t > 1:\n            slr = 0\n        elif t > 0:\n            slr = 5\n        elif t >= -5:\n            slr = 10\n        elif t > -12:\n            slr = 15\n        else:\n            slr = 20\n        new = liq * slr / 10.0\n        depth = depth * 0.98 + new\n        total += new\n        if slr == 0 and liq > 0:\n            depth = max(depth - 0.5 * liq, 0.0)\n    return [round(total, 1), round(depth, 1)]\ndef check(label, actual, expected):\n    observations.append({\"check\": label, \"actual\": actual, \"expected\": expected, \"passed\": actual == expected})\nfixtures = [[['storm 0', [[[1.0, -15.0], [1.0, 1.0], [0.0, 0.0], [1.0, 3.0], [2.0, -8.0], [0.5, 0.0]]], [6.0, 5.2]], ['storm 1', [[[0.5, 0.5], [1.0, 0.5], [2.0, -8.0], [0.0, -5.0], [0.0, 1.0], [1.0, -5.0]]], [5.2, 5.0]], ['storm 2', [[[1.0, -8.0], [2.0, 0.0], [0.0, -5.0], [1.0, -0.5], [1.0, 3.0], [4.0, 0.5]]], [6.5, 5.7]], ['storm 3', [[[0.5, -3.0], [0.5, -0.5], [1.0, -8.0], [4.0, -5.0], [4.0, -0.5], [0.5, -8.0]]], [13.2, 12.8]], ['storm 4', [[[2.0, -5.0], [4.0, -0.5], [0.5, -5.0], [0.0, -5.0], [1.0, 1.0], [2.0, -0.5]]], [10.2, 9.6]], ['storm 5', [[[2.0, -5.0], [2.0, -3.0], [0.0, -8.0], [4.0, -8.0], [4.0, 0.5], [0.0, -15.0]]], [13.0, 12.3]], ['storm 6', [[[1.0, -8.0], [1.0, -0.5], [0.0, -12.0], [0.0, 0.5], [1.0, 0.0], [0.0, 0.0]]], [3.5, 3.3]], ['storm 7', [[[0.0, 3.0], [1.0, 0.0], [0.0, -15.0], [4.0, -5.0], [0.5, -15.0], [0.5, 1.0]]], [8.2, 7.9]]], [['storm 5', [[[2.0, -5.0], [2.0, -3.0], [0.0, -8.0], [4.0, -8.0], [4.0, 0.5], [0.0, -15.0]]], [13.0, 12.3]], ['storm 7', [[[0.0, 3.0], [1.0, 0.0], [0.0, -15.0], [4.0, -5.0], [0.5, -15.0], [0.5, 1.0]]], [8.2, 7.9]], ['storm 8', [[[0.0, 1.0], [2.0, -8.0], [2.0, -0.5], [2.0, -8.0], [4.0, 0.5], [2.0, -3.0]]], [12.0, 11.5]], ['storm 9', [[[4.0, 3.0], [1.0, -3.0], [2.0, -3.0], [0.5, -12.0], [0.0, -3.0], [2.0, -3.0]]], [6.0, 5.8]], ['storm 10', [[[0.0, -12.0], [2.0, -15.0], [0.0, 3.0], [2.0, 1.0], [0.0, 0.5], [1.0, -15.0]]], [7.0, 6.6]], ['storm 11', [[[1.0, -8.0], [2.0, -15.0], [1.0, -3.0], [0.0, 1.0], [4.0, -3.0], [0.0, 3.0]]], [10.5, 9.9]], ['storm 12', [[[1.0, -0.5], [4.0, -5.0], [0.5, -12.0], [4.0, 0.5], [1.0, -5.0], [1.0, 3.0]]], [11.5, 10.3]], ['storm 23', [[[2.0, -12.0], [4.0, -8.0], [0.5, -3.0], [4.0, 0.0], [1.0, -8.0], [0.5, 3.0]]], [16.0, 14.7]]], [['storm 6', [[[1.0, -8.0], [1.0, -0.5], [0.0, -12.0], [0.0, 0.5], [1.0, 0.0], [0.0, 0.0]]], [3.5, 3.3]], ['storm 13', [[[4.0, -8.0], [4.0, 0.5], [1.0, -15.0], [4.0, -5.0], [0.5, -12.0], [0.5, -12.0]]], [18.0, 16.9]], ['storm 14', [[[1.0, 1.0], [0.0, -5.0], [2.0, -5.0], [4.0, -8.0], [1.0, -15.0], [4.0, 3.0]]], [11.5, 9.0]], ['storm 15', [[[2.0, -12.0], [2.0, 1.0], [1.0, 3.0], [4.0, -5.0], [2.0, -15.0], [4.0, -3.0]]], [19.0, 17.7]], ['storm 16', [[[4.0, 1.0], [0.0, 0.0], [0.0, -5.0], [4.0, 1.0], [0.0, 0.0], [0.0, 0.0]]], [4.0, 3.7]], ['storm 17', [[[0.0, -12.0], [0.5, 0.0], [2.0, -12.0], [2.0, 0.5], [1.0, 0.5], [2.0, -12.0]]], [10.0, 9.7]], ['storm 18', [[[4.0, 0.5], [0.0, -12.0], [0.0, -3.0], [0.0, -12.0], [0.0, 0.0], [0.5, -5.0]]], [2.8, 2.6]], ['storm 19', [[[4.0, -5.0], [0.5, -3.0], [4.0, 1.0], [0.5, -15.0], [0.0, -15.0], [0.5, 3.0]]], [9.5, 8.5]]], [['storm 18', [[[4.0, 0.5], [0.0, -12.0], [0.0, -3.0], [0.0, -12.0], [0.0, 0.0], [0.5, -5.0]]], [2.8, 2.6]], ['storm 21', [[[0.0, -5.0], [1.0, -15.0], [4.0, 1.0], [4.0, -3.0], [4.0, -12.0], [2.0, -12.0]]], [20.0, 19.4]], ['storm 22', [[[4.0, -8.0], [2.0, -15.0], [0.0, -3.0], [4.0, -8.0], [4.0, -0.5], [4.0, 0.0]]], [24.0, 22.8]], ['storm 23', [[[2.0, -12.0], [4.0, -8.0], [0.5, -3.0], [4.0, 0.0], [1.0, -8.0], [0.5, 3.0]]], [16.0, 14.7]], ['storm 24', [[[0.0, 0.5], [2.0, 3.0], [2.0, -5.0], [4.0, -3.0], [0.0, -0.5], [1.0, 3.0]]], [7.0, 6.2]], ['storm 25', [[[2.0, -3.0], [4.0, -8.0], [1.0, 3.0], [0.0, 0.5], [0.5, -3.0], [0.0, -5.0]]], [8.5, 7.4]], ['storm 26', [[[2.0, 0.0], [1.0, -0.5], [2.0, -12.0], [2.0, -8.0], [4.0, -12.0], [1.0, -12.0]]], [20.0, 19.2]], ['storm 27', [[[4.0, 3.0], [0.5, 0.5], [1.0, -12.0], [1.0, -0.5], [4.0, -8.0], [1.0, -5.0]]], [10.8, 10.5]]], [['storm 0', [[[1.0, -15.0], [1.0, 1.0], [0.0, 0.0], [1.0, 3.0], [2.0, -8.0], [0.5, 0.0]]], [6.0, 5.2]], ['storm 7', [[[0.0, 3.0], [1.0, 0.0], [0.0, -15.0], [4.0, -5.0], [0.5, -15.0], [0.5, 1.0]]], [8.2, 7.9]], ['storm 24', [[[0.0, 0.5], [2.0, 3.0], [2.0, -5.0], [4.0, -3.0], [0.0, -0.5], [1.0, 3.0]]], [7.0, 6.2]], ['storm 28', [[[0.0, -3.0], [0.5, -3.0], [2.0, -3.0], [2.0, 3.0], [0.0, 1.0], [2.0, -15.0]]], [6.5, 5.4]], ['storm 29', [[[0.5, -5.0], [4.0, 1.0], [1.0, -3.0], [0.5, 0.5], [1.0, 1.0], [1.0, -5.0]]], [6.0, 5.7]], ['rain on snowpack', [[[5.0, -8.0], [3.0, 2.0], [10.0, 3.0]]], [7.5, 0.7]], ['exactly freezing', [[[2.0, 0.0], [2.0, 0.0]]], [4.0, 4.0]], ['single burst then settling', [[[4.0, -6.0], [0.0, -6.0], [0.0, -6.0]]], [6.0, 5.8]]]]\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":"Stipulated deterministic teaching model of an operational weather index; coefficients and thresholds are fixed by the contract and no claim of standards conformance is made. 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-weather_index_computation-snow-accumulation-freezing-ratio-band","generated_at":"2026-09-29T14:48:28.634294+00:00","license":"CC0-1.0","python":"3.12.14","seed":1,"split":"open-access"},"relevance":"Winter road maintenance and snow reports need both new snowfall and settled depth.","root_cause":"The -5 degC boundary is assigned to the warmer ratio band.","sha256":"7baa00acce06e204e03fa86b992eb8f71d1118aded1654ad124511fb2eaa4f52","title":"Hourly snowfall and settled depth: freezing ratio band · 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.325,"exit_code":1,"observations":[{"actual":[5.8,5.0],"check":"storm 0","expected":[6.0,5.2],"passed":false},{"actual":[5.2,5.0],"check":"storm 1","expected":[5.2,5.0],"passed":true},{"actual":[5.5,4.7],"check":"storm 2","expected":[6.5,5.7],"passed":false},{"actual":[13.2,12.8],"check":"storm 3","expected":[13.2,12.8],"passed":true},{"actual":[10.2,9.6],"check":"storm 4","expected":[10.2,9.6],"passed":true},{"actual":[13.0,12.3],"check":"storm 5","expected":[13.0,12.3],"passed":true},{"actual":[3.0,2.8],"check":"storm 6","expected":[3.5,3.3],"passed":false},{"actual":[7.8,7.5],"check":"storm 7","expected":[8.2,7.9],"passed":false}],"passed":false,"stderr":"","stdout":"{\"observations\": [{\"check\": \"storm 0\", \"actual\": [5.8, 5.0], \"expected\": [6.0, 5.2], \"passed\": false}, {\"check\": \"storm 1\", \"actual\": [5.2, 5.0], \"expected\": [5.2, 5.0], \"passed\": true}, {\"check\": \"storm 2\", \"actual\": [5.5, 4.7], \"expected\": [6.5, 5.7], \"passed\": false}, {\"check\": \"storm 3\", \"actual\": [13.2, 12.8], \"expected\": [13.2, 12.8], \"passed\": true}, {\"check\": \"storm 4\", \"actual\": [10.2, 9.6], \"expected\": [10.2, 9.6], \"passed\": true}, {\"check\": \"storm 5\", \"actual\": [13.0, 12.3], \"expected\": [13.0, 12.3], \"passed\": true}, {\"check\": \"storm 6\", \"actual\": [3.0, 2.8], \"expected\": [3.5, 3.3], \"passed\": false}, {\"check\": \"storm 7\", \"actual\": [7.8, 7.5], \"expected\": [8.2, 7.9], \"passed\": false}], \"passed\": false}\n"},"broken":{"elapsed_ms":38.114,"exit_code":1,"observations":[{"actual":[6.0,5.2],"check":"storm 0","expected":[6.0,5.2],"passed":true},{"actual":[4.8,4.5],"check":"storm 1","expected":[5.2,5.0],"passed":false},{"actual":[6.5,5.7],"check":"storm 2","expected":[6.5,5.7],"passed":true},{"actual":[11.2,10.8],"check":"storm 3","expected":[13.2,12.8],"passed":false},{"actual":[9.0,8.5],"check":"storm 4","expected":[10.2,9.6],"passed":false},{"actual":[12.0,11.4],"check":"storm 5","expected":[13.0,12.3],"passed":false},{"actual":[3.5,3.3],"check":"storm 6","expected":[3.5,3.3],"passed":true},{"actual":[6.2,6.0],"check":"storm 7","expected":[8.2,7.9],"passed":false}],"passed":false,"stderr":"","stdout":"{\"observations\": [{\"check\": \"storm 0\", \"actual\": [6.0, 5.2], \"expected\": [6.0, 5.2], \"passed\": true}, {\"check\": \"storm 1\", \"actual\": [4.8, 4.5], \"expected\": [5.2, 5.0], \"passed\": false}, {\"check\": \"storm 2\", \"actual\": [6.5, 5.7], \"expected\": [6.5, 5.7], \"passed\": true}, {\"check\": \"storm 3\", \"actual\": [11.2, 10.8], \"expected\": [13.2, 12.8], \"passed\": false}, {\"check\": \"storm 4\", \"actual\": [9.0, 8.5], \"expected\": [10.2, 9.6], \"passed\": false}, {\"check\": \"storm 5\", \"actual\": [12.0, 11.4], \"expected\": [13.0, 12.3], \"passed\": false}, {\"check\": \"storm 6\", \"actual\": [3.5, 3.3], \"expected\": [3.5, 3.3], \"passed\": true}, {\"check\": \"storm 7\", \"actual\": [6.2, 6.0], \"expected\": [8.2, 7.9], \"passed\": false}], \"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."}}