{"abstract":"Filter feeders are capped at the handling time instead of the maximum intake rate.","category":"Ecological population dynamics","checks":7,"contract":"Per-predator intake f: type 1 = a*N capped at 1/h (uncapped when h==0), type 2 = aN/(1+ahN), type 3 = aN^2/(1+ahN^2); eaten = min(f*predators*duration, N); return [f rounded 6, eaten rounded 4]; None for negative parameters or unknown kind.","evaluation_group":"w2-ecopop-functional-response","failed_approach":"Dividing by 1+h is a smooth discount, not the linear-then-flat type I response.","family":"w2-ecopop-functional-response-type-i-satiation-cap","id":"FA-65431","implementations":{"attempt":{"sha256":"0a155fe98447f257bfe5fa3667a8d367e5bc7b1916d7b17d0460b3ccc6260242","source":"\"\"\"Failure Map reference implementation. Python standard library only.\"\"\"\nimport json\nimport math\nN = 1\nobservations = []\ndef solve(kind, a, h, prey, predators, duration):\n    if a < 0 or h < 0 or prey < 0:\n        return None\n    if kind == 1:\n        f = a * prey if h == 0 else a * prey / (1 + h)\n    elif kind == 2:\n        f = a * prey / (1 + a * h * prey)\n    elif kind == 3:\n        f = a * prey ** 2 / (1 + a * h * prey ** 2)\n    else:\n        return None\n    eaten = min(f * predators * duration, prey)\n    return [round(f, 6), round(eaten, 4)]\ndef check(label, actual, expected):\n    observations.append({\"check\": label, \"actual\": actual, \"expected\": expected, \"passed\": actual == expected})\nfixtures = [[('regression: type 1 saturated filter feeder', (1, 0.5, 0.25, 20, 2, 1), [4.0, 8.0]),\n  ('regression: type 1 unsaturated', (1, 0.1, 0.5, 10, 1, 2), [1.0, 2.0]),\n  ('control: type 1 no handling', (1, 0.3, 0.0, 40, 1, 1), [12.0, 12.0]),\n  ('control: type 2 wolves on moose', (2, 0.8, 0.5, 30, 3, 2), [1.846154, 11.0769]),\n  ('control: type 2 low density', (2, 0.2, 0.1, 3, 1, 1), [0.566038, 0.566]),\n  ('control: type 3 prey switching', (3, 0.05, 0.2, 12, 2, 3), [2.95082, 12]),\n  ('control: type 3 high density', (3, 0.1, 0.4, 50, 1, 1), [2.475248, 2.4752])],\n [('regression: type 1 saturated filter feeder', (1, 0.5, 0.25, 20, 2, 1), [4.0, 8.0]),\n  ('regression: type 1 unsaturated', (1, 0.1, 0.5, 10, 1, 2), [1.0, 2.0]),\n  ('control: type 2 wolves on moose', (2, 0.8, 0.5, 30, 3, 2), [1.846154, 11.0769]),\n  ('control: type 2 low density', (2, 0.2, 0.1, 3, 1, 1), [0.566038, 0.566]),\n  ('control: type 3 prey switching', (3, 0.05, 0.2, 12, 2, 3), [2.95082, 12]),\n  ('control: type 3 high density', (3, 0.1, 0.4, 50, 1, 1), [2.475248, 2.4752]),\n  ('control: depletion cap', (2, 2.0, 0.05, 10, 20, 5), [10.0, 10])],\n [('regression: type 1 saturated filter feeder', (1, 0.5, 0.25, 20, 2, 1), [4.0, 8.0]),\n  ('regression: type 1 unsaturated', (1, 0.1, 0.5, 10, 1, 2), [1.0, 2.0]),\n  ('control: type 3 high density', (3, 0.1, 0.4, 50, 1, 1), [2.475248, 2.4752]),\n  ('control: depletion cap', (2, 2.0, 0.05, 10, 20, 5), [10.0, 10]),\n  ('control: unknown kind', (4, 0.1, 0.1, 10, 1, 1), None),\n  ('control: no prey', (2, 0.5, 0.5, 0, 2, 1), [0.0, 0.0]),\n  ('control: invalid negative handling', (2, 0.5, -0.1, 10, 1, 1), None)],\n [('regression: type 1 saturated filter feeder', (1, 0.5, 0.25, 20, 2, 1), [4.0, 8.0]),\n  ('regression: type 1 unsaturated', (1, 0.1, 0.5, 10, 1, 2), [1.0, 2.0]),\n  ('control: type 1 no handling', (1, 0.3, 0.0, 40, 1, 1), [12.0, 12.0]),\n  ('control: type 2 wolves on moose', (2, 0.8, 0.5, 30, 3, 2), [1.846154, 11.0769]),\n  ('control: type 2 low density', (2, 0.2, 0.1, 3, 1, 1), [0.566038, 0.566]),\n  ('control: no prey', (2, 0.5, 0.5, 0, 2, 1), [0.0, 0.0]),\n  ('control: invalid negative handling', (2, 0.5, -0.1, 10, 1, 1), None)],\n [('regression: type 1 saturated filter feeder', (1, 0.5, 0.25, 20, 2, 1), [4.0, 8.0]),\n  ('regression: type 1 unsaturated', (1, 0.1, 0.5, 10, 1, 2), [1.0, 2.0]),\n  ('control: type 1 no handling', (1, 0.3, 0.0, 40, 1, 1), [12.0, 12.0]),\n  ('control: type 2 wolves on moose', (2, 0.8, 0.5, 30, 3, 2), [1.846154, 11.0769]),\n  ('control: type 2 low density', (2, 0.2, 0.1, 3, 1, 1), [0.566038, 0.566]),\n  ('control: type 3 prey switching', (3, 0.05, 0.2, 12, 2, 3), [2.95082, 12]),\n  ('control: type 3 high density', (3, 0.1, 0.4, 50, 1, 1), [2.475248, 2.4752])]]\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":"8c54faa457b8a572433f186696c8a6c523cb2df82f430566451105f2f1d0f959","source":"\"\"\"Failure Map reference implementation. Python standard library only.\"\"\"\nimport json\nimport math\nN = 1\nobservations = []\ndef solve(kind, a, h, prey, predators, duration):\n    if a < 0 or h < 0 or prey < 0:\n        return None\n    if kind == 1:\n        f = a * prey if h == 0 else min(a * prey, h)\n    elif kind == 2:\n        f = a * prey / (1 + a * h * prey)\n    elif kind == 3:\n        f = a * prey ** 2 / (1 + a * h * prey ** 2)\n    else:\n        return None\n    eaten = min(f * predators * duration, prey)\n    return [round(f, 6), round(eaten, 4)]\ndef check(label, actual, expected):\n    observations.append({\"check\": label, \"actual\": actual, \"expected\": expected, \"passed\": actual == expected})\nfixtures = [[('regression: type 1 saturated filter feeder', (1, 0.5, 0.25, 20, 2, 1), [4.0, 8.0]),\n  ('regression: type 1 unsaturated', (1, 0.1, 0.5, 10, 1, 2), [1.0, 2.0]),\n  ('control: type 1 no handling', (1, 0.3, 0.0, 40, 1, 1), [12.0, 12.0]),\n  ('control: type 2 wolves on moose', (2, 0.8, 0.5, 30, 3, 2), [1.846154, 11.0769]),\n  ('control: type 2 low density', (2, 0.2, 0.1, 3, 1, 1), [0.566038, 0.566]),\n  ('control: type 3 prey switching', (3, 0.05, 0.2, 12, 2, 3), [2.95082, 12]),\n  ('control: type 3 high density', (3, 0.1, 0.4, 50, 1, 1), [2.475248, 2.4752])],\n [('regression: type 1 saturated filter feeder', (1, 0.5, 0.25, 20, 2, 1), [4.0, 8.0]),\n  ('regression: type 1 unsaturated', (1, 0.1, 0.5, 10, 1, 2), [1.0, 2.0]),\n  ('control: type 2 wolves on moose', (2, 0.8, 0.5, 30, 3, 2), [1.846154, 11.0769]),\n  ('control: type 2 low density', (2, 0.2, 0.1, 3, 1, 1), [0.566038, 0.566]),\n  ('control: type 3 prey switching', (3, 0.05, 0.2, 12, 2, 3), [2.95082, 12]),\n  ('control: type 3 high density', (3, 0.1, 0.4, 50, 1, 1), [2.475248, 2.4752]),\n  ('control: depletion cap', (2, 2.0, 0.05, 10, 20, 5), [10.0, 10])],\n [('regression: type 1 saturated filter feeder', (1, 0.5, 0.25, 20, 2, 1), [4.0, 8.0]),\n  ('regression: type 1 unsaturated', (1, 0.1, 0.5, 10, 1, 2), [1.0, 2.0]),\n  ('control: type 3 high density', (3, 0.1, 0.4, 50, 1, 1), [2.475248, 2.4752]),\n  ('control: depletion cap', (2, 2.0, 0.05, 10, 20, 5), [10.0, 10]),\n  ('control: unknown kind', (4, 0.1, 0.1, 10, 1, 1), None),\n  ('control: no prey', (2, 0.5, 0.5, 0, 2, 1), [0.0, 0.0]),\n  ('control: invalid negative handling', (2, 0.5, -0.1, 10, 1, 1), None)],\n [('regression: type 1 saturated filter feeder', (1, 0.5, 0.25, 20, 2, 1), [4.0, 8.0]),\n  ('regression: type 1 unsaturated', (1, 0.1, 0.5, 10, 1, 2), [1.0, 2.0]),\n  ('control: type 1 no handling', (1, 0.3, 0.0, 40, 1, 1), [12.0, 12.0]),\n  ('control: type 2 wolves on moose', (2, 0.8, 0.5, 30, 3, 2), [1.846154, 11.0769]),\n  ('control: type 2 low density', (2, 0.2, 0.1, 3, 1, 1), [0.566038, 0.566]),\n  ('control: no prey', (2, 0.5, 0.5, 0, 2, 1), [0.0, 0.0]),\n  ('control: invalid negative handling', (2, 0.5, -0.1, 10, 1, 1), None)],\n [('regression: type 1 saturated filter feeder', (1, 0.5, 0.25, 20, 2, 1), [4.0, 8.0]),\n  ('regression: type 1 unsaturated', (1, 0.1, 0.5, 10, 1, 2), [1.0, 2.0]),\n  ('control: type 1 no handling', (1, 0.3, 0.0, 40, 1, 1), [12.0, 12.0]),\n  ('control: type 2 wolves on moose', (2, 0.8, 0.5, 30, 3, 2), [1.846154, 11.0769]),\n  ('control: type 2 low density', (2, 0.2, 0.1, 3, 1, 1), [0.566038, 0.566]),\n  ('control: type 3 prey switching', (3, 0.05, 0.2, 12, 2, 3), [2.95082, 12]),\n  ('control: type 3 high density', (3, 0.1, 0.4, 50, 1, 1), [2.475248, 2.4752])]]\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"},"fixed":{"sha256":"c090f746fb3606d6469b54a9965a337521df31431e1f6437c502b41dab19dacd","source":"\"\"\"Failure Map reference implementation. Python standard library only.\"\"\"\nimport json\nimport math\nN = 1\nobservations = []\ndef solve(kind, a, h, prey, predators, duration):\n    if a < 0 or h < 0 or prey < 0:\n        return None\n    if kind == 1:\n        f = a * prey if h == 0 else min(a * prey, 1 / h)\n    elif kind == 2:\n        f = a * prey / (1 + a * h * prey)\n    elif kind == 3:\n        f = a * prey ** 2 / (1 + a * h * prey ** 2)\n    else:\n        return None\n    eaten = min(f * predators * duration, prey)\n    return [round(f, 6), round(eaten, 4)]\ndef check(label, actual, expected):\n    observations.append({\"check\": label, \"actual\": actual, \"expected\": expected, \"passed\": actual == expected})\nfixtures = [[('regression: type 1 saturated filter feeder', (1, 0.5, 0.25, 20, 2, 1), [4.0, 8.0]),\n  ('regression: type 1 unsaturated', (1, 0.1, 0.5, 10, 1, 2), [1.0, 2.0]),\n  ('control: type 1 no handling', (1, 0.3, 0.0, 40, 1, 1), [12.0, 12.0]),\n  ('control: type 2 wolves on moose', (2, 0.8, 0.5, 30, 3, 2), [1.846154, 11.0769]),\n  ('control: type 2 low density', (2, 0.2, 0.1, 3, 1, 1), [0.566038, 0.566]),\n  ('control: type 3 prey switching', (3, 0.05, 0.2, 12, 2, 3), [2.95082, 12]),\n  ('control: type 3 high density', (3, 0.1, 0.4, 50, 1, 1), [2.475248, 2.4752])],\n [('regression: type 1 saturated filter feeder', (1, 0.5, 0.25, 20, 2, 1), [4.0, 8.0]),\n  ('regression: type 1 unsaturated', (1, 0.1, 0.5, 10, 1, 2), [1.0, 2.0]),\n  ('control: type 2 wolves on moose', (2, 0.8, 0.5, 30, 3, 2), [1.846154, 11.0769]),\n  ('control: type 2 low density', (2, 0.2, 0.1, 3, 1, 1), [0.566038, 0.566]),\n  ('control: type 3 prey switching', (3, 0.05, 0.2, 12, 2, 3), [2.95082, 12]),\n  ('control: type 3 high density', (3, 0.1, 0.4, 50, 1, 1), [2.475248, 2.4752]),\n  ('control: depletion cap', (2, 2.0, 0.05, 10, 20, 5), [10.0, 10])],\n [('regression: type 1 saturated filter feeder', (1, 0.5, 0.25, 20, 2, 1), [4.0, 8.0]),\n  ('regression: type 1 unsaturated', (1, 0.1, 0.5, 10, 1, 2), [1.0, 2.0]),\n  ('control: type 3 high density', (3, 0.1, 0.4, 50, 1, 1), [2.475248, 2.4752]),\n  ('control: depletion cap', (2, 2.0, 0.05, 10, 20, 5), [10.0, 10]),\n  ('control: unknown kind', (4, 0.1, 0.1, 10, 1, 1), None),\n  ('control: no prey', (2, 0.5, 0.5, 0, 2, 1), [0.0, 0.0]),\n  ('control: invalid negative handling', (2, 0.5, -0.1, 10, 1, 1), None)],\n [('regression: type 1 saturated filter feeder', (1, 0.5, 0.25, 20, 2, 1), [4.0, 8.0]),\n  ('regression: type 1 unsaturated', (1, 0.1, 0.5, 10, 1, 2), [1.0, 2.0]),\n  ('control: type 1 no handling', (1, 0.3, 0.0, 40, 1, 1), [12.0, 12.0]),\n  ('control: type 2 wolves on moose', (2, 0.8, 0.5, 30, 3, 2), [1.846154, 11.0769]),\n  ('control: type 2 low density', (2, 0.2, 0.1, 3, 1, 1), [0.566038, 0.566]),\n  ('control: no prey', (2, 0.5, 0.5, 0, 2, 1), [0.0, 0.0]),\n  ('control: invalid negative handling', (2, 0.5, -0.1, 10, 1, 1), None)],\n [('regression: type 1 saturated filter feeder', (1, 0.5, 0.25, 20, 2, 1), [4.0, 8.0]),\n  ('regression: type 1 unsaturated', (1, 0.1, 0.5, 10, 1, 2), [1.0, 2.0]),\n  ('control: type 1 no handling', (1, 0.3, 0.0, 40, 1, 1), [12.0, 12.0]),\n  ('control: type 2 wolves on moose', (2, 0.8, 0.5, 30, 3, 2), [1.846154, 11.0769]),\n  ('control: type 2 low density', (2, 0.2, 0.1, 3, 1, 1), [0.566038, 0.566]),\n  ('control: type 3 prey switching', (3, 0.05, 0.2, 12, 2, 3), [2.95082, 12]),\n  ('control: type 3 high density', (3, 0.1, 0.4, 50, 1, 1), [2.475248, 2.4752])]]\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-functional-response-type-i-satiation-cap","generated_at":"2026-09-29T14:47:33.992921+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.","repair":"Restore the type I satiation cap rule: `min(a * prey, 1 / h)`.","root_cause":"The cap uses h rather than 1/h.","sha256":"18c383f0b1c897d9aad76c66da87db073649930d41b6f65eb8d39cea9c79d90e","title":"Holling functional response consumption: type I satiation cap · case 01","variant":1,"variant_policy":"Five numbered records share a model and may reuse boundary fixtures.","verification":{"attempt":{"elapsed_ms":41.297,"exit_code":1,"observations":[{"actual":[8.0,16.0],"check":"regression: type 1 saturated filter feeder","expected":[4.0,8.0],"passed":false},{"actual":[0.666667,1.3333],"check":"regression: type 1 unsaturated","expected":[1.0,2.0],"passed":false},{"actual":[12.0,12.0],"check":"control: type 1 no handling","expected":[12.0,12.0],"passed":true},{"actual":[1.846154,11.0769],"check":"control: type 2 wolves on moose","expected":[1.846154,11.0769],"passed":true},{"actual":[0.566038,0.566],"check":"control: type 2 low density","expected":[0.566038,0.566],"passed":true},{"actual":[2.95082,12],"check":"control: type 3 prey switching","expected":[2.95082,12],"passed":true},{"actual":[2.475248,2.4752],"check":"control: type 3 high density","expected":[2.475248,2.4752],"passed":true}],"passed":false,"stderr":"","stdout":"{\"observations\": [{\"check\": \"regression: type 1 saturated filter feeder\", \"actual\": [8.0, 16.0], \"expected\": [4.0, 8.0], \"passed\": false}, {\"check\": \"regression: type 1 unsaturated\", \"actual\": [0.666667, 1.3333], \"expected\": [1.0, 2.0], \"passed\": false}, {\"check\": \"control: type 1 no handling\", \"actual\": [12.0, 12.0], \"expected\": [12.0, 12.0], \"passed\": true}, {\"check\": \"control: type 2 wolves on moose\", \"actual\": [1.846154, 11.0769], \"expected\": [1.846154, 11.0769], \"passed\": true}, {\"check\": \"control: type 2 low density\", \"actual\": [0.566038, 0.566], \"expected\": [0.566038, 0.566], \"passed\": true}, {\"check\": \"control: type 3 prey switching\", \"actual\": [2.95082, 12], \"expected\": [2.95082, 12], \"passed\": true}, {\"check\": \"control: type 3 high density\", \"actual\": [2.475248, 2.4752], \"expected\": [2.475248, 2.4752], \"passed\": true}], \"passed\": false}\n"},"broken":{"elapsed_ms":41.725,"exit_code":1,"observations":[{"actual":[0.25,0.5],"check":"regression: type 1 saturated filter feeder","expected":[4.0,8.0],"passed":false},{"actual":[0.5,1.0],"check":"regression: type 1 unsaturated","expected":[1.0,2.0],"passed":false},{"actual":[12.0,12.0],"check":"control: type 1 no handling","expected":[12.0,12.0],"passed":true},{"actual":[1.846154,11.0769],"check":"control: type 2 wolves on moose","expected":[1.846154,11.0769],"passed":true},{"actual":[0.566038,0.566],"check":"control: type 2 low density","expected":[0.566038,0.566],"passed":true},{"actual":[2.95082,12],"check":"control: type 3 prey switching","expected":[2.95082,12],"passed":true},{"actual":[2.475248,2.4752],"check":"control: type 3 high density","expected":[2.475248,2.4752],"passed":true}],"passed":false,"stderr":"","stdout":"{\"observations\": [{\"check\": \"regression: type 1 saturated filter feeder\", \"actual\": [0.25, 0.5], \"expected\": [4.0, 8.0], \"passed\": false}, {\"check\": \"regression: type 1 unsaturated\", \"actual\": [0.5, 1.0], \"expected\": [1.0, 2.0], \"passed\": false}, {\"check\": \"control: type 1 no handling\", \"actual\": [12.0, 12.0], \"expected\": [12.0, 12.0], \"passed\": true}, {\"check\": \"control: type 2 wolves on moose\", \"actual\": [1.846154, 11.0769], \"expected\": [1.846154, 11.0769], \"passed\": true}, {\"check\": \"control: type 2 low density\", \"actual\": [0.566038, 0.566], \"expected\": [0.566038, 0.566], \"passed\": true}, {\"check\": \"control: type 3 prey switching\", \"actual\": [2.95082, 12], \"expected\": [2.95082, 12], \"passed\": true}, {\"check\": \"control: type 3 high density\", \"actual\": [2.475248, 2.4752], \"expected\": [2.475248, 2.4752], \"passed\": true}], \"passed\": false}\n"},"fixed":{"elapsed_ms":42.485,"exit_code":0,"observations":[{"actual":[4.0,8.0],"check":"regression: type 1 saturated filter feeder","expected":[4.0,8.0],"passed":true},{"actual":[1.0,2.0],"check":"regression: type 1 unsaturated","expected":[1.0,2.0],"passed":true},{"actual":[12.0,12.0],"check":"control: type 1 no handling","expected":[12.0,12.0],"passed":true},{"actual":[1.846154,11.0769],"check":"control: type 2 wolves on moose","expected":[1.846154,11.0769],"passed":true},{"actual":[0.566038,0.566],"check":"control: type 2 low density","expected":[0.566038,0.566],"passed":true},{"actual":[2.95082,12],"check":"control: type 3 prey switching","expected":[2.95082,12],"passed":true},{"actual":[2.475248,2.4752],"check":"control: type 3 high density","expected":[2.475248,2.4752],"passed":true}],"passed":true,"stderr":"","stdout":"{\"observations\": [{\"check\": \"regression: type 1 saturated filter feeder\", \"actual\": [4.0, 8.0], \"expected\": [4.0, 8.0], \"passed\": true}, {\"check\": \"regression: type 1 unsaturated\", \"actual\": [1.0, 2.0], \"expected\": [1.0, 2.0], \"passed\": true}, {\"check\": \"control: type 1 no handling\", \"actual\": [12.0, 12.0], \"expected\": [12.0, 12.0], \"passed\": true}, {\"check\": \"control: type 2 wolves on moose\", \"actual\": [1.846154, 11.0769], \"expected\": [1.846154, 11.0769], \"passed\": true}, {\"check\": \"control: type 2 low density\", \"actual\": [0.566038, 0.566], \"expected\": [0.566038, 0.566], \"passed\": true}, {\"check\": \"control: type 3 prey switching\", \"actual\": [2.95082, 12], \"expected\": [2.95082, 12], \"passed\": true}, {\"check\": \"control: type 3 high density\", \"actual\": [2.475248, 2.4752], \"expected\": [2.475248, 2.4752], \"passed\": true}], \"passed\": true}\n"}},"verified":true,"visibility":"public"}