{"abstract":"A faulty 104% humidity sensor produces a dew point above the air temperature.","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":"Rejecting RH below 1% discards valid very dry readings.","family":"w2-weather_index_computation-dew-point-supersaturation-rejection","id":"FA-70901","implementations":{"attempt":{"sha256":"9c4dd20587ed55409228613ec007bf1e90ba09976aa83cbc961c86491468eca0","source":"\"\"\"Failure Map reference implementation. Python standard library only.\"\"\"\nimport json\nimport math\nN = 1\nobservations = []\ndef solve(t_c, rh):\n    if rh < 1 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 104% RH', [-20, 104], None], ['-5 C at 0.5% RH', [-5, 0.5], -55.32]], [['-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], ['0 C at 104% RH', [0, 104], None], ['25 C at 0.5% RH', [25, 0.5], -41.77]], [['-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 C at 0.5% RH', [0, 0.5], -56.21], ['25 C at 104% RH', [25, 104], None]], [['-20 C at 0.5% RH', [-20, 0.5], -65.32], ['-5 C at 104% RH', [-5, 104], None], ['-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 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 104% RH', [0.5, 104], None], ['10 C at 0.5% RH', [10, 0.5], -50.35]]]\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":"08c53dfb37f003f33e924a213fcf429e3201cc47ed8dae8302d791372870e4f8","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:\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 104% RH', [-20, 104], None], ['-5 C at 0.5% RH', [-5, 0.5], -55.32]], [['-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], ['0 C at 104% RH', [0, 104], None], ['25 C at 0.5% RH', [25, 0.5], -41.77]], [['-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 C at 0.5% RH', [0, 0.5], -56.21], ['25 C at 104% RH', [25, 104], None]], [['-20 C at 0.5% RH', [-20, 0.5], -65.32], ['-5 C at 104% RH', [-5, 104], None], ['-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 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 104% RH', [0.5, 104], None], ['10 C at 0.5% RH', [10, 0.5], -50.35]]]\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":"46a1d182a846cc68d5404e5c7434900cec3f5e17b006f292a7c9e5a4146630a4","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 104% RH', [-20, 104], None], ['-5 C at 0.5% RH', [-5, 0.5], -55.32]], [['-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], ['0 C at 104% RH', [0, 104], None], ['25 C at 0.5% RH', [25, 0.5], -41.77]], [['-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 C at 0.5% RH', [0, 0.5], -56.21], ['25 C at 104% RH', [25, 104], None]], [['-20 C at 0.5% RH', [-20, 0.5], -65.32], ['-5 C at 104% RH', [-5, 104], None], ['-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 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 104% RH', [0.5, 104], None], ['10 C at 0.5% RH', [10, 0.5], -50.35]]]\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-supersaturation-rejection","generated_at":"2026-09-29T14:48:24.907448+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":"Reject RH <= 0 and RH > 100.","root_cause":"The validity check has no upper bound on relative humidity.","sha256":"6b73d78d7916200eed2d279e5f9420946c51f225fc3566534021550d5835a4a0","title":"Magnus dew point with ice branch: supersaturation rejection · case 01","variant":1,"variant_policy":"Five numbered records share a model and may reuse boundary fixtures.","verification":{"attempt":{"elapsed_ms":38.312,"exit_code":1,"observations":[{"actual":null,"check":"-20 C at 0% RH","expected":null,"passed":true},{"actual":null,"check":"-20 C at 0.5% RH","expected":-65.32,"passed":false},{"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":null,"check":"-20 C at 104% RH","expected":null,"passed":true},{"actual":null,"check":"-5 C at 0.5% RH","expected":-55.32,"passed":false}],"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\": null, \"expected\": -65.32, \"passed\": false}, {\"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 104% RH\", \"actual\": null, \"expected\": null, \"passed\": true}, {\"check\": \"-5 C at 0.5% RH\", \"actual\": null, \"expected\": -55.32, \"passed\": false}], \"passed\": false}\n"},"broken":{"elapsed_ms":37.789,"exit_code":1,"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":-19.59,"check":"-20 C at 104% RH","expected":null,"passed":false},{"actual":-55.32,"check":"-5 C at 0.5% RH","expected":-55.32,"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\": -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 104% RH\", \"actual\": -19.59, \"expected\": null, \"passed\": false}, {\"check\": \"-5 C at 0.5% RH\", \"actual\": -55.32, \"expected\": -55.32, \"passed\": true}], \"passed\": false}\n"},"fixed":{"elapsed_ms":39.003,"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":null,"check":"-20 C at 104% RH","expected":null,"passed":true},{"actual":-55.32,"check":"-5 C at 0.5% RH","expected":-55.32,"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 104% RH\", \"actual\": null, \"expected\": null, \"passed\": true}, {\"check\": \"-5 C at 0.5% RH\", \"actual\": -55.32, \"expected\": -55.32, \"passed\": true}], \"passed\": true}\n"}},"verified":true,"visibility":"public"}