{"abstract":"Cold nights subtract development accumulated during the day.","category":"Ecological population dynamics","checks":7,"contract":"Daily max is capped at upper; daily min is raised to base and capped at upper; DD = max(0, mean - base); emergence day is the first 1-based day with cumulative DD >= target; return [cumulative rounded 2, day or None]; None when upper <= base.","evaluation_group":"w2-ecopop-degree-days","failed_approach":"Raising minima to 0 degrees instead of base still counts sub-base temperatures.","family":"w2-ecopop-degree-days-minimum-substitution","id":"FA-65651","implementations":{"attempt":{"sha256":"4b21ace5bd5f761caeedfc259020e885cb1c9b717c9368f1fe4fb352708f8b95","source":"\"\"\"Failure Map reference implementation. Python standard library only.\"\"\"\nimport json\nimport math\nN = 1\nobservations = []\ndef solve(tmins, tmaxs, base, upper, target):\n    if upper <= base:\n        return None\n    total = 0.0\n    cum = []\n    day_hit = None\n    for d, (lo, hi) in enumerate(zip(tmins, tmaxs), start=1):\n        hi_c = min(hi, upper)\n        lo_c = max(lo, 0)\n        dd = max(0.0, (hi_c + lo_c) / 2 - base)\n        total += dd\n        cum.append(round(total, 2))\n        if day_hit is None and total >= target:\n            day_hit = d\n    return [cum, day_hit]\ndef check(label, actual, expected):\n    observations.append({\"check\": label, \"actual\": actual, \"expected\": expected, \"passed\": actual == expected})\nfixtures = [[('regression: spring warming codling moth',\n   ([4, 6, 8, 10, 12, 14], [15, 18, 20, 24, 26, 30], 10, 31, 20),\n   [[2.5, 6.5, 11.5, 18.5, 27.5, 39.5], 5]),\n  ('control: hot spell above cutoff', ([20, 22, 25], [34, 38, 40], 10, 30, 30), [[15.0, 31.0, 48.5], 2]),\n  ('control: cold days below base', ([-2, 0, 3], [5, 8, 9], 10, 30, 1), [[0.0, 0.0, 0.0], None]),\n  ('control: exact target', ([10, 10, 10], [20, 20, 20], 10, 30, 10), [[5.0, 10.0, 15.0], 2]),\n  ('regression: never emerges', ([5, 6], [12, 13], 10, 30, 50), [[1.0, 2.5], None]),\n  ('control: invalid thresholds', ([5], [15], 20, 20, 5), None),\n  ('control: warm nights', ([18, 19, 21, 22], [28, 29, 33, 35], 12, 32, 40), [[11.0, 23.0, 37.5, 52.5], 4])],\n [('control: exact target', ([10, 10, 10], [20, 20, 20], 10, 30, 10), [[5.0, 10.0, 15.0], 2]),\n  ('regression: never emerges', ([5, 6], [12, 13], 10, 30, 50), [[1.0, 2.5], None]),\n  ('control: invalid thresholds', ([5], [15], 20, 20, 5), None),\n  ('control: warm nights', ([18, 19, 21, 22], [28, 29, 33, 35], 12, 32, 40), [[11.0, 23.0, 37.5, 52.5], 4]),\n  ('control: no days', ([], [], 10, 30, 5), [[], None]),\n  ('control: near-miss rounding', ([10, 10], [29.2, 10], 10, 30, 10), [[9.6, 9.6], None]),\n  ('regression: frost then warm',\n   ([-5, 2, 11, 14], [6, 16, 25, 29], 10, 30, 15),\n   [[0.0, 3.0, 11.0, 22.5], 4])],\n [('regression: spring warming codling moth',\n   ([4, 6, 8, 10, 12, 14], [15, 18, 20, 24, 26, 30], 10, 31, 20),\n   [[2.5, 6.5, 11.5, 18.5, 27.5, 39.5], 5]),\n  ('control: hot spell above cutoff', ([20, 22, 25], [34, 38, 40], 10, 30, 30), [[15.0, 31.0, 48.5], 2]),\n  ('control: cold days below base', ([-2, 0, 3], [5, 8, 9], 10, 30, 1), [[0.0, 0.0, 0.0], None]),\n  ('control: warm nights', ([18, 19, 21, 22], [28, 29, 33, 35], 12, 32, 40), [[11.0, 23.0, 37.5, 52.5], 4]),\n  ('control: no days', ([], [], 10, 30, 5), [[], None]),\n  ('control: near-miss rounding', ([10, 10], [29.2, 10], 10, 30, 10), [[9.6, 9.6], None]),\n  ('regression: frost then warm',\n   ([-5, 2, 11, 14], [6, 16, 25, 29], 10, 30, 15),\n   [[0.0, 3.0, 11.0, 22.5], 4])],\n [('regression: spring warming codling moth',\n   ([4, 6, 8, 10, 12, 14], [15, 18, 20, 24, 26, 30], 10, 31, 20),\n   [[2.5, 6.5, 11.5, 18.5, 27.5, 39.5], 5]),\n  ('control: hot spell above cutoff', ([20, 22, 25], [34, 38, 40], 10, 30, 30), [[15.0, 31.0, 48.5], 2]),\n  ('control: cold days below base', ([-2, 0, 3], [5, 8, 9], 10, 30, 1), [[0.0, 0.0, 0.0], None]),\n  ('control: exact target', ([10, 10, 10], [20, 20, 20], 10, 30, 10), [[5.0, 10.0, 15.0], 2]),\n  ('regression: never emerges', ([5, 6], [12, 13], 10, 30, 50), [[1.0, 2.5], None]),\n  ('control: invalid thresholds', ([5], [15], 20, 20, 5), None),\n  ('regression: frost then warm',\n   ([-5, 2, 11, 14], [6, 16, 25, 29], 10, 30, 15),\n   [[0.0, 3.0, 11.0, 22.5], 4])],\n [('control: cold days below base', ([-2, 0, 3], [5, 8, 9], 10, 30, 1), [[0.0, 0.0, 0.0], None]),\n  ('control: exact target', ([10, 10, 10], [20, 20, 20], 10, 30, 10), [[5.0, 10.0, 15.0], 2]),\n  ('regression: never emerges', ([5, 6], [12, 13], 10, 30, 50), [[1.0, 2.5], None]),\n  ('control: invalid thresholds', ([5], [15], 20, 20, 5), None),\n  ('control: warm nights', ([18, 19, 21, 22], [28, 29, 33, 35], 12, 32, 40), [[11.0, 23.0, 37.5, 52.5], 4]),\n  ('control: no days', ([], [], 10, 30, 5), [[], None]),\n  ('regression: frost then warm',\n   ([-5, 2, 11, 14], [6, 16, 25, 29], 10, 30, 15),\n   [[0.0, 3.0, 11.0, 22.5], 4])]]\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":"e0b08d61b8f42e4273eb3e0ff9ae3e9ffabd9ad334457b110efd9b85a764cb7a","source":"\"\"\"Failure Map reference implementation. Python standard library only.\"\"\"\nimport json\nimport math\nN = 1\nobservations = []\ndef solve(tmins, tmaxs, base, upper, target):\n    if upper <= base:\n        return None\n    total = 0.0\n    cum = []\n    day_hit = None\n    for d, (lo, hi) in enumerate(zip(tmins, tmaxs), start=1):\n        hi_c = min(hi, upper)\n        lo_c = lo\n        dd = max(0.0, (hi_c + lo_c) / 2 - base)\n        total += dd\n        cum.append(round(total, 2))\n        if day_hit is None and total >= target:\n            day_hit = d\n    return [cum, day_hit]\ndef check(label, actual, expected):\n    observations.append({\"check\": label, \"actual\": actual, \"expected\": expected, \"passed\": actual == expected})\nfixtures = [[('regression: spring warming codling moth',\n   ([4, 6, 8, 10, 12, 14], [15, 18, 20, 24, 26, 30], 10, 31, 20),\n   [[2.5, 6.5, 11.5, 18.5, 27.5, 39.5], 5]),\n  ('control: hot spell above cutoff', ([20, 22, 25], [34, 38, 40], 10, 30, 30), [[15.0, 31.0, 48.5], 2]),\n  ('control: cold days below base', ([-2, 0, 3], [5, 8, 9], 10, 30, 1), [[0.0, 0.0, 0.0], None]),\n  ('control: exact target', ([10, 10, 10], [20, 20, 20], 10, 30, 10), [[5.0, 10.0, 15.0], 2]),\n  ('regression: never emerges', ([5, 6], [12, 13], 10, 30, 50), [[1.0, 2.5], None]),\n  ('control: invalid thresholds', ([5], [15], 20, 20, 5), None),\n  ('control: warm nights', ([18, 19, 21, 22], [28, 29, 33, 35], 12, 32, 40), [[11.0, 23.0, 37.5, 52.5], 4])],\n [('control: exact target', ([10, 10, 10], [20, 20, 20], 10, 30, 10), [[5.0, 10.0, 15.0], 2]),\n  ('regression: never emerges', ([5, 6], [12, 13], 10, 30, 50), [[1.0, 2.5], None]),\n  ('control: invalid thresholds', ([5], [15], 20, 20, 5), None),\n  ('control: warm nights', ([18, 19, 21, 22], [28, 29, 33, 35], 12, 32, 40), [[11.0, 23.0, 37.5, 52.5], 4]),\n  ('control: no days', ([], [], 10, 30, 5), [[], None]),\n  ('control: near-miss rounding', ([10, 10], [29.2, 10], 10, 30, 10), [[9.6, 9.6], None]),\n  ('regression: frost then warm',\n   ([-5, 2, 11, 14], [6, 16, 25, 29], 10, 30, 15),\n   [[0.0, 3.0, 11.0, 22.5], 4])],\n [('regression: spring warming codling moth',\n   ([4, 6, 8, 10, 12, 14], [15, 18, 20, 24, 26, 30], 10, 31, 20),\n   [[2.5, 6.5, 11.5, 18.5, 27.5, 39.5], 5]),\n  ('control: hot spell above cutoff', ([20, 22, 25], [34, 38, 40], 10, 30, 30), [[15.0, 31.0, 48.5], 2]),\n  ('control: cold days below base', ([-2, 0, 3], [5, 8, 9], 10, 30, 1), [[0.0, 0.0, 0.0], None]),\n  ('control: warm nights', ([18, 19, 21, 22], [28, 29, 33, 35], 12, 32, 40), [[11.0, 23.0, 37.5, 52.5], 4]),\n  ('control: no days', ([], [], 10, 30, 5), [[], None]),\n  ('control: near-miss rounding', ([10, 10], [29.2, 10], 10, 30, 10), [[9.6, 9.6], None]),\n  ('regression: frost then warm',\n   ([-5, 2, 11, 14], [6, 16, 25, 29], 10, 30, 15),\n   [[0.0, 3.0, 11.0, 22.5], 4])],\n [('regression: spring warming codling moth',\n   ([4, 6, 8, 10, 12, 14], [15, 18, 20, 24, 26, 30], 10, 31, 20),\n   [[2.5, 6.5, 11.5, 18.5, 27.5, 39.5], 5]),\n  ('control: hot spell above cutoff', ([20, 22, 25], [34, 38, 40], 10, 30, 30), [[15.0, 31.0, 48.5], 2]),\n  ('control: cold days below base', ([-2, 0, 3], [5, 8, 9], 10, 30, 1), [[0.0, 0.0, 0.0], None]),\n  ('control: exact target', ([10, 10, 10], [20, 20, 20], 10, 30, 10), [[5.0, 10.0, 15.0], 2]),\n  ('regression: never emerges', ([5, 6], [12, 13], 10, 30, 50), [[1.0, 2.5], None]),\n  ('control: invalid thresholds', ([5], [15], 20, 20, 5), None),\n  ('regression: frost then warm',\n   ([-5, 2, 11, 14], [6, 16, 25, 29], 10, 30, 15),\n   [[0.0, 3.0, 11.0, 22.5], 4])],\n [('control: cold days below base', ([-2, 0, 3], [5, 8, 9], 10, 30, 1), [[0.0, 0.0, 0.0], None]),\n  ('control: exact target', ([10, 10, 10], [20, 20, 20], 10, 30, 10), [[5.0, 10.0, 15.0], 2]),\n  ('regression: never emerges', ([5, 6], [12, 13], 10, 30, 50), [[1.0, 2.5], None]),\n  ('control: invalid thresholds', ([5], [15], 20, 20, 5), None),\n  ('control: warm nights', ([18, 19, 21, 22], [28, 29, 33, 35], 12, 32, 40), [[11.0, 23.0, 37.5, 52.5], 4]),\n  ('control: no days', ([], [], 10, 30, 5), [[], None]),\n  ('regression: frost then warm',\n   ([-5, 2, 11, 14], [6, 16, 25, 29], 10, 30, 15),\n   [[0.0, 3.0, 11.0, 22.5], 4])]]\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":"ded1e2608dd4fa5d6fff744eccf39951356d9c147551d0fdf84662f6df31bb2b","source":"\"\"\"Failure Map reference implementation. Python standard library only.\"\"\"\nimport json\nimport math\nN = 1\nobservations = []\ndef solve(tmins, tmaxs, base, upper, target):\n    if upper <= base:\n        return None\n    total = 0.0\n    cum = []\n    day_hit = None\n    for d, (lo, hi) in enumerate(zip(tmins, tmaxs), start=1):\n        hi_c = min(hi, upper)\n        lo_c = min(max(lo, base), upper)\n        dd = max(0.0, (hi_c + lo_c) / 2 - base)\n        total += dd\n        cum.append(round(total, 2))\n        if day_hit is None and total >= target:\n            day_hit = d\n    return [cum, day_hit]\ndef check(label, actual, expected):\n    observations.append({\"check\": label, \"actual\": actual, \"expected\": expected, \"passed\": actual == expected})\nfixtures = [[('regression: spring warming codling moth',\n   ([4, 6, 8, 10, 12, 14], [15, 18, 20, 24, 26, 30], 10, 31, 20),\n   [[2.5, 6.5, 11.5, 18.5, 27.5, 39.5], 5]),\n  ('control: hot spell above cutoff', ([20, 22, 25], [34, 38, 40], 10, 30, 30), [[15.0, 31.0, 48.5], 2]),\n  ('control: cold days below base', ([-2, 0, 3], [5, 8, 9], 10, 30, 1), [[0.0, 0.0, 0.0], None]),\n  ('control: exact target', ([10, 10, 10], [20, 20, 20], 10, 30, 10), [[5.0, 10.0, 15.0], 2]),\n  ('regression: never emerges', ([5, 6], [12, 13], 10, 30, 50), [[1.0, 2.5], None]),\n  ('control: invalid thresholds', ([5], [15], 20, 20, 5), None),\n  ('control: warm nights', ([18, 19, 21, 22], [28, 29, 33, 35], 12, 32, 40), [[11.0, 23.0, 37.5, 52.5], 4])],\n [('control: exact target', ([10, 10, 10], [20, 20, 20], 10, 30, 10), [[5.0, 10.0, 15.0], 2]),\n  ('regression: never emerges', ([5, 6], [12, 13], 10, 30, 50), [[1.0, 2.5], None]),\n  ('control: invalid thresholds', ([5], [15], 20, 20, 5), None),\n  ('control: warm nights', ([18, 19, 21, 22], [28, 29, 33, 35], 12, 32, 40), [[11.0, 23.0, 37.5, 52.5], 4]),\n  ('control: no days', ([], [], 10, 30, 5), [[], None]),\n  ('control: near-miss rounding', ([10, 10], [29.2, 10], 10, 30, 10), [[9.6, 9.6], None]),\n  ('regression: frost then warm',\n   ([-5, 2, 11, 14], [6, 16, 25, 29], 10, 30, 15),\n   [[0.0, 3.0, 11.0, 22.5], 4])],\n [('regression: spring warming codling moth',\n   ([4, 6, 8, 10, 12, 14], [15, 18, 20, 24, 26, 30], 10, 31, 20),\n   [[2.5, 6.5, 11.5, 18.5, 27.5, 39.5], 5]),\n  ('control: hot spell above cutoff', ([20, 22, 25], [34, 38, 40], 10, 30, 30), [[15.0, 31.0, 48.5], 2]),\n  ('control: cold days below base', ([-2, 0, 3], [5, 8, 9], 10, 30, 1), [[0.0, 0.0, 0.0], None]),\n  ('control: warm nights', ([18, 19, 21, 22], [28, 29, 33, 35], 12, 32, 40), [[11.0, 23.0, 37.5, 52.5], 4]),\n  ('control: no days', ([], [], 10, 30, 5), [[], None]),\n  ('control: near-miss rounding', ([10, 10], [29.2, 10], 10, 30, 10), [[9.6, 9.6], None]),\n  ('regression: frost then warm',\n   ([-5, 2, 11, 14], [6, 16, 25, 29], 10, 30, 15),\n   [[0.0, 3.0, 11.0, 22.5], 4])],\n [('regression: spring warming codling moth',\n   ([4, 6, 8, 10, 12, 14], [15, 18, 20, 24, 26, 30], 10, 31, 20),\n   [[2.5, 6.5, 11.5, 18.5, 27.5, 39.5], 5]),\n  ('control: hot spell above cutoff', ([20, 22, 25], [34, 38, 40], 10, 30, 30), [[15.0, 31.0, 48.5], 2]),\n  ('control: cold days below base', ([-2, 0, 3], [5, 8, 9], 10, 30, 1), [[0.0, 0.0, 0.0], None]),\n  ('control: exact target', ([10, 10, 10], [20, 20, 20], 10, 30, 10), [[5.0, 10.0, 15.0], 2]),\n  ('regression: never emerges', ([5, 6], [12, 13], 10, 30, 50), [[1.0, 2.5], None]),\n  ('control: invalid thresholds', ([5], [15], 20, 20, 5), None),\n  ('regression: frost then warm',\n   ([-5, 2, 11, 14], [6, 16, 25, 29], 10, 30, 15),\n   [[0.0, 3.0, 11.0, 22.5], 4])],\n [('control: cold days below base', ([-2, 0, 3], [5, 8, 9], 10, 30, 1), [[0.0, 0.0, 0.0], None]),\n  ('control: exact target', ([10, 10, 10], [20, 20, 20], 10, 30, 10), [[5.0, 10.0, 15.0], 2]),\n  ('regression: never emerges', ([5, 6], [12, 13], 10, 30, 50), [[1.0, 2.5], None]),\n  ('control: invalid thresholds', ([5], [15], 20, 20, 5), None),\n  ('control: warm nights', ([18, 19, 21, 22], [28, 29, 33, 35], 12, 32, 40), [[11.0, 23.0, 37.5, 52.5], 4]),\n  ('control: no days', ([], [], 10, 30, 5), [[], None]),\n  ('regression: frost then warm',\n   ([-5, 2, 11, 14], [6, 16, 25, 29], 10, 30, 15),\n   [[0.0, 3.0, 11.0, 22.5], 4])]]\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-degree-days-minimum-substitution","generated_at":"2026-09-29T14:47:35.976836+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 minimum substitution rule: `lo_c = min(max(lo, base), upper)`.","root_cause":"Daily minimum temperatures below base are not raised to base.","sha256":"d8e3dc6cdbc759c0451a084c8989e21361f7d892db0616d3e7a067858bbb189a","title":"Insect degree-day accumulation with horizontal cutoff: minimum substitution · case 01","variant":1,"variant_policy":"Five numbered records share a model and may reuse boundary fixtures.","verification":{"attempt":{"elapsed_ms":43.316,"exit_code":1,"observations":[{"actual":[[0.0,2.0,6.0,13.0,22.0,34.0],5],"check":"regression: spring warming codling moth","expected":[[2.5,6.5,11.5,18.5,27.5,39.5],5],"passed":false},{"actual":[[15.0,31.0,48.5],2],"check":"control: hot spell above cutoff","expected":[[15.0,31.0,48.5],2],"passed":true},{"actual":[[0.0,0.0,0.0],null],"check":"control: cold days below base","expected":[[0.0,0.0,0.0],null],"passed":true},{"actual":[[5.0,10.0,15.0],2],"check":"control: exact target","expected":[[5.0,10.0,15.0],2],"passed":true},{"actual":[[0.0,0.0],null],"check":"regression: never emerges","expected":[[1.0,2.5],null],"passed":false},{"actual":null,"check":"control: invalid thresholds","expected":null,"passed":true},{"actual":[[11.0,23.0,37.5,52.5],4],"check":"control: warm nights","expected":[[11.0,23.0,37.5,52.5],4],"passed":true}],"passed":false,"stderr":"","stdout":"{\"observations\": [{\"check\": \"regression: spring warming codling moth\", \"actual\": [[0.0, 2.0, 6.0, 13.0, 22.0, 34.0], 5], \"expected\": [[2.5, 6.5, 11.5, 18.5, 27.5, 39.5], 5], \"passed\": false}, {\"check\": \"control: hot spell above cutoff\", \"actual\": [[15.0, 31.0, 48.5], 2], \"expected\": [[15.0, 31.0, 48.5], 2], \"passed\": true}, {\"check\": \"control: cold days below base\", \"actual\": [[0.0, 0.0, 0.0], null], \"expected\": [[0.0, 0.0, 0.0], null], \"passed\": true}, {\"check\": \"control: exact target\", \"actual\": [[5.0, 10.0, 15.0], 2], \"expected\": [[5.0, 10.0, 15.0], 2], \"passed\": true}, {\"check\": \"regression: never emerges\", \"actual\": [[0.0, 0.0], null], \"expected\": [[1.0, 2.5], null], \"passed\": false}, {\"check\": \"control: invalid thresholds\", \"actual\": null, \"expected\": null, \"passed\": true}, {\"check\": \"control: warm nights\", \"actual\": [[11.0, 23.0, 37.5, 52.5], 4], \"expected\": [[11.0, 23.0, 37.5, 52.5], 4], \"passed\": true}], \"passed\": false}\n"},"broken":{"elapsed_ms":43.321,"exit_code":1,"observations":[{"actual":[[0.0,2.0,6.0,13.0,22.0,34.0],5],"check":"regression: spring warming codling moth","expected":[[2.5,6.5,11.5,18.5,27.5,39.5],5],"passed":false},{"actual":[[15.0,31.0,48.5],2],"check":"control: hot spell above cutoff","expected":[[15.0,31.0,48.5],2],"passed":true},{"actual":[[0.0,0.0,0.0],null],"check":"control: cold days below base","expected":[[0.0,0.0,0.0],null],"passed":true},{"actual":[[5.0,10.0,15.0],2],"check":"control: exact target","expected":[[5.0,10.0,15.0],2],"passed":true},{"actual":[[0.0,0.0],null],"check":"regression: never emerges","expected":[[1.0,2.5],null],"passed":false},{"actual":null,"check":"control: invalid thresholds","expected":null,"passed":true},{"actual":[[11.0,23.0,37.5,52.5],4],"check":"control: warm nights","expected":[[11.0,23.0,37.5,52.5],4],"passed":true}],"passed":false,"stderr":"","stdout":"{\"observations\": [{\"check\": \"regression: spring warming codling moth\", \"actual\": [[0.0, 2.0, 6.0, 13.0, 22.0, 34.0], 5], \"expected\": [[2.5, 6.5, 11.5, 18.5, 27.5, 39.5], 5], \"passed\": false}, {\"check\": \"control: hot spell above cutoff\", \"actual\": [[15.0, 31.0, 48.5], 2], \"expected\": [[15.0, 31.0, 48.5], 2], \"passed\": true}, {\"check\": \"control: cold days below base\", \"actual\": [[0.0, 0.0, 0.0], null], \"expected\": [[0.0, 0.0, 0.0], null], \"passed\": true}, {\"check\": \"control: exact target\", \"actual\": [[5.0, 10.0, 15.0], 2], \"expected\": [[5.0, 10.0, 15.0], 2], \"passed\": true}, {\"check\": \"regression: never emerges\", \"actual\": [[0.0, 0.0], null], \"expected\": [[1.0, 2.5], null], \"passed\": false}, {\"check\": \"control: invalid thresholds\", \"actual\": null, \"expected\": null, \"passed\": true}, {\"check\": \"control: warm nights\", \"actual\": [[11.0, 23.0, 37.5, 52.5], 4], \"expected\": [[11.0, 23.0, 37.5, 52.5], 4], \"passed\": true}], \"passed\": false}\n"},"fixed":{"elapsed_ms":44.498,"exit_code":0,"observations":[{"actual":[[2.5,6.5,11.5,18.5,27.5,39.5],5],"check":"regression: spring warming codling moth","expected":[[2.5,6.5,11.5,18.5,27.5,39.5],5],"passed":true},{"actual":[[15.0,31.0,48.5],2],"check":"control: hot spell above cutoff","expected":[[15.0,31.0,48.5],2],"passed":true},{"actual":[[0.0,0.0,0.0],null],"check":"control: cold days below base","expected":[[0.0,0.0,0.0],null],"passed":true},{"actual":[[5.0,10.0,15.0],2],"check":"control: exact target","expected":[[5.0,10.0,15.0],2],"passed":true},{"actual":[[1.0,2.5],null],"check":"regression: never emerges","expected":[[1.0,2.5],null],"passed":true},{"actual":null,"check":"control: invalid thresholds","expected":null,"passed":true},{"actual":[[11.0,23.0,37.5,52.5],4],"check":"control: warm nights","expected":[[11.0,23.0,37.5,52.5],4],"passed":true}],"passed":true,"stderr":"","stdout":"{\"observations\": [{\"check\": \"regression: spring warming codling moth\", \"actual\": [[2.5, 6.5, 11.5, 18.5, 27.5, 39.5], 5], \"expected\": [[2.5, 6.5, 11.5, 18.5, 27.5, 39.5], 5], \"passed\": true}, {\"check\": \"control: hot spell above cutoff\", \"actual\": [[15.0, 31.0, 48.5], 2], \"expected\": [[15.0, 31.0, 48.5], 2], \"passed\": true}, {\"check\": \"control: cold days below base\", \"actual\": [[0.0, 0.0, 0.0], null], \"expected\": [[0.0, 0.0, 0.0], null], \"passed\": true}, {\"check\": \"control: exact target\", \"actual\": [[5.0, 10.0, 15.0], 2], \"expected\": [[5.0, 10.0, 15.0], 2], \"passed\": true}, {\"check\": \"regression: never emerges\", \"actual\": [[1.0, 2.5], null], \"expected\": [[1.0, 2.5], null], \"passed\": true}, {\"check\": \"control: invalid thresholds\", \"actual\": null, \"expected\": null, \"passed\": true}, {\"check\": \"control: warm nights\", \"actual\": [[11.0, 23.0, 37.5, 52.5], 4], \"expected\": [[11.0, 23.0, 37.5, 52.5], 4], \"passed\": true}], \"passed\": true}\n"}},"verified":true,"visibility":"public"}