{"abstract":"An instance falling exactly on UNTIL is missing.","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.","contract_signature":"dtstart, month, day, interval, until","evaluation_group":"w2-calendar-recurrence-rules-yearly-month-day","failed_approach":"The partial repair `d[0] >= last[0]` compares years only and drops every instance in the UNTIL year.","family":"w2-calendar-recurrence-rules-yearly-month-day-until-inclusive","id":"FA-76961","implementations":{"attempt":{"sha256":"24e3444185ff1fcfeb701f4508fa74f1209324c9f8283751580831e47e703e34","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[0] >= last[0]:\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 [('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  ('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 [('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  ('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 [('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":"971274325396837da32171f5587e706d2f1437ea783f1f3c43ba204da0c8123f","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 [('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  ('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 [('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  ('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 [('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-until-inclusive","generated_at":"2026-09-29T14:49:21.154265+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.","root_cause":"UNTIL is treated as exclusive.","sha256":"802ff019b650d5b383c680afd50b2e95e21b1519cb20867e634de2d9ed2108a5","title":"Yearly BYMONTH/BYMONTHDAY with leap-day skipping: until inclusive · case 01","variant":1,"variant_policy":"Five numbered records share a model and may reuse boundary fixtures.","verified":true,"visibility":"public","verification":{"attempt":{"elapsed_ms":38.868,"exit_code":1,"observations":[{"actual":["2092-02-29","2096-02-29","2104-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"],"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"],"check":"until exactly on instance","expected":["2020-07-04","2021-07-04","2022-07-04","2023-07-04"],"passed":false},{"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"],"check":"same month earlier day","expected":["2025-05-10","2026-05-10","2027-05-10"],"passed":false}],"passed":false,"stderr":"","stdout":"{\"observations\": [{\"check\": \"regression: leap day across 2100\", \"actual\": [\"2092-02-29\", \"2096-02-29\", \"2104-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\"], \"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\"], \"expected\": [\"2020-07-04\", \"2021-07-04\", \"2022-07-04\", \"2023-07-04\"], \"passed\": false}, {\"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\"], \"expected\": [\"2025-05-10\", \"2026-05-10\", \"2027-05-10\"], \"passed\": false}], \"passed\": false}\n"},"broken":{"elapsed_ms":42.52,"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","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"],"check":"until exactly on instance","expected":["2020-07-04","2021-07-04","2022-07-04","2023-07-04"],"passed":false},{"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\", \"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\"], \"expected\": [\"2020-07-04\", \"2021-07-04\", \"2022-07-04\", \"2023-07-04\"], \"passed\": false}, {\"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"}},"member_only":{"stages":["fixed"],"fields":["implementations.fixed","verification.fixed","harness","repair"],"note":"The verified repair, its recorded checks, the repair description, and the scoring harness are available to members."}}