{"abstract":"A duplicated look slips through validation and reports zero alpha spent.","category":"Experiment statistics","checks":8,"contract":"Cumulative alpha spent at information fraction t is 2 - 2 Phi(z_{1-alpha/2} / sqrt(t)) (t capped at 1). Information fractions must strictly increase from 0, otherwise return None. Return the incremental alpha spent at each look rounded to 6.","contract_signature":"info_fractions, alpha","evaluation_group":"w2-experiment-statistics-alpha-spending","failed_approach":"Rejecting only nonpositive fractions accepts decreasing schedules.","family":"w2-experiment-statistics-alpha-spending-monotone-looks","id":"FA-74741","implementations":{"attempt":{"sha256":"2cd4aee30d55480780e4c3d47b646c32f9507ac0604d9579d1d6b98db020af67","source":"\"\"\"Failure Map reference implementation. Python standard library only.\"\"\"\nimport json\nimport math\nimport statistics\nN = 1\nobservations = []\ndef solve(info_fractions, alpha):\n    nd = statistics.NormalDist()\n    z = nd.inv_cdf(1 - alpha / 2)\n    out = []\n    prev = 0.0\n    last_t = 0.0\n    for t in info_fractions:\n        if t <= 0:\n            return None\n        t = min(t, 1.0)\n        spent = 2 - 2 * nd.cdf(z / math.sqrt(t))\n        out.append(round(spent - prev, 6))\n        prev = spent\n        last_t = t\n    return out\ndef check(label, actual, expected):\n    observations.append({\"check\": label, \"actual\": actual, \"expected\": expected, \"passed\": actual == expected})\nfixtures = [[('four equally spaced looks', [[0.25, 0.5, 0.75, 1.0], 0.05], [8.9e-05, 0.005486, 0.018051, 0.026375]),\n  ('single final look spends all alpha', [[1.0], 0.05], [0.05]),\n  ('two looks at stricter alpha', [[0.5, 1.0], 0.01], [0.00027, 0.00973]),\n  ('repeated fraction is invalid', [[0.5, 0.5], 0.05], None),\n  ('decreasing fractions are invalid', [[0.6, 0.4], 0.05], None),\n  ('look schedule sample 1', [[0.6, 0.8, 1.0], 0.01], [0.000883, 0.003095, 0.006022]),\n  ('look schedule sample 2', [[0.2, 0.4, 0.5, 1.0], 0.1], [0.000235, 0.009067, 0.010707, 0.079991]),\n  ('look schedule sample 3', [[0.25, 0.4, 0.6, 0.75], 0.1], [0.001003, 0.008299, 0.02441, 0.023811])],\n [('single final look spends all alpha', [[1.0], 0.05], [0.05]),\n  ('two looks at stricter alpha', [[0.5, 1.0], 0.01], [0.00027, 0.00973]),\n  ('repeated fraction is invalid', [[0.5, 0.5], 0.05], None),\n  ('decreasing fractions are invalid', [[0.6, 0.4], 0.05], None),\n  ('overrun beyond full information', [[0.8, 1.2], 0.05], [0.02843, 0.02157]),\n  ('look schedule sample 6', [[0.2], 0.1], [0.000235]),\n  ('look schedule sample 31', [[0.2, 0.4, 0.6, 0.6], 0.05], None),\n  ('look schedule sample 35', [[0.2, 0.5, 0.75, 1.0, 1.0], 0.05], None)],\n [('four equally spaced looks', [[0.25, 0.5, 0.75, 1.0], 0.05], [8.9e-05, 0.005486, 0.018051, 0.026375]),\n  ('two looks at stricter alpha', [[0.5, 1.0], 0.01], [0.00027, 0.00973]),\n  ('repeated fraction is invalid', [[0.5, 0.5], 0.05], None),\n  ('decreasing fractions are invalid', [[0.6, 0.4], 0.05], None),\n  ('overrun beyond full information', [[0.8, 1.2], 0.05], [0.02843, 0.02157]),\n  ('look schedule sample 11', [[0.2, 0.25, 0.8], 0.01], [0.0, 0.0, 0.003978]),\n  ('look schedule sample 12', [[0.5, 0.6, 0.6], 0.01], None),\n  ('look schedule sample 13', [[0.25, 0.5, 0.8, 1.0], 0.1], [0.001003, 0.019006, 0.045906, 0.034085])],\n [('four equally spaced looks', [[0.25, 0.5, 0.75, 1.0], 0.05], [8.9e-05, 0.005486, 0.018051, 0.026375]),\n  ('single final look spends all alpha', [[1.0], 0.05], [0.05]),\n  ('repeated fraction is invalid', [[0.5, 0.5], 0.05], None),\n  ('decreasing fractions are invalid', [[0.6, 0.4], 0.05], None),\n  ('overrun beyond full information', [[0.8, 1.2], 0.05], [0.02843, 0.02157]),\n  ('look schedule sample 16', [[0.4, 0.5, 0.5], 0.1], None),\n  ('look schedule sample 35', [[0.2, 0.5, 0.75, 1.0, 1.0], 0.05], None),\n  ('look schedule sample 38', [[0.25, 0.8, 0.8], 0.05], None)],\n [('four equally spaced looks', [[0.25, 0.5, 0.75, 1.0], 0.05], [8.9e-05, 0.005486, 0.018051, 0.026375]),\n  ('single final look spends all alpha', [[1.0], 0.05], [0.05]),\n  ('two looks at stricter alpha', [[0.5, 1.0], 0.01], [0.00027, 0.00973]),\n  ('decreasing fractions are invalid', [[0.6, 0.4], 0.05], None),\n  ('overrun beyond full information', [[0.8, 1.2], 0.05], [0.02843, 0.02157]),\n  ('look schedule sample 9', [[0.4, 0.6, 0.75, 1.0, 1.0], 0.1], None),\n  ('look schedule sample 16', [[0.4, 0.5, 0.5], 0.1], None),\n  ('look schedule sample 21', [[0.2, 0.4, 0.8], 0.01], [0.0, 4.6e-05, 0.003932])]]\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":"909369fe8acfc06aca2957c49e129ee645f4b32283a34e347964cddc52ba26fc","source":"\"\"\"Failure Map reference implementation. Python standard library only.\"\"\"\nimport json\nimport math\nimport statistics\nN = 1\nobservations = []\ndef solve(info_fractions, alpha):\n    nd = statistics.NormalDist()\n    z = nd.inv_cdf(1 - alpha / 2)\n    out = []\n    prev = 0.0\n    last_t = 0.0\n    for t in info_fractions:\n        if t < last_t:\n            return None\n        t = min(t, 1.0)\n        spent = 2 - 2 * nd.cdf(z / math.sqrt(t))\n        out.append(round(spent - prev, 6))\n        prev = spent\n        last_t = t\n    return out\ndef check(label, actual, expected):\n    observations.append({\"check\": label, \"actual\": actual, \"expected\": expected, \"passed\": actual == expected})\nfixtures = [[('four equally spaced looks', [[0.25, 0.5, 0.75, 1.0], 0.05], [8.9e-05, 0.005486, 0.018051, 0.026375]),\n  ('single final look spends all alpha', [[1.0], 0.05], [0.05]),\n  ('two looks at stricter alpha', [[0.5, 1.0], 0.01], [0.00027, 0.00973]),\n  ('repeated fraction is invalid', [[0.5, 0.5], 0.05], None),\n  ('decreasing fractions are invalid', [[0.6, 0.4], 0.05], None),\n  ('look schedule sample 1', [[0.6, 0.8, 1.0], 0.01], [0.000883, 0.003095, 0.006022]),\n  ('look schedule sample 2', [[0.2, 0.4, 0.5, 1.0], 0.1], [0.000235, 0.009067, 0.010707, 0.079991]),\n  ('look schedule sample 3', [[0.25, 0.4, 0.6, 0.75], 0.1], [0.001003, 0.008299, 0.02441, 0.023811])],\n [('single final look spends all alpha', [[1.0], 0.05], [0.05]),\n  ('two looks at stricter alpha', [[0.5, 1.0], 0.01], [0.00027, 0.00973]),\n  ('repeated fraction is invalid', [[0.5, 0.5], 0.05], None),\n  ('decreasing fractions are invalid', [[0.6, 0.4], 0.05], None),\n  ('overrun beyond full information', [[0.8, 1.2], 0.05], [0.02843, 0.02157]),\n  ('look schedule sample 6', [[0.2], 0.1], [0.000235]),\n  ('look schedule sample 31', [[0.2, 0.4, 0.6, 0.6], 0.05], None),\n  ('look schedule sample 35', [[0.2, 0.5, 0.75, 1.0, 1.0], 0.05], None)],\n [('four equally spaced looks', [[0.25, 0.5, 0.75, 1.0], 0.05], [8.9e-05, 0.005486, 0.018051, 0.026375]),\n  ('two looks at stricter alpha', [[0.5, 1.0], 0.01], [0.00027, 0.00973]),\n  ('repeated fraction is invalid', [[0.5, 0.5], 0.05], None),\n  ('decreasing fractions are invalid', [[0.6, 0.4], 0.05], None),\n  ('overrun beyond full information', [[0.8, 1.2], 0.05], [0.02843, 0.02157]),\n  ('look schedule sample 11', [[0.2, 0.25, 0.8], 0.01], [0.0, 0.0, 0.003978]),\n  ('look schedule sample 12', [[0.5, 0.6, 0.6], 0.01], None),\n  ('look schedule sample 13', [[0.25, 0.5, 0.8, 1.0], 0.1], [0.001003, 0.019006, 0.045906, 0.034085])],\n [('four equally spaced looks', [[0.25, 0.5, 0.75, 1.0], 0.05], [8.9e-05, 0.005486, 0.018051, 0.026375]),\n  ('single final look spends all alpha', [[1.0], 0.05], [0.05]),\n  ('repeated fraction is invalid', [[0.5, 0.5], 0.05], None),\n  ('decreasing fractions are invalid', [[0.6, 0.4], 0.05], None),\n  ('overrun beyond full information', [[0.8, 1.2], 0.05], [0.02843, 0.02157]),\n  ('look schedule sample 16', [[0.4, 0.5, 0.5], 0.1], None),\n  ('look schedule sample 35', [[0.2, 0.5, 0.75, 1.0, 1.0], 0.05], None),\n  ('look schedule sample 38', [[0.25, 0.8, 0.8], 0.05], None)],\n [('four equally spaced looks', [[0.25, 0.5, 0.75, 1.0], 0.05], [8.9e-05, 0.005486, 0.018051, 0.026375]),\n  ('single final look spends all alpha', [[1.0], 0.05], [0.05]),\n  ('two looks at stricter alpha', [[0.5, 1.0], 0.01], [0.00027, 0.00973]),\n  ('decreasing fractions are invalid', [[0.6, 0.4], 0.05], None),\n  ('overrun beyond full information', [[0.8, 1.2], 0.05], [0.02843, 0.02157]),\n  ('look schedule sample 9', [[0.4, 0.6, 0.75, 1.0, 1.0], 0.1], None),\n  ('look schedule sample 16', [[0.4, 0.5, 0.5], 0.1], None),\n  ('look schedule sample 21', [[0.2, 0.4, 0.8], 0.01], [0.0, 4.6e-05, 0.003932])]]\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-alpha-spending-monotone-looks","generated_at":"2026-09-29T14:48:59.614197+00:00","license":"CC0-1.0","python":"3.12.14","seed":1,"split":"open-access"},"relevance":"Spending functions let teams peek at experiments without inflating the false positive rate.","root_cause":"Validation rejects only decreasing fractions.","sha256":"e2acb611110c797c567175831217da5a947c86e589d01ffcb224d95da53a62cd","title":"O'Brien-Fleming type alpha spending: Repeated information fractions are accepted · 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":45.425,"exit_code":1,"observations":[{"actual":[8.9e-05,0.005486,0.018051,0.026375],"check":"four equally spaced looks","expected":[8.9e-05,0.005486,0.018051,0.026375],"passed":true},{"actual":[0.05],"check":"single final look spends all alpha","expected":[0.05],"passed":true},{"actual":[0.00027,0.00973],"check":"two looks at stricter alpha","expected":[0.00027,0.00973],"passed":true},{"actual":[0.005575,0.0],"check":"repeated fraction is invalid","expected":null,"passed":false},{"actual":[0.011396,-0.009455],"check":"decreasing fractions are invalid","expected":null,"passed":false},{"actual":[0.000883,0.003095,0.006022],"check":"look schedule sample 1","expected":[0.000883,0.003095,0.006022],"passed":true},{"actual":[0.000235,0.009067,0.010707,0.079991],"check":"look schedule sample 2","expected":[0.000235,0.009067,0.010707,0.079991],"passed":true},{"actual":[0.001003,0.008299,0.02441,0.023811],"check":"look schedule sample 3","expected":[0.001003,0.008299,0.02441,0.023811],"passed":true}],"passed":false,"stderr":"","stdout":"{\"observations\": [{\"check\": \"four equally spaced looks\", \"actual\": [8.9e-05, 0.005486, 0.018051, 0.026375], \"expected\": [8.9e-05, 0.005486, 0.018051, 0.026375], \"passed\": true}, {\"check\": \"single final look spends all alpha\", \"actual\": [0.05], \"expected\": [0.05], \"passed\": true}, {\"check\": \"two looks at stricter alpha\", \"actual\": [0.00027, 0.00973], \"expected\": [0.00027, 0.00973], \"passed\": true}, {\"check\": \"repeated fraction is invalid\", \"actual\": [0.005575, 0.0], \"expected\": null, \"passed\": false}, {\"check\": \"decreasing fractions are invalid\", \"actual\": [0.011396, -0.009455], \"expected\": null, \"passed\": false}, {\"check\": \"look schedule sample 1\", \"actual\": [0.000883, 0.003095, 0.006022], \"expected\": [0.000883, 0.003095, 0.006022], \"passed\": true}, {\"check\": \"look schedule sample 2\", \"actual\": [0.000235, 0.009067, 0.010707, 0.079991], \"expected\": [0.000235, 0.009067, 0.010707, 0.079991], \"passed\": true}, {\"check\": \"look schedule sample 3\", \"actual\": [0.001003, 0.008299, 0.02441, 0.023811], \"expected\": [0.001003, 0.008299, 0.02441, 0.023811], \"passed\": true}], \"passed\": false}\n"},"broken":{"elapsed_ms":43.843,"exit_code":1,"observations":[{"actual":[8.9e-05,0.005486,0.018051,0.026375],"check":"four equally spaced looks","expected":[8.9e-05,0.005486,0.018051,0.026375],"passed":true},{"actual":[0.05],"check":"single final look spends all alpha","expected":[0.05],"passed":true},{"actual":[0.00027,0.00973],"check":"two looks at stricter alpha","expected":[0.00027,0.00973],"passed":true},{"actual":[0.005575,0.0],"check":"repeated fraction is invalid","expected":null,"passed":false},{"actual":null,"check":"decreasing fractions are invalid","expected":null,"passed":true},{"actual":[0.000883,0.003095,0.006022],"check":"look schedule sample 1","expected":[0.000883,0.003095,0.006022],"passed":true},{"actual":[0.000235,0.009067,0.010707,0.079991],"check":"look schedule sample 2","expected":[0.000235,0.009067,0.010707,0.079991],"passed":true},{"actual":[0.001003,0.008299,0.02441,0.023811],"check":"look schedule sample 3","expected":[0.001003,0.008299,0.02441,0.023811],"passed":true}],"passed":false,"stderr":"","stdout":"{\"observations\": [{\"check\": \"four equally spaced looks\", \"actual\": [8.9e-05, 0.005486, 0.018051, 0.026375], \"expected\": [8.9e-05, 0.005486, 0.018051, 0.026375], \"passed\": true}, {\"check\": \"single final look spends all alpha\", \"actual\": [0.05], \"expected\": [0.05], \"passed\": true}, {\"check\": \"two looks at stricter alpha\", \"actual\": [0.00027, 0.00973], \"expected\": [0.00027, 0.00973], \"passed\": true}, {\"check\": \"repeated fraction is invalid\", \"actual\": [0.005575, 0.0], \"expected\": null, \"passed\": false}, {\"check\": \"decreasing fractions are invalid\", \"actual\": null, \"expected\": null, \"passed\": true}, {\"check\": \"look schedule sample 1\", \"actual\": [0.000883, 0.003095, 0.006022], \"expected\": [0.000883, 0.003095, 0.006022], \"passed\": true}, {\"check\": \"look schedule sample 2\", \"actual\": [0.000235, 0.009067, 0.010707, 0.079991], \"expected\": [0.000235, 0.009067, 0.010707, 0.079991], \"passed\": true}, {\"check\": \"look schedule sample 3\", \"actual\": [0.001003, 0.008299, 0.02441, 0.023811], \"expected\": [0.001003, 0.008299, 0.02441, 0.023811], \"passed\": true}], \"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."}}