{"abstract":"An EXDATE matching an RDATE leaves the RDATE on the calendar.","category":"Calendar recurrence rules","checks":7,"contract":"All-day series: the rule yields exactly count instances dtstart + k*interval days (COUNT counts rule instances before exclusions; RDATEs never consume COUNT). The instance set is rule plus RDATE minus EXDATE; EXDATE also removes RDATEs. EXDATE values may carry a time part (YYYY-MM-DDTHH:MM:SS) and then exclude their calendar date. Return the unique dates sorted ascending.","evaluation_group":"w2-calendar-recurrence-rules-rdate-exdate-merge","failed_approach":"The partial repair `[d for d in rule if d not in excluded] + [d for d in extra if d not in rule]` avoids RDATE duplicates of rule dates but still does not exclude RDATEs.","family":"w2-calendar-recurrence-rules-rdate-exdate-merge-exdate-scope","id":"FA-76981","implementations":{"attempt":{"sha256":"8775dd54d4371ca43fb60aef70c1490be30c21518e273bd96803d017d9fdd9c1","source":"\"\"\"Failure Map reference implementation. Python standard library only.\"\"\"\nimport json\nimport datetime as dt\nimport calendar\nN = 1\nobservations = []\ndef solve(dtstart, interval, count, rdates, exdates):\n    start = dt.date.fromisoformat(dtstart)\n    excluded = {dt.date.fromisoformat(x[:10]) for x in exdates}\n    rule = [start + dt.timedelta(days=k * interval) for k in range(count)]\n    extra = [dt.date.fromisoformat(x) for x in rdates]\n    rule = rule\n    merged = [d for d in rule if d not in excluded] + [d for d in extra if d not in rule]\n    result = sorted(set(merged))\n    return [d.isoformat() for d in result]\ndef check(label, actual, expected):\n    observations.append({\"check\": label, \"actual\": actual, \"expected\": expected, \"passed\": actual == expected})\nfixtures = [[('regression: exdate does not extend count',\n   ['2024-03-01', 1, 5, [], ['2024-03-03']],\n   ['2024-03-01', '2024-03-02', '2024-03-04', '2024-03-05']),\n  ('timed exdate',\n   ['2024-03-01', 2, 4, [], ['2024-03-05T09:30:00']],\n   ['2024-03-01', '2024-03-03', '2024-03-07']),\n  ('midnight exdate', ['2024-03-01', 1, 3, [], ['2024-03-02T00:00:00']], ['2024-03-01', '2024-03-03']),\n  ('rdate equal to rule date',\n   ['2024-01-01', 7, 3, ['2024-01-08'], []],\n   ['2024-01-01', '2024-01-08', '2024-01-15']),\n  ('rdate before dtstart',\n   ['2024-01-10', 1, 3, ['2024-01-02'], []],\n   ['2024-01-02', '2024-01-10', '2024-01-11', '2024-01-12']),\n  ('exdate removes rdate',\n   ['2024-01-01', 1, 3, ['2024-02-01'], ['2024-02-01']],\n   ['2024-01-01', '2024-01-02', '2024-01-03']),\n  ('exdate outside rule',\n   ['2024-01-01', 3, 3, [], ['2024-01-02']],\n   ['2024-01-01', '2024-01-04', '2024-01-07'])],\n [('midnight exdate', ['2024-03-01', 1, 3, [], ['2024-03-02T00:00:00']], ['2024-03-01', '2024-03-03']),\n  ('rdate equal to rule date',\n   ['2024-01-01', 7, 3, ['2024-01-08'], []],\n   ['2024-01-01', '2024-01-08', '2024-01-15']),\n  ('rdate before dtstart',\n   ['2024-01-10', 1, 3, ['2024-01-02'], []],\n   ['2024-01-02', '2024-01-10', '2024-01-11', '2024-01-12']),\n  ('exdate removes rdate',\n   ['2024-01-01', 1, 3, ['2024-02-01'], ['2024-02-01']],\n   ['2024-01-01', '2024-01-02', '2024-01-03']),\n  ('exdate outside rule',\n   ['2024-01-01', 3, 3, [], ['2024-01-02']],\n   ['2024-01-01', '2024-01-04', '2024-01-07']),\n  ('rdate between instances',\n   ['2024-05-01', 10, 3, ['2024-05-05', '2024-05-30'], ['2024-05-11']],\n   ['2024-05-01', '2024-05-05', '2024-05-21', '2024-05-30']),\n  ('count zero with rdate', ['2024-01-01', 1, 0, ['2024-01-03'], []], ['2024-01-03'])],\n [('rdate before dtstart',\n   ['2024-01-10', 1, 3, ['2024-01-02'], []],\n   ['2024-01-02', '2024-01-10', '2024-01-11', '2024-01-12']),\n  ('exdate removes rdate',\n   ['2024-01-01', 1, 3, ['2024-02-01'], ['2024-02-01']],\n   ['2024-01-01', '2024-01-02', '2024-01-03']),\n  ('exdate outside rule',\n   ['2024-01-01', 3, 3, [], ['2024-01-02']],\n   ['2024-01-01', '2024-01-04', '2024-01-07']),\n  ('rdate between instances',\n   ['2024-05-01', 10, 3, ['2024-05-05', '2024-05-30'], ['2024-05-11']],\n   ['2024-05-01', '2024-05-05', '2024-05-21', '2024-05-30']),\n  ('count zero with rdate', ['2024-01-01', 1, 0, ['2024-01-03'], []], ['2024-01-03']),\n  ('duplicate rdates and timed exdate',\n   ['2024-02-27', 1, 4, ['2024-03-05', '2024-03-05'], ['2024-02-28T12:00:00']],\n   ['2024-02-27', '2024-02-29', '2024-03-01', '2024-03-05']),\n  ('all excluded', ['2024-07-01', 1, 2, [], ['2024-07-01', '2024-07-02']], [])],\n [('exdate outside rule',\n   ['2024-01-01', 3, 3, [], ['2024-01-02']],\n   ['2024-01-01', '2024-01-04', '2024-01-07']),\n  ('rdate between instances',\n   ['2024-05-01', 10, 3, ['2024-05-05', '2024-05-30'], ['2024-05-11']],\n   ['2024-05-01', '2024-05-05', '2024-05-21', '2024-05-30']),\n  ('count zero with rdate', ['2024-01-01', 1, 0, ['2024-01-03'], []], ['2024-01-03']),\n  ('duplicate rdates and timed exdate',\n   ['2024-02-27', 1, 4, ['2024-03-05', '2024-03-05'], ['2024-02-28T12:00:00']],\n   ['2024-02-27', '2024-02-29', '2024-03-01', '2024-03-05']),\n  ('all excluded', ['2024-07-01', 1, 2, [], ['2024-07-01', '2024-07-02']], []),\n  ('regression: exdate does not extend count',\n   ['2024-03-01', 1, 5, [], ['2024-03-03']],\n   ['2024-03-01', '2024-03-02', '2024-03-04', '2024-03-05']),\n  ('timed exdate',\n   ['2024-03-01', 2, 4, [], ['2024-03-05T09:30:00']],\n   ['2024-03-01', '2024-03-03', '2024-03-07']),\n  ('exdate removes rdate',\n   ['2024-01-01', 1, 3, ['2024-02-01'], ['2024-02-01']],\n   ['2024-01-01', '2024-01-02', '2024-01-03'])],\n [('count zero with rdate', ['2024-01-01', 1, 0, ['2024-01-03'], []], ['2024-01-03']),\n  ('duplicate rdates and timed exdate',\n   ['2024-02-27', 1, 4, ['2024-03-05', '2024-03-05'], ['2024-02-28T12:00:00']],\n   ['2024-02-27', '2024-02-29', '2024-03-01', '2024-03-05']),\n  ('all excluded', ['2024-07-01', 1, 2, [], ['2024-07-01', '2024-07-02']], []),\n  ('regression: exdate does not extend count',\n   ['2024-03-01', 1, 5, [], ['2024-03-03']],\n   ['2024-03-01', '2024-03-02', '2024-03-04', '2024-03-05']),\n  ('timed exdate',\n   ['2024-03-01', 2, 4, [], ['2024-03-05T09:30:00']],\n   ['2024-03-01', '2024-03-03', '2024-03-07']),\n  ('midnight exdate', ['2024-03-01', 1, 3, [], ['2024-03-02T00:00:00']], ['2024-03-01', '2024-03-03']),\n  ('rdate equal to rule date',\n   ['2024-01-01', 7, 3, ['2024-01-08'], []],\n   ['2024-01-01', '2024-01-08', '2024-01-15']),\n  ('exdate removes rdate',\n   ['2024-01-01', 1, 3, ['2024-02-01'], ['2024-02-01']],\n   ['2024-01-01', '2024-01-02', '2024-01-03'])]]\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":"203b9e66b748b79f5491912a4d62c7be3d1fe6ffedfabaea08f37ac153326c81","source":"\"\"\"Failure Map reference implementation. Python standard library only.\"\"\"\nimport json\nimport datetime as dt\nimport calendar\nN = 1\nobservations = []\ndef solve(dtstart, interval, count, rdates, exdates):\n    start = dt.date.fromisoformat(dtstart)\n    excluded = {dt.date.fromisoformat(x[:10]) for x in exdates}\n    rule = [start + dt.timedelta(days=k * interval) for k in range(count)]\n    extra = [dt.date.fromisoformat(x) for x in rdates]\n    rule = rule\n    merged = [d for d in rule if d not in excluded] + extra\n    result = sorted(set(merged))\n    return [d.isoformat() for d in result]\ndef check(label, actual, expected):\n    observations.append({\"check\": label, \"actual\": actual, \"expected\": expected, \"passed\": actual == expected})\nfixtures = [[('regression: exdate does not extend count',\n   ['2024-03-01', 1, 5, [], ['2024-03-03']],\n   ['2024-03-01', '2024-03-02', '2024-03-04', '2024-03-05']),\n  ('timed exdate',\n   ['2024-03-01', 2, 4, [], ['2024-03-05T09:30:00']],\n   ['2024-03-01', '2024-03-03', '2024-03-07']),\n  ('midnight exdate', ['2024-03-01', 1, 3, [], ['2024-03-02T00:00:00']], ['2024-03-01', '2024-03-03']),\n  ('rdate equal to rule date',\n   ['2024-01-01', 7, 3, ['2024-01-08'], []],\n   ['2024-01-01', '2024-01-08', '2024-01-15']),\n  ('rdate before dtstart',\n   ['2024-01-10', 1, 3, ['2024-01-02'], []],\n   ['2024-01-02', '2024-01-10', '2024-01-11', '2024-01-12']),\n  ('exdate removes rdate',\n   ['2024-01-01', 1, 3, ['2024-02-01'], ['2024-02-01']],\n   ['2024-01-01', '2024-01-02', '2024-01-03']),\n  ('exdate outside rule',\n   ['2024-01-01', 3, 3, [], ['2024-01-02']],\n   ['2024-01-01', '2024-01-04', '2024-01-07'])],\n [('midnight exdate', ['2024-03-01', 1, 3, [], ['2024-03-02T00:00:00']], ['2024-03-01', '2024-03-03']),\n  ('rdate equal to rule date',\n   ['2024-01-01', 7, 3, ['2024-01-08'], []],\n   ['2024-01-01', '2024-01-08', '2024-01-15']),\n  ('rdate before dtstart',\n   ['2024-01-10', 1, 3, ['2024-01-02'], []],\n   ['2024-01-02', '2024-01-10', '2024-01-11', '2024-01-12']),\n  ('exdate removes rdate',\n   ['2024-01-01', 1, 3, ['2024-02-01'], ['2024-02-01']],\n   ['2024-01-01', '2024-01-02', '2024-01-03']),\n  ('exdate outside rule',\n   ['2024-01-01', 3, 3, [], ['2024-01-02']],\n   ['2024-01-01', '2024-01-04', '2024-01-07']),\n  ('rdate between instances',\n   ['2024-05-01', 10, 3, ['2024-05-05', '2024-05-30'], ['2024-05-11']],\n   ['2024-05-01', '2024-05-05', '2024-05-21', '2024-05-30']),\n  ('count zero with rdate', ['2024-01-01', 1, 0, ['2024-01-03'], []], ['2024-01-03'])],\n [('rdate before dtstart',\n   ['2024-01-10', 1, 3, ['2024-01-02'], []],\n   ['2024-01-02', '2024-01-10', '2024-01-11', '2024-01-12']),\n  ('exdate removes rdate',\n   ['2024-01-01', 1, 3, ['2024-02-01'], ['2024-02-01']],\n   ['2024-01-01', '2024-01-02', '2024-01-03']),\n  ('exdate outside rule',\n   ['2024-01-01', 3, 3, [], ['2024-01-02']],\n   ['2024-01-01', '2024-01-04', '2024-01-07']),\n  ('rdate between instances',\n   ['2024-05-01', 10, 3, ['2024-05-05', '2024-05-30'], ['2024-05-11']],\n   ['2024-05-01', '2024-05-05', '2024-05-21', '2024-05-30']),\n  ('count zero with rdate', ['2024-01-01', 1, 0, ['2024-01-03'], []], ['2024-01-03']),\n  ('duplicate rdates and timed exdate',\n   ['2024-02-27', 1, 4, ['2024-03-05', '2024-03-05'], ['2024-02-28T12:00:00']],\n   ['2024-02-27', '2024-02-29', '2024-03-01', '2024-03-05']),\n  ('all excluded', ['2024-07-01', 1, 2, [], ['2024-07-01', '2024-07-02']], [])],\n [('exdate outside rule',\n   ['2024-01-01', 3, 3, [], ['2024-01-02']],\n   ['2024-01-01', '2024-01-04', '2024-01-07']),\n  ('rdate between instances',\n   ['2024-05-01', 10, 3, ['2024-05-05', '2024-05-30'], ['2024-05-11']],\n   ['2024-05-01', '2024-05-05', '2024-05-21', '2024-05-30']),\n  ('count zero with rdate', ['2024-01-01', 1, 0, ['2024-01-03'], []], ['2024-01-03']),\n  ('duplicate rdates and timed exdate',\n   ['2024-02-27', 1, 4, ['2024-03-05', '2024-03-05'], ['2024-02-28T12:00:00']],\n   ['2024-02-27', '2024-02-29', '2024-03-01', '2024-03-05']),\n  ('all excluded', ['2024-07-01', 1, 2, [], ['2024-07-01', '2024-07-02']], []),\n  ('regression: exdate does not extend count',\n   ['2024-03-01', 1, 5, [], ['2024-03-03']],\n   ['2024-03-01', '2024-03-02', '2024-03-04', '2024-03-05']),\n  ('timed exdate',\n   ['2024-03-01', 2, 4, [], ['2024-03-05T09:30:00']],\n   ['2024-03-01', '2024-03-03', '2024-03-07']),\n  ('exdate removes rdate',\n   ['2024-01-01', 1, 3, ['2024-02-01'], ['2024-02-01']],\n   ['2024-01-01', '2024-01-02', '2024-01-03'])],\n [('count zero with rdate', ['2024-01-01', 1, 0, ['2024-01-03'], []], ['2024-01-03']),\n  ('duplicate rdates and timed exdate',\n   ['2024-02-27', 1, 4, ['2024-03-05', '2024-03-05'], ['2024-02-28T12:00:00']],\n   ['2024-02-27', '2024-02-29', '2024-03-01', '2024-03-05']),\n  ('all excluded', ['2024-07-01', 1, 2, [], ['2024-07-01', '2024-07-02']], []),\n  ('regression: exdate does not extend count',\n   ['2024-03-01', 1, 5, [], ['2024-03-03']],\n   ['2024-03-01', '2024-03-02', '2024-03-04', '2024-03-05']),\n  ('timed exdate',\n   ['2024-03-01', 2, 4, [], ['2024-03-05T09:30:00']],\n   ['2024-03-01', '2024-03-03', '2024-03-07']),\n  ('midnight exdate', ['2024-03-01', 1, 3, [], ['2024-03-02T00:00:00']], ['2024-03-01', '2024-03-03']),\n  ('rdate equal to rule date',\n   ['2024-01-01', 7, 3, ['2024-01-08'], []],\n   ['2024-01-01', '2024-01-08', '2024-01-15']),\n  ('exdate removes rdate',\n   ['2024-01-01', 1, 3, ['2024-02-01'], ['2024-02-01']],\n   ['2024-01-01', '2024-01-02', '2024-01-03'])]]\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":"8ccb0df371148241cc9cb68cf8bb6d6396d8e3b76aa9111ecceacbc76e5f4cee","source":"\"\"\"Failure Map reference implementation. Python standard library only.\"\"\"\nimport json\nimport datetime as dt\nimport calendar\nN = 1\nobservations = []\ndef solve(dtstart, interval, count, rdates, exdates):\n    start = dt.date.fromisoformat(dtstart)\n    excluded = {dt.date.fromisoformat(x[:10]) for x in exdates}\n    rule = [start + dt.timedelta(days=k * interval) for k in range(count)]\n    extra = [dt.date.fromisoformat(x) for x in rdates]\n    rule = rule\n    merged = [d for d in rule + extra if d not in excluded]\n    result = sorted(set(merged))\n    return [d.isoformat() for d in result]\ndef check(label, actual, expected):\n    observations.append({\"check\": label, \"actual\": actual, \"expected\": expected, \"passed\": actual == expected})\nfixtures = [[('regression: exdate does not extend count',\n   ['2024-03-01', 1, 5, [], ['2024-03-03']],\n   ['2024-03-01', '2024-03-02', '2024-03-04', '2024-03-05']),\n  ('timed exdate',\n   ['2024-03-01', 2, 4, [], ['2024-03-05T09:30:00']],\n   ['2024-03-01', '2024-03-03', '2024-03-07']),\n  ('midnight exdate', ['2024-03-01', 1, 3, [], ['2024-03-02T00:00:00']], ['2024-03-01', '2024-03-03']),\n  ('rdate equal to rule date',\n   ['2024-01-01', 7, 3, ['2024-01-08'], []],\n   ['2024-01-01', '2024-01-08', '2024-01-15']),\n  ('rdate before dtstart',\n   ['2024-01-10', 1, 3, ['2024-01-02'], []],\n   ['2024-01-02', '2024-01-10', '2024-01-11', '2024-01-12']),\n  ('exdate removes rdate',\n   ['2024-01-01', 1, 3, ['2024-02-01'], ['2024-02-01']],\n   ['2024-01-01', '2024-01-02', '2024-01-03']),\n  ('exdate outside rule',\n   ['2024-01-01', 3, 3, [], ['2024-01-02']],\n   ['2024-01-01', '2024-01-04', '2024-01-07'])],\n [('midnight exdate', ['2024-03-01', 1, 3, [], ['2024-03-02T00:00:00']], ['2024-03-01', '2024-03-03']),\n  ('rdate equal to rule date',\n   ['2024-01-01', 7, 3, ['2024-01-08'], []],\n   ['2024-01-01', '2024-01-08', '2024-01-15']),\n  ('rdate before dtstart',\n   ['2024-01-10', 1, 3, ['2024-01-02'], []],\n   ['2024-01-02', '2024-01-10', '2024-01-11', '2024-01-12']),\n  ('exdate removes rdate',\n   ['2024-01-01', 1, 3, ['2024-02-01'], ['2024-02-01']],\n   ['2024-01-01', '2024-01-02', '2024-01-03']),\n  ('exdate outside rule',\n   ['2024-01-01', 3, 3, [], ['2024-01-02']],\n   ['2024-01-01', '2024-01-04', '2024-01-07']),\n  ('rdate between instances',\n   ['2024-05-01', 10, 3, ['2024-05-05', '2024-05-30'], ['2024-05-11']],\n   ['2024-05-01', '2024-05-05', '2024-05-21', '2024-05-30']),\n  ('count zero with rdate', ['2024-01-01', 1, 0, ['2024-01-03'], []], ['2024-01-03'])],\n [('rdate before dtstart',\n   ['2024-01-10', 1, 3, ['2024-01-02'], []],\n   ['2024-01-02', '2024-01-10', '2024-01-11', '2024-01-12']),\n  ('exdate removes rdate',\n   ['2024-01-01', 1, 3, ['2024-02-01'], ['2024-02-01']],\n   ['2024-01-01', '2024-01-02', '2024-01-03']),\n  ('exdate outside rule',\n   ['2024-01-01', 3, 3, [], ['2024-01-02']],\n   ['2024-01-01', '2024-01-04', '2024-01-07']),\n  ('rdate between instances',\n   ['2024-05-01', 10, 3, ['2024-05-05', '2024-05-30'], ['2024-05-11']],\n   ['2024-05-01', '2024-05-05', '2024-05-21', '2024-05-30']),\n  ('count zero with rdate', ['2024-01-01', 1, 0, ['2024-01-03'], []], ['2024-01-03']),\n  ('duplicate rdates and timed exdate',\n   ['2024-02-27', 1, 4, ['2024-03-05', '2024-03-05'], ['2024-02-28T12:00:00']],\n   ['2024-02-27', '2024-02-29', '2024-03-01', '2024-03-05']),\n  ('all excluded', ['2024-07-01', 1, 2, [], ['2024-07-01', '2024-07-02']], [])],\n [('exdate outside rule',\n   ['2024-01-01', 3, 3, [], ['2024-01-02']],\n   ['2024-01-01', '2024-01-04', '2024-01-07']),\n  ('rdate between instances',\n   ['2024-05-01', 10, 3, ['2024-05-05', '2024-05-30'], ['2024-05-11']],\n   ['2024-05-01', '2024-05-05', '2024-05-21', '2024-05-30']),\n  ('count zero with rdate', ['2024-01-01', 1, 0, ['2024-01-03'], []], ['2024-01-03']),\n  ('duplicate rdates and timed exdate',\n   ['2024-02-27', 1, 4, ['2024-03-05', '2024-03-05'], ['2024-02-28T12:00:00']],\n   ['2024-02-27', '2024-02-29', '2024-03-01', '2024-03-05']),\n  ('all excluded', ['2024-07-01', 1, 2, [], ['2024-07-01', '2024-07-02']], []),\n  ('regression: exdate does not extend count',\n   ['2024-03-01', 1, 5, [], ['2024-03-03']],\n   ['2024-03-01', '2024-03-02', '2024-03-04', '2024-03-05']),\n  ('timed exdate',\n   ['2024-03-01', 2, 4, [], ['2024-03-05T09:30:00']],\n   ['2024-03-01', '2024-03-03', '2024-03-07']),\n  ('exdate removes rdate',\n   ['2024-01-01', 1, 3, ['2024-02-01'], ['2024-02-01']],\n   ['2024-01-01', '2024-01-02', '2024-01-03'])],\n [('count zero with rdate', ['2024-01-01', 1, 0, ['2024-01-03'], []], ['2024-01-03']),\n  ('duplicate rdates and timed exdate',\n   ['2024-02-27', 1, 4, ['2024-03-05', '2024-03-05'], ['2024-02-28T12:00:00']],\n   ['2024-02-27', '2024-02-29', '2024-03-01', '2024-03-05']),\n  ('all excluded', ['2024-07-01', 1, 2, [], ['2024-07-01', '2024-07-02']], []),\n  ('regression: exdate does not extend count',\n   ['2024-03-01', 1, 5, [], ['2024-03-03']],\n   ['2024-03-01', '2024-03-02', '2024-03-04', '2024-03-05']),\n  ('timed exdate',\n   ['2024-03-01', 2, 4, [], ['2024-03-05T09:30:00']],\n   ['2024-03-01', '2024-03-03', '2024-03-07']),\n  ('midnight exdate', ['2024-03-01', 1, 3, [], ['2024-03-02T00:00:00']], ['2024-03-01', '2024-03-03']),\n  ('rdate equal to rule date',\n   ['2024-01-01', 7, 3, ['2024-01-08'], []],\n   ['2024-01-01', '2024-01-08', '2024-01-15']),\n  ('exdate removes rdate',\n   ['2024-01-01', 1, 3, ['2024-02-01'], ['2024-02-01']],\n   ['2024-01-01', '2024-01-02', '2024-01-03'])]]\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-rdate-exdate-merge-exdate-scope","generated_at":"2026-09-29T14:49:21.277480+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 exdate scope decision use `[d for d in rule + extra if d not in excluded]`, leaving the other decision sites of the model unchanged.","root_cause":"EXDATE is applied to the rule instances only.","sha256":"6ec06cb4823e7cd0a66466fe4ecf11c7450f6ecb6d6a667a3281ecd6b02dd9d5","title":"Merging RRULE instances with RDATE and EXDATE: exdate scope · case 01","variant":1,"variant_policy":"Five numbered records share a model and may reuse boundary fixtures.","verification":{"attempt":{"elapsed_ms":40.056,"exit_code":1,"observations":[{"actual":["2024-03-01","2024-03-02","2024-03-04","2024-03-05"],"check":"regression: exdate does not extend count","expected":["2024-03-01","2024-03-02","2024-03-04","2024-03-05"],"passed":true},{"actual":["2024-03-01","2024-03-03","2024-03-07"],"check":"timed exdate","expected":["2024-03-01","2024-03-03","2024-03-07"],"passed":true},{"actual":["2024-03-01","2024-03-03"],"check":"midnight exdate","expected":["2024-03-01","2024-03-03"],"passed":true},{"actual":["2024-01-01","2024-01-08","2024-01-15"],"check":"rdate equal to rule date","expected":["2024-01-01","2024-01-08","2024-01-15"],"passed":true},{"actual":["2024-01-02","2024-01-10","2024-01-11","2024-01-12"],"check":"rdate before dtstart","expected":["2024-01-02","2024-01-10","2024-01-11","2024-01-12"],"passed":true},{"actual":["2024-01-01","2024-01-02","2024-01-03","2024-02-01"],"check":"exdate removes rdate","expected":["2024-01-01","2024-01-02","2024-01-03"],"passed":false},{"actual":["2024-01-01","2024-01-04","2024-01-07"],"check":"exdate outside rule","expected":["2024-01-01","2024-01-04","2024-01-07"],"passed":true}],"passed":false,"stderr":"","stdout":"{\"observations\": [{\"check\": \"regression: exdate does not extend count\", \"actual\": [\"2024-03-01\", \"2024-03-02\", \"2024-03-04\", \"2024-03-05\"], \"expected\": [\"2024-03-01\", \"2024-03-02\", \"2024-03-04\", \"2024-03-05\"], \"passed\": true}, {\"check\": \"timed exdate\", \"actual\": [\"2024-03-01\", \"2024-03-03\", \"2024-03-07\"], \"expected\": [\"2024-03-01\", \"2024-03-03\", \"2024-03-07\"], \"passed\": true}, {\"check\": \"midnight exdate\", \"actual\": [\"2024-03-01\", \"2024-03-03\"], \"expected\": [\"2024-03-01\", \"2024-03-03\"], \"passed\": true}, {\"check\": \"rdate equal to rule date\", \"actual\": [\"2024-01-01\", \"2024-01-08\", \"2024-01-15\"], \"expected\": [\"2024-01-01\", \"2024-01-08\", \"2024-01-15\"], \"passed\": true}, {\"check\": \"rdate before dtstart\", \"actual\": [\"2024-01-02\", \"2024-01-10\", \"2024-01-11\", \"2024-01-12\"], \"expected\": [\"2024-01-02\", \"2024-01-10\", \"2024-01-11\", \"2024-01-12\"], \"passed\": true}, {\"check\": \"exdate removes rdate\", \"actual\": [\"2024-01-01\", \"2024-01-02\", \"2024-01-03\", \"2024-02-01\"], \"expected\": [\"2024-01-01\", \"2024-01-02\", \"2024-01-03\"], \"passed\": false}, {\"check\": \"exdate outside rule\", \"actual\": [\"2024-01-01\", \"2024-01-04\", \"2024-01-07\"], \"expected\": [\"2024-01-01\", \"2024-01-04\", \"2024-01-07\"], \"passed\": true}], \"passed\": false}\n"},"broken":{"elapsed_ms":41.555,"exit_code":1,"observations":[{"actual":["2024-03-01","2024-03-02","2024-03-04","2024-03-05"],"check":"regression: exdate does not extend count","expected":["2024-03-01","2024-03-02","2024-03-04","2024-03-05"],"passed":true},{"actual":["2024-03-01","2024-03-03","2024-03-07"],"check":"timed exdate","expected":["2024-03-01","2024-03-03","2024-03-07"],"passed":true},{"actual":["2024-03-01","2024-03-03"],"check":"midnight exdate","expected":["2024-03-01","2024-03-03"],"passed":true},{"actual":["2024-01-01","2024-01-08","2024-01-15"],"check":"rdate equal to rule date","expected":["2024-01-01","2024-01-08","2024-01-15"],"passed":true},{"actual":["2024-01-02","2024-01-10","2024-01-11","2024-01-12"],"check":"rdate before dtstart","expected":["2024-01-02","2024-01-10","2024-01-11","2024-01-12"],"passed":true},{"actual":["2024-01-01","2024-01-02","2024-01-03","2024-02-01"],"check":"exdate removes rdate","expected":["2024-01-01","2024-01-02","2024-01-03"],"passed":false},{"actual":["2024-01-01","2024-01-04","2024-01-07"],"check":"exdate outside rule","expected":["2024-01-01","2024-01-04","2024-01-07"],"passed":true}],"passed":false,"stderr":"","stdout":"{\"observations\": [{\"check\": \"regression: exdate does not extend count\", \"actual\": [\"2024-03-01\", \"2024-03-02\", \"2024-03-04\", \"2024-03-05\"], \"expected\": [\"2024-03-01\", \"2024-03-02\", \"2024-03-04\", \"2024-03-05\"], \"passed\": true}, {\"check\": \"timed exdate\", \"actual\": [\"2024-03-01\", \"2024-03-03\", \"2024-03-07\"], \"expected\": [\"2024-03-01\", \"2024-03-03\", \"2024-03-07\"], \"passed\": true}, {\"check\": \"midnight exdate\", \"actual\": [\"2024-03-01\", \"2024-03-03\"], \"expected\": [\"2024-03-01\", \"2024-03-03\"], \"passed\": true}, {\"check\": \"rdate equal to rule date\", \"actual\": [\"2024-01-01\", \"2024-01-08\", \"2024-01-15\"], \"expected\": [\"2024-01-01\", \"2024-01-08\", \"2024-01-15\"], \"passed\": true}, {\"check\": \"rdate before dtstart\", \"actual\": [\"2024-01-02\", \"2024-01-10\", \"2024-01-11\", \"2024-01-12\"], \"expected\": [\"2024-01-02\", \"2024-01-10\", \"2024-01-11\", \"2024-01-12\"], \"passed\": true}, {\"check\": \"exdate removes rdate\", \"actual\": [\"2024-01-01\", \"2024-01-02\", \"2024-01-03\", \"2024-02-01\"], \"expected\": [\"2024-01-01\", \"2024-01-02\", \"2024-01-03\"], \"passed\": false}, {\"check\": \"exdate outside rule\", \"actual\": [\"2024-01-01\", \"2024-01-04\", \"2024-01-07\"], \"expected\": [\"2024-01-01\", \"2024-01-04\", \"2024-01-07\"], \"passed\": true}], \"passed\": false}\n"},"fixed":{"elapsed_ms":43.173,"exit_code":0,"observations":[{"actual":["2024-03-01","2024-03-02","2024-03-04","2024-03-05"],"check":"regression: exdate does not extend count","expected":["2024-03-01","2024-03-02","2024-03-04","2024-03-05"],"passed":true},{"actual":["2024-03-01","2024-03-03","2024-03-07"],"check":"timed exdate","expected":["2024-03-01","2024-03-03","2024-03-07"],"passed":true},{"actual":["2024-03-01","2024-03-03"],"check":"midnight exdate","expected":["2024-03-01","2024-03-03"],"passed":true},{"actual":["2024-01-01","2024-01-08","2024-01-15"],"check":"rdate equal to rule date","expected":["2024-01-01","2024-01-08","2024-01-15"],"passed":true},{"actual":["2024-01-02","2024-01-10","2024-01-11","2024-01-12"],"check":"rdate before dtstart","expected":["2024-01-02","2024-01-10","2024-01-11","2024-01-12"],"passed":true},{"actual":["2024-01-01","2024-01-02","2024-01-03"],"check":"exdate removes rdate","expected":["2024-01-01","2024-01-02","2024-01-03"],"passed":true},{"actual":["2024-01-01","2024-01-04","2024-01-07"],"check":"exdate outside rule","expected":["2024-01-01","2024-01-04","2024-01-07"],"passed":true}],"passed":true,"stderr":"","stdout":"{\"observations\": [{\"check\": \"regression: exdate does not extend count\", \"actual\": [\"2024-03-01\", \"2024-03-02\", \"2024-03-04\", \"2024-03-05\"], \"expected\": [\"2024-03-01\", \"2024-03-02\", \"2024-03-04\", \"2024-03-05\"], \"passed\": true}, {\"check\": \"timed exdate\", \"actual\": [\"2024-03-01\", \"2024-03-03\", \"2024-03-07\"], \"expected\": [\"2024-03-01\", \"2024-03-03\", \"2024-03-07\"], \"passed\": true}, {\"check\": \"midnight exdate\", \"actual\": [\"2024-03-01\", \"2024-03-03\"], \"expected\": [\"2024-03-01\", \"2024-03-03\"], \"passed\": true}, {\"check\": \"rdate equal to rule date\", \"actual\": [\"2024-01-01\", \"2024-01-08\", \"2024-01-15\"], \"expected\": [\"2024-01-01\", \"2024-01-08\", \"2024-01-15\"], \"passed\": true}, {\"check\": \"rdate before dtstart\", \"actual\": [\"2024-01-02\", \"2024-01-10\", \"2024-01-11\", \"2024-01-12\"], \"expected\": [\"2024-01-02\", \"2024-01-10\", \"2024-01-11\", \"2024-01-12\"], \"passed\": true}, {\"check\": \"exdate removes rdate\", \"actual\": [\"2024-01-01\", \"2024-01-02\", \"2024-01-03\"], \"expected\": [\"2024-01-01\", \"2024-01-02\", \"2024-01-03\"], \"passed\": true}, {\"check\": \"exdate outside rule\", \"actual\": [\"2024-01-01\", \"2024-01-04\", \"2024-01-07\"], \"expected\": [\"2024-01-01\", \"2024-01-04\", \"2024-01-07\"], \"passed\": true}], \"passed\": true}\n"}},"verified":true,"visibility":"public"}