{"abstract":"Generation sizes never decline and the final size exceeds the population.","category":"Epidemic compartment models","checks":7,"contract":"Expected Reed-Frost: C[t+1] = S[t]*(1-(1-p)**C[t]), S[t+1]=S[t]-C[t+1]; cases are infectious for one generation only; stop early once expected cases fall below 1e-9; return [cases per generation including the index generation rounded to 4, final size including index cases rounded to 4]; None for invalid p or negative counts.","contract_signature":"p, s0, i0, generations","evaluation_group":"w2-epidemic-reed-frost","failed_approach":"Subtracting the previous generation size depletes the wrong cohort.","family":"w2-epidemic-reed-frost-susceptible-depletion","id":"FA-64936","implementations":{"attempt":{"sha256":"5fd04b7b6408adfb074336efd31329d7b9762e336831c68d21791d88dc24a403","source":"\"\"\"Failure Map reference implementation. Python standard library only.\"\"\"\nimport json\nimport math\nN = 1\nobservations = []\ndef solve(p, s0, i0, generations):\n    if not 0 <= p <= 1 or s0 < 0 or i0 < 0:\n        return None\n    q = 1 - p\n    s = float(s0)\n    c = float(i0)\n    cases = [round(c, 4)]\n    for _ in range(generations):\n        nxt = s * (1 - q ** c)\n        s -= c\n        c = nxt\n        cases.append(round(c, 4))\n        if c < 1e-9:\n            break\n    return [cases, round(s0 + i0 - s, 4)]\ndef check(label, actual, expected):\n    observations.append({\"check\": label, \"actual\": actual, \"expected\": expected, \"passed\": actual == expected})\nfixtures = [[('regression: household of 10',\n   (0.1, 9, 1, 6),\n   [[1.0, 0.9, 0.7328, 0.5474, 0.3822, 0.2541, 0.1633], 3.9798]),\n  ('regression: school class',\n   (0.04, 29, 1, 8),\n   [[1.0, 1.16, 1.2876, 1.3596, 1.3602, 1.2872, 1.1541, 0.9844, 0.8038], 10.3969]),\n  ('regression: high contact probability', (0.5, 20, 2, 5), [[2.0, 15.0, 4.9998, 0.0001, 0.0], 22.0]),\n  ('regression: p zero no spread', (0.0, 10, 1, 4), [[1.0, 0.0], 1.0]),\n  ('control: no index cases', (0.2, 10, 0, 4), [[0.0, 0.0], 0.0]),\n  ('control: invalid p', (1.5, 10, 1, 4), None),\n  ('control: zero generations', (0.3, 10, 2, 0), [[2.0], 2.0])],\n [('regression: p zero no spread', (0.0, 10, 1, 4), [[1.0, 0.0], 1.0]),\n  ('regression: p one immediate saturation', (1.0, 10, 1, 4), [[1.0, 10.0, 0.0], 11.0]),\n  ('control: no index cases', (0.2, 10, 0, 4), [[0.0, 0.0], 0.0]),\n  ('control: invalid p', (1.5, 10, 1, 4), None),\n  ('control: zero generations', (0.3, 10, 2, 0), [[2.0], 2.0]),\n  ('regression: fading chain',\n   (0.02, 30, 1, 10),\n   [[1.0, 0.6, 0.3542, 0.2071, 0.1204, 0.0698, 0.0404, 0.0233, 0.0135, 0.0078, 0.0045], 2.4409]),\n  ('regression: large ward',\n   (0.03, 60, 3, 8),\n   [[3.0, 5.2396, 8.0777, 10.182, 9.733, 6.8673, 3.7561, 1.7453, 0.7455], 49.3465])],\n [('regression: household of 10',\n   (0.1, 9, 1, 6),\n   [[1.0, 0.9, 0.7328, 0.5474, 0.3822, 0.2541, 0.1633], 3.9798]),\n  ('control: no index cases', (0.2, 10, 0, 4), [[0.0, 0.0], 0.0]),\n  ('control: invalid p', (1.5, 10, 1, 4), None),\n  ('control: zero generations', (0.3, 10, 2, 0), [[2.0], 2.0]),\n  ('regression: fading chain',\n   (0.02, 30, 1, 10),\n   [[1.0, 0.6, 0.3542, 0.2071, 0.1204, 0.0698, 0.0404, 0.0233, 0.0135, 0.0078, 0.0045], 2.4409]),\n  ('regression: large ward',\n   (0.03, 60, 3, 8),\n   [[3.0, 5.2396, 8.0777, 10.182, 9.733, 6.8673, 3.7561, 1.7453, 0.7455], 49.3465]),\n  ('regression: two generations only', (0.15, 40, 4, 2), [[4.0, 19.1198, 19.9465], 43.0662])],\n [('regression: household of 10',\n   (0.1, 9, 1, 6),\n   [[1.0, 0.9, 0.7328, 0.5474, 0.3822, 0.2541, 0.1633], 3.9798]),\n  ('regression: school class',\n   (0.04, 29, 1, 8),\n   [[1.0, 1.16, 1.2876, 1.3596, 1.3602, 1.2872, 1.1541, 0.9844, 0.8038], 10.3969]),\n  ('control: no index cases', (0.2, 10, 0, 4), [[0.0, 0.0], 0.0]),\n  ('control: invalid p', (1.5, 10, 1, 4), None),\n  ('control: zero generations', (0.3, 10, 2, 0), [[2.0], 2.0]),\n  ('regression: large ward',\n   (0.03, 60, 3, 8),\n   [[3.0, 5.2396, 8.0777, 10.182, 9.733, 6.8673, 3.7561, 1.7453, 0.7455], 49.3465]),\n  ('regression: two generations only', (0.15, 40, 4, 2), [[4.0, 19.1198, 19.9465], 43.0662])],\n [('regression: school class',\n   (0.04, 29, 1, 8),\n   [[1.0, 1.16, 1.2876, 1.3596, 1.3602, 1.2872, 1.1541, 0.9844, 0.8038], 10.3969]),\n  ('regression: high contact probability', (0.5, 20, 2, 5), [[2.0, 15.0, 4.9998, 0.0001, 0.0], 22.0]),\n  ('regression: p zero no spread', (0.0, 10, 1, 4), [[1.0, 0.0], 1.0]),\n  ('regression: p one immediate saturation', (1.0, 10, 1, 4), [[1.0, 10.0, 0.0], 11.0]),\n  ('control: no index cases', (0.2, 10, 0, 4), [[0.0, 0.0], 0.0]),\n  ('control: invalid p', (1.5, 10, 1, 4), None),\n  ('control: zero generations', (0.3, 10, 2, 0), [[2.0], 2.0])]]\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":"50ca886f77b5de18dfddae5b1f6ef69df6e5d65a91144890579ebd341dfec90f","source":"\"\"\"Failure Map reference implementation. Python standard library only.\"\"\"\nimport json\nimport math\nN = 1\nobservations = []\ndef solve(p, s0, i0, generations):\n    if not 0 <= p <= 1 or s0 < 0 or i0 < 0:\n        return None\n    q = 1 - p\n    s = float(s0)\n    c = float(i0)\n    cases = [round(c, 4)]\n    for _ in range(generations):\n        nxt = s * (1 - q ** c)\n        c = nxt\n        cases.append(round(c, 4))\n        if c < 1e-9:\n            break\n    return [cases, round(s0 + i0 - s, 4)]\ndef check(label, actual, expected):\n    observations.append({\"check\": label, \"actual\": actual, \"expected\": expected, \"passed\": actual == expected})\nfixtures = [[('regression: household of 10',\n   (0.1, 9, 1, 6),\n   [[1.0, 0.9, 0.7328, 0.5474, 0.3822, 0.2541, 0.1633], 3.9798]),\n  ('regression: school class',\n   (0.04, 29, 1, 8),\n   [[1.0, 1.16, 1.2876, 1.3596, 1.3602, 1.2872, 1.1541, 0.9844, 0.8038], 10.3969]),\n  ('regression: high contact probability', (0.5, 20, 2, 5), [[2.0, 15.0, 4.9998, 0.0001, 0.0], 22.0]),\n  ('regression: p zero no spread', (0.0, 10, 1, 4), [[1.0, 0.0], 1.0]),\n  ('control: no index cases', (0.2, 10, 0, 4), [[0.0, 0.0], 0.0]),\n  ('control: invalid p', (1.5, 10, 1, 4), None),\n  ('control: zero generations', (0.3, 10, 2, 0), [[2.0], 2.0])],\n [('regression: p zero no spread', (0.0, 10, 1, 4), [[1.0, 0.0], 1.0]),\n  ('regression: p one immediate saturation', (1.0, 10, 1, 4), [[1.0, 10.0, 0.0], 11.0]),\n  ('control: no index cases', (0.2, 10, 0, 4), [[0.0, 0.0], 0.0]),\n  ('control: invalid p', (1.5, 10, 1, 4), None),\n  ('control: zero generations', (0.3, 10, 2, 0), [[2.0], 2.0]),\n  ('regression: fading chain',\n   (0.02, 30, 1, 10),\n   [[1.0, 0.6, 0.3542, 0.2071, 0.1204, 0.0698, 0.0404, 0.0233, 0.0135, 0.0078, 0.0045], 2.4409]),\n  ('regression: large ward',\n   (0.03, 60, 3, 8),\n   [[3.0, 5.2396, 8.0777, 10.182, 9.733, 6.8673, 3.7561, 1.7453, 0.7455], 49.3465])],\n [('regression: household of 10',\n   (0.1, 9, 1, 6),\n   [[1.0, 0.9, 0.7328, 0.5474, 0.3822, 0.2541, 0.1633], 3.9798]),\n  ('control: no index cases', (0.2, 10, 0, 4), [[0.0, 0.0], 0.0]),\n  ('control: invalid p', (1.5, 10, 1, 4), None),\n  ('control: zero generations', (0.3, 10, 2, 0), [[2.0], 2.0]),\n  ('regression: fading chain',\n   (0.02, 30, 1, 10),\n   [[1.0, 0.6, 0.3542, 0.2071, 0.1204, 0.0698, 0.0404, 0.0233, 0.0135, 0.0078, 0.0045], 2.4409]),\n  ('regression: large ward',\n   (0.03, 60, 3, 8),\n   [[3.0, 5.2396, 8.0777, 10.182, 9.733, 6.8673, 3.7561, 1.7453, 0.7455], 49.3465]),\n  ('regression: two generations only', (0.15, 40, 4, 2), [[4.0, 19.1198, 19.9465], 43.0662])],\n [('regression: household of 10',\n   (0.1, 9, 1, 6),\n   [[1.0, 0.9, 0.7328, 0.5474, 0.3822, 0.2541, 0.1633], 3.9798]),\n  ('regression: school class',\n   (0.04, 29, 1, 8),\n   [[1.0, 1.16, 1.2876, 1.3596, 1.3602, 1.2872, 1.1541, 0.9844, 0.8038], 10.3969]),\n  ('control: no index cases', (0.2, 10, 0, 4), [[0.0, 0.0], 0.0]),\n  ('control: invalid p', (1.5, 10, 1, 4), None),\n  ('control: zero generations', (0.3, 10, 2, 0), [[2.0], 2.0]),\n  ('regression: large ward',\n   (0.03, 60, 3, 8),\n   [[3.0, 5.2396, 8.0777, 10.182, 9.733, 6.8673, 3.7561, 1.7453, 0.7455], 49.3465]),\n  ('regression: two generations only', (0.15, 40, 4, 2), [[4.0, 19.1198, 19.9465], 43.0662])],\n [('regression: school class',\n   (0.04, 29, 1, 8),\n   [[1.0, 1.16, 1.2876, 1.3596, 1.3602, 1.2872, 1.1541, 0.9844, 0.8038], 10.3969]),\n  ('regression: high contact probability', (0.5, 20, 2, 5), [[2.0, 15.0, 4.9998, 0.0001, 0.0], 22.0]),\n  ('regression: p zero no spread', (0.0, 10, 1, 4), [[1.0, 0.0], 1.0]),\n  ('regression: p one immediate saturation', (1.0, 10, 1, 4), [[1.0, 10.0, 0.0], 11.0]),\n  ('control: no index cases', (0.2, 10, 0, 4), [[0.0, 0.0], 0.0]),\n  ('control: invalid p', (1.5, 10, 1, 4), None),\n  ('control: zero generations', (0.3, 10, 2, 0), [[2.0], 2.0])]]\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":"Deterministic bounded teaching model with a stipulated contract; not a validated scientific or public-health modelling library. 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-epidemic-reed-frost-susceptible-depletion","generated_at":"2026-09-29T14:47:29.451875+00:00","license":"CC0-1.0","python":"3.12.14","seed":1,"split":"open-access"},"relevance":"Compartmental epidemic calculations drive outbreak forecasts, vaccine targets and hospital planning; a single wrong flow, rate conversion or boundary silently changes every downstream number.","root_cause":"The susceptible pool is not reduced by the newly infected generation.","sha256":"ac552830a2dd7b92d41276873aea42b5ebf981cbe544741e7a52fb9643e19105","title":"Reed-Frost expected chain-binomial generations: susceptible depletion · 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":40.581,"exit_code":1,"observations":[{"actual":[[1.0,0.9,0.7237,0.5213,0.3408,0.2065,0.1187],4.6922],"check":"regression: household of 10","expected":[[1.0,0.9,0.7328,0.5474,0.3822,0.2541,0.1633],3.9798],"passed":false},{"actual":[[1.0,1.16,1.295,1.382,1.4013,1.3434,1.2146,1.0361,0.8367],10.8325],"check":"regression: school class","expected":[[1.0,1.16,1.2876,1.3596,1.3602,1.2872,1.1541,0.9844,0.8038],10.3969],"passed":false},{"actual":[[2.0,15.0,17.9995,3.0,-13.1245],39.9994],"check":"regression: high contact probability","expected":[[2.0,15.0,4.9998,0.0001,0.0],22.0],"passed":false},{"actual":[[1.0,0.0],2.0],"check":"regression: p zero no spread","expected":[[1.0,0.0],1.0],"passed":false},{"actual":[[0.0,0.0],0.0],"check":"control: no index cases","expected":[[0.0,0.0],0.0],"passed":true},{"actual":null,"check":"control: invalid p","expected":null,"passed":true},{"actual":[[2.0],2.0],"check":"control: zero generations","expected":[[2.0],2.0],"passed":true}],"passed":false,"stderr":"","stdout":"{\"observations\": [{\"check\": \"regression: household of 10\", \"actual\": [[1.0, 0.9, 0.7237, 0.5213, 0.3408, 0.2065, 0.1187], 4.6922], \"expected\": [[1.0, 0.9, 0.7328, 0.5474, 0.3822, 0.2541, 0.1633], 3.9798], \"passed\": false}, {\"check\": \"regression: school class\", \"actual\": [[1.0, 1.16, 1.295, 1.382, 1.4013, 1.3434, 1.2146, 1.0361, 0.8367], 10.8325], \"expected\": [[1.0, 1.16, 1.2876, 1.3596, 1.3602, 1.2872, 1.1541, 0.9844, 0.8038], 10.3969], \"passed\": false}, {\"check\": \"regression: high contact probability\", \"actual\": [[2.0, 15.0, 17.9995, 3.0, -13.1245], 39.9994], \"expected\": [[2.0, 15.0, 4.9998, 0.0001, 0.0], 22.0], \"passed\": false}, {\"check\": \"regression: p zero no spread\", \"actual\": [[1.0, 0.0], 2.0], \"expected\": [[1.0, 0.0], 1.0], \"passed\": false}, {\"check\": \"control: no index cases\", \"actual\": [[0.0, 0.0], 0.0], \"expected\": [[0.0, 0.0], 0.0], \"passed\": true}, {\"check\": \"control: invalid p\", \"actual\": null, \"expected\": null, \"passed\": true}, {\"check\": \"control: zero generations\", \"actual\": [[2.0], 2.0], \"expected\": [[2.0], 2.0], \"passed\": true}], \"passed\": false}\n"},"broken":{"elapsed_ms":40.628,"exit_code":1,"observations":[{"actual":[[1.0,0.9,0.8142,0.7399,0.6749,0.6178,0.5671],1.0],"check":"regression: household of 10","expected":[[1.0,0.9,0.7328,0.5474,0.3822,0.2541,0.1633],3.9798],"passed":false},{"actual":[[1.0,1.16,1.3412,1.5451,1.7727,2.0244,2.3003,2.5992,2.9194],1.0],"check":"regression: school class","expected":[[1.0,1.16,1.2876,1.3596,1.3602,1.2872,1.1541,0.9844,0.8038],10.3969],"passed":false},{"actual":[[2.0,15.0,19.9994,20.0,20.0,20.0],2.0],"check":"regression: high contact probability","expected":[[2.0,15.0,4.9998,0.0001,0.0],22.0],"passed":false},{"actual":[[1.0,0.0],1.0],"check":"regression: p zero no spread","expected":[[1.0,0.0],1.0],"passed":true},{"actual":[[0.0,0.0],0.0],"check":"control: no index cases","expected":[[0.0,0.0],0.0],"passed":true},{"actual":null,"check":"control: invalid p","expected":null,"passed":true},{"actual":[[2.0],2.0],"check":"control: zero generations","expected":[[2.0],2.0],"passed":true}],"passed":false,"stderr":"","stdout":"{\"observations\": [{\"check\": \"regression: household of 10\", \"actual\": [[1.0, 0.9, 0.8142, 0.7399, 0.6749, 0.6178, 0.5671], 1.0], \"expected\": [[1.0, 0.9, 0.7328, 0.5474, 0.3822, 0.2541, 0.1633], 3.9798], \"passed\": false}, {\"check\": \"regression: school class\", \"actual\": [[1.0, 1.16, 1.3412, 1.5451, 1.7727, 2.0244, 2.3003, 2.5992, 2.9194], 1.0], \"expected\": [[1.0, 1.16, 1.2876, 1.3596, 1.3602, 1.2872, 1.1541, 0.9844, 0.8038], 10.3969], \"passed\": false}, {\"check\": \"regression: high contact probability\", \"actual\": [[2.0, 15.0, 19.9994, 20.0, 20.0, 20.0], 2.0], \"expected\": [[2.0, 15.0, 4.9998, 0.0001, 0.0], 22.0], \"passed\": false}, {\"check\": \"regression: p zero no spread\", \"actual\": [[1.0, 0.0], 1.0], \"expected\": [[1.0, 0.0], 1.0], \"passed\": true}, {\"check\": \"control: no index cases\", \"actual\": [[0.0, 0.0], 0.0], \"expected\": [[0.0, 0.0], 0.0], \"passed\": true}, {\"check\": \"control: invalid p\", \"actual\": null, \"expected\": null, \"passed\": true}, {\"check\": \"control: zero generations\", \"actual\": [[2.0], 2.0], \"expected\": [[2.0], 2.0], \"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."}}