{"abstract":"Degrees of freedom are inflated, making small-sample p-values too small.","category":"Experiment statistics","checks":8,"contract":"a is control, b treatment. With sample variances (divisor n - 1), t = (mean_b - mean_a) / sqrt(va/na + vb/nb) and Welch-Satterthwaite df = (va/na + vb/nb)^2 / ((va/na)^2/(na-1) + (vb/nb)^2/(nb-1)). Fewer than two values in an arm or zero total variance -> None. Return [round(t, 6), round(df, 6)].","contract_signature":"a, b","evaluation_group":"w2-experiment-statistics-welch-t","failed_approach":"Pooling the squared terms over na + nb - 2 is not the Satterthwaite form.","family":"w2-experiment-statistics-welch-t-satterthwaite-denominator","id":"FA-74396","implementations":{"attempt":{"sha256":"499489c06bc45ef98be8d625c57d2a3ec22b47fe13c8d1e2cdfb639cf0c73a94","source":"\"\"\"Failure Map reference implementation. Python standard library only.\"\"\"\nimport json\nimport math\nN = 1\nobservations = []\ndef solve(a, b):\n    na, nb = len(a), len(b)\n    if na < 2 or nb < 2:\n        return None\n    ma, mb = sum(a) / na, sum(b) / nb\n    va = sum((x - ma) ** 2 for x in a) / (na - 1)\n    vb = sum((x - mb) ** 2 for x in b) / (nb - 1)\n    sa, sb = va / na, vb / nb\n    if sa + sb == 0:\n        return None\n    t = (mb - ma) / math.sqrt(sa + sb)\n    df = (sa + sb) ** 2 / ((sa ** 2 + sb ** 2) / (na + nb - 2))\n    return [round(t, 6), round(df, 6)]\ndef check(label, actual, expected):\n    observations.append({\"check\": label, \"actual\": actual, \"expected\": expected, \"passed\": actual == expected})\nfixtures = [[('unequal sizes and variances', [[1, 2, 3, 4], [2, 4, 6, 8, 10, 12]], [2.713602, 6.594671]),\n  ('two-point arms', [[0, 2], [5, 9]], [2.683282, 1.470588]),\n  ('one arm constant', [[3, 3, 3], [1, 5, 9]], [0.866025, 2.0]),\n  ('equal arms give zero t', [[1, 2, 3], [1, 2, 3]], [0.0, 4.0]),\n  ('negative effect', [[10, 12, 14, 16], [1, 3, 2]], [-7.778175, 4.075472]),\n  ('metric sample 1', [[0, 18, 6, 6], [3, 7, 11, 17, 25, 22]], [1.290726, 7.219744]),\n  ('metric sample 2', [[12, 18, 10, 0, 10], [15, 23, 29, 2, 16]], [1.302114, 6.806789]),\n  ('metric sample 3', [[5, 3], [21, 5, 12, 23]], [2.622967, 3.321892])],\n [('two-point arms', [[0, 2], [5, 9]], [2.683282, 1.470588]),\n  ('one arm constant', [[3, 3, 3], [1, 5, 9]], [0.866025, 2.0]),\n  ('equal arms give zero t', [[1, 2, 3], [1, 2, 3]], [0.0, 4.0]),\n  ('negative effect', [[10, 12, 14, 16], [1, 3, 2]], [-7.778175, 4.075472]),\n  ('single observation arm', [[1], [2, 3]], None),\n  ('metric sample 3', [[5, 3], [21, 5, 12, 23]], [2.622967, 3.321892]),\n  ('metric sample 6', [[13, 17, 16, 14, 0, 13], [10, 0, 6, 6, 0, 16, 5, 16]], [-1.428489, 10.999617]),\n  ('metric sample 7', [[0, 9, 16, 8, 15, 5, 3], [29, 4, 20, 26, 11, 20]], [2.332551, 8.238859])],\n [('unequal sizes and variances', [[1, 2, 3, 4], [2, 4, 6, 8, 10, 12]], [2.713602, 6.594671]),\n  ('one arm constant', [[3, 3, 3], [1, 5, 9]], [0.866025, 2.0]),\n  ('equal arms give zero t', [[1, 2, 3], [1, 2, 3]], [0.0, 4.0]),\n  ('negative effect', [[10, 12, 14, 16], [1, 3, 2]], [-7.778175, 4.075472]),\n  ('single observation arm', [[1], [2, 3]], None),\n  ('metric sample 10', [[12, 13, 10, 4, 6], [29, 16, 23, 26, 11, 7, 18, 20, 10]], [2.882751, 11.994853]),\n  ('metric sample 11', [[6, 10], [16, 12, 20, 6, 18]], [2.007859, 4.050223]),\n  ('metric sample 12', [[7, 0], [27, 17, 26, 19, 20, 24, 1]], [3.236139, 3.199156])],\n [('unequal sizes and variances', [[1, 2, 3, 4], [2, 4, 6, 8, 10, 12]], [2.713602, 6.594671]),\n  ('two-point arms', [[0, 2], [5, 9]], [2.683282, 1.470588]),\n  ('equal arms give zero t', [[1, 2, 3], [1, 2, 3]], [0.0, 4.0]),\n  ('negative effect', [[10, 12, 14, 16], [1, 3, 2]], [-7.778175, 4.075472]),\n  ('single observation arm', [[1], [2, 3]], None),\n  ('metric sample 16',\n   [[13, 7, 4, 9, 13, 12], [20, 21, 17, 13, 14, 25, 13, 11, 16, 14, 6]],\n   [2.66816, 13.725637]),\n  ('metric sample 17', [[10, 4, 0, 14], [6, 17, 1, 13, 11]], [0.622825, 6.572986]),\n  ('metric sample 18', [[18, 12, 1, 1], [12, 28, 6, 18, 8, 4, 15, 27, 24]], [1.497776, 6.245264])],\n [('unequal sizes and variances', [[1, 2, 3, 4], [2, 4, 6, 8, 10, 12]], [2.713602, 6.594671]),\n  ('two-point arms', [[0, 2], [5, 9]], [2.683282, 1.470588]),\n  ('one arm constant', [[3, 3, 3], [1, 5, 9]], [0.866025, 2.0]),\n  ('negative effect', [[10, 12, 14, 16], [1, 3, 2]], [-7.778175, 4.075472]),\n  ('single observation arm', [[1], [2, 3]], None),\n  ('metric sample 21', [[0, 8, 15, 10], [28, 21, 11, 23, 28, 28]], [3.601238, 6.91205]),\n  ('metric sample 22', [[1, 5, 15], [29, 28, 6, 25, 5, 12]], [1.705196, 6.118881]),\n  ('metric sample 24', [[18, 12, 5, 4, 0, 0, 6], [21, 22, 12, 13]], [2.940849, 7.679354])]]\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":"3d5b4d10bad5ca65ae0e6e816ba775e33678f6ad2f43f669f47d97de47351c9b","source":"\"\"\"Failure Map reference implementation. Python standard library only.\"\"\"\nimport json\nimport math\nN = 1\nobservations = []\ndef solve(a, b):\n    na, nb = len(a), len(b)\n    if na < 2 or nb < 2:\n        return None\n    ma, mb = sum(a) / na, sum(b) / nb\n    va = sum((x - ma) ** 2 for x in a) / (na - 1)\n    vb = sum((x - mb) ** 2 for x in b) / (nb - 1)\n    sa, sb = va / na, vb / nb\n    if sa + sb == 0:\n        return None\n    t = (mb - ma) / math.sqrt(sa + sb)\n    df = (sa + sb) ** 2 / (sa ** 2 / na + sb ** 2 / nb)\n    return [round(t, 6), round(df, 6)]\ndef check(label, actual, expected):\n    observations.append({\"check\": label, \"actual\": actual, \"expected\": expected, \"passed\": actual == expected})\nfixtures = [[('unequal sizes and variances', [[1, 2, 3, 4], [2, 4, 6, 8, 10, 12]], [2.713602, 6.594671]),\n  ('two-point arms', [[0, 2], [5, 9]], [2.683282, 1.470588]),\n  ('one arm constant', [[3, 3, 3], [1, 5, 9]], [0.866025, 2.0]),\n  ('equal arms give zero t', [[1, 2, 3], [1, 2, 3]], [0.0, 4.0]),\n  ('negative effect', [[10, 12, 14, 16], [1, 3, 2]], [-7.778175, 4.075472]),\n  ('metric sample 1', [[0, 18, 6, 6], [3, 7, 11, 17, 25, 22]], [1.290726, 7.219744]),\n  ('metric sample 2', [[12, 18, 10, 0, 10], [15, 23, 29, 2, 16]], [1.302114, 6.806789]),\n  ('metric sample 3', [[5, 3], [21, 5, 12, 23]], [2.622967, 3.321892])],\n [('two-point arms', [[0, 2], [5, 9]], [2.683282, 1.470588]),\n  ('one arm constant', [[3, 3, 3], [1, 5, 9]], [0.866025, 2.0]),\n  ('equal arms give zero t', [[1, 2, 3], [1, 2, 3]], [0.0, 4.0]),\n  ('negative effect', [[10, 12, 14, 16], [1, 3, 2]], [-7.778175, 4.075472]),\n  ('single observation arm', [[1], [2, 3]], None),\n  ('metric sample 3', [[5, 3], [21, 5, 12, 23]], [2.622967, 3.321892]),\n  ('metric sample 6', [[13, 17, 16, 14, 0, 13], [10, 0, 6, 6, 0, 16, 5, 16]], [-1.428489, 10.999617]),\n  ('metric sample 7', [[0, 9, 16, 8, 15, 5, 3], [29, 4, 20, 26, 11, 20]], [2.332551, 8.238859])],\n [('unequal sizes and variances', [[1, 2, 3, 4], [2, 4, 6, 8, 10, 12]], [2.713602, 6.594671]),\n  ('one arm constant', [[3, 3, 3], [1, 5, 9]], [0.866025, 2.0]),\n  ('equal arms give zero t', [[1, 2, 3], [1, 2, 3]], [0.0, 4.0]),\n  ('negative effect', [[10, 12, 14, 16], [1, 3, 2]], [-7.778175, 4.075472]),\n  ('single observation arm', [[1], [2, 3]], None),\n  ('metric sample 10', [[12, 13, 10, 4, 6], [29, 16, 23, 26, 11, 7, 18, 20, 10]], [2.882751, 11.994853]),\n  ('metric sample 11', [[6, 10], [16, 12, 20, 6, 18]], [2.007859, 4.050223]),\n  ('metric sample 12', [[7, 0], [27, 17, 26, 19, 20, 24, 1]], [3.236139, 3.199156])],\n [('unequal sizes and variances', [[1, 2, 3, 4], [2, 4, 6, 8, 10, 12]], [2.713602, 6.594671]),\n  ('two-point arms', [[0, 2], [5, 9]], [2.683282, 1.470588]),\n  ('equal arms give zero t', [[1, 2, 3], [1, 2, 3]], [0.0, 4.0]),\n  ('negative effect', [[10, 12, 14, 16], [1, 3, 2]], [-7.778175, 4.075472]),\n  ('single observation arm', [[1], [2, 3]], None),\n  ('metric sample 16',\n   [[13, 7, 4, 9, 13, 12], [20, 21, 17, 13, 14, 25, 13, 11, 16, 14, 6]],\n   [2.66816, 13.725637]),\n  ('metric sample 17', [[10, 4, 0, 14], [6, 17, 1, 13, 11]], [0.622825, 6.572986]),\n  ('metric sample 18', [[18, 12, 1, 1], [12, 28, 6, 18, 8, 4, 15, 27, 24]], [1.497776, 6.245264])],\n [('unequal sizes and variances', [[1, 2, 3, 4], [2, 4, 6, 8, 10, 12]], [2.713602, 6.594671]),\n  ('two-point arms', [[0, 2], [5, 9]], [2.683282, 1.470588]),\n  ('one arm constant', [[3, 3, 3], [1, 5, 9]], [0.866025, 2.0]),\n  ('negative effect', [[10, 12, 14, 16], [1, 3, 2]], [-7.778175, 4.075472]),\n  ('single observation arm', [[1], [2, 3]], None),\n  ('metric sample 21', [[0, 8, 15, 10], [28, 21, 11, 23, 28, 28]], [3.601238, 6.91205]),\n  ('metric sample 22', [[1, 5, 15], [29, 28, 6, 25, 5, 12]], [1.705196, 6.118881]),\n  ('metric sample 24', [[18, 12, 5, 4, 0, 0, 6], [21, 22, 12, 13]], [2.940849, 7.679354])]]\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":"A deterministic toy experiment-analysis model with a stipulated contract; results are rounded and are not a substitute for a validated statistics package. 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-experiment-statistics-welch-t-satterthwaite-denominator","generated_at":"2026-09-29T14:48:56.520725+00:00","license":"CC0-1.0","python":"3.12.14","seed":1,"split":"open-access"},"relevance":"Online experiment readouts drive launch decisions; a silent formula slip flips conclusions.","root_cause":"The df denominator uses (s^2/n)^2 / n instead of / (n - 1).","sha256":"27bb17453c34beb01e6b9dcf255b504dca72d299fe15740c9f17c6ad49fb2410","title":"Welch unequal-variance t statistic: Welch df divides by arm sizes · 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":36.544,"exit_code":1,"observations":[{"actual":[2.713602,10.76885],"check":"unequal sizes and variances","expected":[2.713602,6.594671],"passed":false},{"actual":[2.683282,2.941176],"check":"two-point arms","expected":[2.683282,1.470588],"passed":false},{"actual":[0.866025,4.0],"check":"one arm constant","expected":[0.866025,2.0],"passed":false},{"actual":[0.0,8.0],"check":"equal arms give zero t","expected":[0.0,4.0],"passed":false},{"actual":[-7.778175,6.923077],"check":"negative effect","expected":[-7.778175,4.075472],"passed":false},{"actual":[1.290726,15.925698],"check":"metric sample 1","expected":[1.290726,7.219744],"passed":false},{"actual":[1.302114,13.613578],"check":"metric sample 2","expected":[1.302114,6.806789],"passed":false},{"actual":[2.622967,4.458366],"check":"metric sample 3","expected":[2.622967,3.321892],"passed":false}],"passed":false,"stderr":"","stdout":"{\"observations\": [{\"check\": \"unequal sizes and variances\", \"actual\": [2.713602, 10.76885], \"expected\": [2.713602, 6.594671], \"passed\": false}, {\"check\": \"two-point arms\", \"actual\": [2.683282, 2.941176], \"expected\": [2.683282, 1.470588], \"passed\": false}, {\"check\": \"one arm constant\", \"actual\": [0.866025, 4.0], \"expected\": [0.866025, 2.0], \"passed\": false}, {\"check\": \"equal arms give zero t\", \"actual\": [0.0, 8.0], \"expected\": [0.0, 4.0], \"passed\": false}, {\"check\": \"negative effect\", \"actual\": [-7.778175, 6.923077], \"expected\": [-7.778175, 4.075472], \"passed\": false}, {\"check\": \"metric sample 1\", \"actual\": [1.290726, 15.925698], \"expected\": [1.290726, 7.219744], \"passed\": false}, {\"check\": \"metric sample 2\", \"actual\": [1.302114, 13.613578], \"expected\": [1.302114, 6.806789], \"passed\": false}, {\"check\": \"metric sample 3\", \"actual\": [2.622967, 4.458366], \"expected\": [2.622967, 3.321892], \"passed\": false}], \"passed\": false}\n"},"broken":{"elapsed_ms":38.433,"exit_code":1,"observations":[{"actual":[2.713602,7.953743],"check":"unequal sizes and variances","expected":[2.713602,6.594671],"passed":false},{"actual":[2.683282,2.941176],"check":"two-point arms","expected":[2.683282,1.470588],"passed":false},{"actual":[0.866025,3.0],"check":"one arm constant","expected":[0.866025,2.0],"passed":false},{"actual":[0.0,6.0],"check":"equal arms give zero t","expected":[0.0,4.0],"passed":false},{"actual":[-7.778175,5.468354],"check":"negative effect","expected":[-7.778175,4.075472],"passed":false},{"actual":[1.290726,9.302438],"check":"metric sample 1","expected":[1.290726,7.219744],"passed":false},{"actual":[1.302114,8.508486],"check":"metric sample 2","expected":[1.302114,6.806789],"passed":false},{"actual":[2.622967,4.443729],"check":"metric sample 3","expected":[2.622967,3.321892],"passed":false}],"passed":false,"stderr":"","stdout":"{\"observations\": [{\"check\": \"unequal sizes and variances\", \"actual\": [2.713602, 7.953743], \"expected\": [2.713602, 6.594671], \"passed\": false}, {\"check\": \"two-point arms\", \"actual\": [2.683282, 2.941176], \"expected\": [2.683282, 1.470588], \"passed\": false}, {\"check\": \"one arm constant\", \"actual\": [0.866025, 3.0], \"expected\": [0.866025, 2.0], \"passed\": false}, {\"check\": \"equal arms give zero t\", \"actual\": [0.0, 6.0], \"expected\": [0.0, 4.0], \"passed\": false}, {\"check\": \"negative effect\", \"actual\": [-7.778175, 5.468354], \"expected\": [-7.778175, 4.075472], \"passed\": false}, {\"check\": \"metric sample 1\", \"actual\": [1.290726, 9.302438], \"expected\": [1.290726, 7.219744], \"passed\": false}, {\"check\": \"metric sample 2\", \"actual\": [1.302114, 8.508486], \"expected\": [1.302114, 6.806789], \"passed\": false}, {\"check\": \"metric sample 3\", \"actual\": [2.622967, 4.443729], \"expected\": [2.622967, 3.321892], \"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."}}