{"abstract":"Stations exactly half a unit from the median are discarded.","category":"Seismic magnitude estimation","checks":8,"contract":"Station magnitudes are integers in hundredths (None = no reading; 0 and negatives are valid). Require min_stations readings; take the median (mean of the middle pair for even counts), keep stations within 50 hundredths of it inclusive, require min_stations again, take the median of the kept set and round half up to 0.1 magnitude. Return [magnitude, kept count] or None.","evaluation_group":"w2-seismic_magnitude_estimation-network-magnitude","failed_approach":"Using 5 hundredths treats the 0.5 window as 0.05 and rejects almost every station.","family":"w2-seismic_magnitude_estimation-network-magnitude-outlier-window-inclusivity","id":"FA-71371","implementations":{"attempt":{"sha256":"de4c8c213ed924d46d668e4bbe8a0088599b6ed89b5eb292d6133d2d399299a2","source":"\"\"\"Failure Map reference implementation. Python standard library only.\"\"\"\nimport json\nimport math\nN = 1\nobservations = []\ndef solve(station_mags, min_stations):\n    vals = sorted(m for m in station_mags if m is not None)\n    if len(vals) < min_stations:\n        return None\n    def med(xs):\n        n = len(xs)\n        mid = n // 2\n        return xs[mid] if n % 2 else (xs[mid - 1] + xs[mid]) / 2\n    m0 = med(vals)\n    kept = [v for v in vals if abs(v - m0) <= 5]\n    if len(kept) < min_stations:\n        return None\n    m1 = med(kept)\n    tenths = int(math.floor((m1 + 5) / 10))\n    return [tenths / 10, len(kept)]\ndef check(label, actual, expected):\n    observations.append({\"check\": label, \"actual\": actual, \"expected\": expected, \"passed\": actual == expected})\nfixtures = [[['event 0', [[274, 336, 318, 341, 328, None], 4], [3.3, 4]], ['event 1', [[381, 387, 376, 348, 397, 350, 333, 349, None], 3], [3.6, 8]], ['event 2', [[550, 532, 540, 504, 484, 528, 530, 570], 3], [5.3, 8]], ['event 3', [[-34, -47, 14, 21, -68], 3], [-0.4, 4]], ['event 4', [[101, 111, 104, 54, 138, None], 3], [1.0, 5]], ['event 5', [[168, 146, 176, 132, 162, 118, 174, 186], 4], [1.7, 8]], ['event 6', [[374, 385, 429, 376, 402, 398, 421, 340, None], 3], [4.0, 7]], ['event 7', [[469, 498, 493, 486, 467, 522], 4], [4.9, 6]]], [['event 4', [[101, 111, 104, 54, 138, None], 3], [1.0, 5]], ['event 6', [[374, 385, 429, 376, 402, 398, 421, 340, None], 3], [4.0, 7]], ['event 7', [[469, 498, 493, 486, 467, 522], 4], [4.9, 6]], ['event 8', [[152, 146, 148, 165, 191], 3], [1.5, 5]], ['event 9', [[-26, -9, -1, 4, 0, 64, None], 4], [0.0, 5]], ['event 10', [[498, 507, 494, 464], 3], [5.0, 4]], ['event 11', [[189, 235, 240, 199, 215], 4], [2.2, 5]], ['event 12', [[106, 62, 76, 99, 87, 82, 116, 114, 149], 4], [1.0, 9]]], [['event 4', [[101, 111, 104, 54, 138, None], 3], [1.0, 5]], ['event 11', [[189, 235, 240, 199, 215], 4], [2.2, 5]], ['event 14', [[125, 133, 111, 191, 191, 148, 241], 3], [1.4, 6]], ['event 15', [[381, 371, 330, 376, 403, 335, 339, 348, None], 3], [3.6, 8]], ['event 16', [[-23, -62, -35, -143], 4], None], ['event 17', [[432, 385, 408, 473], 4], None], ['event 18', [[9, 11, -21, 37, -4, 11], 3], [0.1, 6]], ['event 19', [[160, 170, 168, 12, None], 3], [1.7, 3]]], [['event 4', [[101, 111, 104, 54, 138, None], 3], [1.0, 5]], ['event 18', [[9, 11, -21, 37, -4, 11], 3], [0.1, 6]], ['event 21', [[208, 239, 263, 248, 235, 223], 3], [2.4, 6]], ['event 22', [[347, 369, 375, 379, None], 3], [3.7, 4]], ['event 23', [[103, 63, 30, 93], 4], [0.8, 4]], ['event 24', [[142, 93, 150, 136, 125, 91, 82, 115, None], 4], [1.2, 8]], ['event 25', [[545, 488, 482, 494, 603, None], 4], None], ['event 26', [[55, 21, 75, 67, 25, 28], 3], [0.4, 6]]], [['event 4', [[101, 111, 104, 54, 138, None], 3], [1.0, 5]], ['event 23', [[103, 63, 30, 93], 4], [0.8, 4]], ['event 28', [[483, 485, 434, 486, 504, 514, None], 3], [4.9, 5]], ['event 29', [[462, 439, 425, 447, 432, 317], 3], [4.4, 5]], ['event 30', [[34, 54, -15, -27], 4], [0.1, 4]], ['event 31', [[269, 318, 251, 298, 329], 3], [3.0, 5]], ['event 32', [[231, 238, 217, 239, 214, 186, 164, 154, None], 3], [2.2, 6]], ['event 33', [[523, 505, 529, 488, 514], 3], [5.1, 5]]]]\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":"865e0625d523e59d40220c233cb9f8597569a79301be528c55ef6009148e2080","source":"\"\"\"Failure Map reference implementation. Python standard library only.\"\"\"\nimport json\nimport math\nN = 1\nobservations = []\ndef solve(station_mags, min_stations):\n    vals = sorted(m for m in station_mags if m is not None)\n    if len(vals) < min_stations:\n        return None\n    def med(xs):\n        n = len(xs)\n        mid = n // 2\n        return xs[mid] if n % 2 else (xs[mid - 1] + xs[mid]) / 2\n    m0 = med(vals)\n    kept = [v for v in vals if abs(v - m0) < 50]\n    if len(kept) < min_stations:\n        return None\n    m1 = med(kept)\n    tenths = int(math.floor((m1 + 5) / 10))\n    return [tenths / 10, len(kept)]\ndef check(label, actual, expected):\n    observations.append({\"check\": label, \"actual\": actual, \"expected\": expected, \"passed\": actual == expected})\nfixtures = [[['event 0', [[274, 336, 318, 341, 328, None], 4], [3.3, 4]], ['event 1', [[381, 387, 376, 348, 397, 350, 333, 349, None], 3], [3.6, 8]], ['event 2', [[550, 532, 540, 504, 484, 528, 530, 570], 3], [5.3, 8]], ['event 3', [[-34, -47, 14, 21, -68], 3], [-0.4, 4]], ['event 4', [[101, 111, 104, 54, 138, None], 3], [1.0, 5]], ['event 5', [[168, 146, 176, 132, 162, 118, 174, 186], 4], [1.7, 8]], ['event 6', [[374, 385, 429, 376, 402, 398, 421, 340, None], 3], [4.0, 7]], ['event 7', [[469, 498, 493, 486, 467, 522], 4], [4.9, 6]]], [['event 4', [[101, 111, 104, 54, 138, None], 3], [1.0, 5]], ['event 6', [[374, 385, 429, 376, 402, 398, 421, 340, None], 3], [4.0, 7]], ['event 7', [[469, 498, 493, 486, 467, 522], 4], [4.9, 6]], ['event 8', [[152, 146, 148, 165, 191], 3], [1.5, 5]], ['event 9', [[-26, -9, -1, 4, 0, 64, None], 4], [0.0, 5]], ['event 10', [[498, 507, 494, 464], 3], [5.0, 4]], ['event 11', [[189, 235, 240, 199, 215], 4], [2.2, 5]], ['event 12', [[106, 62, 76, 99, 87, 82, 116, 114, 149], 4], [1.0, 9]]], [['event 4', [[101, 111, 104, 54, 138, None], 3], [1.0, 5]], ['event 11', [[189, 235, 240, 199, 215], 4], [2.2, 5]], ['event 14', [[125, 133, 111, 191, 191, 148, 241], 3], [1.4, 6]], ['event 15', [[381, 371, 330, 376, 403, 335, 339, 348, None], 3], [3.6, 8]], ['event 16', [[-23, -62, -35, -143], 4], None], ['event 17', [[432, 385, 408, 473], 4], None], ['event 18', [[9, 11, -21, 37, -4, 11], 3], [0.1, 6]], ['event 19', [[160, 170, 168, 12, None], 3], [1.7, 3]]], [['event 4', [[101, 111, 104, 54, 138, None], 3], [1.0, 5]], ['event 18', [[9, 11, -21, 37, -4, 11], 3], [0.1, 6]], ['event 21', [[208, 239, 263, 248, 235, 223], 3], [2.4, 6]], ['event 22', [[347, 369, 375, 379, None], 3], [3.7, 4]], ['event 23', [[103, 63, 30, 93], 4], [0.8, 4]], ['event 24', [[142, 93, 150, 136, 125, 91, 82, 115, None], 4], [1.2, 8]], ['event 25', [[545, 488, 482, 494, 603, None], 4], None], ['event 26', [[55, 21, 75, 67, 25, 28], 3], [0.4, 6]]], [['event 4', [[101, 111, 104, 54, 138, None], 3], [1.0, 5]], ['event 23', [[103, 63, 30, 93], 4], [0.8, 4]], ['event 28', [[483, 485, 434, 486, 504, 514, None], 3], [4.9, 5]], ['event 29', [[462, 439, 425, 447, 432, 317], 3], [4.4, 5]], ['event 30', [[34, 54, -15, -27], 4], [0.1, 4]], ['event 31', [[269, 318, 251, 298, 329], 3], [3.0, 5]], ['event 32', [[231, 238, 217, 239, 214, 186, 164, 154, None], 3], [2.2, 6]], ['event 33', [[523, 505, 529, 488, 514], 3], [5.1, 5]]]]\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":"c6cfb50f9cc916707d9698d7975d5be1432908abc345044a3ec7cd45ed0fea27","source":"\"\"\"Failure Map reference implementation. Python standard library only.\"\"\"\nimport json\nimport math\nN = 1\nobservations = []\ndef solve(station_mags, min_stations):\n    vals = sorted(m for m in station_mags if m is not None)\n    if len(vals) < min_stations:\n        return None\n    def med(xs):\n        n = len(xs)\n        mid = n // 2\n        return xs[mid] if n % 2 else (xs[mid - 1] + xs[mid]) / 2\n    m0 = med(vals)\n    kept = [v for v in vals if abs(v - m0) <= 50]\n    if len(kept) < min_stations:\n        return None\n    m1 = med(kept)\n    tenths = int(math.floor((m1 + 5) / 10))\n    return [tenths / 10, len(kept)]\ndef check(label, actual, expected):\n    observations.append({\"check\": label, \"actual\": actual, \"expected\": expected, \"passed\": actual == expected})\nfixtures = [[['event 0', [[274, 336, 318, 341, 328, None], 4], [3.3, 4]], ['event 1', [[381, 387, 376, 348, 397, 350, 333, 349, None], 3], [3.6, 8]], ['event 2', [[550, 532, 540, 504, 484, 528, 530, 570], 3], [5.3, 8]], ['event 3', [[-34, -47, 14, 21, -68], 3], [-0.4, 4]], ['event 4', [[101, 111, 104, 54, 138, None], 3], [1.0, 5]], ['event 5', [[168, 146, 176, 132, 162, 118, 174, 186], 4], [1.7, 8]], ['event 6', [[374, 385, 429, 376, 402, 398, 421, 340, None], 3], [4.0, 7]], ['event 7', [[469, 498, 493, 486, 467, 522], 4], [4.9, 6]]], [['event 4', [[101, 111, 104, 54, 138, None], 3], [1.0, 5]], ['event 6', [[374, 385, 429, 376, 402, 398, 421, 340, None], 3], [4.0, 7]], ['event 7', [[469, 498, 493, 486, 467, 522], 4], [4.9, 6]], ['event 8', [[152, 146, 148, 165, 191], 3], [1.5, 5]], ['event 9', [[-26, -9, -1, 4, 0, 64, None], 4], [0.0, 5]], ['event 10', [[498, 507, 494, 464], 3], [5.0, 4]], ['event 11', [[189, 235, 240, 199, 215], 4], [2.2, 5]], ['event 12', [[106, 62, 76, 99, 87, 82, 116, 114, 149], 4], [1.0, 9]]], [['event 4', [[101, 111, 104, 54, 138, None], 3], [1.0, 5]], ['event 11', [[189, 235, 240, 199, 215], 4], [2.2, 5]], ['event 14', [[125, 133, 111, 191, 191, 148, 241], 3], [1.4, 6]], ['event 15', [[381, 371, 330, 376, 403, 335, 339, 348, None], 3], [3.6, 8]], ['event 16', [[-23, -62, -35, -143], 4], None], ['event 17', [[432, 385, 408, 473], 4], None], ['event 18', [[9, 11, -21, 37, -4, 11], 3], [0.1, 6]], ['event 19', [[160, 170, 168, 12, None], 3], [1.7, 3]]], [['event 4', [[101, 111, 104, 54, 138, None], 3], [1.0, 5]], ['event 18', [[9, 11, -21, 37, -4, 11], 3], [0.1, 6]], ['event 21', [[208, 239, 263, 248, 235, 223], 3], [2.4, 6]], ['event 22', [[347, 369, 375, 379, None], 3], [3.7, 4]], ['event 23', [[103, 63, 30, 93], 4], [0.8, 4]], ['event 24', [[142, 93, 150, 136, 125, 91, 82, 115, None], 4], [1.2, 8]], ['event 25', [[545, 488, 482, 494, 603, None], 4], None], ['event 26', [[55, 21, 75, 67, 25, 28], 3], [0.4, 6]]], [['event 4', [[101, 111, 104, 54, 138, None], 3], [1.0, 5]], ['event 23', [[103, 63, 30, 93], 4], [0.8, 4]], ['event 28', [[483, 485, 434, 486, 504, 514, None], 3], [4.9, 5]], ['event 29', [[462, 439, 425, 447, 432, 317], 3], [4.4, 5]], ['event 30', [[34, 54, -15, -27], 4], [0.1, 4]], ['event 31', [[269, 318, 251, 298, 329], 3], [3.0, 5]], ['event 32', [[231, 238, 217, 239, 214, 186, 164, 154, None], 3], [2.2, 6]], ['event 33', [[523, 505, 529, 488, 514], 3], [5.1, 5]]]]\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 a seismological magnitude procedure; constants and tables are fixed by the contract and no claim of agency or 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-seismic_magnitude_estimation-network-magnitude-outlier-window-inclusivity","generated_at":"2026-09-29T14:48:29.105503+00:00","license":"CC0-1.0","python":"3.12.14","seed":1,"split":"open-access"},"relevance":"The published event magnitude is a robust network average of station magnitudes.","repair":"Keep stations with |m - median| <= 0.50.","root_cause":"The outlier window is exclusive.","sha256":"1d4016d095e312b43c1167f1ab6fee003f74cb5bfaa7d7a8a06d751eacc93549","title":"Network magnitude from station magnitudes: outlier window inclusivity · case 01","variant":1,"variant_policy":"Five numbered records share a model and may reuse boundary fixtures.","verification":{"attempt":{"elapsed_ms":38.555,"exit_code":1,"observations":[{"actual":null,"check":"event 0","expected":[3.3,4],"passed":false},{"actual":null,"check":"event 1","expected":[3.6,8],"passed":false},{"actual":[5.3,3],"check":"event 2","expected":[5.3,8],"passed":false},{"actual":null,"check":"event 3","expected":[-0.4,4],"passed":false},{"actual":null,"check":"event 4","expected":[1.0,5],"passed":false},{"actual":null,"check":"event 5","expected":[1.7,8],"passed":false},{"actual":null,"check":"event 6","expected":[4.0,7],"passed":false},{"actual":null,"check":"event 7","expected":[4.9,6],"passed":false}],"passed":false,"stderr":"","stdout":"{\"observations\": [{\"check\": \"event 0\", \"actual\": null, \"expected\": [3.3, 4], \"passed\": false}, {\"check\": \"event 1\", \"actual\": null, \"expected\": [3.6, 8], \"passed\": false}, {\"check\": \"event 2\", \"actual\": [5.3, 3], \"expected\": [5.3, 8], \"passed\": false}, {\"check\": \"event 3\", \"actual\": null, \"expected\": [-0.4, 4], \"passed\": false}, {\"check\": \"event 4\", \"actual\": null, \"expected\": [1.0, 5], \"passed\": false}, {\"check\": \"event 5\", \"actual\": null, \"expected\": [1.7, 8], \"passed\": false}, {\"check\": \"event 6\", \"actual\": null, \"expected\": [4.0, 7], \"passed\": false}, {\"check\": \"event 7\", \"actual\": null, \"expected\": [4.9, 6], \"passed\": false}], \"passed\": false}\n"},"broken":{"elapsed_ms":38.204,"exit_code":1,"observations":[{"actual":[3.3,4],"check":"event 0","expected":[3.3,4],"passed":true},{"actual":[3.6,8],"check":"event 1","expected":[3.6,8],"passed":true},{"actual":[5.3,8],"check":"event 2","expected":[5.3,8],"passed":true},{"actual":[-0.4,4],"check":"event 3","expected":[-0.4,4],"passed":true},{"actual":[1.1,4],"check":"event 4","expected":[1.0,5],"passed":false},{"actual":[1.7,8],"check":"event 5","expected":[1.7,8],"passed":true},{"actual":[4.0,7],"check":"event 6","expected":[4.0,7],"passed":true},{"actual":[4.9,6],"check":"event 7","expected":[4.9,6],"passed":true}],"passed":false,"stderr":"","stdout":"{\"observations\": [{\"check\": \"event 0\", \"actual\": [3.3, 4], \"expected\": [3.3, 4], \"passed\": true}, {\"check\": \"event 1\", \"actual\": [3.6, 8], \"expected\": [3.6, 8], \"passed\": true}, {\"check\": \"event 2\", \"actual\": [5.3, 8], \"expected\": [5.3, 8], \"passed\": true}, {\"check\": \"event 3\", \"actual\": [-0.4, 4], \"expected\": [-0.4, 4], \"passed\": true}, {\"check\": \"event 4\", \"actual\": [1.1, 4], \"expected\": [1.0, 5], \"passed\": false}, {\"check\": \"event 5\", \"actual\": [1.7, 8], \"expected\": [1.7, 8], \"passed\": true}, {\"check\": \"event 6\", \"actual\": [4.0, 7], \"expected\": [4.0, 7], \"passed\": true}, {\"check\": \"event 7\", \"actual\": [4.9, 6], \"expected\": [4.9, 6], \"passed\": true}], \"passed\": false}\n"},"fixed":{"elapsed_ms":39.308,"exit_code":0,"observations":[{"actual":[3.3,4],"check":"event 0","expected":[3.3,4],"passed":true},{"actual":[3.6,8],"check":"event 1","expected":[3.6,8],"passed":true},{"actual":[5.3,8],"check":"event 2","expected":[5.3,8],"passed":true},{"actual":[-0.4,4],"check":"event 3","expected":[-0.4,4],"passed":true},{"actual":[1.0,5],"check":"event 4","expected":[1.0,5],"passed":true},{"actual":[1.7,8],"check":"event 5","expected":[1.7,8],"passed":true},{"actual":[4.0,7],"check":"event 6","expected":[4.0,7],"passed":true},{"actual":[4.9,6],"check":"event 7","expected":[4.9,6],"passed":true}],"passed":true,"stderr":"","stdout":"{\"observations\": [{\"check\": \"event 0\", \"actual\": [3.3, 4], \"expected\": [3.3, 4], \"passed\": true}, {\"check\": \"event 1\", \"actual\": [3.6, 8], \"expected\": [3.6, 8], \"passed\": true}, {\"check\": \"event 2\", \"actual\": [5.3, 8], \"expected\": [5.3, 8], \"passed\": true}, {\"check\": \"event 3\", \"actual\": [-0.4, 4], \"expected\": [-0.4, 4], \"passed\": true}, {\"check\": \"event 4\", \"actual\": [1.0, 5], \"expected\": [1.0, 5], \"passed\": true}, {\"check\": \"event 5\", \"actual\": [1.7, 8], \"expected\": [1.7, 8], \"passed\": true}, {\"check\": \"event 6\", \"actual\": [4.0, 7], \"expected\": [4.0, 7], \"passed\": true}, {\"check\": \"event 7\", \"actual\": [4.9, 6], \"expected\": [4.9, 6], \"passed\": true}], \"passed\": true}\n"}},"verified":true,"visibility":"public"}