{"abstract":"Excessive effort yields negative biomass and negative catch.","category":"Ecological population dynamics","checks":7,"contract":"MSY = rK/4 at B=K/2 and E_msy = r/(2q); equilibrium biomass under effort E is K(1-qE/r) when qE<r else 0; yield = qEB; status 'overfished' when E>E_msy, 'at-msy' when equal, else 'sustainable'; return [MSY, Bmsy, Emsy, B, yield, status] rounded; None for invalid inputs.","contract_signature":"r, k, effort, q","evaluation_group":"w2-ecopop-schaefer-msy","failed_approach":"Comparing raw effort to r forgets catchability.","family":"w2-ecopop-schaefer-msy-collapse-threshold","id":"FA-65561","implementations":{"attempt":{"sha256":"4d04bfc19ac2fed7a73d2ff0553d805bdfe404c39b28d67dfa799b78613acff0","source":"\"\"\"Failure Map reference implementation. Python standard library only.\"\"\"\nimport json\nimport math\nN = 1\nobservations = []\ndef solve(r, k, effort, q):\n    if r <= 0 or k <= 0 or q <= 0 or effort < 0:\n        return None\n    msy = r * k / 4\n    bmsy = k / 2\n    emsy = r / (2 * q)\n    b = k * (1 - q * effort / r) if effort < r else 0.0\n    y = q * effort * b\n    if effort > emsy:\n        status = 'overfished'\n    elif effort == emsy:\n        status = 'at-msy'\n    else:\n        status = 'sustainable'\n    return [round(msy, 4), round(bmsy, 4), round(emsy, 6), round(b, 4), round(y, 4), status]\ndef check(label, actual, expected):\n    observations.append({\"check\": label, \"actual\": actual, \"expected\": expected, \"passed\": actual == expected})\nfixtures = [[('regression: tuna fishery moderate effort',\n   (0.4, 10000, 100, 0.001),\n   [1000.0, 5000.0, 200.0, 7500.0, 750.0, 'sustainable']),\n  ('regression: effort at msy', (0.5, 2000, 250, 0.001), [250.0, 1000.0, 250.0, 1000.0, 250.0, 'at-msy']),\n  ('regression: overfished',\n   (0.3, 5000, 250, 0.001),\n   [375.0, 2500.0, 150.0, 833.3333, 208.3333, 'overfished']),\n  ('regression: collapse effort', (0.2, 3000, 300, 0.001), [150.0, 1500.0, 100.0, 0.0, 0.0, 'overfished']),\n  ('control: no fishing', (0.6, 800, 0, 0.002), [120.0, 400.0, 150.0, 800.0, 0.0, 'sustainable']),\n  ('regression: high catchability', (0.8, 1500, 50, 0.01), [300.0, 750.0, 40.0, 562.5, 281.25, 'overfished']),\n  ('control: invalid q', (0.5, 2000, 100, 0.0), None)],\n [('regression: tuna fishery moderate effort',\n   (0.4, 10000, 100, 0.001),\n   [1000.0, 5000.0, 200.0, 7500.0, 750.0, 'sustainable']),\n  ('regression: collapse effort', (0.2, 3000, 300, 0.001), [150.0, 1500.0, 100.0, 0.0, 0.0, 'overfished']),\n  ('control: no fishing', (0.6, 800, 0, 0.002), [120.0, 400.0, 150.0, 800.0, 0.0, 'sustainable']),\n  ('regression: high catchability', (0.8, 1500, 50, 0.01), [300.0, 750.0, 40.0, 562.5, 281.25, 'overfished']),\n  ('regression: slightly over msy',\n   (0.5, 2000, 250.4, 0.001),\n   [250.0, 1000.0, 250.0, 998.4, 249.9994, 'overfished']),\n  ('control: invalid q', (0.5, 2000, 100, 0.0), None),\n  ('regression: light fishing',\n   (1.2, 400, 20, 0.005),\n   [120.0, 200.0, 120.0, 366.6667, 36.6667, 'sustainable'])],\n [('regression: tuna fishery moderate effort',\n   (0.4, 10000, 100, 0.001),\n   [1000.0, 5000.0, 200.0, 7500.0, 750.0, 'sustainable']),\n  ('regression: effort at msy', (0.5, 2000, 250, 0.001), [250.0, 1000.0, 250.0, 1000.0, 250.0, 'at-msy']),\n  ('regression: collapse effort', (0.2, 3000, 300, 0.001), [150.0, 1500.0, 100.0, 0.0, 0.0, 'overfished']),\n  ('control: no fishing', (0.6, 800, 0, 0.002), [120.0, 400.0, 150.0, 800.0, 0.0, 'sustainable']),\n  ('regression: slightly over msy',\n   (0.5, 2000, 250.4, 0.001),\n   [250.0, 1000.0, 250.0, 998.4, 249.9994, 'overfished']),\n  ('control: invalid q', (0.5, 2000, 100, 0.0), None),\n  ('regression: light fishing',\n   (1.2, 400, 20, 0.005),\n   [120.0, 200.0, 120.0, 366.6667, 36.6667, 'sustainable'])],\n [('regression: tuna fishery moderate effort',\n   (0.4, 10000, 100, 0.001),\n   [1000.0, 5000.0, 200.0, 7500.0, 750.0, 'sustainable']),\n  ('regression: effort at msy', (0.5, 2000, 250, 0.001), [250.0, 1000.0, 250.0, 1000.0, 250.0, 'at-msy']),\n  ('regression: overfished',\n   (0.3, 5000, 250, 0.001),\n   [375.0, 2500.0, 150.0, 833.3333, 208.3333, 'overfished']),\n  ('regression: collapse effort', (0.2, 3000, 300, 0.001), [150.0, 1500.0, 100.0, 0.0, 0.0, 'overfished']),\n  ('control: no fishing', (0.6, 800, 0, 0.002), [120.0, 400.0, 150.0, 800.0, 0.0, 'sustainable']),\n  ('regression: high catchability', (0.8, 1500, 50, 0.01), [300.0, 750.0, 40.0, 562.5, 281.25, 'overfished']),\n  ('control: invalid q', (0.5, 2000, 100, 0.0), None)],\n [('regression: tuna fishery moderate effort',\n   (0.4, 10000, 100, 0.001),\n   [1000.0, 5000.0, 200.0, 7500.0, 750.0, 'sustainable']),\n  ('regression: collapse effort', (0.2, 3000, 300, 0.001), [150.0, 1500.0, 100.0, 0.0, 0.0, 'overfished']),\n  ('control: no fishing', (0.6, 800, 0, 0.002), [120.0, 400.0, 150.0, 800.0, 0.0, 'sustainable']),\n  ('regression: high catchability', (0.8, 1500, 50, 0.01), [300.0, 750.0, 40.0, 562.5, 281.25, 'overfished']),\n  ('regression: slightly over msy',\n   (0.5, 2000, 250.4, 0.001),\n   [250.0, 1000.0, 250.0, 998.4, 249.9994, 'overfished']),\n  ('control: invalid q', (0.5, 2000, 100, 0.0), None),\n  ('regression: light fishing',\n   (1.2, 400, 20, 0.005),\n   [120.0, 200.0, 120.0, 366.6667, 36.6667, 'sustainable'])]]\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":"1049015df9bb5ef19efa2f6e3ba102d83da6aac011514d7a15fce160d3ff9237","source":"\"\"\"Failure Map reference implementation. Python standard library only.\"\"\"\nimport json\nimport math\nN = 1\nobservations = []\ndef solve(r, k, effort, q):\n    if r <= 0 or k <= 0 or q <= 0 or effort < 0:\n        return None\n    msy = r * k / 4\n    bmsy = k / 2\n    emsy = r / (2 * q)\n    b = k * (1 - q * effort / r) if True else 0.0\n    y = q * effort * b\n    if effort > emsy:\n        status = 'overfished'\n    elif effort == emsy:\n        status = 'at-msy'\n    else:\n        status = 'sustainable'\n    return [round(msy, 4), round(bmsy, 4), round(emsy, 6), round(b, 4), round(y, 4), status]\ndef check(label, actual, expected):\n    observations.append({\"check\": label, \"actual\": actual, \"expected\": expected, \"passed\": actual == expected})\nfixtures = [[('regression: tuna fishery moderate effort',\n   (0.4, 10000, 100, 0.001),\n   [1000.0, 5000.0, 200.0, 7500.0, 750.0, 'sustainable']),\n  ('regression: effort at msy', (0.5, 2000, 250, 0.001), [250.0, 1000.0, 250.0, 1000.0, 250.0, 'at-msy']),\n  ('regression: overfished',\n   (0.3, 5000, 250, 0.001),\n   [375.0, 2500.0, 150.0, 833.3333, 208.3333, 'overfished']),\n  ('regression: collapse effort', (0.2, 3000, 300, 0.001), [150.0, 1500.0, 100.0, 0.0, 0.0, 'overfished']),\n  ('control: no fishing', (0.6, 800, 0, 0.002), [120.0, 400.0, 150.0, 800.0, 0.0, 'sustainable']),\n  ('regression: high catchability', (0.8, 1500, 50, 0.01), [300.0, 750.0, 40.0, 562.5, 281.25, 'overfished']),\n  ('control: invalid q', (0.5, 2000, 100, 0.0), None)],\n [('regression: tuna fishery moderate effort',\n   (0.4, 10000, 100, 0.001),\n   [1000.0, 5000.0, 200.0, 7500.0, 750.0, 'sustainable']),\n  ('regression: collapse effort', (0.2, 3000, 300, 0.001), [150.0, 1500.0, 100.0, 0.0, 0.0, 'overfished']),\n  ('control: no fishing', (0.6, 800, 0, 0.002), [120.0, 400.0, 150.0, 800.0, 0.0, 'sustainable']),\n  ('regression: high catchability', (0.8, 1500, 50, 0.01), [300.0, 750.0, 40.0, 562.5, 281.25, 'overfished']),\n  ('regression: slightly over msy',\n   (0.5, 2000, 250.4, 0.001),\n   [250.0, 1000.0, 250.0, 998.4, 249.9994, 'overfished']),\n  ('control: invalid q', (0.5, 2000, 100, 0.0), None),\n  ('regression: light fishing',\n   (1.2, 400, 20, 0.005),\n   [120.0, 200.0, 120.0, 366.6667, 36.6667, 'sustainable'])],\n [('regression: tuna fishery moderate effort',\n   (0.4, 10000, 100, 0.001),\n   [1000.0, 5000.0, 200.0, 7500.0, 750.0, 'sustainable']),\n  ('regression: effort at msy', (0.5, 2000, 250, 0.001), [250.0, 1000.0, 250.0, 1000.0, 250.0, 'at-msy']),\n  ('regression: collapse effort', (0.2, 3000, 300, 0.001), [150.0, 1500.0, 100.0, 0.0, 0.0, 'overfished']),\n  ('control: no fishing', (0.6, 800, 0, 0.002), [120.0, 400.0, 150.0, 800.0, 0.0, 'sustainable']),\n  ('regression: slightly over msy',\n   (0.5, 2000, 250.4, 0.001),\n   [250.0, 1000.0, 250.0, 998.4, 249.9994, 'overfished']),\n  ('control: invalid q', (0.5, 2000, 100, 0.0), None),\n  ('regression: light fishing',\n   (1.2, 400, 20, 0.005),\n   [120.0, 200.0, 120.0, 366.6667, 36.6667, 'sustainable'])],\n [('regression: tuna fishery moderate effort',\n   (0.4, 10000, 100, 0.001),\n   [1000.0, 5000.0, 200.0, 7500.0, 750.0, 'sustainable']),\n  ('regression: effort at msy', (0.5, 2000, 250, 0.001), [250.0, 1000.0, 250.0, 1000.0, 250.0, 'at-msy']),\n  ('regression: overfished',\n   (0.3, 5000, 250, 0.001),\n   [375.0, 2500.0, 150.0, 833.3333, 208.3333, 'overfished']),\n  ('regression: collapse effort', (0.2, 3000, 300, 0.001), [150.0, 1500.0, 100.0, 0.0, 0.0, 'overfished']),\n  ('control: no fishing', (0.6, 800, 0, 0.002), [120.0, 400.0, 150.0, 800.0, 0.0, 'sustainable']),\n  ('regression: high catchability', (0.8, 1500, 50, 0.01), [300.0, 750.0, 40.0, 562.5, 281.25, 'overfished']),\n  ('control: invalid q', (0.5, 2000, 100, 0.0), None)],\n [('regression: tuna fishery moderate effort',\n   (0.4, 10000, 100, 0.001),\n   [1000.0, 5000.0, 200.0, 7500.0, 750.0, 'sustainable']),\n  ('regression: collapse effort', (0.2, 3000, 300, 0.001), [150.0, 1500.0, 100.0, 0.0, 0.0, 'overfished']),\n  ('control: no fishing', (0.6, 800, 0, 0.002), [120.0, 400.0, 150.0, 800.0, 0.0, 'sustainable']),\n  ('regression: high catchability', (0.8, 1500, 50, 0.01), [300.0, 750.0, 40.0, 562.5, 281.25, 'overfished']),\n  ('regression: slightly over msy',\n   (0.5, 2000, 250.4, 0.001),\n   [250.0, 1000.0, 250.0, 998.4, 249.9994, 'overfished']),\n  ('control: invalid q', (0.5, 2000, 100, 0.0), None),\n  ('regression: light fishing',\n   (1.2, 400, 20, 0.005),\n   [120.0, 200.0, 120.0, 366.6667, 36.6667, 'sustainable'])]]\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-schaefer-msy-collapse-threshold","generated_at":"2026-09-29T14:47:35.279173+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":"Equilibrium biomass is not floored when fishing mortality exceeds r.","sha256":"4eaafeec87df3a2959d3627a94b9f4542c31ce1ef78ead3b03582b2278a414f7","title":"Schaefer surplus-production harvest reference points: collapse threshold · 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":42.582,"exit_code":1,"observations":[{"actual":[1000.0,5000.0,200.0,0.0,0.0,"sustainable"],"check":"regression: tuna fishery moderate effort","expected":[1000.0,5000.0,200.0,7500.0,750.0,"sustainable"],"passed":false},{"actual":[250.0,1000.0,250.0,0.0,0.0,"at-msy"],"check":"regression: effort at msy","expected":[250.0,1000.0,250.0,1000.0,250.0,"at-msy"],"passed":false},{"actual":[375.0,2500.0,150.0,0.0,0.0,"overfished"],"check":"regression: overfished","expected":[375.0,2500.0,150.0,833.3333,208.3333,"overfished"],"passed":false},{"actual":[150.0,1500.0,100.0,0.0,0.0,"overfished"],"check":"regression: collapse effort","expected":[150.0,1500.0,100.0,0.0,0.0,"overfished"],"passed":true},{"actual":[120.0,400.0,150.0,800.0,0.0,"sustainable"],"check":"control: no fishing","expected":[120.0,400.0,150.0,800.0,0.0,"sustainable"],"passed":true},{"actual":[300.0,750.0,40.0,0.0,0.0,"overfished"],"check":"regression: high catchability","expected":[300.0,750.0,40.0,562.5,281.25,"overfished"],"passed":false},{"actual":null,"check":"control: invalid q","expected":null,"passed":true}],"passed":false,"stderr":"","stdout":"{\"observations\": [{\"check\": \"regression: tuna fishery moderate effort\", \"actual\": [1000.0, 5000.0, 200.0, 0.0, 0.0, \"sustainable\"], \"expected\": [1000.0, 5000.0, 200.0, 7500.0, 750.0, \"sustainable\"], \"passed\": false}, {\"check\": \"regression: effort at msy\", \"actual\": [250.0, 1000.0, 250.0, 0.0, 0.0, \"at-msy\"], \"expected\": [250.0, 1000.0, 250.0, 1000.0, 250.0, \"at-msy\"], \"passed\": false}, {\"check\": \"regression: overfished\", \"actual\": [375.0, 2500.0, 150.0, 0.0, 0.0, \"overfished\"], \"expected\": [375.0, 2500.0, 150.0, 833.3333, 208.3333, \"overfished\"], \"passed\": false}, {\"check\": \"regression: collapse effort\", \"actual\": [150.0, 1500.0, 100.0, 0.0, 0.0, \"overfished\"], \"expected\": [150.0, 1500.0, 100.0, 0.0, 0.0, \"overfished\"], \"passed\": true}, {\"check\": \"control: no fishing\", \"actual\": [120.0, 400.0, 150.0, 800.0, 0.0, \"sustainable\"], \"expected\": [120.0, 400.0, 150.0, 800.0, 0.0, \"sustainable\"], \"passed\": true}, {\"check\": \"regression: high catchability\", \"actual\": [300.0, 750.0, 40.0, 0.0, 0.0, \"overfished\"], \"expected\": [300.0, 750.0, 40.0, 562.5, 281.25, \"overfished\"], \"passed\": false}, {\"check\": \"control: invalid q\", \"actual\": null, \"expected\": null, \"passed\": true}], \"passed\": false}\n"},"broken":{"elapsed_ms":39.121,"exit_code":1,"observations":[{"actual":[1000.0,5000.0,200.0,7500.0,750.0,"sustainable"],"check":"regression: tuna fishery moderate effort","expected":[1000.0,5000.0,200.0,7500.0,750.0,"sustainable"],"passed":true},{"actual":[250.0,1000.0,250.0,1000.0,250.0,"at-msy"],"check":"regression: effort at msy","expected":[250.0,1000.0,250.0,1000.0,250.0,"at-msy"],"passed":true},{"actual":[375.0,2500.0,150.0,833.3333,208.3333,"overfished"],"check":"regression: overfished","expected":[375.0,2500.0,150.0,833.3333,208.3333,"overfished"],"passed":true},{"actual":[150.0,1500.0,100.0,-1500.0,-450.0,"overfished"],"check":"regression: collapse effort","expected":[150.0,1500.0,100.0,0.0,0.0,"overfished"],"passed":false},{"actual":[120.0,400.0,150.0,800.0,0.0,"sustainable"],"check":"control: no fishing","expected":[120.0,400.0,150.0,800.0,0.0,"sustainable"],"passed":true},{"actual":[300.0,750.0,40.0,562.5,281.25,"overfished"],"check":"regression: high catchability","expected":[300.0,750.0,40.0,562.5,281.25,"overfished"],"passed":true},{"actual":null,"check":"control: invalid q","expected":null,"passed":true}],"passed":false,"stderr":"","stdout":"{\"observations\": [{\"check\": \"regression: tuna fishery moderate effort\", \"actual\": [1000.0, 5000.0, 200.0, 7500.0, 750.0, \"sustainable\"], \"expected\": [1000.0, 5000.0, 200.0, 7500.0, 750.0, \"sustainable\"], \"passed\": true}, {\"check\": \"regression: effort at msy\", \"actual\": [250.0, 1000.0, 250.0, 1000.0, 250.0, \"at-msy\"], \"expected\": [250.0, 1000.0, 250.0, 1000.0, 250.0, \"at-msy\"], \"passed\": true}, {\"check\": \"regression: overfished\", \"actual\": [375.0, 2500.0, 150.0, 833.3333, 208.3333, \"overfished\"], \"expected\": [375.0, 2500.0, 150.0, 833.3333, 208.3333, \"overfished\"], \"passed\": true}, {\"check\": \"regression: collapse effort\", \"actual\": [150.0, 1500.0, 100.0, -1500.0, -450.0, \"overfished\"], \"expected\": [150.0, 1500.0, 100.0, 0.0, 0.0, \"overfished\"], \"passed\": false}, {\"check\": \"control: no fishing\", \"actual\": [120.0, 400.0, 150.0, 800.0, 0.0, \"sustainable\"], \"expected\": [120.0, 400.0, 150.0, 800.0, 0.0, \"sustainable\"], \"passed\": true}, {\"check\": \"regression: high catchability\", \"actual\": [300.0, 750.0, 40.0, 562.5, 281.25, \"overfished\"], \"expected\": [300.0, 750.0, 40.0, 562.5, 281.25, \"overfished\"], \"passed\": true}, {\"check\": \"control: invalid q\", \"actual\": null, \"expected\": 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."}}