{"abstract":"Extinctions happen in empty patches.","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":"A constant extinction flow does not scale with occupied patches.","family":"w2-ecopop-levins-metapopulation-extinction-flow","id":"FA-65596","implementations":{"attempt":{"sha256":"acb4e55ad68d58b394ecd6f771c85ed310e8fc90b438c68cf622f93d288c31c6","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\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: no extinction', (0.6, 0.0, 0.1, 0.2, 4), [0.9, [0.284, 0.388966, 0.508231, 0.627697]]),\n  ('control: invalid destruction', (0.5, 0.1, 1.0, 0.1, 3), None),\n  ('control: empty network', (0.5, 0.1, 0.2, 0.0, 3), [0.6, [0.0, 0.0, 0.0]])],\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: overshoot clamp', (2.5, 0.05, 0.3, 0.6, 3), [0.68, [0.7, 0.665, 0.689937]]),\n  ('control: no extinction', (0.6, 0.0, 0.1, 0.2, 4), [0.9, [0.284, 0.388966, 0.508231, 0.627697]]),\n  ('control: invalid destruction', (0.5, 0.1, 1.0, 0.1, 3), None),\n  ('control: 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  ('control: no extinction', (0.6, 0.0, 0.1, 0.2, 4), [0.9, [0.284, 0.388966, 0.508231, 0.627697]]),\n  ('control: invalid destruction', (0.5, 0.1, 1.0, 0.1, 3), None),\n  ('control: 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: 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: no extinction', (0.6, 0.0, 0.1, 0.2, 4), [0.9, [0.284, 0.388966, 0.508231, 0.627697]]),\n  ('control: invalid destruction', (0.5, 0.1, 1.0, 0.1, 3), None),\n  ('control: 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  ('control: no extinction', (0.6, 0.0, 0.1, 0.2, 4), [0.9, [0.284, 0.388966, 0.508231, 0.627697]]),\n  ('control: invalid destruction', (0.5, 0.1, 1.0, 0.1, 3), None),\n  ('control: 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":"2f92c5425d2de363a3bc2500cb8d8c5500eb6f76ea2f7a98f5b24ad1668790bc","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 * (1 - 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: no extinction', (0.6, 0.0, 0.1, 0.2, 4), [0.9, [0.284, 0.388966, 0.508231, 0.627697]]),\n  ('control: invalid destruction', (0.5, 0.1, 1.0, 0.1, 3), None),\n  ('control: empty network', (0.5, 0.1, 0.2, 0.0, 3), [0.6, [0.0, 0.0, 0.0]])],\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: overshoot clamp', (2.5, 0.05, 0.3, 0.6, 3), [0.68, [0.7, 0.665, 0.689937]]),\n  ('control: no extinction', (0.6, 0.0, 0.1, 0.2, 4), [0.9, [0.284, 0.388966, 0.508231, 0.627697]]),\n  ('control: invalid destruction', (0.5, 0.1, 1.0, 0.1, 3), None),\n  ('control: 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  ('control: no extinction', (0.6, 0.0, 0.1, 0.2, 4), [0.9, [0.284, 0.388966, 0.508231, 0.627697]]),\n  ('control: invalid destruction', (0.5, 0.1, 1.0, 0.1, 3), None),\n  ('control: 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: 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: no extinction', (0.6, 0.0, 0.1, 0.2, 4), [0.9, [0.284, 0.388966, 0.508231, 0.627697]]),\n  ('control: invalid destruction', (0.5, 0.1, 1.0, 0.1, 3), None),\n  ('control: 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  ('control: no extinction', (0.6, 0.0, 0.1, 0.2, 4), [0.9, [0.284, 0.388966, 0.508231, 0.627697]]),\n  ('control: invalid destruction', (0.5, 0.1, 1.0, 0.1, 3), None),\n  ('control: 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-flow","generated_at":"2026-09-29T14:47:35.356894+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":"Local extinction is applied to unoccupied patches.","sha256":"6be003e2a68facd04f48b17830302a70133ab5ead474260c8a41c5988898cbb6","title":"Levins metapopulation with habitat destruction: extinction flow · 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.601,"exit_code":1,"observations":[{"actual":[0.6,[0.035,0.0,0.0,0.0,0.0,0.0]],"check":"regression: butterfly network","expected":[0.6,[0.125,0.154687,0.18913,0.227984,0.27039,0.314952]],"passed":false},{"actual":[0.75,[0.0,0.0,0.0,0.0,0.0]],"check":"regression: intact habitat","expected":[0.75,[0.064,0.081562,0.103369,0.130106,0.162367]],"passed":false},{"actual":[0.0,[0.118,0.0,0.0,0.0,0.0,0.0]],"check":"regression: heavy destruction extinction","expected":[0.0,[0.258,0.225131,0.198669,0.176895,0.158663,0.143177]],"passed":false},{"actual":[0.68,[0.7,0.65,0.68125]],"check":"regression: overshoot clamp","expected":[0.68,[0.7,0.665,0.689937]],"passed":false},{"actual":[0.9,[0.284,0.388966,0.508231,0.627697]],"check":"control: no extinction","expected":[0.9,[0.284,0.388966,0.508231,0.627697]],"passed":true},{"actual":null,"check":"control: invalid destruction","expected":null,"passed":true},{"actual":[0.6,[0.0,0.0,0.0]],"check":"control: empty network","expected":[0.6,[0.0,0.0,0.0]],"passed":true}],"passed":false,"stderr":"","stdout":"{\"observations\": [{\"check\": \"regression: butterfly network\", \"actual\": [0.6, [0.035, 0.0, 0.0, 0.0, 0.0, 0.0]], \"expected\": [0.6, [0.125, 0.154687, 0.18913, 0.227984, 0.27039, 0.314952]], \"passed\": false}, {\"check\": \"regression: intact habitat\", \"actual\": [0.75, [0.0, 0.0, 0.0, 0.0, 0.0]], \"expected\": [0.75, [0.064, 0.081562, 0.103369, 0.130106, 0.162367]], \"passed\": false}, {\"check\": \"regression: heavy destruction extinction\", \"actual\": [0.0, [0.118, 0.0, 0.0, 0.0, 0.0, 0.0]], \"expected\": [0.0, [0.258, 0.225131, 0.198669, 0.176895, 0.158663, 0.143177]], \"passed\": false}, {\"check\": \"regression: overshoot clamp\", \"actual\": [0.68, [0.7, 0.65, 0.68125]], \"expected\": [0.68, [0.7, 0.665, 0.689937]], \"passed\": false}, {\"check\": \"control: no extinction\", \"actual\": [0.9, [0.284, 0.388966, 0.508231, 0.627697]], \"expected\": [0.9, [0.284, 0.388966, 0.508231, 0.627697]], \"passed\": true}, {\"check\": \"control: invalid destruction\", \"actual\": null, \"expected\": null, \"passed\": true}, {\"check\": \"control: empty network\", \"actual\": [0.6, [0.0, 0.0, 0.0]], \"expected\": [0.6, [0.0, 0.0, 0.0]], \"passed\": true}], \"passed\": false}\n"},"broken":{"elapsed_ms":41.79,"exit_code":1,"observations":[{"actual":[0.6,[0.045,0.0,0.0,0.0,0.0,0.0]],"check":"regression: butterfly network","expected":[0.6,[0.125,0.154687,0.18913,0.227984,0.27039,0.314952]],"passed":false},{"actual":[0.75,[0.0,0.0,0.0,0.0,0.0]],"check":"regression: intact habitat","expected":[0.75,[0.064,0.081562,0.103369,0.130106,0.162367]],"passed":false},{"actual":[0.0,[0.178,0.030795,0.0,0.0,0.0,0.0]],"check":"regression: heavy destruction extinction","expected":[0.0,[0.258,0.225131,0.198669,0.176895,0.158663,0.143177]],"passed":false},{"actual":[0.68,[0.7,0.685,0.694937]],"check":"regression: overshoot clamp","expected":[0.68,[0.7,0.665,0.689937]],"passed":false},{"actual":[0.9,[0.284,0.388966,0.508231,0.627697]],"check":"control: no extinction","expected":[0.9,[0.284,0.388966,0.508231,0.627697]],"passed":true},{"actual":null,"check":"control: invalid destruction","expected":null,"passed":true},{"actual":[0.6,[0.0,0.0,0.0]],"check":"control: empty network","expected":[0.6,[0.0,0.0,0.0]],"passed":true}],"passed":false,"stderr":"","stdout":"{\"observations\": [{\"check\": \"regression: butterfly network\", \"actual\": [0.6, [0.045, 0.0, 0.0, 0.0, 0.0, 0.0]], \"expected\": [0.6, [0.125, 0.154687, 0.18913, 0.227984, 0.27039, 0.314952]], \"passed\": false}, {\"check\": \"regression: intact habitat\", \"actual\": [0.75, [0.0, 0.0, 0.0, 0.0, 0.0]], \"expected\": [0.75, [0.064, 0.081562, 0.103369, 0.130106, 0.162367]], \"passed\": false}, {\"check\": \"regression: heavy destruction extinction\", \"actual\": [0.0, [0.178, 0.030795, 0.0, 0.0, 0.0, 0.0]], \"expected\": [0.0, [0.258, 0.225131, 0.198669, 0.176895, 0.158663, 0.143177]], \"passed\": false}, {\"check\": \"regression: overshoot clamp\", \"actual\": [0.68, [0.7, 0.685, 0.694937]], \"expected\": [0.68, [0.7, 0.665, 0.689937]], \"passed\": false}, {\"check\": \"control: no extinction\", \"actual\": [0.9, [0.284, 0.388966, 0.508231, 0.627697]], \"expected\": [0.9, [0.284, 0.388966, 0.508231, 0.627697]], \"passed\": true}, {\"check\": \"control: invalid destruction\", \"actual\": null, \"expected\": null, \"passed\": true}, {\"check\": \"control: empty network\", \"actual\": [0.6, [0.0, 0.0, 0.0]], \"expected\": [0.6, [0.0, 0.0, 0.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."}}