{"abstract":"A population whose long-run growth is exactly one is called growing.","category":"Ecological population dynamics","checks":7,"contract":"Geometric mean growth exp(mean ln lambda) determines trend (declining <1, stable ==1, growing >1); arithmetic mean reported alongside; trajectory multiplies N by each lambda; quasi-extinction time is the first 1-based year with N < threshold or None; return [geo, arith, trajectory, hit, trend]; None for empty, non-positive lambdas or N0<=0.","contract_signature":"lambdas, n0, threshold","evaluation_group":"w2-ecopop-stochastic-growth","failed_approach":"Testing the arithmetic mean labels balanced fluctuations growing.","family":"w2-ecopop-stochastic-growth-stable-equality","id":"FA-65691","implementations":{"attempt":{"sha256":"438057db6113cdf156ad5782e385bb5c5b16da9c88a173b6a01e09486bc4db70","source":"\"\"\"Failure Map reference implementation. Python standard library only.\"\"\"\nimport json\nimport math\nN = 1\nobservations = []\ndef solve(lambdas, n0, threshold):\n    if not lambdas or min(lambdas) <= 0 or n0 <= 0:\n        return None\n    logs = [math.log(x) for x in lambdas]\n    geo = math.exp(sum(logs) / len(logs))\n    arith = sum(lambdas) / len(lambdas)\n    n = float(n0)\n    traj = []\n    hit = None\n    for t, lam in enumerate(lambdas, start=1):\n        n *= lam\n        traj.append(round(n, 4))\n        if hit is None and n < threshold:\n            hit = t\n    trend = 'declining' if geo < 1 else ('stable' if arith == 1 else 'growing')\n    return [round(geo, 6), round(arith, 6), traj, hit, trend]\ndef check(label, actual, expected):\n    observations.append({\"check\": label, \"actual\": actual, \"expected\": expected, \"passed\": actual == expected})\nfixtures = [[('control: boom and bust',\n   ([1.5, 0.5, 1.5, 0.5], 100, 20),\n   [0.866025, 1.0, [150.0, 75.0, 112.5, 56.25], None, 'declining']),\n  ('regression: exact halving to threshold',\n   ([0.5, 1.0, 2.0], 100, 50),\n   [1.0, 1.166667, [50.0, 50.0, 100.0], None, 'stable']),\n  ('regression: balanced doubling halving',\n   ([2.0, 0.5], 100, 10),\n   [1.0, 1.25, [200.0, 100.0], None, 'stable']),\n  ('control: steady growth',\n   ([1.1, 1.2, 1.05], 50, 10),\n   [1.114947, 1.116667, [55.0, 66.0, 69.3], None, 'growing']),\n  ('regression: constant', ([1.0, 1.0, 1.0], 30, 5), [1.0, 1.0, [30.0, 30.0, 30.0], None, 'stable']),\n  ('control: dip and recovery',\n   ([0.4, 0.8, 3.0, 2.0], 100, 50),\n   [1.177132, 1.55, [40.0, 32.0, 96.0, 192.0], 1, 'growing']),\n  ('control: invalid zero lambda', ([1.0, 0.0], 10, 1), None)],\n [('regression: exact halving to threshold',\n   ([0.5, 1.0, 2.0], 100, 50),\n   [1.0, 1.166667, [50.0, 50.0, 100.0], None, 'stable']),\n  ('control: steady growth',\n   ([1.1, 1.2, 1.05], 50, 10),\n   [1.114947, 1.116667, [55.0, 66.0, 69.3], None, 'growing']),\n  ('regression: constant', ([1.0, 1.0, 1.0], 30, 5), [1.0, 1.0, [30.0, 30.0, 30.0], None, 'stable']),\n  ('control: dip and recovery',\n   ([0.4, 0.8, 3.0, 2.0], 100, 50),\n   [1.177132, 1.55, [40.0, 32.0, 96.0, 192.0], 1, 'growing']),\n  ('control: invalid zero lambda', ([1.0, 0.0], 10, 1), None),\n  ('control: first year crash',\n   ([0.1, 1.5, 1.5], 100, 20),\n   [0.60822, 1.033333, [10.0, 15.0, 22.5], 1, 'declining']),\n  ('control: high variance decline',\n   ([3.0, 0.3, 3.0, 0.3], 100, 5),\n   [0.948683, 1.65, [300.0, 90.0, 270.0, 81.0], None, 'declining'])],\n [('regression: exact halving to threshold',\n   ([0.5, 1.0, 2.0], 100, 50),\n   [1.0, 1.166667, [50.0, 50.0, 100.0], None, 'stable']),\n  ('regression: balanced doubling halving',\n   ([2.0, 0.5], 100, 10),\n   [1.0, 1.25, [200.0, 100.0], None, 'stable']),\n  ('control: invalid zero lambda', ([1.0, 0.0], 10, 1), None),\n  ('control: first year crash',\n   ([0.1, 1.5, 1.5], 100, 20),\n   [0.60822, 1.033333, [10.0, 15.0, 22.5], 1, 'declining']),\n  ('control: high variance decline',\n   ([3.0, 0.3, 3.0, 0.3], 100, 5),\n   [0.948683, 1.65, [300.0, 90.0, 270.0, 81.0], None, 'declining']),\n  ('control: fractional dip', ([0.496, 1.2], 100, 50), [0.771492, 0.848, [49.6, 59.52], 1, 'declining']),\n  ('control: slow decline',\n   ([0.95, 1.02, 0.9, 1.05, 0.93], 80, 60),\n   [0.968384, 0.97, [76.0, 77.52, 69.768, 73.2564, 68.1285], None, 'declining'])],\n [('control: boom and bust',\n   ([1.5, 0.5, 1.5, 0.5], 100, 20),\n   [0.866025, 1.0, [150.0, 75.0, 112.5, 56.25], None, 'declining']),\n  ('regression: exact halving to threshold',\n   ([0.5, 1.0, 2.0], 100, 50),\n   [1.0, 1.166667, [50.0, 50.0, 100.0], None, 'stable']),\n  ('regression: balanced doubling halving',\n   ([2.0, 0.5], 100, 10),\n   [1.0, 1.25, [200.0, 100.0], None, 'stable']),\n  ('control: steady growth',\n   ([1.1, 1.2, 1.05], 50, 10),\n   [1.114947, 1.116667, [55.0, 66.0, 69.3], None, 'growing']),\n  ('regression: constant', ([1.0, 1.0, 1.0], 30, 5), [1.0, 1.0, [30.0, 30.0, 30.0], None, 'stable']),\n  ('control: fractional dip', ([0.496, 1.2], 100, 50), [0.771492, 0.848, [49.6, 59.52], 1, 'declining']),\n  ('control: slow decline',\n   ([0.95, 1.02, 0.9, 1.05, 0.93], 80, 60),\n   [0.968384, 0.97, [76.0, 77.52, 69.768, 73.2564, 68.1285], None, 'declining'])],\n [('regression: exact halving to threshold',\n   ([0.5, 1.0, 2.0], 100, 50),\n   [1.0, 1.166667, [50.0, 50.0, 100.0], None, 'stable']),\n  ('regression: balanced doubling halving',\n   ([2.0, 0.5], 100, 10),\n   [1.0, 1.25, [200.0, 100.0], None, 'stable']),\n  ('control: steady growth',\n   ([1.1, 1.2, 1.05], 50, 10),\n   [1.114947, 1.116667, [55.0, 66.0, 69.3], None, 'growing']),\n  ('regression: constant', ([1.0, 1.0, 1.0], 30, 5), [1.0, 1.0, [30.0, 30.0, 30.0], None, 'stable']),\n  ('control: dip and recovery',\n   ([0.4, 0.8, 3.0, 2.0], 100, 50),\n   [1.177132, 1.55, [40.0, 32.0, 96.0, 192.0], 1, 'growing']),\n  ('control: invalid zero lambda', ([1.0, 0.0], 10, 1), None),\n  ('control: first year crash',\n   ([0.1, 1.5, 1.5], 100, 20),\n   [0.60822, 1.033333, [10.0, 15.0, 22.5], 1, 'declining'])]]\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":"287103df4a166e18b4940399084362001dce8d85174bb39210826aea54c76ba3","source":"\"\"\"Failure Map reference implementation. Python standard library only.\"\"\"\nimport json\nimport math\nN = 1\nobservations = []\ndef solve(lambdas, n0, threshold):\n    if not lambdas or min(lambdas) <= 0 or n0 <= 0:\n        return None\n    logs = [math.log(x) for x in lambdas]\n    geo = math.exp(sum(logs) / len(logs))\n    arith = sum(lambdas) / len(lambdas)\n    n = float(n0)\n    traj = []\n    hit = None\n    for t, lam in enumerate(lambdas, start=1):\n        n *= lam\n        traj.append(round(n, 4))\n        if hit is None and n < threshold:\n            hit = t\n    trend = 'declining' if geo < 1 else 'growing'\n    return [round(geo, 6), round(arith, 6), traj, hit, trend]\ndef check(label, actual, expected):\n    observations.append({\"check\": label, \"actual\": actual, \"expected\": expected, \"passed\": actual == expected})\nfixtures = [[('control: boom and bust',\n   ([1.5, 0.5, 1.5, 0.5], 100, 20),\n   [0.866025, 1.0, [150.0, 75.0, 112.5, 56.25], None, 'declining']),\n  ('regression: exact halving to threshold',\n   ([0.5, 1.0, 2.0], 100, 50),\n   [1.0, 1.166667, [50.0, 50.0, 100.0], None, 'stable']),\n  ('regression: balanced doubling halving',\n   ([2.0, 0.5], 100, 10),\n   [1.0, 1.25, [200.0, 100.0], None, 'stable']),\n  ('control: steady growth',\n   ([1.1, 1.2, 1.05], 50, 10),\n   [1.114947, 1.116667, [55.0, 66.0, 69.3], None, 'growing']),\n  ('regression: constant', ([1.0, 1.0, 1.0], 30, 5), [1.0, 1.0, [30.0, 30.0, 30.0], None, 'stable']),\n  ('control: dip and recovery',\n   ([0.4, 0.8, 3.0, 2.0], 100, 50),\n   [1.177132, 1.55, [40.0, 32.0, 96.0, 192.0], 1, 'growing']),\n  ('control: invalid zero lambda', ([1.0, 0.0], 10, 1), None)],\n [('regression: exact halving to threshold',\n   ([0.5, 1.0, 2.0], 100, 50),\n   [1.0, 1.166667, [50.0, 50.0, 100.0], None, 'stable']),\n  ('control: steady growth',\n   ([1.1, 1.2, 1.05], 50, 10),\n   [1.114947, 1.116667, [55.0, 66.0, 69.3], None, 'growing']),\n  ('regression: constant', ([1.0, 1.0, 1.0], 30, 5), [1.0, 1.0, [30.0, 30.0, 30.0], None, 'stable']),\n  ('control: dip and recovery',\n   ([0.4, 0.8, 3.0, 2.0], 100, 50),\n   [1.177132, 1.55, [40.0, 32.0, 96.0, 192.0], 1, 'growing']),\n  ('control: invalid zero lambda', ([1.0, 0.0], 10, 1), None),\n  ('control: first year crash',\n   ([0.1, 1.5, 1.5], 100, 20),\n   [0.60822, 1.033333, [10.0, 15.0, 22.5], 1, 'declining']),\n  ('control: high variance decline',\n   ([3.0, 0.3, 3.0, 0.3], 100, 5),\n   [0.948683, 1.65, [300.0, 90.0, 270.0, 81.0], None, 'declining'])],\n [('regression: exact halving to threshold',\n   ([0.5, 1.0, 2.0], 100, 50),\n   [1.0, 1.166667, [50.0, 50.0, 100.0], None, 'stable']),\n  ('regression: balanced doubling halving',\n   ([2.0, 0.5], 100, 10),\n   [1.0, 1.25, [200.0, 100.0], None, 'stable']),\n  ('control: invalid zero lambda', ([1.0, 0.0], 10, 1), None),\n  ('control: first year crash',\n   ([0.1, 1.5, 1.5], 100, 20),\n   [0.60822, 1.033333, [10.0, 15.0, 22.5], 1, 'declining']),\n  ('control: high variance decline',\n   ([3.0, 0.3, 3.0, 0.3], 100, 5),\n   [0.948683, 1.65, [300.0, 90.0, 270.0, 81.0], None, 'declining']),\n  ('control: fractional dip', ([0.496, 1.2], 100, 50), [0.771492, 0.848, [49.6, 59.52], 1, 'declining']),\n  ('control: slow decline',\n   ([0.95, 1.02, 0.9, 1.05, 0.93], 80, 60),\n   [0.968384, 0.97, [76.0, 77.52, 69.768, 73.2564, 68.1285], None, 'declining'])],\n [('control: boom and bust',\n   ([1.5, 0.5, 1.5, 0.5], 100, 20),\n   [0.866025, 1.0, [150.0, 75.0, 112.5, 56.25], None, 'declining']),\n  ('regression: exact halving to threshold',\n   ([0.5, 1.0, 2.0], 100, 50),\n   [1.0, 1.166667, [50.0, 50.0, 100.0], None, 'stable']),\n  ('regression: balanced doubling halving',\n   ([2.0, 0.5], 100, 10),\n   [1.0, 1.25, [200.0, 100.0], None, 'stable']),\n  ('control: steady growth',\n   ([1.1, 1.2, 1.05], 50, 10),\n   [1.114947, 1.116667, [55.0, 66.0, 69.3], None, 'growing']),\n  ('regression: constant', ([1.0, 1.0, 1.0], 30, 5), [1.0, 1.0, [30.0, 30.0, 30.0], None, 'stable']),\n  ('control: fractional dip', ([0.496, 1.2], 100, 50), [0.771492, 0.848, [49.6, 59.52], 1, 'declining']),\n  ('control: slow decline',\n   ([0.95, 1.02, 0.9, 1.05, 0.93], 80, 60),\n   [0.968384, 0.97, [76.0, 77.52, 69.768, 73.2564, 68.1285], None, 'declining'])],\n [('regression: exact halving to threshold',\n   ([0.5, 1.0, 2.0], 100, 50),\n   [1.0, 1.166667, [50.0, 50.0, 100.0], None, 'stable']),\n  ('regression: balanced doubling halving',\n   ([2.0, 0.5], 100, 10),\n   [1.0, 1.25, [200.0, 100.0], None, 'stable']),\n  ('control: steady growth',\n   ([1.1, 1.2, 1.05], 50, 10),\n   [1.114947, 1.116667, [55.0, 66.0, 69.3], None, 'growing']),\n  ('regression: constant', ([1.0, 1.0, 1.0], 30, 5), [1.0, 1.0, [30.0, 30.0, 30.0], None, 'stable']),\n  ('control: dip and recovery',\n   ([0.4, 0.8, 3.0, 2.0], 100, 50),\n   [1.177132, 1.55, [40.0, 32.0, 96.0, 192.0], 1, 'growing']),\n  ('control: invalid zero lambda', ([1.0, 0.0], 10, 1), None),\n  ('control: first year crash',\n   ([0.1, 1.5, 1.5], 100, 20),\n   [0.60822, 1.033333, [10.0, 15.0, 22.5], 1, 'declining'])]]\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-stochastic-growth-stable-equality","generated_at":"2026-09-29T14:47:36.473523+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 stable branch is missing.","sha256":"cd7a609cfd069b85c78a73bb2772bd63c0caebdfb757fc8727e4aa978ab0b827","title":"Stochastic growth rate and quasi-extinction: stable equality · 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.265,"exit_code":1,"observations":[{"actual":[0.866025,1.0,[150.0,75.0,112.5,56.25],null,"declining"],"check":"control: boom and bust","expected":[0.866025,1.0,[150.0,75.0,112.5,56.25],null,"declining"],"passed":true},{"actual":[1.0,1.166667,[50.0,50.0,100.0],null,"growing"],"check":"regression: exact halving to threshold","expected":[1.0,1.166667,[50.0,50.0,100.0],null,"stable"],"passed":false},{"actual":[1.0,1.25,[200.0,100.0],null,"growing"],"check":"regression: balanced doubling halving","expected":[1.0,1.25,[200.0,100.0],null,"stable"],"passed":false},{"actual":[1.114947,1.116667,[55.0,66.0,69.3],null,"growing"],"check":"control: steady growth","expected":[1.114947,1.116667,[55.0,66.0,69.3],null,"growing"],"passed":true},{"actual":[1.0,1.0,[30.0,30.0,30.0],null,"stable"],"check":"regression: constant","expected":[1.0,1.0,[30.0,30.0,30.0],null,"stable"],"passed":true},{"actual":[1.177132,1.55,[40.0,32.0,96.0,192.0],1,"growing"],"check":"control: dip and recovery","expected":[1.177132,1.55,[40.0,32.0,96.0,192.0],1,"growing"],"passed":true},{"actual":null,"check":"control: invalid zero lambda","expected":null,"passed":true}],"passed":false,"stderr":"","stdout":"{\"observations\": [{\"check\": \"control: boom and bust\", \"actual\": [0.866025, 1.0, [150.0, 75.0, 112.5, 56.25], null, \"declining\"], \"expected\": [0.866025, 1.0, [150.0, 75.0, 112.5, 56.25], null, \"declining\"], \"passed\": true}, {\"check\": \"regression: exact halving to threshold\", \"actual\": [1.0, 1.166667, [50.0, 50.0, 100.0], null, \"growing\"], \"expected\": [1.0, 1.166667, [50.0, 50.0, 100.0], null, \"stable\"], \"passed\": false}, {\"check\": \"regression: balanced doubling halving\", \"actual\": [1.0, 1.25, [200.0, 100.0], null, \"growing\"], \"expected\": [1.0, 1.25, [200.0, 100.0], null, \"stable\"], \"passed\": false}, {\"check\": \"control: steady growth\", \"actual\": [1.114947, 1.116667, [55.0, 66.0, 69.3], null, \"growing\"], \"expected\": [1.114947, 1.116667, [55.0, 66.0, 69.3], null, \"growing\"], \"passed\": true}, {\"check\": \"regression: constant\", \"actual\": [1.0, 1.0, [30.0, 30.0, 30.0], null, \"stable\"], \"expected\": [1.0, 1.0, [30.0, 30.0, 30.0], null, \"stable\"], \"passed\": true}, {\"check\": \"control: dip and recovery\", \"actual\": [1.177132, 1.55, [40.0, 32.0, 96.0, 192.0], 1, \"growing\"], \"expected\": [1.177132, 1.55, [40.0, 32.0, 96.0, 192.0], 1, \"growing\"], \"passed\": true}, {\"check\": \"control: invalid zero lambda\", \"actual\": null, \"expected\": null, \"passed\": true}], \"passed\": false}\n"},"broken":{"elapsed_ms":40.193,"exit_code":1,"observations":[{"actual":[0.866025,1.0,[150.0,75.0,112.5,56.25],null,"declining"],"check":"control: boom and bust","expected":[0.866025,1.0,[150.0,75.0,112.5,56.25],null,"declining"],"passed":true},{"actual":[1.0,1.166667,[50.0,50.0,100.0],null,"growing"],"check":"regression: exact halving to threshold","expected":[1.0,1.166667,[50.0,50.0,100.0],null,"stable"],"passed":false},{"actual":[1.0,1.25,[200.0,100.0],null,"growing"],"check":"regression: balanced doubling halving","expected":[1.0,1.25,[200.0,100.0],null,"stable"],"passed":false},{"actual":[1.114947,1.116667,[55.0,66.0,69.3],null,"growing"],"check":"control: steady growth","expected":[1.114947,1.116667,[55.0,66.0,69.3],null,"growing"],"passed":true},{"actual":[1.0,1.0,[30.0,30.0,30.0],null,"growing"],"check":"regression: constant","expected":[1.0,1.0,[30.0,30.0,30.0],null,"stable"],"passed":false},{"actual":[1.177132,1.55,[40.0,32.0,96.0,192.0],1,"growing"],"check":"control: dip and recovery","expected":[1.177132,1.55,[40.0,32.0,96.0,192.0],1,"growing"],"passed":true},{"actual":null,"check":"control: invalid zero lambda","expected":null,"passed":true}],"passed":false,"stderr":"","stdout":"{\"observations\": [{\"check\": \"control: boom and bust\", \"actual\": [0.866025, 1.0, [150.0, 75.0, 112.5, 56.25], null, \"declining\"], \"expected\": [0.866025, 1.0, [150.0, 75.0, 112.5, 56.25], null, \"declining\"], \"passed\": true}, {\"check\": \"regression: exact halving to threshold\", \"actual\": [1.0, 1.166667, [50.0, 50.0, 100.0], null, \"growing\"], \"expected\": [1.0, 1.166667, [50.0, 50.0, 100.0], null, \"stable\"], \"passed\": false}, {\"check\": \"regression: balanced doubling halving\", \"actual\": [1.0, 1.25, [200.0, 100.0], null, \"growing\"], \"expected\": [1.0, 1.25, [200.0, 100.0], null, \"stable\"], \"passed\": false}, {\"check\": \"control: steady growth\", \"actual\": [1.114947, 1.116667, [55.0, 66.0, 69.3], null, \"growing\"], \"expected\": [1.114947, 1.116667, [55.0, 66.0, 69.3], null, \"growing\"], \"passed\": true}, {\"check\": \"regression: constant\", \"actual\": [1.0, 1.0, [30.0, 30.0, 30.0], null, \"growing\"], \"expected\": [1.0, 1.0, [30.0, 30.0, 30.0], null, \"stable\"], \"passed\": false}, {\"check\": \"control: dip and recovery\", \"actual\": [1.177132, 1.55, [40.0, 32.0, 96.0, 192.0], 1, \"growing\"], \"expected\": [1.177132, 1.55, [40.0, 32.0, 96.0, 192.0], 1, \"growing\"], \"passed\": true}, {\"check\": \"control: invalid zero lambda\", \"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."}}