{"abstract":"Abundance is underestimated and becomes zero when the second pass is empty.","category":"Ecological population dynamics","checks":7,"contract":"N = c1^2/(c1-c2), p = (c1-c2)/c1, var = c1^2*c2^2*(c1+c2)/(c1-c2)^4 rounded [2, 4, 2]; [None, None, None] when c1<=c2; None for negative catches.","contract_signature":"c1, c2","evaluation_group":"w2-ecopop-removal-sampling","failed_approach":"Dividing by the total catch confuses removal with pooled counts.","family":"w2-ecopop-removal-sampling-estimator-numerator","id":"FA-65716","implementations":{"attempt":{"sha256":"a1d3aeff9482965088f9323d75cddd982ef64b41c9a814fd8ebbd9e382cfa038","source":"\"\"\"Failure Map reference implementation. Python standard library only.\"\"\"\nimport json\nimport math\nN = 1\nobservations = []\ndef solve(c1, c2):\n    if c1 < 0 or c2 < 0:\n        return None\n    if c1 <= c2:\n        return [None, None, None]\n    n_hat = c1 * c1 / (c1 + c2)\n    p_hat = (c1 - c2) / c1\n    var = c1 ** 2 * c2 ** 2 * (c1 + c2) / (c1 - c2) ** 4\n    return [round(n_hat, 2), round(p_hat, 4), round(var, 2)]\ndef check(label, actual, expected):\n    observations.append({\"check\": label, \"actual\": actual, \"expected\": expected, \"passed\": actual == expected})\nfixtures = [[('regression: stream electrofishing', (60, 25), [102.86, 0.5833, 127.45]),\n  ('regression: efficient first pass', (90, 10), [101.25, 0.8889, 1.98]),\n  ('regression: weak depletion', (40, 32), [200.0, 0.2, 28800.0]),\n  ('control: no depletion', (30, 30), [None, None, None]),\n  ('regression: second pass empty', (45, 0), [45.0, 1.0, 0.0]),\n  ('control: negative catch', (-1, 3), None),\n  ('control: increasing catch', (20, 25), [None, None, None])],\n [('regression: stream electrofishing', (60, 25), [102.86, 0.5833, 127.45]),\n  ('control: no depletion', (30, 30), [None, None, None]),\n  ('regression: second pass empty', (45, 0), [45.0, 1.0, 0.0]),\n  ('control: negative catch', (-1, 3), None),\n  ('control: increasing catch', (20, 25), [None, None, None]),\n  ('regression: small stream', (12, 5), [20.57, 0.5833, 25.49]),\n  ('regression: large lake', (300, 140), [562.5, 0.5333, 1184.33])],\n [('regression: stream electrofishing', (60, 25), [102.86, 0.5833, 127.45]),\n  ('regression: efficient first pass', (90, 10), [101.25, 0.8889, 1.98]),\n  ('control: no depletion', (30, 30), [None, None, None]),\n  ('control: negative catch', (-1, 3), None),\n  ('control: increasing catch', (20, 25), [None, None, None]),\n  ('regression: small stream', (12, 5), [20.57, 0.5833, 25.49]),\n  ('regression: large lake', (300, 140), [562.5, 0.5333, 1184.33])],\n [('regression: stream electrofishing', (60, 25), [102.86, 0.5833, 127.45]),\n  ('regression: efficient first pass', (90, 10), [101.25, 0.8889, 1.98]),\n  ('regression: weak depletion', (40, 32), [200.0, 0.2, 28800.0]),\n  ('control: no depletion', (30, 30), [None, None, None]),\n  ('regression: second pass empty', (45, 0), [45.0, 1.0, 0.0]),\n  ('control: negative catch', (-1, 3), None),\n  ('control: increasing catch', (20, 25), [None, None, None])],\n [('regression: stream electrofishing', (60, 25), [102.86, 0.5833, 127.45]),\n  ('control: no depletion', (30, 30), [None, None, None]),\n  ('regression: second pass empty', (45, 0), [45.0, 1.0, 0.0]),\n  ('control: negative catch', (-1, 3), None),\n  ('control: increasing catch', (20, 25), [None, None, None]),\n  ('regression: small stream', (12, 5), [20.57, 0.5833, 25.49]),\n  ('regression: large lake', (300, 140), [562.5, 0.5333, 1184.33])]]\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":"a3e2e6b2de381b40fcf593a8225b43dc1624d798cf8b82b11d59e5a1eba8e557","source":"\"\"\"Failure Map reference implementation. Python standard library only.\"\"\"\nimport json\nimport math\nN = 1\nobservations = []\ndef solve(c1, c2):\n    if c1 < 0 or c2 < 0:\n        return None\n    if c1 <= c2:\n        return [None, None, None]\n    n_hat = c1 * c2 / (c1 - c2)\n    p_hat = (c1 - c2) / c1\n    var = c1 ** 2 * c2 ** 2 * (c1 + c2) / (c1 - c2) ** 4\n    return [round(n_hat, 2), round(p_hat, 4), round(var, 2)]\ndef check(label, actual, expected):\n    observations.append({\"check\": label, \"actual\": actual, \"expected\": expected, \"passed\": actual == expected})\nfixtures = [[('regression: stream electrofishing', (60, 25), [102.86, 0.5833, 127.45]),\n  ('regression: efficient first pass', (90, 10), [101.25, 0.8889, 1.98]),\n  ('regression: weak depletion', (40, 32), [200.0, 0.2, 28800.0]),\n  ('control: no depletion', (30, 30), [None, None, None]),\n  ('regression: second pass empty', (45, 0), [45.0, 1.0, 0.0]),\n  ('control: negative catch', (-1, 3), None),\n  ('control: increasing catch', (20, 25), [None, None, None])],\n [('regression: stream electrofishing', (60, 25), [102.86, 0.5833, 127.45]),\n  ('control: no depletion', (30, 30), [None, None, None]),\n  ('regression: second pass empty', (45, 0), [45.0, 1.0, 0.0]),\n  ('control: negative catch', (-1, 3), None),\n  ('control: increasing catch', (20, 25), [None, None, None]),\n  ('regression: small stream', (12, 5), [20.57, 0.5833, 25.49]),\n  ('regression: large lake', (300, 140), [562.5, 0.5333, 1184.33])],\n [('regression: stream electrofishing', (60, 25), [102.86, 0.5833, 127.45]),\n  ('regression: efficient first pass', (90, 10), [101.25, 0.8889, 1.98]),\n  ('control: no depletion', (30, 30), [None, None, None]),\n  ('control: negative catch', (-1, 3), None),\n  ('control: increasing catch', (20, 25), [None, None, None]),\n  ('regression: small stream', (12, 5), [20.57, 0.5833, 25.49]),\n  ('regression: large lake', (300, 140), [562.5, 0.5333, 1184.33])],\n [('regression: stream electrofishing', (60, 25), [102.86, 0.5833, 127.45]),\n  ('regression: efficient first pass', (90, 10), [101.25, 0.8889, 1.98]),\n  ('regression: weak depletion', (40, 32), [200.0, 0.2, 28800.0]),\n  ('control: no depletion', (30, 30), [None, None, None]),\n  ('regression: second pass empty', (45, 0), [45.0, 1.0, 0.0]),\n  ('control: negative catch', (-1, 3), None),\n  ('control: increasing catch', (20, 25), [None, None, None])],\n [('regression: stream electrofishing', (60, 25), [102.86, 0.5833, 127.45]),\n  ('control: no depletion', (30, 30), [None, None, None]),\n  ('regression: second pass empty', (45, 0), [45.0, 1.0, 0.0]),\n  ('control: negative catch', (-1, 3), None),\n  ('control: increasing catch', (20, 25), [None, None, None]),\n  ('regression: small stream', (12, 5), [20.57, 0.5833, 25.49]),\n  ('regression: large lake', (300, 140), [562.5, 0.5333, 1184.33])]]\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-removal-sampling-estimator-numerator","generated_at":"2026-09-29T14:47:36.616348+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 numerator uses c1*c2 instead of c1^2.","sha256":"c18c75dadf94ca13efbe697e7ce2741e06c35d34af98d094de8ea2e6f044e989","title":"Two-pass removal abundance estimate: estimator numerator · 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":38.595,"exit_code":1,"observations":[{"actual":[42.35,0.5833,127.45],"check":"regression: stream electrofishing","expected":[102.86,0.5833,127.45],"passed":false},{"actual":[81.0,0.8889,1.98],"check":"regression: efficient first pass","expected":[101.25,0.8889,1.98],"passed":false},{"actual":[22.22,0.2,28800.0],"check":"regression: weak depletion","expected":[200.0,0.2,28800.0],"passed":false},{"actual":[null,null,null],"check":"control: no depletion","expected":[null,null,null],"passed":true},{"actual":[45.0,1.0,0.0],"check":"regression: second pass empty","expected":[45.0,1.0,0.0],"passed":true},{"actual":null,"check":"control: negative catch","expected":null,"passed":true},{"actual":[null,null,null],"check":"control: increasing catch","expected":[null,null,null],"passed":true}],"passed":false,"stderr":"","stdout":"{\"observations\": [{\"check\": \"regression: stream electrofishing\", \"actual\": [42.35, 0.5833, 127.45], \"expected\": [102.86, 0.5833, 127.45], \"passed\": false}, {\"check\": \"regression: efficient first pass\", \"actual\": [81.0, 0.8889, 1.98], \"expected\": [101.25, 0.8889, 1.98], \"passed\": false}, {\"check\": \"regression: weak depletion\", \"actual\": [22.22, 0.2, 28800.0], \"expected\": [200.0, 0.2, 28800.0], \"passed\": false}, {\"check\": \"control: no depletion\", \"actual\": [null, null, null], \"expected\": [null, null, null], \"passed\": true}, {\"check\": \"regression: second pass empty\", \"actual\": [45.0, 1.0, 0.0], \"expected\": [45.0, 1.0, 0.0], \"passed\": true}, {\"check\": \"control: negative catch\", \"actual\": null, \"expected\": null, \"passed\": true}, {\"check\": \"control: increasing catch\", \"actual\": [null, null, null], \"expected\": [null, null, null], \"passed\": true}], \"passed\": false}\n"},"broken":{"elapsed_ms":39.529,"exit_code":1,"observations":[{"actual":[42.86,0.5833,127.45],"check":"regression: stream electrofishing","expected":[102.86,0.5833,127.45],"passed":false},{"actual":[11.25,0.8889,1.98],"check":"regression: efficient first pass","expected":[101.25,0.8889,1.98],"passed":false},{"actual":[160.0,0.2,28800.0],"check":"regression: weak depletion","expected":[200.0,0.2,28800.0],"passed":false},{"actual":[null,null,null],"check":"control: no depletion","expected":[null,null,null],"passed":true},{"actual":[0.0,1.0,0.0],"check":"regression: second pass empty","expected":[45.0,1.0,0.0],"passed":false},{"actual":null,"check":"control: negative catch","expected":null,"passed":true},{"actual":[null,null,null],"check":"control: increasing catch","expected":[null,null,null],"passed":true}],"passed":false,"stderr":"","stdout":"{\"observations\": [{\"check\": \"regression: stream electrofishing\", \"actual\": [42.86, 0.5833, 127.45], \"expected\": [102.86, 0.5833, 127.45], \"passed\": false}, {\"check\": \"regression: efficient first pass\", \"actual\": [11.25, 0.8889, 1.98], \"expected\": [101.25, 0.8889, 1.98], \"passed\": false}, {\"check\": \"regression: weak depletion\", \"actual\": [160.0, 0.2, 28800.0], \"expected\": [200.0, 0.2, 28800.0], \"passed\": false}, {\"check\": \"control: no depletion\", \"actual\": [null, null, null], \"expected\": [null, null, null], \"passed\": true}, {\"check\": \"regression: second pass empty\", \"actual\": [0.0, 1.0, 0.0], \"expected\": [45.0, 1.0, 0.0], \"passed\": false}, {\"check\": \"control: negative catch\", \"actual\": null, \"expected\": null, \"passed\": true}, {\"check\": \"control: increasing catch\", \"actual\": [null, null, null], \"expected\": [null, null, null], \"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."}}