{"abstract":"The geometric mean growth rate is reported on the log scale.","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.","evaluation_group":"w2-ecopop-stochastic-growth","failed_approach":"Exponentiating before averaging divides the product by the count.","family":"w2-ecopop-stochastic-growth-geometric-mean","id":"FA-65676","implementations":{"attempt":{"sha256":"48fec58dbf6fd8303763d11a5dad09b605843167cf8cfca60451619140315c18","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 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 = [[('regression: 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  ('regression: 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  ('regression: 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: 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  ('regression: 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: 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  ('regression: 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: fractional dip', ([0.496, 1.2], 100, 50), [0.771492, 0.848, [49.6, 59.52], 1, 'declining'])],\n [('regression: 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  ('control: invalid zero lambda', ([1.0, 0.0], 10, 1), None),\n  ('regression: 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  ('regression: 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: fractional dip', ([0.496, 1.2], 100, 50), [0.771492, 0.848, [49.6, 59.52], 1, 'declining']),\n  ('regression: 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: 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  ('regression: 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  ('control: invalid zero lambda', ([1.0, 0.0], 10, 1), None),\n  ('regression: fractional dip', ([0.496, 1.2], 100, 50), [0.771492, 0.848, [49.6, 59.52], 1, 'declining']),\n  ('regression: 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  ('regression: 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  ('regression: 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: 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":"a614faef1c559a827288afcc76b9d447a667c36e4840a29170c553da62c68239","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 = 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 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 = [[('regression: 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  ('regression: 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  ('regression: 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: 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  ('regression: 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: 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  ('regression: 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: fractional dip', ([0.496, 1.2], 100, 50), [0.771492, 0.848, [49.6, 59.52], 1, 'declining'])],\n [('regression: 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  ('control: invalid zero lambda', ([1.0, 0.0], 10, 1), None),\n  ('regression: 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  ('regression: 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: fractional dip', ([0.496, 1.2], 100, 50), [0.771492, 0.848, [49.6, 59.52], 1, 'declining']),\n  ('regression: 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: 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  ('regression: 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  ('control: invalid zero lambda', ([1.0, 0.0], 10, 1), None),\n  ('regression: fractional dip', ([0.496, 1.2], 100, 50), [0.771492, 0.848, [49.6, 59.52], 1, 'declining']),\n  ('regression: 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  ('regression: 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  ('regression: 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: 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"},"fixed":{"sha256":"45b32b256c690acabeb9f4ee2fb8794da3d750d851df49f3ea62df6ee4a9b0ee","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 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 = [[('regression: 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  ('regression: 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  ('regression: 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: 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  ('regression: 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: 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  ('regression: 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: fractional dip', ([0.496, 1.2], 100, 50), [0.771492, 0.848, [49.6, 59.52], 1, 'declining'])],\n [('regression: 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  ('control: invalid zero lambda', ([1.0, 0.0], 10, 1), None),\n  ('regression: 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  ('regression: 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: fractional dip', ([0.496, 1.2], 100, 50), [0.771492, 0.848, [49.6, 59.52], 1, 'declining']),\n  ('regression: 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: 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  ('regression: 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  ('control: invalid zero lambda', ([1.0, 0.0], 10, 1), None),\n  ('regression: fractional dip', ([0.496, 1.2], 100, 50), [0.771492, 0.848, [49.6, 59.52], 1, 'declining']),\n  ('regression: 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  ('regression: 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  ('regression: 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: 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-geometric-mean","generated_at":"2026-09-29T14:47:36.115573+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 geometric mean rule: `geo = math.exp(sum(logs) / len(logs))`.","root_cause":"The mean log growth rate is not exponentiated.","sha256":"e9d30886e399454c94788c79b94ffb798782248344e4709c93145db5bc0e111a","title":"Stochastic growth rate and quasi-extinction: geometric mean · case 01","variant":1,"variant_policy":"Five numbered records share a model and may reuse boundary fixtures.","verification":{"attempt":{"elapsed_ms":41.797,"exit_code":1,"observations":[{"actual":[0.140625,1.0,[150.0,75.0,112.5,56.25],null,"declining"],"check":"regression: boom and bust","expected":[0.866025,1.0,[150.0,75.0,112.5,56.25],null,"declining"],"passed":false},{"actual":[0.333333,1.166667,[50.0,50.0,100.0],null,"declining"],"check":"regression: exact halving to threshold","expected":[1.0,1.166667,[50.0,50.0,100.0],null,"stable"],"passed":false},{"actual":[0.5,1.25,[200.0,100.0],null,"declining"],"check":"regression: balanced doubling halving","expected":[1.0,1.25,[200.0,100.0],null,"stable"],"passed":false},{"actual":[0.462,1.116667,[55.0,66.0,69.3],null,"declining"],"check":"regression: steady growth","expected":[1.114947,1.116667,[55.0,66.0,69.3],null,"growing"],"passed":false},{"actual":[0.333333,1.0,[30.0,30.0,30.0],null,"declining"],"check":"regression: constant","expected":[1.0,1.0,[30.0,30.0,30.0],null,"stable"],"passed":false},{"actual":[0.48,1.55,[40.0,32.0,96.0,192.0],1,"declining"],"check":"regression: dip and recovery","expected":[1.177132,1.55,[40.0,32.0,96.0,192.0],1,"growing"],"passed":false},{"actual":null,"check":"control: invalid zero lambda","expected":null,"passed":true}],"passed":false,"stderr":"","stdout":"{\"observations\": [{\"check\": \"regression: boom and bust\", \"actual\": [0.140625, 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\": false}, {\"check\": \"regression: exact halving to threshold\", \"actual\": [0.333333, 1.166667, [50.0, 50.0, 100.0], null, \"declining\"], \"expected\": [1.0, 1.166667, [50.0, 50.0, 100.0], null, \"stable\"], \"passed\": false}, {\"check\": \"regression: balanced doubling halving\", \"actual\": [0.5, 1.25, [200.0, 100.0], null, \"declining\"], \"expected\": [1.0, 1.25, [200.0, 100.0], null, \"stable\"], \"passed\": false}, {\"check\": \"regression: steady growth\", \"actual\": [0.462, 1.116667, [55.0, 66.0, 69.3], null, \"declining\"], \"expected\": [1.114947, 1.116667, [55.0, 66.0, 69.3], null, \"growing\"], \"passed\": false}, {\"check\": \"regression: constant\", \"actual\": [0.333333, 1.0, [30.0, 30.0, 30.0], null, \"declining\"], \"expected\": [1.0, 1.0, [30.0, 30.0, 30.0], null, \"stable\"], \"passed\": false}, {\"check\": \"regression: dip and recovery\", \"actual\": [0.48, 1.55, [40.0, 32.0, 96.0, 192.0], 1, \"declining\"], \"expected\": [1.177132, 1.55, [40.0, 32.0, 96.0, 192.0], 1, \"growing\"], \"passed\": false}, {\"check\": \"control: invalid zero lambda\", \"actual\": null, \"expected\": null, \"passed\": true}], \"passed\": false}\n"},"broken":{"elapsed_ms":42.905,"exit_code":1,"observations":[{"actual":[-0.143841,1.0,[150.0,75.0,112.5,56.25],null,"declining"],"check":"regression: boom and bust","expected":[0.866025,1.0,[150.0,75.0,112.5,56.25],null,"declining"],"passed":false},{"actual":[0.0,1.166667,[50.0,50.0,100.0],null,"declining"],"check":"regression: exact halving to threshold","expected":[1.0,1.166667,[50.0,50.0,100.0],null,"stable"],"passed":false},{"actual":[0.0,1.25,[200.0,100.0],null,"declining"],"check":"regression: balanced doubling halving","expected":[1.0,1.25,[200.0,100.0],null,"stable"],"passed":false},{"actual":[0.108807,1.116667,[55.0,66.0,69.3],null,"declining"],"check":"regression: steady growth","expected":[1.114947,1.116667,[55.0,66.0,69.3],null,"growing"],"passed":false},{"actual":[0.0,1.0,[30.0,30.0,30.0],null,"declining"],"check":"regression: constant","expected":[1.0,1.0,[30.0,30.0,30.0],null,"stable"],"passed":false},{"actual":[0.163081,1.55,[40.0,32.0,96.0,192.0],1,"declining"],"check":"regression: dip and recovery","expected":[1.177132,1.55,[40.0,32.0,96.0,192.0],1,"growing"],"passed":false},{"actual":null,"check":"control: invalid zero lambda","expected":null,"passed":true}],"passed":false,"stderr":"","stdout":"{\"observations\": [{\"check\": \"regression: boom and bust\", \"actual\": [-0.143841, 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\": false}, {\"check\": \"regression: exact halving to threshold\", \"actual\": [0.0, 1.166667, [50.0, 50.0, 100.0], null, \"declining\"], \"expected\": [1.0, 1.166667, [50.0, 50.0, 100.0], null, \"stable\"], \"passed\": false}, {\"check\": \"regression: balanced doubling halving\", \"actual\": [0.0, 1.25, [200.0, 100.0], null, \"declining\"], \"expected\": [1.0, 1.25, [200.0, 100.0], null, \"stable\"], \"passed\": false}, {\"check\": \"regression: steady growth\", \"actual\": [0.108807, 1.116667, [55.0, 66.0, 69.3], null, \"declining\"], \"expected\": [1.114947, 1.116667, [55.0, 66.0, 69.3], null, \"growing\"], \"passed\": false}, {\"check\": \"regression: constant\", \"actual\": [0.0, 1.0, [30.0, 30.0, 30.0], null, \"declining\"], \"expected\": [1.0, 1.0, [30.0, 30.0, 30.0], null, \"stable\"], \"passed\": false}, {\"check\": \"regression: dip and recovery\", \"actual\": [0.163081, 1.55, [40.0, 32.0, 96.0, 192.0], 1, \"declining\"], \"expected\": [1.177132, 1.55, [40.0, 32.0, 96.0, 192.0], 1, \"growing\"], \"passed\": false}, {\"check\": \"control: invalid zero lambda\", \"actual\": null, \"expected\": null, \"passed\": true}], \"passed\": false}\n"},"fixed":{"elapsed_ms":42.67,"exit_code":0,"observations":[{"actual":[0.866025,1.0,[150.0,75.0,112.5,56.25],null,"declining"],"check":"regression: 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,"stable"],"check":"regression: exact halving to threshold","expected":[1.0,1.166667,[50.0,50.0,100.0],null,"stable"],"passed":true},{"actual":[1.0,1.25,[200.0,100.0],null,"stable"],"check":"regression: balanced doubling halving","expected":[1.0,1.25,[200.0,100.0],null,"stable"],"passed":true},{"actual":[1.114947,1.116667,[55.0,66.0,69.3],null,"growing"],"check":"regression: 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":"regression: 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":true,"stderr":"","stdout":"{\"observations\": [{\"check\": \"regression: 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, \"stable\"], \"expected\": [1.0, 1.166667, [50.0, 50.0, 100.0], null, \"stable\"], \"passed\": true}, {\"check\": \"regression: balanced doubling halving\", \"actual\": [1.0, 1.25, [200.0, 100.0], null, \"stable\"], \"expected\": [1.0, 1.25, [200.0, 100.0], null, \"stable\"], \"passed\": true}, {\"check\": \"regression: 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\": \"regression: 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\": true}\n"}},"verified":true,"visibility":"public"}