{"abstract":"A February 29 series reports an instance in 2100.","category":"Calendar recurrence rules","checks":7,"contract":"FREQ=YEARLY on a fixed month and day. Years are dtstart.year + k*interval. A year in which the date does not exist (for example February 29 in a common year) is skipped, never clamped. Gregorian leap years: divisible by 4, except centuries not divisible by 400. Instances before dtstart are dropped and the series ends at until (inclusive). Return ISO dates.","evaluation_group":"w2-calendar-recurrence-rules-yearly-month-day","failed_approach":"The partial repair `y % 4 == 0 and y % 100 != 0` excludes every century, including 2000 which is a leap year.","family":"w2-calendar-recurrence-rules-yearly-month-day-leap-rule","id":"FA-76941","implementations":{"attempt":{"sha256":"92d8f59f0388ddad7d70bf76b0d141e56bbb0889a8289fba535bdff1acd7bf77","source":"\"\"\"Failure Map reference implementation. Python standard library only.\"\"\"\nimport json\nimport datetime as dt\nimport calendar\nN = 1\nobservations = []\ndef solve(dtstart, month, day, interval, until):\n    start = tuple(int(x) for x in dtstart.split('-'))\n    last = tuple(int(x) for x in until.split('-'))\n    def is_leap(y):\n        return y % 4 == 0 and y % 100 != 0\n    out = []\n    for k in range(500):\n        y = start[0] + k * interval\n        if y > last[0]:\n            break\n        dim = [31, 29 if is_leap(y) else 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31][month - 1]\n        dd = day\n        if dd > dim:\n            continue\n        d = (y, month, dd)\n        if d < start:\n            continue\n        if d > last:\n            break\n        out.append('%04d-%02d-%02d' % d)\n    return out\ndef check(label, actual, expected):\n    observations.append({\"check\": label, \"actual\": actual, \"expected\": expected, \"passed\": actual == expected})\nfixtures = [[('regression: leap day across 2100',\n   ['2092-02-29', 2, 29, 4, '2108-12-31'],\n   ['2092-02-29', '2096-02-29', '2104-02-29', '2108-02-29']),\n  ('leap day includes 2000',\n   ['1996-02-29', 2, 29, 1, '2004-03-01'],\n   ['1996-02-29', '2000-02-29', '2004-02-29']),\n  ('anniversary before dtstart, interval 2',\n   ['2024-06-01', 3, 15, 2, '2031-01-01'],\n   ['2026-03-15', '2028-03-15', '2030-03-15']),\n  ('until exactly on instance',\n   ['2020-07-04', 7, 4, 1, '2023-07-04'],\n   ['2020-07-04', '2021-07-04', '2022-07-04', '2023-07-04']),\n  ('until year partial', ['2020-01-10', 12, 25, 1, '2022-06-30'], ['2020-12-25', '2021-12-25']),\n  ('leap day from common year',\n   ['2023-01-01', 2, 29, 1, '2033-01-01'],\n   ['2024-02-29', '2028-02-29', '2032-02-29']),\n  ('same month earlier day',\n   ['2024-05-20', 5, 10, 1, '2027-12-31'],\n   ['2025-05-10', '2026-05-10', '2027-05-10'])],\n [('anniversary before dtstart, interval 2',\n   ['2024-06-01', 3, 15, 2, '2031-01-01'],\n   ['2026-03-15', '2028-03-15', '2030-03-15']),\n  ('until exactly on instance',\n   ['2020-07-04', 7, 4, 1, '2023-07-04'],\n   ['2020-07-04', '2021-07-04', '2022-07-04', '2023-07-04']),\n  ('until year partial', ['2020-01-10', 12, 25, 1, '2022-06-30'], ['2020-12-25', '2021-12-25']),\n  ('leap day from common year',\n   ['2023-01-01', 2, 29, 1, '2033-01-01'],\n   ['2024-02-29', '2028-02-29', '2032-02-29']),\n  ('same month earlier day',\n   ['2024-05-20', 5, 10, 1, '2027-12-31'],\n   ['2025-05-10', '2026-05-10', '2027-05-10']),\n  ('dtstart on anniversary',\n   ['2021-11-11', 11, 11, 3, '2031-11-11'],\n   ['2021-11-11', '2024-11-11', '2027-11-11', '2030-11-11']),\n  ('interval 4 leap-day from 2023', ['2023-03-01', 2, 29, 4, '2040-12-31'], []),\n  ('regression: leap day across 2100',\n   ['2092-02-29', 2, 29, 4, '2108-12-31'],\n   ['2092-02-29', '2096-02-29', '2104-02-29', '2108-02-29']),\n  ('leap day includes 2000',\n   ['1996-02-29', 2, 29, 1, '2004-03-01'],\n   ['1996-02-29', '2000-02-29', '2004-02-29'])],\n [('until year partial', ['2020-01-10', 12, 25, 1, '2022-06-30'], ['2020-12-25', '2021-12-25']),\n  ('leap day from common year',\n   ['2023-01-01', 2, 29, 1, '2033-01-01'],\n   ['2024-02-29', '2028-02-29', '2032-02-29']),\n  ('same month earlier day',\n   ['2024-05-20', 5, 10, 1, '2027-12-31'],\n   ['2025-05-10', '2026-05-10', '2027-05-10']),\n  ('dtstart on anniversary',\n   ['2021-11-11', 11, 11, 3, '2031-11-11'],\n   ['2021-11-11', '2024-11-11', '2027-11-11', '2030-11-11']),\n  ('interval 4 leap-day from 2023', ['2023-03-01', 2, 29, 4, '2040-12-31'], []),\n  ('year-end date',\n   ['2019-12-31', 12, 31, 2, '2026-01-01'],\n   ['2019-12-31', '2021-12-31', '2023-12-31', '2025-12-31']),\n  ('century non-leap interval 1', ['2098-01-01', 2, 29, 1, '2105-01-01'], ['2104-02-29']),\n  ('leap day includes 2000',\n   ['1996-02-29', 2, 29, 1, '2004-03-01'],\n   ['1996-02-29', '2000-02-29', '2004-02-29'])],\n [('same month earlier day',\n   ['2024-05-20', 5, 10, 1, '2027-12-31'],\n   ['2025-05-10', '2026-05-10', '2027-05-10']),\n  ('dtstart on anniversary',\n   ['2021-11-11', 11, 11, 3, '2031-11-11'],\n   ['2021-11-11', '2024-11-11', '2027-11-11', '2030-11-11']),\n  ('interval 4 leap-day from 2023', ['2023-03-01', 2, 29, 4, '2040-12-31'], []),\n  ('year-end date',\n   ['2019-12-31', 12, 31, 2, '2026-01-01'],\n   ['2019-12-31', '2021-12-31', '2023-12-31', '2025-12-31']),\n  ('century non-leap interval 1', ['2098-01-01', 2, 29, 1, '2105-01-01'], ['2104-02-29']),\n  ('regression: leap day across 2100',\n   ['2092-02-29', 2, 29, 4, '2108-12-31'],\n   ['2092-02-29', '2096-02-29', '2104-02-29', '2108-02-29']),\n  ('leap day includes 2000',\n   ['1996-02-29', 2, 29, 1, '2004-03-01'],\n   ['1996-02-29', '2000-02-29', '2004-02-29'])],\n [('interval 4 leap-day from 2023', ['2023-03-01', 2, 29, 4, '2040-12-31'], []),\n  ('year-end date',\n   ['2019-12-31', 12, 31, 2, '2026-01-01'],\n   ['2019-12-31', '2021-12-31', '2023-12-31', '2025-12-31']),\n  ('century non-leap interval 1', ['2098-01-01', 2, 29, 1, '2105-01-01'], ['2104-02-29']),\n  ('regression: leap day across 2100',\n   ['2092-02-29', 2, 29, 4, '2108-12-31'],\n   ['2092-02-29', '2096-02-29', '2104-02-29', '2108-02-29']),\n  ('leap day includes 2000',\n   ['1996-02-29', 2, 29, 1, '2004-03-01'],\n   ['1996-02-29', '2000-02-29', '2004-02-29']),\n  ('anniversary before dtstart, interval 2',\n   ['2024-06-01', 3, 15, 2, '2031-01-01'],\n   ['2026-03-15', '2028-03-15', '2030-03-15']),\n  ('until exactly on instance',\n   ['2020-07-04', 7, 4, 1, '2023-07-04'],\n   ['2020-07-04', '2021-07-04', '2022-07-04', '2023-07-04'])]]\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":"d3a71eb554b466e36f613925fc39b0a00c30c06a682ebcc46622aa145b47182a","source":"\"\"\"Failure Map reference implementation. Python standard library only.\"\"\"\nimport json\nimport datetime as dt\nimport calendar\nN = 1\nobservations = []\ndef solve(dtstart, month, day, interval, until):\n    start = tuple(int(x) for x in dtstart.split('-'))\n    last = tuple(int(x) for x in until.split('-'))\n    def is_leap(y):\n        return y % 4 == 0\n    out = []\n    for k in range(500):\n        y = start[0] + k * interval\n        if y > last[0]:\n            break\n        dim = [31, 29 if is_leap(y) else 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31][month - 1]\n        dd = day\n        if dd > dim:\n            continue\n        d = (y, month, dd)\n        if d < start:\n            continue\n        if d > last:\n            break\n        out.append('%04d-%02d-%02d' % d)\n    return out\ndef check(label, actual, expected):\n    observations.append({\"check\": label, \"actual\": actual, \"expected\": expected, \"passed\": actual == expected})\nfixtures = [[('regression: leap day across 2100',\n   ['2092-02-29', 2, 29, 4, '2108-12-31'],\n   ['2092-02-29', '2096-02-29', '2104-02-29', '2108-02-29']),\n  ('leap day includes 2000',\n   ['1996-02-29', 2, 29, 1, '2004-03-01'],\n   ['1996-02-29', '2000-02-29', '2004-02-29']),\n  ('anniversary before dtstart, interval 2',\n   ['2024-06-01', 3, 15, 2, '2031-01-01'],\n   ['2026-03-15', '2028-03-15', '2030-03-15']),\n  ('until exactly on instance',\n   ['2020-07-04', 7, 4, 1, '2023-07-04'],\n   ['2020-07-04', '2021-07-04', '2022-07-04', '2023-07-04']),\n  ('until year partial', ['2020-01-10', 12, 25, 1, '2022-06-30'], ['2020-12-25', '2021-12-25']),\n  ('leap day from common year',\n   ['2023-01-01', 2, 29, 1, '2033-01-01'],\n   ['2024-02-29', '2028-02-29', '2032-02-29']),\n  ('same month earlier day',\n   ['2024-05-20', 5, 10, 1, '2027-12-31'],\n   ['2025-05-10', '2026-05-10', '2027-05-10'])],\n [('anniversary before dtstart, interval 2',\n   ['2024-06-01', 3, 15, 2, '2031-01-01'],\n   ['2026-03-15', '2028-03-15', '2030-03-15']),\n  ('until exactly on instance',\n   ['2020-07-04', 7, 4, 1, '2023-07-04'],\n   ['2020-07-04', '2021-07-04', '2022-07-04', '2023-07-04']),\n  ('until year partial', ['2020-01-10', 12, 25, 1, '2022-06-30'], ['2020-12-25', '2021-12-25']),\n  ('leap day from common year',\n   ['2023-01-01', 2, 29, 1, '2033-01-01'],\n   ['2024-02-29', '2028-02-29', '2032-02-29']),\n  ('same month earlier day',\n   ['2024-05-20', 5, 10, 1, '2027-12-31'],\n   ['2025-05-10', '2026-05-10', '2027-05-10']),\n  ('dtstart on anniversary',\n   ['2021-11-11', 11, 11, 3, '2031-11-11'],\n   ['2021-11-11', '2024-11-11', '2027-11-11', '2030-11-11']),\n  ('interval 4 leap-day from 2023', ['2023-03-01', 2, 29, 4, '2040-12-31'], []),\n  ('regression: leap day across 2100',\n   ['2092-02-29', 2, 29, 4, '2108-12-31'],\n   ['2092-02-29', '2096-02-29', '2104-02-29', '2108-02-29']),\n  ('leap day includes 2000',\n   ['1996-02-29', 2, 29, 1, '2004-03-01'],\n   ['1996-02-29', '2000-02-29', '2004-02-29'])],\n [('until year partial', ['2020-01-10', 12, 25, 1, '2022-06-30'], ['2020-12-25', '2021-12-25']),\n  ('leap day from common year',\n   ['2023-01-01', 2, 29, 1, '2033-01-01'],\n   ['2024-02-29', '2028-02-29', '2032-02-29']),\n  ('same month earlier day',\n   ['2024-05-20', 5, 10, 1, '2027-12-31'],\n   ['2025-05-10', '2026-05-10', '2027-05-10']),\n  ('dtstart on anniversary',\n   ['2021-11-11', 11, 11, 3, '2031-11-11'],\n   ['2021-11-11', '2024-11-11', '2027-11-11', '2030-11-11']),\n  ('interval 4 leap-day from 2023', ['2023-03-01', 2, 29, 4, '2040-12-31'], []),\n  ('year-end date',\n   ['2019-12-31', 12, 31, 2, '2026-01-01'],\n   ['2019-12-31', '2021-12-31', '2023-12-31', '2025-12-31']),\n  ('century non-leap interval 1', ['2098-01-01', 2, 29, 1, '2105-01-01'], ['2104-02-29']),\n  ('leap day includes 2000',\n   ['1996-02-29', 2, 29, 1, '2004-03-01'],\n   ['1996-02-29', '2000-02-29', '2004-02-29'])],\n [('same month earlier day',\n   ['2024-05-20', 5, 10, 1, '2027-12-31'],\n   ['2025-05-10', '2026-05-10', '2027-05-10']),\n  ('dtstart on anniversary',\n   ['2021-11-11', 11, 11, 3, '2031-11-11'],\n   ['2021-11-11', '2024-11-11', '2027-11-11', '2030-11-11']),\n  ('interval 4 leap-day from 2023', ['2023-03-01', 2, 29, 4, '2040-12-31'], []),\n  ('year-end date',\n   ['2019-12-31', 12, 31, 2, '2026-01-01'],\n   ['2019-12-31', '2021-12-31', '2023-12-31', '2025-12-31']),\n  ('century non-leap interval 1', ['2098-01-01', 2, 29, 1, '2105-01-01'], ['2104-02-29']),\n  ('regression: leap day across 2100',\n   ['2092-02-29', 2, 29, 4, '2108-12-31'],\n   ['2092-02-29', '2096-02-29', '2104-02-29', '2108-02-29']),\n  ('leap day includes 2000',\n   ['1996-02-29', 2, 29, 1, '2004-03-01'],\n   ['1996-02-29', '2000-02-29', '2004-02-29'])],\n [('interval 4 leap-day from 2023', ['2023-03-01', 2, 29, 4, '2040-12-31'], []),\n  ('year-end date',\n   ['2019-12-31', 12, 31, 2, '2026-01-01'],\n   ['2019-12-31', '2021-12-31', '2023-12-31', '2025-12-31']),\n  ('century non-leap interval 1', ['2098-01-01', 2, 29, 1, '2105-01-01'], ['2104-02-29']),\n  ('regression: leap day across 2100',\n   ['2092-02-29', 2, 29, 4, '2108-12-31'],\n   ['2092-02-29', '2096-02-29', '2104-02-29', '2108-02-29']),\n  ('leap day includes 2000',\n   ['1996-02-29', 2, 29, 1, '2004-03-01'],\n   ['1996-02-29', '2000-02-29', '2004-02-29']),\n  ('anniversary before dtstart, interval 2',\n   ['2024-06-01', 3, 15, 2, '2031-01-01'],\n   ['2026-03-15', '2028-03-15', '2030-03-15']),\n  ('until exactly on instance',\n   ['2020-07-04', 7, 4, 1, '2023-07-04'],\n   ['2020-07-04', '2021-07-04', '2022-07-04', '2023-07-04'])]]\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":"7a1cb20804979af7f04ed451c449747122471af0545b1505788e2793cccd735c","source":"\"\"\"Failure Map reference implementation. Python standard library only.\"\"\"\nimport json\nimport datetime as dt\nimport calendar\nN = 1\nobservations = []\ndef solve(dtstart, month, day, interval, until):\n    start = tuple(int(x) for x in dtstart.split('-'))\n    last = tuple(int(x) for x in until.split('-'))\n    def is_leap(y):\n        return y % 4 == 0 and (y % 100 != 0 or y % 400 == 0)\n    out = []\n    for k in range(500):\n        y = start[0] + k * interval\n        if y > last[0]:\n            break\n        dim = [31, 29 if is_leap(y) else 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31][month - 1]\n        dd = day\n        if dd > dim:\n            continue\n        d = (y, month, dd)\n        if d < start:\n            continue\n        if d > last:\n            break\n        out.append('%04d-%02d-%02d' % d)\n    return out\ndef check(label, actual, expected):\n    observations.append({\"check\": label, \"actual\": actual, \"expected\": expected, \"passed\": actual == expected})\nfixtures = [[('regression: leap day across 2100',\n   ['2092-02-29', 2, 29, 4, '2108-12-31'],\n   ['2092-02-29', '2096-02-29', '2104-02-29', '2108-02-29']),\n  ('leap day includes 2000',\n   ['1996-02-29', 2, 29, 1, '2004-03-01'],\n   ['1996-02-29', '2000-02-29', '2004-02-29']),\n  ('anniversary before dtstart, interval 2',\n   ['2024-06-01', 3, 15, 2, '2031-01-01'],\n   ['2026-03-15', '2028-03-15', '2030-03-15']),\n  ('until exactly on instance',\n   ['2020-07-04', 7, 4, 1, '2023-07-04'],\n   ['2020-07-04', '2021-07-04', '2022-07-04', '2023-07-04']),\n  ('until year partial', ['2020-01-10', 12, 25, 1, '2022-06-30'], ['2020-12-25', '2021-12-25']),\n  ('leap day from common year',\n   ['2023-01-01', 2, 29, 1, '2033-01-01'],\n   ['2024-02-29', '2028-02-29', '2032-02-29']),\n  ('same month earlier day',\n   ['2024-05-20', 5, 10, 1, '2027-12-31'],\n   ['2025-05-10', '2026-05-10', '2027-05-10'])],\n [('anniversary before dtstart, interval 2',\n   ['2024-06-01', 3, 15, 2, '2031-01-01'],\n   ['2026-03-15', '2028-03-15', '2030-03-15']),\n  ('until exactly on instance',\n   ['2020-07-04', 7, 4, 1, '2023-07-04'],\n   ['2020-07-04', '2021-07-04', '2022-07-04', '2023-07-04']),\n  ('until year partial', ['2020-01-10', 12, 25, 1, '2022-06-30'], ['2020-12-25', '2021-12-25']),\n  ('leap day from common year',\n   ['2023-01-01', 2, 29, 1, '2033-01-01'],\n   ['2024-02-29', '2028-02-29', '2032-02-29']),\n  ('same month earlier day',\n   ['2024-05-20', 5, 10, 1, '2027-12-31'],\n   ['2025-05-10', '2026-05-10', '2027-05-10']),\n  ('dtstart on anniversary',\n   ['2021-11-11', 11, 11, 3, '2031-11-11'],\n   ['2021-11-11', '2024-11-11', '2027-11-11', '2030-11-11']),\n  ('interval 4 leap-day from 2023', ['2023-03-01', 2, 29, 4, '2040-12-31'], []),\n  ('regression: leap day across 2100',\n   ['2092-02-29', 2, 29, 4, '2108-12-31'],\n   ['2092-02-29', '2096-02-29', '2104-02-29', '2108-02-29']),\n  ('leap day includes 2000',\n   ['1996-02-29', 2, 29, 1, '2004-03-01'],\n   ['1996-02-29', '2000-02-29', '2004-02-29'])],\n [('until year partial', ['2020-01-10', 12, 25, 1, '2022-06-30'], ['2020-12-25', '2021-12-25']),\n  ('leap day from common year',\n   ['2023-01-01', 2, 29, 1, '2033-01-01'],\n   ['2024-02-29', '2028-02-29', '2032-02-29']),\n  ('same month earlier day',\n   ['2024-05-20', 5, 10, 1, '2027-12-31'],\n   ['2025-05-10', '2026-05-10', '2027-05-10']),\n  ('dtstart on anniversary',\n   ['2021-11-11', 11, 11, 3, '2031-11-11'],\n   ['2021-11-11', '2024-11-11', '2027-11-11', '2030-11-11']),\n  ('interval 4 leap-day from 2023', ['2023-03-01', 2, 29, 4, '2040-12-31'], []),\n  ('year-end date',\n   ['2019-12-31', 12, 31, 2, '2026-01-01'],\n   ['2019-12-31', '2021-12-31', '2023-12-31', '2025-12-31']),\n  ('century non-leap interval 1', ['2098-01-01', 2, 29, 1, '2105-01-01'], ['2104-02-29']),\n  ('leap day includes 2000',\n   ['1996-02-29', 2, 29, 1, '2004-03-01'],\n   ['1996-02-29', '2000-02-29', '2004-02-29'])],\n [('same month earlier day',\n   ['2024-05-20', 5, 10, 1, '2027-12-31'],\n   ['2025-05-10', '2026-05-10', '2027-05-10']),\n  ('dtstart on anniversary',\n   ['2021-11-11', 11, 11, 3, '2031-11-11'],\n   ['2021-11-11', '2024-11-11', '2027-11-11', '2030-11-11']),\n  ('interval 4 leap-day from 2023', ['2023-03-01', 2, 29, 4, '2040-12-31'], []),\n  ('year-end date',\n   ['2019-12-31', 12, 31, 2, '2026-01-01'],\n   ['2019-12-31', '2021-12-31', '2023-12-31', '2025-12-31']),\n  ('century non-leap interval 1', ['2098-01-01', 2, 29, 1, '2105-01-01'], ['2104-02-29']),\n  ('regression: leap day across 2100',\n   ['2092-02-29', 2, 29, 4, '2108-12-31'],\n   ['2092-02-29', '2096-02-29', '2104-02-29', '2108-02-29']),\n  ('leap day includes 2000',\n   ['1996-02-29', 2, 29, 1, '2004-03-01'],\n   ['1996-02-29', '2000-02-29', '2004-02-29'])],\n [('interval 4 leap-day from 2023', ['2023-03-01', 2, 29, 4, '2040-12-31'], []),\n  ('year-end date',\n   ['2019-12-31', 12, 31, 2, '2026-01-01'],\n   ['2019-12-31', '2021-12-31', '2023-12-31', '2025-12-31']),\n  ('century non-leap interval 1', ['2098-01-01', 2, 29, 1, '2105-01-01'], ['2104-02-29']),\n  ('regression: leap day across 2100',\n   ['2092-02-29', 2, 29, 4, '2108-12-31'],\n   ['2092-02-29', '2096-02-29', '2104-02-29', '2108-02-29']),\n  ('leap day includes 2000',\n   ['1996-02-29', 2, 29, 1, '2004-03-01'],\n   ['1996-02-29', '2000-02-29', '2004-02-29']),\n  ('anniversary before dtstart, interval 2',\n   ['2024-06-01', 3, 15, 2, '2031-01-01'],\n   ['2026-03-15', '2028-03-15', '2030-03-15']),\n  ('until exactly on instance',\n   ['2020-07-04', 7, 4, 1, '2023-07-04'],\n   ['2020-07-04', '2021-07-04', '2022-07-04', '2023-07-04'])]]\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":"Stipulated, bounded recurrence-expansion model evaluated offline on explicit fixtures; it is not a complete iCalendar implementation and makes no claim of standards conformance. 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-calendar-recurrence-rules-yearly-month-day-leap-rule","generated_at":"2026-09-29T14:49:20.977825+00:00","license":"CC0-1.0","python":"3.12.14","seed":1,"split":"open-access"},"relevance":"Recurring calendar series are expanded into concrete instances for display, reminders and conflict checks.","repair":"At the leap rule decision use `y % 4 == 0 and (y % 100 != 0 or y % 400 == 0)`, leaving the other decision sites of the model unchanged.","root_cause":"The leap-year test ignores the century exception.","sha256":"4cfcbb98ed68c01ba228a8250b79b78e9ff1c7f3bf78b49977053f2fa73c3d4c","title":"Yearly BYMONTH/BYMONTHDAY with leap-day skipping: leap rule · case 01","variant":1,"variant_policy":"Five numbered records share a model and may reuse boundary fixtures.","verification":{"attempt":{"elapsed_ms":41.173,"exit_code":1,"observations":[{"actual":["2092-02-29","2096-02-29","2104-02-29","2108-02-29"],"check":"regression: leap day across 2100","expected":["2092-02-29","2096-02-29","2104-02-29","2108-02-29"],"passed":true},{"actual":["1996-02-29","2004-02-29"],"check":"leap day includes 2000","expected":["1996-02-29","2000-02-29","2004-02-29"],"passed":false},{"actual":["2026-03-15","2028-03-15","2030-03-15"],"check":"anniversary before dtstart, interval 2","expected":["2026-03-15","2028-03-15","2030-03-15"],"passed":true},{"actual":["2020-07-04","2021-07-04","2022-07-04","2023-07-04"],"check":"until exactly on instance","expected":["2020-07-04","2021-07-04","2022-07-04","2023-07-04"],"passed":true},{"actual":["2020-12-25","2021-12-25"],"check":"until year partial","expected":["2020-12-25","2021-12-25"],"passed":true},{"actual":["2024-02-29","2028-02-29","2032-02-29"],"check":"leap day from common year","expected":["2024-02-29","2028-02-29","2032-02-29"],"passed":true},{"actual":["2025-05-10","2026-05-10","2027-05-10"],"check":"same month earlier day","expected":["2025-05-10","2026-05-10","2027-05-10"],"passed":true}],"passed":false,"stderr":"","stdout":"{\"observations\": [{\"check\": \"regression: leap day across 2100\", \"actual\": [\"2092-02-29\", \"2096-02-29\", \"2104-02-29\", \"2108-02-29\"], \"expected\": [\"2092-02-29\", \"2096-02-29\", \"2104-02-29\", \"2108-02-29\"], \"passed\": true}, {\"check\": \"leap day includes 2000\", \"actual\": [\"1996-02-29\", \"2004-02-29\"], \"expected\": [\"1996-02-29\", \"2000-02-29\", \"2004-02-29\"], \"passed\": false}, {\"check\": \"anniversary before dtstart, interval 2\", \"actual\": [\"2026-03-15\", \"2028-03-15\", \"2030-03-15\"], \"expected\": [\"2026-03-15\", \"2028-03-15\", \"2030-03-15\"], \"passed\": true}, {\"check\": \"until exactly on instance\", \"actual\": [\"2020-07-04\", \"2021-07-04\", \"2022-07-04\", \"2023-07-04\"], \"expected\": [\"2020-07-04\", \"2021-07-04\", \"2022-07-04\", \"2023-07-04\"], \"passed\": true}, {\"check\": \"until year partial\", \"actual\": [\"2020-12-25\", \"2021-12-25\"], \"expected\": [\"2020-12-25\", \"2021-12-25\"], \"passed\": true}, {\"check\": \"leap day from common year\", \"actual\": [\"2024-02-29\", \"2028-02-29\", \"2032-02-29\"], \"expected\": [\"2024-02-29\", \"2028-02-29\", \"2032-02-29\"], \"passed\": true}, {\"check\": \"same month earlier day\", \"actual\": [\"2025-05-10\", \"2026-05-10\", \"2027-05-10\"], \"expected\": [\"2025-05-10\", \"2026-05-10\", \"2027-05-10\"], \"passed\": true}], \"passed\": false}\n"},"broken":{"elapsed_ms":38.615,"exit_code":1,"observations":[{"actual":["2092-02-29","2096-02-29","2100-02-29","2104-02-29","2108-02-29"],"check":"regression: leap day across 2100","expected":["2092-02-29","2096-02-29","2104-02-29","2108-02-29"],"passed":false},{"actual":["1996-02-29","2000-02-29","2004-02-29"],"check":"leap day includes 2000","expected":["1996-02-29","2000-02-29","2004-02-29"],"passed":true},{"actual":["2026-03-15","2028-03-15","2030-03-15"],"check":"anniversary before dtstart, interval 2","expected":["2026-03-15","2028-03-15","2030-03-15"],"passed":true},{"actual":["2020-07-04","2021-07-04","2022-07-04","2023-07-04"],"check":"until exactly on instance","expected":["2020-07-04","2021-07-04","2022-07-04","2023-07-04"],"passed":true},{"actual":["2020-12-25","2021-12-25"],"check":"until year partial","expected":["2020-12-25","2021-12-25"],"passed":true},{"actual":["2024-02-29","2028-02-29","2032-02-29"],"check":"leap day from common year","expected":["2024-02-29","2028-02-29","2032-02-29"],"passed":true},{"actual":["2025-05-10","2026-05-10","2027-05-10"],"check":"same month earlier day","expected":["2025-05-10","2026-05-10","2027-05-10"],"passed":true}],"passed":false,"stderr":"","stdout":"{\"observations\": [{\"check\": \"regression: leap day across 2100\", \"actual\": [\"2092-02-29\", \"2096-02-29\", \"2100-02-29\", \"2104-02-29\", \"2108-02-29\"], \"expected\": [\"2092-02-29\", \"2096-02-29\", \"2104-02-29\", \"2108-02-29\"], \"passed\": false}, {\"check\": \"leap day includes 2000\", \"actual\": [\"1996-02-29\", \"2000-02-29\", \"2004-02-29\"], \"expected\": [\"1996-02-29\", \"2000-02-29\", \"2004-02-29\"], \"passed\": true}, {\"check\": \"anniversary before dtstart, interval 2\", \"actual\": [\"2026-03-15\", \"2028-03-15\", \"2030-03-15\"], \"expected\": [\"2026-03-15\", \"2028-03-15\", \"2030-03-15\"], \"passed\": true}, {\"check\": \"until exactly on instance\", \"actual\": [\"2020-07-04\", \"2021-07-04\", \"2022-07-04\", \"2023-07-04\"], \"expected\": [\"2020-07-04\", \"2021-07-04\", \"2022-07-04\", \"2023-07-04\"], \"passed\": true}, {\"check\": \"until year partial\", \"actual\": [\"2020-12-25\", \"2021-12-25\"], \"expected\": [\"2020-12-25\", \"2021-12-25\"], \"passed\": true}, {\"check\": \"leap day from common year\", \"actual\": [\"2024-02-29\", \"2028-02-29\", \"2032-02-29\"], \"expected\": [\"2024-02-29\", \"2028-02-29\", \"2032-02-29\"], \"passed\": true}, {\"check\": \"same month earlier day\", \"actual\": [\"2025-05-10\", \"2026-05-10\", \"2027-05-10\"], \"expected\": [\"2025-05-10\", \"2026-05-10\", \"2027-05-10\"], \"passed\": true}], \"passed\": false}\n"},"fixed":{"elapsed_ms":41.891,"exit_code":0,"observations":[{"actual":["2092-02-29","2096-02-29","2104-02-29","2108-02-29"],"check":"regression: leap day across 2100","expected":["2092-02-29","2096-02-29","2104-02-29","2108-02-29"],"passed":true},{"actual":["1996-02-29","2000-02-29","2004-02-29"],"check":"leap day includes 2000","expected":["1996-02-29","2000-02-29","2004-02-29"],"passed":true},{"actual":["2026-03-15","2028-03-15","2030-03-15"],"check":"anniversary before dtstart, interval 2","expected":["2026-03-15","2028-03-15","2030-03-15"],"passed":true},{"actual":["2020-07-04","2021-07-04","2022-07-04","2023-07-04"],"check":"until exactly on instance","expected":["2020-07-04","2021-07-04","2022-07-04","2023-07-04"],"passed":true},{"actual":["2020-12-25","2021-12-25"],"check":"until year partial","expected":["2020-12-25","2021-12-25"],"passed":true},{"actual":["2024-02-29","2028-02-29","2032-02-29"],"check":"leap day from common year","expected":["2024-02-29","2028-02-29","2032-02-29"],"passed":true},{"actual":["2025-05-10","2026-05-10","2027-05-10"],"check":"same month earlier day","expected":["2025-05-10","2026-05-10","2027-05-10"],"passed":true}],"passed":true,"stderr":"","stdout":"{\"observations\": [{\"check\": \"regression: leap day across 2100\", \"actual\": [\"2092-02-29\", \"2096-02-29\", \"2104-02-29\", \"2108-02-29\"], \"expected\": [\"2092-02-29\", \"2096-02-29\", \"2104-02-29\", \"2108-02-29\"], \"passed\": true}, {\"check\": \"leap day includes 2000\", \"actual\": [\"1996-02-29\", \"2000-02-29\", \"2004-02-29\"], \"expected\": [\"1996-02-29\", \"2000-02-29\", \"2004-02-29\"], \"passed\": true}, {\"check\": \"anniversary before dtstart, interval 2\", \"actual\": [\"2026-03-15\", \"2028-03-15\", \"2030-03-15\"], \"expected\": [\"2026-03-15\", \"2028-03-15\", \"2030-03-15\"], \"passed\": true}, {\"check\": \"until exactly on instance\", \"actual\": [\"2020-07-04\", \"2021-07-04\", \"2022-07-04\", \"2023-07-04\"], \"expected\": [\"2020-07-04\", \"2021-07-04\", \"2022-07-04\", \"2023-07-04\"], \"passed\": true}, {\"check\": \"until year partial\", \"actual\": [\"2020-12-25\", \"2021-12-25\"], \"expected\": [\"2020-12-25\", \"2021-12-25\"], \"passed\": true}, {\"check\": \"leap day from common year\", \"actual\": [\"2024-02-29\", \"2028-02-29\", \"2032-02-29\"], \"expected\": [\"2024-02-29\", \"2028-02-29\", \"2032-02-29\"], \"passed\": true}, {\"check\": \"same month earlier day\", \"actual\": [\"2025-05-10\", \"2026-05-10\", \"2027-05-10\"], \"expected\": [\"2025-05-10\", \"2026-05-10\", \"2027-05-10\"], \"passed\": true}], \"passed\": true}\n"}},"verified":true,"visibility":"public"}