{"abstract":"Dew points collapse toward zero regardless of humidity.","category":"Weather index computation","checks":8,"contract":"Input temperature in degC and RH in percent. RH <= 0 or RH > 100 returns None. Use Magnus constants a=17.62, b=243.12 when T >= 0 and a=22.46, b=272.62 below freezing; g = ln(RH/100) + aT/(b+T); dew/frost point = b*g/(a-g) rounded to 0.01.","evaluation_group":"w2-weather_index_computation-dew-point","failed_approach":"Changing the denominator sign to (a+g) keeps the wrong inversion for nonzero g.","family":"w2-weather_index_computation-dew-point-inverse-magnus-solve","id":"FA-70896","implementations":{"attempt":{"sha256":"be75e729e7e70b6a80e8e26b1a20be62f3767c90131c6c92544b741ecbf17af8","source":"\"\"\"Failure Map reference implementation. Python standard library only.\"\"\"\nimport json\nimport math\nN = 1\nobservations = []\ndef solve(t_c, rh):\n    if rh <= 0 or rh > 100:\n        return None\n    a, b = (17.62, 243.12) if t_c >= 0 else (22.46, 272.62)\n    g = math.log(rh / 100.0) + a * t_c / (b + t_c)\n    return round(b * g / (a + g), 2)\ndef check(label, actual, expected):\n    observations.append({\"check\": label, \"actual\": actual, \"expected\": expected, \"passed\": actual == expected})\nfixtures = [[['-20 C at 0% RH', [-20, 0], None], ['-20 C at 0.5% RH', [-20, 0.5], -65.32], ['-20 C at 5% RH', [-20, 5], -47.79], ['-20 C at 30% RH', [-20, 30], -31.95], ['-20 C at 50% RH', [-20, 50], -27.02], ['-20 C at 80% RH', [-20, 80], -22.3], ['-20 C at 100% RH', [-20, 100], -20.0], ['-20 C at 104% RH', [-20, 104], None]], [['-20 C at 50% RH', [-20, 50], -27.02], ['-20 C at 104% RH', [-20, 104], None], ['-5 C at 0% RH', [-5, 0], None], ['-5 C at 0.5% RH', [-5, 0.5], -55.32], ['-5 C at 5% RH', [-5, 5], -35.98], ['-5 C at 30% RH', [-5, 30], -18.38], ['-5 C at 50% RH', [-5, 50], -12.87], ['-5 C at 80% RH', [-5, 80], -7.58]], [['-5 C at 0.5% RH', [-5, 0.5], -55.32], ['-5 C at 100% RH', [-5, 100], -5.0], ['-5 C at 104% RH', [-5, 104], None], ['-0.5 C at 0% RH', [-0.5, 0], None], ['-0.5 C at 0.5% RH', [-0.5, 0.5], -52.36], ['-0.5 C at 5% RH', [-0.5, 5], -32.47], ['-0.5 C at 30% RH', [-0.5, 30], -14.32], ['-0.5 C at 50% RH', [-0.5, 50], -8.63]], [['-5 C at 50% RH', [-5, 50], -12.87], ['-0.5 C at 80% RH', [-0.5, 80], -3.17], ['-0.5 C at 100% RH', [-0.5, 100], -0.5], ['-0.5 C at 104% RH', [-0.5, 104], None], ['0 C at 0% RH', [0, 0], None], ['0 C at 0.5% RH', [0, 0.5], -56.21], ['0 C at 5% RH', [0, 5], -35.33], ['0 C at 30% RH', [0, 30], -15.55]], [['-0.5 C at 0.5% RH', [-0.5, 0.5], -52.36], ['0 C at 50% RH', [0, 50], -9.2], ['0 C at 80% RH', [0, 80], -3.04], ['0 C at 100% RH', [0, 100], 0.0], ['0 C at 104% RH', [0, 104], None], ['0.5 C at 0% RH', [0.5, 0], None], ['0.5 C at 0.5% RH', [0.5, 0.5], -55.91], ['0.5 C at 5% RH', [0.5, 5], -34.96]]]\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":"0629c0fb34b627f30c0d41cdf3476a56c4aa9f28d7648276e43c1d37e1f1b021","source":"\"\"\"Failure Map reference implementation. Python standard library only.\"\"\"\nimport json\nimport math\nN = 1\nobservations = []\ndef solve(t_c, rh):\n    if rh <= 0 or rh > 100:\n        return None\n    a, b = (17.62, 243.12) if t_c >= 0 else (22.46, 272.62)\n    g = math.log(rh / 100.0) + a * t_c / (b + t_c)\n    return round(a * g / (b - g), 2)\ndef check(label, actual, expected):\n    observations.append({\"check\": label, \"actual\": actual, \"expected\": expected, \"passed\": actual == expected})\nfixtures = [[['-20 C at 0% RH', [-20, 0], None], ['-20 C at 0.5% RH', [-20, 0.5], -65.32], ['-20 C at 5% RH', [-20, 5], -47.79], ['-20 C at 30% RH', [-20, 30], -31.95], ['-20 C at 50% RH', [-20, 50], -27.02], ['-20 C at 80% RH', [-20, 80], -22.3], ['-20 C at 100% RH', [-20, 100], -20.0], ['-20 C at 104% RH', [-20, 104], None]], [['-20 C at 50% RH', [-20, 50], -27.02], ['-20 C at 104% RH', [-20, 104], None], ['-5 C at 0% RH', [-5, 0], None], ['-5 C at 0.5% RH', [-5, 0.5], -55.32], ['-5 C at 5% RH', [-5, 5], -35.98], ['-5 C at 30% RH', [-5, 30], -18.38], ['-5 C at 50% RH', [-5, 50], -12.87], ['-5 C at 80% RH', [-5, 80], -7.58]], [['-5 C at 0.5% RH', [-5, 0.5], -55.32], ['-5 C at 100% RH', [-5, 100], -5.0], ['-5 C at 104% RH', [-5, 104], None], ['-0.5 C at 0% RH', [-0.5, 0], None], ['-0.5 C at 0.5% RH', [-0.5, 0.5], -52.36], ['-0.5 C at 5% RH', [-0.5, 5], -32.47], ['-0.5 C at 30% RH', [-0.5, 30], -14.32], ['-0.5 C at 50% RH', [-0.5, 50], -8.63]], [['-5 C at 50% RH', [-5, 50], -12.87], ['-0.5 C at 80% RH', [-0.5, 80], -3.17], ['-0.5 C at 100% RH', [-0.5, 100], -0.5], ['-0.5 C at 104% RH', [-0.5, 104], None], ['0 C at 0% RH', [0, 0], None], ['0 C at 0.5% RH', [0, 0.5], -56.21], ['0 C at 5% RH', [0, 5], -35.33], ['0 C at 30% RH', [0, 30], -15.55]], [['-0.5 C at 0.5% RH', [-0.5, 0.5], -52.36], ['0 C at 50% RH', [0, 50], -9.2], ['0 C at 80% RH', [0, 80], -3.04], ['0 C at 100% RH', [0, 100], 0.0], ['0 C at 104% RH', [0, 104], None], ['0.5 C at 0% RH', [0.5, 0], None], ['0.5 C at 0.5% RH', [0.5, 0.5], -55.91], ['0.5 C at 5% RH', [0.5, 5], -34.96]]]\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":"833c38b411ae992dd6146ff27c2176ba9d67aaf3ef8a4ffb960668f1e5b7c6fc","source":"\"\"\"Failure Map reference implementation. Python standard library only.\"\"\"\nimport json\nimport math\nN = 1\nobservations = []\ndef solve(t_c, rh):\n    if rh <= 0 or rh > 100:\n        return None\n    a, b = (17.62, 243.12) if t_c >= 0 else (22.46, 272.62)\n    g = math.log(rh / 100.0) + a * t_c / (b + t_c)\n    return round(b * g / (a - g), 2)\ndef check(label, actual, expected):\n    observations.append({\"check\": label, \"actual\": actual, \"expected\": expected, \"passed\": actual == expected})\nfixtures = [[['-20 C at 0% RH', [-20, 0], None], ['-20 C at 0.5% RH', [-20, 0.5], -65.32], ['-20 C at 5% RH', [-20, 5], -47.79], ['-20 C at 30% RH', [-20, 30], -31.95], ['-20 C at 50% RH', [-20, 50], -27.02], ['-20 C at 80% RH', [-20, 80], -22.3], ['-20 C at 100% RH', [-20, 100], -20.0], ['-20 C at 104% RH', [-20, 104], None]], [['-20 C at 50% RH', [-20, 50], -27.02], ['-20 C at 104% RH', [-20, 104], None], ['-5 C at 0% RH', [-5, 0], None], ['-5 C at 0.5% RH', [-5, 0.5], -55.32], ['-5 C at 5% RH', [-5, 5], -35.98], ['-5 C at 30% RH', [-5, 30], -18.38], ['-5 C at 50% RH', [-5, 50], -12.87], ['-5 C at 80% RH', [-5, 80], -7.58]], [['-5 C at 0.5% RH', [-5, 0.5], -55.32], ['-5 C at 100% RH', [-5, 100], -5.0], ['-5 C at 104% RH', [-5, 104], None], ['-0.5 C at 0% RH', [-0.5, 0], None], ['-0.5 C at 0.5% RH', [-0.5, 0.5], -52.36], ['-0.5 C at 5% RH', [-0.5, 5], -32.47], ['-0.5 C at 30% RH', [-0.5, 30], -14.32], ['-0.5 C at 50% RH', [-0.5, 50], -8.63]], [['-5 C at 50% RH', [-5, 50], -12.87], ['-0.5 C at 80% RH', [-0.5, 80], -3.17], ['-0.5 C at 100% RH', [-0.5, 100], -0.5], ['-0.5 C at 104% RH', [-0.5, 104], None], ['0 C at 0% RH', [0, 0], None], ['0 C at 0.5% RH', [0, 0.5], -56.21], ['0 C at 5% RH', [0, 5], -35.33], ['0 C at 30% RH', [0, 30], -15.55]], [['-0.5 C at 0.5% RH', [-0.5, 0.5], -52.36], ['0 C at 50% RH', [0, 50], -9.2], ['0 C at 80% RH', [0, 80], -3.04], ['0 C at 100% RH', [0, 100], 0.0], ['0 C at 104% RH', [0, 104], None], ['0.5 C at 0% RH', [0.5, 0], None], ['0.5 C at 0.5% RH', [0.5, 0.5], -55.91], ['0.5 C at 5% RH', [0.5, 5], -34.96]]]\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-dew-point-inverse-magnus-solve","generated_at":"2026-09-29T14:48:24.866494+00:00","license":"CC0-1.0","python":"3.12.14","seed":1,"split":"open-access"},"relevance":"Dew and frost point drive fog, icing and frost forecasts.","repair":"Return b*g/(a-g).","root_cause":"The algebraic inversion swaps the roles of a and b.","sha256":"3740541eb2ce941e278a3ac20157093f0f38829563f6a65aa7f5de3eef8a93ee","title":"Magnus dew point with ice branch: inverse Magnus solve · case 01","variant":1,"variant_policy":"Five numbered records share a model and may reuse boundary fixtures.","verification":{"attempt":{"elapsed_ms":37.885,"exit_code":1,"observations":[{"actual":null,"check":"-20 C at 0% RH","expected":null,"passed":true},{"actual":-125.41,"check":"-20 C at 0.5% RH","expected":-65.32,"passed":false},{"actual":-73.59,"check":"-20 C at 5% RH","expected":-47.79,"passed":false},{"actual":-41.74,"check":"-20 C at 30% RH","expected":-31.95,"passed":false},{"actual":-33.71,"check":"-20 C at 50% RH","expected":-27.02,"passed":false},{"actual":-26.67,"check":"-20 C at 80% RH","expected":-22.3,"passed":false},{"actual":-23.44,"check":"-20 C at 100% RH","expected":-20.0,"passed":false},{"actual":null,"check":"-20 C at 104% RH","expected":null,"passed":true}],"passed":false,"stderr":"","stdout":"{\"observations\": [{\"check\": \"-20 C at 0% RH\", \"actual\": null, \"expected\": null, \"passed\": true}, {\"check\": \"-20 C at 0.5% RH\", \"actual\": -125.41, \"expected\": -65.32, \"passed\": false}, {\"check\": \"-20 C at 5% RH\", \"actual\": -73.59, \"expected\": -47.79, \"passed\": false}, {\"check\": \"-20 C at 30% RH\", \"actual\": -41.74, \"expected\": -31.95, \"passed\": false}, {\"check\": \"-20 C at 50% RH\", \"actual\": -33.71, \"expected\": -27.02, \"passed\": false}, {\"check\": \"-20 C at 80% RH\", \"actual\": -26.67, \"expected\": -22.3, \"passed\": false}, {\"check\": \"-20 C at 100% RH\", \"actual\": -23.44, \"expected\": -20.0, \"passed\": false}, {\"check\": \"-20 C at 104% RH\", \"actual\": null, \"expected\": null, \"passed\": true}], \"passed\": false}\n"},"broken":{"elapsed_ms":38.398,"exit_code":1,"observations":[{"actual":null,"check":"-20 C at 0% RH","expected":null,"passed":true},{"actual":-0.57,"check":"-20 C at 0.5% RH","expected":-65.32,"passed":false},{"actual":-0.39,"check":"-20 C at 5% RH","expected":-47.79,"passed":false},{"actual":-0.24,"check":"-20 C at 30% RH","expected":-31.95,"passed":false},{"actual":-0.2,"check":"-20 C at 50% RH","expected":-27.02,"passed":false},{"actual":-0.16,"check":"-20 C at 80% RH","expected":-22.3,"passed":false},{"actual":-0.15,"check":"-20 C at 100% RH","expected":-20.0,"passed":false},{"actual":null,"check":"-20 C at 104% RH","expected":null,"passed":true}],"passed":false,"stderr":"","stdout":"{\"observations\": [{\"check\": \"-20 C at 0% RH\", \"actual\": null, \"expected\": null, \"passed\": true}, {\"check\": \"-20 C at 0.5% RH\", \"actual\": -0.57, \"expected\": -65.32, \"passed\": false}, {\"check\": \"-20 C at 5% RH\", \"actual\": -0.39, \"expected\": -47.79, \"passed\": false}, {\"check\": \"-20 C at 30% RH\", \"actual\": -0.24, \"expected\": -31.95, \"passed\": false}, {\"check\": \"-20 C at 50% RH\", \"actual\": -0.2, \"expected\": -27.02, \"passed\": false}, {\"check\": \"-20 C at 80% RH\", \"actual\": -0.16, \"expected\": -22.3, \"passed\": false}, {\"check\": \"-20 C at 100% RH\", \"actual\": -0.15, \"expected\": -20.0, \"passed\": false}, {\"check\": \"-20 C at 104% RH\", \"actual\": null, \"expected\": null, \"passed\": true}], \"passed\": false}\n"},"fixed":{"elapsed_ms":40.078,"exit_code":0,"observations":[{"actual":null,"check":"-20 C at 0% RH","expected":null,"passed":true},{"actual":-65.32,"check":"-20 C at 0.5% RH","expected":-65.32,"passed":true},{"actual":-47.79,"check":"-20 C at 5% RH","expected":-47.79,"passed":true},{"actual":-31.95,"check":"-20 C at 30% RH","expected":-31.95,"passed":true},{"actual":-27.02,"check":"-20 C at 50% RH","expected":-27.02,"passed":true},{"actual":-22.3,"check":"-20 C at 80% RH","expected":-22.3,"passed":true},{"actual":-20.0,"check":"-20 C at 100% RH","expected":-20.0,"passed":true},{"actual":null,"check":"-20 C at 104% RH","expected":null,"passed":true}],"passed":true,"stderr":"","stdout":"{\"observations\": [{\"check\": \"-20 C at 0% RH\", \"actual\": null, \"expected\": null, \"passed\": true}, {\"check\": \"-20 C at 0.5% RH\", \"actual\": -65.32, \"expected\": -65.32, \"passed\": true}, {\"check\": \"-20 C at 5% RH\", \"actual\": -47.79, \"expected\": -47.79, \"passed\": true}, {\"check\": \"-20 C at 30% RH\", \"actual\": -31.95, \"expected\": -31.95, \"passed\": true}, {\"check\": \"-20 C at 50% RH\", \"actual\": -27.02, \"expected\": -27.02, \"passed\": true}, {\"check\": \"-20 C at 80% RH\", \"actual\": -22.3, \"expected\": -22.3, \"passed\": true}, {\"check\": \"-20 C at 100% RH\", \"actual\": -20.0, \"expected\": -20.0, \"passed\": true}, {\"check\": \"-20 C at 104% RH\", \"actual\": null, \"expected\": null, \"passed\": true}], \"passed\": true}\n"}},"verified":true,"visibility":"public"}