{"abstract":"Equilibrium occupancy falls as colonisation improves.","category":"Ecological population dynamics","checks":7,"contract":"Occupancy p: p += c*p*(1-D-p) - e*p each year, clamped to [0, 1-D]; equilibrium max(0, 1-D-e/c); return [equilibrium rounded 6, trajectory rounded 6]; None for c<=0, e<0 or D outside [0,1).","contract_signature":"c, e, destroyed, p0, years","evaluation_group":"w2-ecopop-levins-metapopulation","failed_approach":"Multiplying the rates has the wrong dimension.","family":"w2-ecopop-levins-metapopulation-extinction-ratio","id":"FA-65586","implementations":{"attempt":{"sha256":"283c2861b0c5d5ec246d9339294055571a0d279a034a6bd9e036374141efdd0b","source":"\"\"\"Failure Map reference implementation. Python standard library only.\"\"\"\nimport json\nimport math\nN = 1\nobservations = []\ndef solve(c, e, destroyed, p0, years):\n    if c <= 0 or e < 0 or not 0 <= destroyed < 1:\n        return None\n    eq = max(0.0, 1 - destroyed - e * c)\n    p = p0\n    traj = []\n    for _ in range(years):\n        p = p + c * p * (1 - destroyed - p) - e * p\n        p = min(max(p, 0.0), 1 - destroyed)\n        traj.append(round(p, 6))\n    return [round(eq, 6), traj]\ndef check(label, actual, expected):\n    observations.append({\"check\": label, \"actual\": actual, \"expected\": expected, \"passed\": actual == expected})\nfixtures = [[('regression: butterfly network',\n   (0.5, 0.1, 0.2, 0.1, 6),\n   [0.6, [0.125, 0.154687, 0.18913, 0.227984, 0.27039, 0.314952]]),\n  ('regression: intact habitat',\n   (0.4, 0.1, 0.0, 0.05, 5),\n   [0.75, [0.064, 0.081562, 0.103369, 0.130106, 0.162367]]),\n  ('regression: heavy destruction extinction',\n   (0.3, 0.2, 0.5, 0.3, 6),\n   [0.0, [0.258, 0.225131, 0.198669, 0.176895, 0.158663, 0.143177]]),\n  ('regression: overshoot clamp', (2.5, 0.05, 0.3, 0.6, 3), [0.68, [0.7, 0.665, 0.689937]]),\n  ('control: invalid destruction', (0.5, 0.1, 1.0, 0.1, 3), None),\n  ('regression: empty network', (0.5, 0.1, 0.2, 0.0, 3), [0.6, [0.0, 0.0, 0.0]]),\n  ('regression: high turnover',\n   (1.2, 0.8, 0.25, 0.4, 5),\n   [0.083333, [0.248, 0.198995, 0.171376, 0.15327, 0.140407]])],\n [('regression: butterfly network',\n   (0.5, 0.1, 0.2, 0.1, 6),\n   [0.6, [0.125, 0.154687, 0.18913, 0.227984, 0.27039, 0.314952]]),\n  ('regression: intact habitat',\n   (0.4, 0.1, 0.0, 0.05, 5),\n   [0.75, [0.064, 0.081562, 0.103369, 0.130106, 0.162367]]),\n  ('regression: heavy destruction extinction',\n   (0.3, 0.2, 0.5, 0.3, 6),\n   [0.0, [0.258, 0.225131, 0.198669, 0.176895, 0.158663, 0.143177]]),\n  ('regression: overshoot clamp', (2.5, 0.05, 0.3, 0.6, 3), [0.68, [0.7, 0.665, 0.689937]]),\n  ('control: invalid destruction', (0.5, 0.1, 1.0, 0.1, 3), None),\n  ('regression: empty network', (0.5, 0.1, 0.2, 0.0, 3), [0.6, [0.0, 0.0, 0.0]]),\n  ('regression: high turnover',\n   (1.2, 0.8, 0.25, 0.4, 5),\n   [0.083333, [0.248, 0.198995, 0.171376, 0.15327, 0.140407]])],\n [('regression: butterfly network',\n   (0.5, 0.1, 0.2, 0.1, 6),\n   [0.6, [0.125, 0.154687, 0.18913, 0.227984, 0.27039, 0.314952]]),\n  ('regression: intact habitat',\n   (0.4, 0.1, 0.0, 0.05, 5),\n   [0.75, [0.064, 0.081562, 0.103369, 0.130106, 0.162367]]),\n  ('regression: heavy destruction extinction',\n   (0.3, 0.2, 0.5, 0.3, 6),\n   [0.0, [0.258, 0.225131, 0.198669, 0.176895, 0.158663, 0.143177]]),\n  ('regression: overshoot clamp', (2.5, 0.05, 0.3, 0.6, 3), [0.68, [0.7, 0.665, 0.689937]]),\n  ('control: invalid destruction', (0.5, 0.1, 1.0, 0.1, 3), None),\n  ('regression: empty network', (0.5, 0.1, 0.2, 0.0, 3), [0.6, [0.0, 0.0, 0.0]]),\n  ('regression: high turnover',\n   (1.2, 0.8, 0.25, 0.4, 5),\n   [0.083333, [0.248, 0.198995, 0.171376, 0.15327, 0.140407]])],\n [('regression: butterfly network',\n   (0.5, 0.1, 0.2, 0.1, 6),\n   [0.6, [0.125, 0.154687, 0.18913, 0.227984, 0.27039, 0.314952]]),\n  ('regression: intact habitat',\n   (0.4, 0.1, 0.0, 0.05, 5),\n   [0.75, [0.064, 0.081562, 0.103369, 0.130106, 0.162367]]),\n  ('regression: heavy destruction extinction',\n   (0.3, 0.2, 0.5, 0.3, 6),\n   [0.0, [0.258, 0.225131, 0.198669, 0.176895, 0.158663, 0.143177]]),\n  ('regression: overshoot clamp', (2.5, 0.05, 0.3, 0.6, 3), [0.68, [0.7, 0.665, 0.689937]]),\n  ('control: invalid destruction', (0.5, 0.1, 1.0, 0.1, 3), None),\n  ('regression: empty network', (0.5, 0.1, 0.2, 0.0, 3), [0.6, [0.0, 0.0, 0.0]]),\n  ('regression: high turnover',\n   (1.2, 0.8, 0.25, 0.4, 5),\n   [0.083333, [0.248, 0.198995, 0.171376, 0.15327, 0.140407]])],\n [('regression: butterfly network',\n   (0.5, 0.1, 0.2, 0.1, 6),\n   [0.6, [0.125, 0.154687, 0.18913, 0.227984, 0.27039, 0.314952]]),\n  ('regression: intact habitat',\n   (0.4, 0.1, 0.0, 0.05, 5),\n   [0.75, [0.064, 0.081562, 0.103369, 0.130106, 0.162367]]),\n  ('regression: heavy destruction extinction',\n   (0.3, 0.2, 0.5, 0.3, 6),\n   [0.0, [0.258, 0.225131, 0.198669, 0.176895, 0.158663, 0.143177]]),\n  ('regression: overshoot clamp', (2.5, 0.05, 0.3, 0.6, 3), [0.68, [0.7, 0.665, 0.689937]]),\n  ('control: invalid destruction', (0.5, 0.1, 1.0, 0.1, 3), None),\n  ('regression: empty network', (0.5, 0.1, 0.2, 0.0, 3), [0.6, [0.0, 0.0, 0.0]]),\n  ('regression: high turnover',\n   (1.2, 0.8, 0.25, 0.4, 5),\n   [0.083333, [0.248, 0.198995, 0.171376, 0.15327, 0.140407]])]]\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":"286a00addb2fdeffc03b878de1a3074c03a9345778c8075fcd3bd03da517434f","source":"\"\"\"Failure Map reference implementation. Python standard library only.\"\"\"\nimport json\nimport math\nN = 1\nobservations = []\ndef solve(c, e, destroyed, p0, years):\n    if c <= 0 or e < 0 or not 0 <= destroyed < 1:\n        return None\n    eq = max(0.0, 1 - destroyed - c / e)\n    p = p0\n    traj = []\n    for _ in range(years):\n        p = p + c * p * (1 - destroyed - p) - e * p\n        p = min(max(p, 0.0), 1 - destroyed)\n        traj.append(round(p, 6))\n    return [round(eq, 6), traj]\ndef check(label, actual, expected):\n    observations.append({\"check\": label, \"actual\": actual, \"expected\": expected, \"passed\": actual == expected})\nfixtures = [[('regression: butterfly network',\n   (0.5, 0.1, 0.2, 0.1, 6),\n   [0.6, [0.125, 0.154687, 0.18913, 0.227984, 0.27039, 0.314952]]),\n  ('regression: intact habitat',\n   (0.4, 0.1, 0.0, 0.05, 5),\n   [0.75, [0.064, 0.081562, 0.103369, 0.130106, 0.162367]]),\n  ('regression: heavy destruction extinction',\n   (0.3, 0.2, 0.5, 0.3, 6),\n   [0.0, [0.258, 0.225131, 0.198669, 0.176895, 0.158663, 0.143177]]),\n  ('regression: overshoot clamp', (2.5, 0.05, 0.3, 0.6, 3), [0.68, [0.7, 0.665, 0.689937]]),\n  ('control: invalid destruction', (0.5, 0.1, 1.0, 0.1, 3), None),\n  ('regression: empty network', (0.5, 0.1, 0.2, 0.0, 3), [0.6, [0.0, 0.0, 0.0]]),\n  ('regression: high turnover',\n   (1.2, 0.8, 0.25, 0.4, 5),\n   [0.083333, [0.248, 0.198995, 0.171376, 0.15327, 0.140407]])],\n [('regression: butterfly network',\n   (0.5, 0.1, 0.2, 0.1, 6),\n   [0.6, [0.125, 0.154687, 0.18913, 0.227984, 0.27039, 0.314952]]),\n  ('regression: intact habitat',\n   (0.4, 0.1, 0.0, 0.05, 5),\n   [0.75, [0.064, 0.081562, 0.103369, 0.130106, 0.162367]]),\n  ('regression: heavy destruction extinction',\n   (0.3, 0.2, 0.5, 0.3, 6),\n   [0.0, [0.258, 0.225131, 0.198669, 0.176895, 0.158663, 0.143177]]),\n  ('regression: overshoot clamp', (2.5, 0.05, 0.3, 0.6, 3), [0.68, [0.7, 0.665, 0.689937]]),\n  ('control: invalid destruction', (0.5, 0.1, 1.0, 0.1, 3), None),\n  ('regression: empty network', (0.5, 0.1, 0.2, 0.0, 3), [0.6, [0.0, 0.0, 0.0]]),\n  ('regression: high turnover',\n   (1.2, 0.8, 0.25, 0.4, 5),\n   [0.083333, [0.248, 0.198995, 0.171376, 0.15327, 0.140407]])],\n [('regression: butterfly network',\n   (0.5, 0.1, 0.2, 0.1, 6),\n   [0.6, [0.125, 0.154687, 0.18913, 0.227984, 0.27039, 0.314952]]),\n  ('regression: intact habitat',\n   (0.4, 0.1, 0.0, 0.05, 5),\n   [0.75, [0.064, 0.081562, 0.103369, 0.130106, 0.162367]]),\n  ('regression: heavy destruction extinction',\n   (0.3, 0.2, 0.5, 0.3, 6),\n   [0.0, [0.258, 0.225131, 0.198669, 0.176895, 0.158663, 0.143177]]),\n  ('regression: overshoot clamp', (2.5, 0.05, 0.3, 0.6, 3), [0.68, [0.7, 0.665, 0.689937]]),\n  ('control: invalid destruction', (0.5, 0.1, 1.0, 0.1, 3), None),\n  ('regression: empty network', (0.5, 0.1, 0.2, 0.0, 3), [0.6, [0.0, 0.0, 0.0]]),\n  ('regression: high turnover',\n   (1.2, 0.8, 0.25, 0.4, 5),\n   [0.083333, [0.248, 0.198995, 0.171376, 0.15327, 0.140407]])],\n [('regression: butterfly network',\n   (0.5, 0.1, 0.2, 0.1, 6),\n   [0.6, [0.125, 0.154687, 0.18913, 0.227984, 0.27039, 0.314952]]),\n  ('regression: intact habitat',\n   (0.4, 0.1, 0.0, 0.05, 5),\n   [0.75, [0.064, 0.081562, 0.103369, 0.130106, 0.162367]]),\n  ('regression: heavy destruction extinction',\n   (0.3, 0.2, 0.5, 0.3, 6),\n   [0.0, [0.258, 0.225131, 0.198669, 0.176895, 0.158663, 0.143177]]),\n  ('regression: overshoot clamp', (2.5, 0.05, 0.3, 0.6, 3), [0.68, [0.7, 0.665, 0.689937]]),\n  ('control: invalid destruction', (0.5, 0.1, 1.0, 0.1, 3), None),\n  ('regression: empty network', (0.5, 0.1, 0.2, 0.0, 3), [0.6, [0.0, 0.0, 0.0]]),\n  ('regression: high turnover',\n   (1.2, 0.8, 0.25, 0.4, 5),\n   [0.083333, [0.248, 0.198995, 0.171376, 0.15327, 0.140407]])],\n [('regression: butterfly network',\n   (0.5, 0.1, 0.2, 0.1, 6),\n   [0.6, [0.125, 0.154687, 0.18913, 0.227984, 0.27039, 0.314952]]),\n  ('regression: intact habitat',\n   (0.4, 0.1, 0.0, 0.05, 5),\n   [0.75, [0.064, 0.081562, 0.103369, 0.130106, 0.162367]]),\n  ('regression: heavy destruction extinction',\n   (0.3, 0.2, 0.5, 0.3, 6),\n   [0.0, [0.258, 0.225131, 0.198669, 0.176895, 0.158663, 0.143177]]),\n  ('regression: overshoot clamp', (2.5, 0.05, 0.3, 0.6, 3), [0.68, [0.7, 0.665, 0.689937]]),\n  ('control: invalid destruction', (0.5, 0.1, 1.0, 0.1, 3), None),\n  ('regression: empty network', (0.5, 0.1, 0.2, 0.0, 3), [0.6, [0.0, 0.0, 0.0]]),\n  ('regression: high turnover',\n   (1.2, 0.8, 0.25, 0.4, 5),\n   [0.083333, [0.248, 0.198995, 0.171376, 0.15327, 0.140407]])]]\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-ecopop-levins-metapopulation-extinction-ratio","generated_at":"2026-09-29T14:47:35.337185+00:00","license":"CC0-1.0","python":"3.12.14","seed":1,"split":"open-access"},"relevance":"Population projections set harvest quotas, conservation status and pest-control timing; a wrong update order, boundary or rate conversion silently changes management advice.","root_cause":"The extinction-to-colonisation ratio is inverted.","sha256":"86a6aac6327174b2767a01352f5d63609ce8566eace411699794dd2ae47661fe","title":"Levins metapopulation with habitat destruction: extinction ratio · 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":39.409,"exit_code":1,"observations":[{"actual":[0.75,[0.125,0.154687,0.18913,0.227984,0.27039,0.314952]],"check":"regression: butterfly network","expected":[0.6,[0.125,0.154687,0.18913,0.227984,0.27039,0.314952]],"passed":false},{"actual":[0.96,[0.064,0.081562,0.103369,0.130106,0.162367]],"check":"regression: intact habitat","expected":[0.75,[0.064,0.081562,0.103369,0.130106,0.162367]],"passed":false},{"actual":[0.44,[0.258,0.225131,0.198669,0.176895,0.158663,0.143177]],"check":"regression: heavy destruction extinction","expected":[0.0,[0.258,0.225131,0.198669,0.176895,0.158663,0.143177]],"passed":false},{"actual":[0.575,[0.7,0.665,0.689937]],"check":"regression: overshoot clamp","expected":[0.68,[0.7,0.665,0.689937]],"passed":false},{"actual":null,"check":"control: invalid destruction","expected":null,"passed":true},{"actual":[0.75,[0.0,0.0,0.0]],"check":"regression: empty network","expected":[0.6,[0.0,0.0,0.0]],"passed":false},{"actual":[0.0,[0.248,0.198995,0.171376,0.15327,0.140407]],"check":"regression: high turnover","expected":[0.083333,[0.248,0.198995,0.171376,0.15327,0.140407]],"passed":false}],"passed":false,"stderr":"","stdout":"{\"observations\": [{\"check\": \"regression: butterfly network\", \"actual\": [0.75, [0.125, 0.154687, 0.18913, 0.227984, 0.27039, 0.314952]], \"expected\": [0.6, [0.125, 0.154687, 0.18913, 0.227984, 0.27039, 0.314952]], \"passed\": false}, {\"check\": \"regression: intact habitat\", \"actual\": [0.96, [0.064, 0.081562, 0.103369, 0.130106, 0.162367]], \"expected\": [0.75, [0.064, 0.081562, 0.103369, 0.130106, 0.162367]], \"passed\": false}, {\"check\": \"regression: heavy destruction extinction\", \"actual\": [0.44, [0.258, 0.225131, 0.198669, 0.176895, 0.158663, 0.143177]], \"expected\": [0.0, [0.258, 0.225131, 0.198669, 0.176895, 0.158663, 0.143177]], \"passed\": false}, {\"check\": \"regression: overshoot clamp\", \"actual\": [0.575, [0.7, 0.665, 0.689937]], \"expected\": [0.68, [0.7, 0.665, 0.689937]], \"passed\": false}, {\"check\": \"control: invalid destruction\", \"actual\": null, \"expected\": null, \"passed\": true}, {\"check\": \"regression: empty network\", \"actual\": [0.75, [0.0, 0.0, 0.0]], \"expected\": [0.6, [0.0, 0.0, 0.0]], \"passed\": false}, {\"check\": \"regression: high turnover\", \"actual\": [0.0, [0.248, 0.198995, 0.171376, 0.15327, 0.140407]], \"expected\": [0.083333, [0.248, 0.198995, 0.171376, 0.15327, 0.140407]], \"passed\": false}], \"passed\": false}\n"},"broken":{"elapsed_ms":43.903,"exit_code":1,"observations":[{"actual":[0.0,[0.125,0.154687,0.18913,0.227984,0.27039,0.314952]],"check":"regression: butterfly network","expected":[0.6,[0.125,0.154687,0.18913,0.227984,0.27039,0.314952]],"passed":false},{"actual":[0.0,[0.064,0.081562,0.103369,0.130106,0.162367]],"check":"regression: intact habitat","expected":[0.75,[0.064,0.081562,0.103369,0.130106,0.162367]],"passed":false},{"actual":[0.0,[0.258,0.225131,0.198669,0.176895,0.158663,0.143177]],"check":"regression: heavy destruction extinction","expected":[0.0,[0.258,0.225131,0.198669,0.176895,0.158663,0.143177]],"passed":true},{"actual":[0.0,[0.7,0.665,0.689937]],"check":"regression: overshoot clamp","expected":[0.68,[0.7,0.665,0.689937]],"passed":false},{"actual":null,"check":"control: invalid destruction","expected":null,"passed":true},{"actual":[0.0,[0.0,0.0,0.0]],"check":"regression: empty network","expected":[0.6,[0.0,0.0,0.0]],"passed":false},{"actual":[0.0,[0.248,0.198995,0.171376,0.15327,0.140407]],"check":"regression: high turnover","expected":[0.083333,[0.248,0.198995,0.171376,0.15327,0.140407]],"passed":false}],"passed":false,"stderr":"","stdout":"{\"observations\": [{\"check\": \"regression: butterfly network\", \"actual\": [0.0, [0.125, 0.154687, 0.18913, 0.227984, 0.27039, 0.314952]], \"expected\": [0.6, [0.125, 0.154687, 0.18913, 0.227984, 0.27039, 0.314952]], \"passed\": false}, {\"check\": \"regression: intact habitat\", \"actual\": [0.0, [0.064, 0.081562, 0.103369, 0.130106, 0.162367]], \"expected\": [0.75, [0.064, 0.081562, 0.103369, 0.130106, 0.162367]], \"passed\": false}, {\"check\": \"regression: heavy destruction extinction\", \"actual\": [0.0, [0.258, 0.225131, 0.198669, 0.176895, 0.158663, 0.143177]], \"expected\": [0.0, [0.258, 0.225131, 0.198669, 0.176895, 0.158663, 0.143177]], \"passed\": true}, {\"check\": \"regression: overshoot clamp\", \"actual\": [0.0, [0.7, 0.665, 0.689937]], \"expected\": [0.68, [0.7, 0.665, 0.689937]], \"passed\": false}, {\"check\": \"control: invalid destruction\", \"actual\": null, \"expected\": null, \"passed\": true}, {\"check\": \"regression: empty network\", \"actual\": [0.0, [0.0, 0.0, 0.0]], \"expected\": [0.6, [0.0, 0.0, 0.0]], \"passed\": false}, {\"check\": \"regression: high turnover\", \"actual\": [0.0, [0.248, 0.198995, 0.171376, 0.15327, 0.140407]], \"expected\": [0.083333, [0.248, 0.198995, 0.171376, 0.15327, 0.140407]], \"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."}}