{"abstract":"An expiry Friday that is a holiday moves to the following Monday.","category":"Options payoff and settlement","checks":8,"contract":"Inputs year, month, kind and holidays. Monthly expiry is the third Friday of the month; quarterly expiry is the last calendar day of the quarter-end month (Mar/Jun/Sep/Dec) containing the month. Either date rolls back to the preceding business day (weekday not in holidays) when it is not a business day. Return [y,m,d].","evaluation_group":"w2-options_payoff_and_settlement-expiration-date","failed_approach":"Stepping back a single day can land on another holiday.","family":"w2-options_payoff_and_settlement-expiration-date-holiday-roll-direction","id":"FA-61596","implementations":{"attempt":{"sha256":"dd4833851936d768178f13a68ad28761661520b273a65921f544fbab7f03d691","source":"\"\"\"Failure Map reference implementation. Python standard library only.\"\"\"\nimport json\nimport datetime\nN = 1\nobservations = []\ndef solve(y, m, kind, holidays):\n    H = {datetime.date(*h) for h in holidays}\n    def biz(x):\n        return x.weekday() < 5 and x not in H\n    def mlen(yy, mm):\n        if mm == 2:\n            return 29 if (yy % 4 == 0 and yy % 100 != 0) or yy % 400 == 0 else 28\n        return 30 if mm in (4, 6, 9, 11) else 31\n    if kind == 'quarterly':\n        qm = ((m - 1) // 3 + 1) * 3\n        x = datetime.date(y, qm, mlen(y, qm))\n    else:\n        first = datetime.date(y, m, 1)\n        offset = (4 - first.weekday()) % 7\n        x = first + datetime.timedelta(days=offset + 14)\n    if not biz(x):\n        x -= datetime.timedelta(days=1)\n    return [x.year, x.month, x.day]\ndef check(label, actual, expected):\n    observations.append({\"check\": label, \"actual\": actual, \"expected\": expected, \"passed\": actual == expected})\nfixtures = [[['regression holiday roll direction 1', [2030, 5, 'quarterly', [[2030, 6, 30]]], [2030, 6, 28]], ['regression holiday roll direction 2', [2032, 12, 'monthly', [[2032, 12, 17], [2032, 12, 16]]], [2032, 12, 15]], ['partial repair probe 1', [2032, 5, 'monthly', [[2032, 5, 21], [2032, 5, 20]]], [2032, 5, 19]], ['partial repair probe 2', [2021, 2, 'monthly', [[2021, 2, 19], [2021, 2, 18]]], [2021, 2, 17]], ['boundary control 1', [2024, 12, 'quarterly', []], [2024, 12, 31]], ['boundary control 2', [2024, 6, 'monthly', []], [2024, 6, 21]], ['normal control 1', [2022, 2, 'quarterly', []], [2022, 3, 31]], ['normal control 2', [2031, 4, 'quarterly', [[2031, 4, 18], [2031, 4, 17], [2031, 6, 27]]], [2031, 6, 30]]], [['regression holiday roll direction 1', [2028, 9, 'quarterly', [[2028, 9, 15], [2028, 9, 14], [2028, 9, 27]]], [2028, 9, 29]], ['regression holiday roll direction 2', [2028, 10, 'quarterly', []], [2028, 12, 29]], ['partial repair probe 1', [2024, 6, 'quarterly', [[2024, 6, 21], [2024, 6, 20]]], [2024, 6, 28]], ['partial repair probe 2', [2021, 9, 'monthly', [[2021, 9, 17], [2021, 9, 16]]], [2021, 9, 15]], ['boundary control 1', [2024, 6, 'monthly', []], [2024, 6, 21]], ['boundary control 2', [2024, 12, 'quarterly', []], [2024, 12, 31]], ['normal control 1', [2029, 2, 'monthly', []], [2029, 2, 16]], ['normal control 2', [2023, 11, 'monthly', []], [2023, 11, 17]]], [['regression holiday roll direction 1', [2029, 6, 'quarterly', [[2029, 6, 15]]], [2029, 6, 29]], ['regression holiday roll direction 2', [2025, 12, 'monthly', [[2025, 12, 19], [2025, 12, 18]]], [2025, 12, 17]], ['partial repair probe 1', [2029, 9, 'monthly', [[2029, 9, 21], [2029, 9, 20]]], [2029, 9, 19]], ['partial repair probe 2', [2022, 3, 'monthly', [[2022, 3, 18], [2022, 3, 17]]], [2022, 3, 16]], ['boundary control 1', [2024, 3, 'monthly', []], [2024, 3, 15]], ['boundary control 2', [2024, 6, 'monthly', []], [2024, 6, 21]], ['normal control 1', [2026, 2, 'quarterly', [[2026, 3, 30]]], [2026, 3, 31]], ['normal control 2', [2020, 8, 'quarterly', [[2020, 8, 21]]], [2020, 9, 30]]], [['regression holiday roll direction 1', [2029, 8, 'quarterly', []], [2029, 9, 28]], ['regression holiday roll direction 2', [2023, 5, 'monthly', [[2023, 5, 19], [2023, 5, 18]]], [2023, 5, 17]], ['partial repair probe 1', [2028, 12, 'quarterly', [[2028, 12, 29]]], [2028, 12, 28]], ['partial repair probe 2', [2030, 3, 'monthly', [[2030, 3, 15], [2030, 3, 14]]], [2030, 3, 13]], ['boundary control 1', [2024, 3, 'monthly', []], [2024, 3, 15]], ['boundary control 2', [2024, 6, 'monthly', []], [2024, 6, 21]], ['normal control 1', [2030, 10, 'monthly', []], [2030, 10, 18]], ['normal control 2', [2025, 7, 'monthly', []], [2025, 7, 18]]], [['regression holiday roll direction 1', [2024, 4, 'quarterly', [[2024, 6, 28]]], [2024, 6, 27]], ['regression holiday roll direction 2', [2024, 6, 'quarterly', [[2024, 6, 30]]], [2024, 6, 28]], ['partial repair probe 1', [2032, 2, 'monthly', [[2032, 2, 20], [2032, 2, 19]]], [2032, 2, 18]], ['partial repair probe 2', [2032, 4, 'monthly', [[2032, 4, 16], [2032, 4, 15]]], [2032, 4, 14]], ['boundary control 1', [2024, 3, 'monthly', []], [2024, 3, 15]], ['boundary control 2', [2024, 12, 'quarterly', []], [2024, 12, 31]], ['normal control 1', [2031, 12, 'monthly', []], [2031, 12, 19]], ['normal control 2', [2029, 4, 'monthly', []], [2029, 4, 20]]]]\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":"8edfc6037ef90950bf489ef9b0cc0cb916384dac0923a0a6a5b1c9d66218f661","source":"\"\"\"Failure Map reference implementation. Python standard library only.\"\"\"\nimport json\nimport datetime\nN = 1\nobservations = []\ndef solve(y, m, kind, holidays):\n    H = {datetime.date(*h) for h in holidays}\n    def biz(x):\n        return x.weekday() < 5 and x not in H\n    def mlen(yy, mm):\n        if mm == 2:\n            return 29 if (yy % 4 == 0 and yy % 100 != 0) or yy % 400 == 0 else 28\n        return 30 if mm in (4, 6, 9, 11) else 31\n    if kind == 'quarterly':\n        qm = ((m - 1) // 3 + 1) * 3\n        x = datetime.date(y, qm, mlen(y, qm))\n    else:\n        first = datetime.date(y, m, 1)\n        offset = (4 - first.weekday()) % 7\n        x = first + datetime.timedelta(days=offset + 14)\n    while not biz(x):\n        x += datetime.timedelta(days=1)\n    return [x.year, x.month, x.day]\ndef check(label, actual, expected):\n    observations.append({\"check\": label, \"actual\": actual, \"expected\": expected, \"passed\": actual == expected})\nfixtures = [[['regression holiday roll direction 1', [2030, 5, 'quarterly', [[2030, 6, 30]]], [2030, 6, 28]], ['regression holiday roll direction 2', [2032, 12, 'monthly', [[2032, 12, 17], [2032, 12, 16]]], [2032, 12, 15]], ['partial repair probe 1', [2032, 5, 'monthly', [[2032, 5, 21], [2032, 5, 20]]], [2032, 5, 19]], ['partial repair probe 2', [2021, 2, 'monthly', [[2021, 2, 19], [2021, 2, 18]]], [2021, 2, 17]], ['boundary control 1', [2024, 12, 'quarterly', []], [2024, 12, 31]], ['boundary control 2', [2024, 6, 'monthly', []], [2024, 6, 21]], ['normal control 1', [2022, 2, 'quarterly', []], [2022, 3, 31]], ['normal control 2', [2031, 4, 'quarterly', [[2031, 4, 18], [2031, 4, 17], [2031, 6, 27]]], [2031, 6, 30]]], [['regression holiday roll direction 1', [2028, 9, 'quarterly', [[2028, 9, 15], [2028, 9, 14], [2028, 9, 27]]], [2028, 9, 29]], ['regression holiday roll direction 2', [2028, 10, 'quarterly', []], [2028, 12, 29]], ['partial repair probe 1', [2024, 6, 'quarterly', [[2024, 6, 21], [2024, 6, 20]]], [2024, 6, 28]], ['partial repair probe 2', [2021, 9, 'monthly', [[2021, 9, 17], [2021, 9, 16]]], [2021, 9, 15]], ['boundary control 1', [2024, 6, 'monthly', []], [2024, 6, 21]], ['boundary control 2', [2024, 12, 'quarterly', []], [2024, 12, 31]], ['normal control 1', [2029, 2, 'monthly', []], [2029, 2, 16]], ['normal control 2', [2023, 11, 'monthly', []], [2023, 11, 17]]], [['regression holiday roll direction 1', [2029, 6, 'quarterly', [[2029, 6, 15]]], [2029, 6, 29]], ['regression holiday roll direction 2', [2025, 12, 'monthly', [[2025, 12, 19], [2025, 12, 18]]], [2025, 12, 17]], ['partial repair probe 1', [2029, 9, 'monthly', [[2029, 9, 21], [2029, 9, 20]]], [2029, 9, 19]], ['partial repair probe 2', [2022, 3, 'monthly', [[2022, 3, 18], [2022, 3, 17]]], [2022, 3, 16]], ['boundary control 1', [2024, 3, 'monthly', []], [2024, 3, 15]], ['boundary control 2', [2024, 6, 'monthly', []], [2024, 6, 21]], ['normal control 1', [2026, 2, 'quarterly', [[2026, 3, 30]]], [2026, 3, 31]], ['normal control 2', [2020, 8, 'quarterly', [[2020, 8, 21]]], [2020, 9, 30]]], [['regression holiday roll direction 1', [2029, 8, 'quarterly', []], [2029, 9, 28]], ['regression holiday roll direction 2', [2023, 5, 'monthly', [[2023, 5, 19], [2023, 5, 18]]], [2023, 5, 17]], ['partial repair probe 1', [2028, 12, 'quarterly', [[2028, 12, 29]]], [2028, 12, 28]], ['partial repair probe 2', [2030, 3, 'monthly', [[2030, 3, 15], [2030, 3, 14]]], [2030, 3, 13]], ['boundary control 1', [2024, 3, 'monthly', []], [2024, 3, 15]], ['boundary control 2', [2024, 6, 'monthly', []], [2024, 6, 21]], ['normal control 1', [2030, 10, 'monthly', []], [2030, 10, 18]], ['normal control 2', [2025, 7, 'monthly', []], [2025, 7, 18]]], [['regression holiday roll direction 1', [2024, 4, 'quarterly', [[2024, 6, 28]]], [2024, 6, 27]], ['regression holiday roll direction 2', [2024, 6, 'quarterly', [[2024, 6, 30]]], [2024, 6, 28]], ['partial repair probe 1', [2032, 2, 'monthly', [[2032, 2, 20], [2032, 2, 19]]], [2032, 2, 18]], ['partial repair probe 2', [2032, 4, 'monthly', [[2032, 4, 16], [2032, 4, 15]]], [2032, 4, 14]], ['boundary control 1', [2024, 3, 'monthly', []], [2024, 3, 15]], ['boundary control 2', [2024, 12, 'quarterly', []], [2024, 12, 31]], ['normal control 1', [2031, 12, 'monthly', []], [2031, 12, 19]], ['normal control 2', [2029, 4, 'monthly', []], [2029, 4, 20]]]]\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":"cc2c330fb9cde03517ae4d1703fb2a3cdc82c35b1c515c19488b7c3c2dfaede6","source":"\"\"\"Failure Map reference implementation. Python standard library only.\"\"\"\nimport json\nimport datetime\nN = 1\nobservations = []\ndef solve(y, m, kind, holidays):\n    H = {datetime.date(*h) for h in holidays}\n    def biz(x):\n        return x.weekday() < 5 and x not in H\n    def mlen(yy, mm):\n        if mm == 2:\n            return 29 if (yy % 4 == 0 and yy % 100 != 0) or yy % 400 == 0 else 28\n        return 30 if mm in (4, 6, 9, 11) else 31\n    if kind == 'quarterly':\n        qm = ((m - 1) // 3 + 1) * 3\n        x = datetime.date(y, qm, mlen(y, qm))\n    else:\n        first = datetime.date(y, m, 1)\n        offset = (4 - first.weekday()) % 7\n        x = first + datetime.timedelta(days=offset + 14)\n    while not biz(x):\n        x -= datetime.timedelta(days=1)\n    return [x.year, x.month, x.day]\ndef check(label, actual, expected):\n    observations.append({\"check\": label, \"actual\": actual, \"expected\": expected, \"passed\": actual == expected})\nfixtures = [[['regression holiday roll direction 1', [2030, 5, 'quarterly', [[2030, 6, 30]]], [2030, 6, 28]], ['regression holiday roll direction 2', [2032, 12, 'monthly', [[2032, 12, 17], [2032, 12, 16]]], [2032, 12, 15]], ['partial repair probe 1', [2032, 5, 'monthly', [[2032, 5, 21], [2032, 5, 20]]], [2032, 5, 19]], ['partial repair probe 2', [2021, 2, 'monthly', [[2021, 2, 19], [2021, 2, 18]]], [2021, 2, 17]], ['boundary control 1', [2024, 12, 'quarterly', []], [2024, 12, 31]], ['boundary control 2', [2024, 6, 'monthly', []], [2024, 6, 21]], ['normal control 1', [2022, 2, 'quarterly', []], [2022, 3, 31]], ['normal control 2', [2031, 4, 'quarterly', [[2031, 4, 18], [2031, 4, 17], [2031, 6, 27]]], [2031, 6, 30]]], [['regression holiday roll direction 1', [2028, 9, 'quarterly', [[2028, 9, 15], [2028, 9, 14], [2028, 9, 27]]], [2028, 9, 29]], ['regression holiday roll direction 2', [2028, 10, 'quarterly', []], [2028, 12, 29]], ['partial repair probe 1', [2024, 6, 'quarterly', [[2024, 6, 21], [2024, 6, 20]]], [2024, 6, 28]], ['partial repair probe 2', [2021, 9, 'monthly', [[2021, 9, 17], [2021, 9, 16]]], [2021, 9, 15]], ['boundary control 1', [2024, 6, 'monthly', []], [2024, 6, 21]], ['boundary control 2', [2024, 12, 'quarterly', []], [2024, 12, 31]], ['normal control 1', [2029, 2, 'monthly', []], [2029, 2, 16]], ['normal control 2', [2023, 11, 'monthly', []], [2023, 11, 17]]], [['regression holiday roll direction 1', [2029, 6, 'quarterly', [[2029, 6, 15]]], [2029, 6, 29]], ['regression holiday roll direction 2', [2025, 12, 'monthly', [[2025, 12, 19], [2025, 12, 18]]], [2025, 12, 17]], ['partial repair probe 1', [2029, 9, 'monthly', [[2029, 9, 21], [2029, 9, 20]]], [2029, 9, 19]], ['partial repair probe 2', [2022, 3, 'monthly', [[2022, 3, 18], [2022, 3, 17]]], [2022, 3, 16]], ['boundary control 1', [2024, 3, 'monthly', []], [2024, 3, 15]], ['boundary control 2', [2024, 6, 'monthly', []], [2024, 6, 21]], ['normal control 1', [2026, 2, 'quarterly', [[2026, 3, 30]]], [2026, 3, 31]], ['normal control 2', [2020, 8, 'quarterly', [[2020, 8, 21]]], [2020, 9, 30]]], [['regression holiday roll direction 1', [2029, 8, 'quarterly', []], [2029, 9, 28]], ['regression holiday roll direction 2', [2023, 5, 'monthly', [[2023, 5, 19], [2023, 5, 18]]], [2023, 5, 17]], ['partial repair probe 1', [2028, 12, 'quarterly', [[2028, 12, 29]]], [2028, 12, 28]], ['partial repair probe 2', [2030, 3, 'monthly', [[2030, 3, 15], [2030, 3, 14]]], [2030, 3, 13]], ['boundary control 1', [2024, 3, 'monthly', []], [2024, 3, 15]], ['boundary control 2', [2024, 6, 'monthly', []], [2024, 6, 21]], ['normal control 1', [2030, 10, 'monthly', []], [2030, 10, 18]], ['normal control 2', [2025, 7, 'monthly', []], [2025, 7, 18]]], [['regression holiday roll direction 1', [2024, 4, 'quarterly', [[2024, 6, 28]]], [2024, 6, 27]], ['regression holiday roll direction 2', [2024, 6, 'quarterly', [[2024, 6, 30]]], [2024, 6, 28]], ['partial repair probe 1', [2032, 2, 'monthly', [[2032, 2, 20], [2032, 2, 19]]], [2032, 2, 18]], ['partial repair probe 2', [2032, 4, 'monthly', [[2032, 4, 16], [2032, 4, 15]]], [2032, 4, 14]], ['boundary control 1', [2024, 3, 'monthly', []], [2024, 3, 15]], ['boundary control 2', [2024, 12, 'quarterly', []], [2024, 12, 31]], ['normal control 1', [2031, 12, 'monthly', []], [2031, 12, 19]], ['normal control 2', [2029, 4, 'monthly', []], [2029, 4, 20]]]]\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":"A deterministic toy contract stated explicitly in the contract field; no claim of conformance to any exchange or clearing rulebook. 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-options_payoff_and_settlement-expiration-date-holiday-roll-direction","generated_at":"2026-09-29T14:46:56.745965+00:00","license":"CC0-1.0","python":"3.12.14","seed":1,"split":"open-access"},"relevance":"Option expiry, exercise and settlement engines move cash and shares; a wrong branch misstates obligations.","repair":"Roll back to the preceding business day.","root_cause":"The business-day adjustment steps forward instead of backward.","sha256":"934abe187ec93d0eaee14366b7911aff9082b945d04ae8ba435577721408c337","title":"Listed option expiration date calendar: holiday expiries roll forward · case 01","variant":1,"variant_policy":"Five numbered records share a model and may reuse boundary fixtures.","verification":{"attempt":{"elapsed_ms":41.111,"exit_code":1,"observations":[{"actual":[2030,6,29],"check":"regression holiday roll direction 1","expected":[2030,6,28],"passed":false},{"actual":[2032,12,16],"check":"regression holiday roll direction 2","expected":[2032,12,15],"passed":false},{"actual":[2032,5,20],"check":"partial repair probe 1","expected":[2032,5,19],"passed":false},{"actual":[2021,2,18],"check":"partial repair probe 2","expected":[2021,2,17],"passed":false},{"actual":[2024,12,31],"check":"boundary control 1","expected":[2024,12,31],"passed":true},{"actual":[2024,6,21],"check":"boundary control 2","expected":[2024,6,21],"passed":true},{"actual":[2022,3,31],"check":"normal control 1","expected":[2022,3,31],"passed":true},{"actual":[2031,6,30],"check":"normal control 2","expected":[2031,6,30],"passed":true}],"passed":false,"stderr":"","stdout":"{\"observations\": [{\"check\": \"regression holiday roll direction 1\", \"actual\": [2030, 6, 29], \"expected\": [2030, 6, 28], \"passed\": false}, {\"check\": \"regression holiday roll direction 2\", \"actual\": [2032, 12, 16], \"expected\": [2032, 12, 15], \"passed\": false}, {\"check\": \"partial repair probe 1\", \"actual\": [2032, 5, 20], \"expected\": [2032, 5, 19], \"passed\": false}, {\"check\": \"partial repair probe 2\", \"actual\": [2021, 2, 18], \"expected\": [2021, 2, 17], \"passed\": false}, {\"check\": \"boundary control 1\", \"actual\": [2024, 12, 31], \"expected\": [2024, 12, 31], \"passed\": true}, {\"check\": \"boundary control 2\", \"actual\": [2024, 6, 21], \"expected\": [2024, 6, 21], \"passed\": true}, {\"check\": \"normal control 1\", \"actual\": [2022, 3, 31], \"expected\": [2022, 3, 31], \"passed\": true}, {\"check\": \"normal control 2\", \"actual\": [2031, 6, 30], \"expected\": [2031, 6, 30], \"passed\": true}], \"passed\": false}\n"},"broken":{"elapsed_ms":40.716,"exit_code":1,"observations":[{"actual":[2030,7,1],"check":"regression holiday roll direction 1","expected":[2030,6,28],"passed":false},{"actual":[2032,12,20],"check":"regression holiday roll direction 2","expected":[2032,12,15],"passed":false},{"actual":[2032,5,24],"check":"partial repair probe 1","expected":[2032,5,19],"passed":false},{"actual":[2021,2,22],"check":"partial repair probe 2","expected":[2021,2,17],"passed":false},{"actual":[2024,12,31],"check":"boundary control 1","expected":[2024,12,31],"passed":true},{"actual":[2024,6,21],"check":"boundary control 2","expected":[2024,6,21],"passed":true},{"actual":[2022,3,31],"check":"normal control 1","expected":[2022,3,31],"passed":true},{"actual":[2031,6,30],"check":"normal control 2","expected":[2031,6,30],"passed":true}],"passed":false,"stderr":"","stdout":"{\"observations\": [{\"check\": \"regression holiday roll direction 1\", \"actual\": [2030, 7, 1], \"expected\": [2030, 6, 28], \"passed\": false}, {\"check\": \"regression holiday roll direction 2\", \"actual\": [2032, 12, 20], \"expected\": [2032, 12, 15], \"passed\": false}, {\"check\": \"partial repair probe 1\", \"actual\": [2032, 5, 24], \"expected\": [2032, 5, 19], \"passed\": false}, {\"check\": \"partial repair probe 2\", \"actual\": [2021, 2, 22], \"expected\": [2021, 2, 17], \"passed\": false}, {\"check\": \"boundary control 1\", \"actual\": [2024, 12, 31], \"expected\": [2024, 12, 31], \"passed\": true}, {\"check\": \"boundary control 2\", \"actual\": [2024, 6, 21], \"expected\": [2024, 6, 21], \"passed\": true}, {\"check\": \"normal control 1\", \"actual\": [2022, 3, 31], \"expected\": [2022, 3, 31], \"passed\": true}, {\"check\": \"normal control 2\", \"actual\": [2031, 6, 30], \"expected\": [2031, 6, 30], \"passed\": true}], \"passed\": false}\n"},"fixed":{"elapsed_ms":39.357,"exit_code":0,"observations":[{"actual":[2030,6,28],"check":"regression holiday roll direction 1","expected":[2030,6,28],"passed":true},{"actual":[2032,12,15],"check":"regression holiday roll direction 2","expected":[2032,12,15],"passed":true},{"actual":[2032,5,19],"check":"partial repair probe 1","expected":[2032,5,19],"passed":true},{"actual":[2021,2,17],"check":"partial repair probe 2","expected":[2021,2,17],"passed":true},{"actual":[2024,12,31],"check":"boundary control 1","expected":[2024,12,31],"passed":true},{"actual":[2024,6,21],"check":"boundary control 2","expected":[2024,6,21],"passed":true},{"actual":[2022,3,31],"check":"normal control 1","expected":[2022,3,31],"passed":true},{"actual":[2031,6,30],"check":"normal control 2","expected":[2031,6,30],"passed":true}],"passed":true,"stderr":"","stdout":"{\"observations\": [{\"check\": \"regression holiday roll direction 1\", \"actual\": [2030, 6, 28], \"expected\": [2030, 6, 28], \"passed\": true}, {\"check\": \"regression holiday roll direction 2\", \"actual\": [2032, 12, 15], \"expected\": [2032, 12, 15], \"passed\": true}, {\"check\": \"partial repair probe 1\", \"actual\": [2032, 5, 19], \"expected\": [2032, 5, 19], \"passed\": true}, {\"check\": \"partial repair probe 2\", \"actual\": [2021, 2, 17], \"expected\": [2021, 2, 17], \"passed\": true}, {\"check\": \"boundary control 1\", \"actual\": [2024, 12, 31], \"expected\": [2024, 12, 31], \"passed\": true}, {\"check\": \"boundary control 2\", \"actual\": [2024, 6, 21], \"expected\": [2024, 6, 21], \"passed\": true}, {\"check\": \"normal control 1\", \"actual\": [2022, 3, 31], \"expected\": [2022, 3, 31], \"passed\": true}, {\"check\": \"normal control 2\", \"actual\": [2031, 6, 30], \"expected\": [2031, 6, 30], \"passed\": true}], \"passed\": true}\n"}},"verified":true,"visibility":"public"}