{"abstract":"With a Sunday week start and INTERVAL=2, the active weeks are shifted so Sunday instances land in the skipped week.","category":"Calendar recurrence rules","checks":7,"contract":"FREQ=WEEKLY expansion. byday lists weekday numbers (0=Monday..6=Sunday); an empty list means the weekday of dtstart. Weeks begin on wkst; the week containing dtstart is week 0 and only weeks whose index is a multiple of interval are active. Instances are chronological, never before dtstart, and dtstart itself is an instance only if its weekday is listed. Return the first count ISO dates.","evaluation_group":"w2-calendar-recurrence-rules-weekly-byday-wkst","failed_approach":"The partial repair `(wkst - start.weekday()) % 7` reverses the subtraction, so the anchor lands after dtstart for most start weekdays.","family":"w2-calendar-recurrence-rules-weekly-byday-wkst-week-anchor","id":"FA-76841","implementations":{"attempt":{"sha256":"4ef0545aa7b59a591eaa758ca69d052353a2bcf56bb0b36510d4b2b5a5b52b36","source":"\"\"\"Failure Map reference implementation. Python standard library only.\"\"\"\nimport json\nimport datetime as dt\nimport calendar\nN = 1\nobservations = []\ndef solve(dtstart, interval, byday, wkst, count):\n    start = dt.date.fromisoformat(dtstart)\n    days = sorted(set(byday)) if byday else [start.weekday()]\n    week0 = start - dt.timedelta(days=(wkst - start.weekday()) % 7)\n    out = []\n    for k in range(600):\n        week = week0 + dt.timedelta(weeks=k * interval)\n        for wd in sorted(days, key=lambda w: (w - wkst) % 7):\n            d = week + dt.timedelta(days=(wd - wkst) % 7)\n            if d < start:\n                continue\n            if len(out) >= count:\n                return out\n            out.append(d.isoformat())\n    return out\ndef check(label, actual, expected):\n    observations.append({\"check\": label, \"actual\": actual, \"expected\": expected, \"passed\": actual == expected})\nfixtures = [[('regression: WKST=SU interval 2 TU,SU',\n   ['1997-08-05', 2, [1, 6], 6, 4],\n   ['1997-08-05', '1997-08-17', '1997-08-19', '1997-08-31']),\n  ('regression: WKST=MO interval 2 TU,SU',\n   ['1997-08-05', 2, [1, 6], 0, 4],\n   ['1997-08-05', '1997-08-10', '1997-08-19', '1997-08-24']),\n  ('non-matching dtstart Wednesday',\n   ['2024-01-03', 1, [0, 4], 0, 3],\n   ['2024-01-05', '2024-01-08', '2024-01-12']),\n  ('dtstart mid-week weekly MO,WE,FR',\n   ['2024-01-04', 1, [0, 2, 4], 0, 5],\n   ['2024-01-05', '2024-01-08', '2024-01-10', '2024-01-12', '2024-01-15']),\n  ('empty BYDAY uses dtstart weekday',\n   ['2024-02-29', 3, [], 0, 3],\n   ['2024-02-29', '2024-03-21', '2024-04-11']),\n  ('count zero', ['2024-01-01', 1, [0], 0, 0], []),\n  ('WKST=SU weekly SA,SU',\n   ['2024-03-09', 1, [5, 6], 6, 4],\n   ['2024-03-09', '2024-03-10', '2024-03-16', '2024-03-17'])],\n [('non-matching dtstart Wednesday',\n   ['2024-01-03', 1, [0, 4], 0, 3],\n   ['2024-01-05', '2024-01-08', '2024-01-12']),\n  ('dtstart mid-week weekly MO,WE,FR',\n   ['2024-01-04', 1, [0, 2, 4], 0, 5],\n   ['2024-01-05', '2024-01-08', '2024-01-10', '2024-01-12', '2024-01-15']),\n  ('empty BYDAY uses dtstart weekday',\n   ['2024-02-29', 3, [], 0, 3],\n   ['2024-02-29', '2024-03-21', '2024-04-11']),\n  ('count zero', ['2024-01-01', 1, [0], 0, 0], []),\n  ('WKST=SU weekly SA,SU',\n   ['2024-03-09', 1, [5, 6], 6, 4],\n   ['2024-03-09', '2024-03-10', '2024-03-16', '2024-03-17']),\n  ('interval 3 friday from monday', ['2024-05-06', 3, [4], 0, 3], ['2024-05-10', '2024-05-31', '2024-06-21']),\n  ('WKST=WE interval 2 MO,TH',\n   ['2024-06-04', 2, [0, 3], 2, 5],\n   ['2024-06-13', '2024-06-17', '2024-06-27', '2024-07-01', '2024-07-11'])],\n [('empty BYDAY uses dtstart weekday',\n   ['2024-02-29', 3, [], 0, 3],\n   ['2024-02-29', '2024-03-21', '2024-04-11']),\n  ('count zero', ['2024-01-01', 1, [0], 0, 0], []),\n  ('WKST=SU weekly SA,SU',\n   ['2024-03-09', 1, [5, 6], 6, 4],\n   ['2024-03-09', '2024-03-10', '2024-03-16', '2024-03-17']),\n  ('interval 3 friday from monday', ['2024-05-06', 3, [4], 0, 3], ['2024-05-10', '2024-05-31', '2024-06-21']),\n  ('WKST=WE interval 2 MO,TH',\n   ['2024-06-04', 2, [0, 3], 2, 5],\n   ['2024-06-13', '2024-06-17', '2024-06-27', '2024-07-01', '2024-07-11']),\n  ('single sunday series', ['2024-12-29', 2, [6], 0, 3], ['2024-12-29', '2025-01-12', '2025-01-26']),\n  ('dtstart on listed day',\n   ['2025-01-06', 2, [0, 3], 0, 4],\n   ['2025-01-06', '2025-01-09', '2025-01-20', '2025-01-23'])],\n [('WKST=SU weekly SA,SU',\n   ['2024-03-09', 1, [5, 6], 6, 4],\n   ['2024-03-09', '2024-03-10', '2024-03-16', '2024-03-17']),\n  ('interval 3 friday from monday', ['2024-05-06', 3, [4], 0, 3], ['2024-05-10', '2024-05-31', '2024-06-21']),\n  ('WKST=WE interval 2 MO,TH',\n   ['2024-06-04', 2, [0, 3], 2, 5],\n   ['2024-06-13', '2024-06-17', '2024-06-27', '2024-07-01', '2024-07-11']),\n  ('single sunday series', ['2024-12-29', 2, [6], 0, 3], ['2024-12-29', '2025-01-12', '2025-01-26']),\n  ('dtstart on listed day',\n   ['2025-01-06', 2, [0, 3], 0, 4],\n   ['2025-01-06', '2025-01-09', '2025-01-20', '2025-01-23']),\n  ('WKST=SU interval 2 from saturday',\n   ['2025-03-01', 2, [6, 5], 6, 5],\n   ['2025-03-01', '2025-03-09', '2025-03-15', '2025-03-23', '2025-03-29']),\n  ('regression: WKST=SU interval 2 TU,SU',\n   ['1997-08-05', 2, [1, 6], 6, 4],\n   ['1997-08-05', '1997-08-17', '1997-08-19', '1997-08-31'])],\n [('WKST=WE interval 2 MO,TH',\n   ['2024-06-04', 2, [0, 3], 2, 5],\n   ['2024-06-13', '2024-06-17', '2024-06-27', '2024-07-01', '2024-07-11']),\n  ('single sunday series', ['2024-12-29', 2, [6], 0, 3], ['2024-12-29', '2025-01-12', '2025-01-26']),\n  ('dtstart on listed day',\n   ['2025-01-06', 2, [0, 3], 0, 4],\n   ['2025-01-06', '2025-01-09', '2025-01-20', '2025-01-23']),\n  ('WKST=SU interval 2 from saturday',\n   ['2025-03-01', 2, [6, 5], 6, 5],\n   ['2025-03-01', '2025-03-09', '2025-03-15', '2025-03-23', '2025-03-29']),\n  ('regression: WKST=SU interval 2 TU,SU',\n   ['1997-08-05', 2, [1, 6], 6, 4],\n   ['1997-08-05', '1997-08-17', '1997-08-19', '1997-08-31']),\n  ('regression: WKST=MO interval 2 TU,SU',\n   ['1997-08-05', 2, [1, 6], 0, 4],\n   ['1997-08-05', '1997-08-10', '1997-08-19', '1997-08-24']),\n  ('non-matching dtstart Wednesday',\n   ['2024-01-03', 1, [0, 4], 0, 3],\n   ['2024-01-05', '2024-01-08', '2024-01-12'])]]\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":"665554bbd82af0b5a4319e5fdd916d2979f81c826010d23fb2a9175c04570d77","source":"\"\"\"Failure Map reference implementation. Python standard library only.\"\"\"\nimport json\nimport datetime as dt\nimport calendar\nN = 1\nobservations = []\ndef solve(dtstart, interval, byday, wkst, count):\n    start = dt.date.fromisoformat(dtstart)\n    days = sorted(set(byday)) if byday else [start.weekday()]\n    week0 = start - dt.timedelta(days=start.weekday())\n    out = []\n    for k in range(600):\n        week = week0 + dt.timedelta(weeks=k * interval)\n        for wd in sorted(days, key=lambda w: (w - wkst) % 7):\n            d = week + dt.timedelta(days=(wd - wkst) % 7)\n            if d < start:\n                continue\n            if len(out) >= count:\n                return out\n            out.append(d.isoformat())\n    return out\ndef check(label, actual, expected):\n    observations.append({\"check\": label, \"actual\": actual, \"expected\": expected, \"passed\": actual == expected})\nfixtures = [[('regression: WKST=SU interval 2 TU,SU',\n   ['1997-08-05', 2, [1, 6], 6, 4],\n   ['1997-08-05', '1997-08-17', '1997-08-19', '1997-08-31']),\n  ('regression: WKST=MO interval 2 TU,SU',\n   ['1997-08-05', 2, [1, 6], 0, 4],\n   ['1997-08-05', '1997-08-10', '1997-08-19', '1997-08-24']),\n  ('non-matching dtstart Wednesday',\n   ['2024-01-03', 1, [0, 4], 0, 3],\n   ['2024-01-05', '2024-01-08', '2024-01-12']),\n  ('dtstart mid-week weekly MO,WE,FR',\n   ['2024-01-04', 1, [0, 2, 4], 0, 5],\n   ['2024-01-05', '2024-01-08', '2024-01-10', '2024-01-12', '2024-01-15']),\n  ('empty BYDAY uses dtstart weekday',\n   ['2024-02-29', 3, [], 0, 3],\n   ['2024-02-29', '2024-03-21', '2024-04-11']),\n  ('count zero', ['2024-01-01', 1, [0], 0, 0], []),\n  ('WKST=SU weekly SA,SU',\n   ['2024-03-09', 1, [5, 6], 6, 4],\n   ['2024-03-09', '2024-03-10', '2024-03-16', '2024-03-17'])],\n [('non-matching dtstart Wednesday',\n   ['2024-01-03', 1, [0, 4], 0, 3],\n   ['2024-01-05', '2024-01-08', '2024-01-12']),\n  ('dtstart mid-week weekly MO,WE,FR',\n   ['2024-01-04', 1, [0, 2, 4], 0, 5],\n   ['2024-01-05', '2024-01-08', '2024-01-10', '2024-01-12', '2024-01-15']),\n  ('empty BYDAY uses dtstart weekday',\n   ['2024-02-29', 3, [], 0, 3],\n   ['2024-02-29', '2024-03-21', '2024-04-11']),\n  ('count zero', ['2024-01-01', 1, [0], 0, 0], []),\n  ('WKST=SU weekly SA,SU',\n   ['2024-03-09', 1, [5, 6], 6, 4],\n   ['2024-03-09', '2024-03-10', '2024-03-16', '2024-03-17']),\n  ('interval 3 friday from monday', ['2024-05-06', 3, [4], 0, 3], ['2024-05-10', '2024-05-31', '2024-06-21']),\n  ('WKST=WE interval 2 MO,TH',\n   ['2024-06-04', 2, [0, 3], 2, 5],\n   ['2024-06-13', '2024-06-17', '2024-06-27', '2024-07-01', '2024-07-11'])],\n [('empty BYDAY uses dtstart weekday',\n   ['2024-02-29', 3, [], 0, 3],\n   ['2024-02-29', '2024-03-21', '2024-04-11']),\n  ('count zero', ['2024-01-01', 1, [0], 0, 0], []),\n  ('WKST=SU weekly SA,SU',\n   ['2024-03-09', 1, [5, 6], 6, 4],\n   ['2024-03-09', '2024-03-10', '2024-03-16', '2024-03-17']),\n  ('interval 3 friday from monday', ['2024-05-06', 3, [4], 0, 3], ['2024-05-10', '2024-05-31', '2024-06-21']),\n  ('WKST=WE interval 2 MO,TH',\n   ['2024-06-04', 2, [0, 3], 2, 5],\n   ['2024-06-13', '2024-06-17', '2024-06-27', '2024-07-01', '2024-07-11']),\n  ('single sunday series', ['2024-12-29', 2, [6], 0, 3], ['2024-12-29', '2025-01-12', '2025-01-26']),\n  ('dtstart on listed day',\n   ['2025-01-06', 2, [0, 3], 0, 4],\n   ['2025-01-06', '2025-01-09', '2025-01-20', '2025-01-23'])],\n [('WKST=SU weekly SA,SU',\n   ['2024-03-09', 1, [5, 6], 6, 4],\n   ['2024-03-09', '2024-03-10', '2024-03-16', '2024-03-17']),\n  ('interval 3 friday from monday', ['2024-05-06', 3, [4], 0, 3], ['2024-05-10', '2024-05-31', '2024-06-21']),\n  ('WKST=WE interval 2 MO,TH',\n   ['2024-06-04', 2, [0, 3], 2, 5],\n   ['2024-06-13', '2024-06-17', '2024-06-27', '2024-07-01', '2024-07-11']),\n  ('single sunday series', ['2024-12-29', 2, [6], 0, 3], ['2024-12-29', '2025-01-12', '2025-01-26']),\n  ('dtstart on listed day',\n   ['2025-01-06', 2, [0, 3], 0, 4],\n   ['2025-01-06', '2025-01-09', '2025-01-20', '2025-01-23']),\n  ('WKST=SU interval 2 from saturday',\n   ['2025-03-01', 2, [6, 5], 6, 5],\n   ['2025-03-01', '2025-03-09', '2025-03-15', '2025-03-23', '2025-03-29']),\n  ('regression: WKST=SU interval 2 TU,SU',\n   ['1997-08-05', 2, [1, 6], 6, 4],\n   ['1997-08-05', '1997-08-17', '1997-08-19', '1997-08-31'])],\n [('WKST=WE interval 2 MO,TH',\n   ['2024-06-04', 2, [0, 3], 2, 5],\n   ['2024-06-13', '2024-06-17', '2024-06-27', '2024-07-01', '2024-07-11']),\n  ('single sunday series', ['2024-12-29', 2, [6], 0, 3], ['2024-12-29', '2025-01-12', '2025-01-26']),\n  ('dtstart on listed day',\n   ['2025-01-06', 2, [0, 3], 0, 4],\n   ['2025-01-06', '2025-01-09', '2025-01-20', '2025-01-23']),\n  ('WKST=SU interval 2 from saturday',\n   ['2025-03-01', 2, [6, 5], 6, 5],\n   ['2025-03-01', '2025-03-09', '2025-03-15', '2025-03-23', '2025-03-29']),\n  ('regression: WKST=SU interval 2 TU,SU',\n   ['1997-08-05', 2, [1, 6], 6, 4],\n   ['1997-08-05', '1997-08-17', '1997-08-19', '1997-08-31']),\n  ('regression: WKST=MO interval 2 TU,SU',\n   ['1997-08-05', 2, [1, 6], 0, 4],\n   ['1997-08-05', '1997-08-10', '1997-08-19', '1997-08-24']),\n  ('non-matching dtstart Wednesday',\n   ['2024-01-03', 1, [0, 4], 0, 3],\n   ['2024-01-05', '2024-01-08', '2024-01-12'])]]\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":"bf0638a224bfd45196184fc0d883901496b446834ce5fe5ef559de0bc3b8fabf","source":"\"\"\"Failure Map reference implementation. Python standard library only.\"\"\"\nimport json\nimport datetime as dt\nimport calendar\nN = 1\nobservations = []\ndef solve(dtstart, interval, byday, wkst, count):\n    start = dt.date.fromisoformat(dtstart)\n    days = sorted(set(byday)) if byday else [start.weekday()]\n    week0 = start - dt.timedelta(days=(start.weekday() - wkst) % 7)\n    out = []\n    for k in range(600):\n        week = week0 + dt.timedelta(weeks=k * interval)\n        for wd in sorted(days, key=lambda w: (w - wkst) % 7):\n            d = week + dt.timedelta(days=(wd - wkst) % 7)\n            if d < start:\n                continue\n            if len(out) >= count:\n                return out\n            out.append(d.isoformat())\n    return out\ndef check(label, actual, expected):\n    observations.append({\"check\": label, \"actual\": actual, \"expected\": expected, \"passed\": actual == expected})\nfixtures = [[('regression: WKST=SU interval 2 TU,SU',\n   ['1997-08-05', 2, [1, 6], 6, 4],\n   ['1997-08-05', '1997-08-17', '1997-08-19', '1997-08-31']),\n  ('regression: WKST=MO interval 2 TU,SU',\n   ['1997-08-05', 2, [1, 6], 0, 4],\n   ['1997-08-05', '1997-08-10', '1997-08-19', '1997-08-24']),\n  ('non-matching dtstart Wednesday',\n   ['2024-01-03', 1, [0, 4], 0, 3],\n   ['2024-01-05', '2024-01-08', '2024-01-12']),\n  ('dtstart mid-week weekly MO,WE,FR',\n   ['2024-01-04', 1, [0, 2, 4], 0, 5],\n   ['2024-01-05', '2024-01-08', '2024-01-10', '2024-01-12', '2024-01-15']),\n  ('empty BYDAY uses dtstart weekday',\n   ['2024-02-29', 3, [], 0, 3],\n   ['2024-02-29', '2024-03-21', '2024-04-11']),\n  ('count zero', ['2024-01-01', 1, [0], 0, 0], []),\n  ('WKST=SU weekly SA,SU',\n   ['2024-03-09', 1, [5, 6], 6, 4],\n   ['2024-03-09', '2024-03-10', '2024-03-16', '2024-03-17'])],\n [('non-matching dtstart Wednesday',\n   ['2024-01-03', 1, [0, 4], 0, 3],\n   ['2024-01-05', '2024-01-08', '2024-01-12']),\n  ('dtstart mid-week weekly MO,WE,FR',\n   ['2024-01-04', 1, [0, 2, 4], 0, 5],\n   ['2024-01-05', '2024-01-08', '2024-01-10', '2024-01-12', '2024-01-15']),\n  ('empty BYDAY uses dtstart weekday',\n   ['2024-02-29', 3, [], 0, 3],\n   ['2024-02-29', '2024-03-21', '2024-04-11']),\n  ('count zero', ['2024-01-01', 1, [0], 0, 0], []),\n  ('WKST=SU weekly SA,SU',\n   ['2024-03-09', 1, [5, 6], 6, 4],\n   ['2024-03-09', '2024-03-10', '2024-03-16', '2024-03-17']),\n  ('interval 3 friday from monday', ['2024-05-06', 3, [4], 0, 3], ['2024-05-10', '2024-05-31', '2024-06-21']),\n  ('WKST=WE interval 2 MO,TH',\n   ['2024-06-04', 2, [0, 3], 2, 5],\n   ['2024-06-13', '2024-06-17', '2024-06-27', '2024-07-01', '2024-07-11'])],\n [('empty BYDAY uses dtstart weekday',\n   ['2024-02-29', 3, [], 0, 3],\n   ['2024-02-29', '2024-03-21', '2024-04-11']),\n  ('count zero', ['2024-01-01', 1, [0], 0, 0], []),\n  ('WKST=SU weekly SA,SU',\n   ['2024-03-09', 1, [5, 6], 6, 4],\n   ['2024-03-09', '2024-03-10', '2024-03-16', '2024-03-17']),\n  ('interval 3 friday from monday', ['2024-05-06', 3, [4], 0, 3], ['2024-05-10', '2024-05-31', '2024-06-21']),\n  ('WKST=WE interval 2 MO,TH',\n   ['2024-06-04', 2, [0, 3], 2, 5],\n   ['2024-06-13', '2024-06-17', '2024-06-27', '2024-07-01', '2024-07-11']),\n  ('single sunday series', ['2024-12-29', 2, [6], 0, 3], ['2024-12-29', '2025-01-12', '2025-01-26']),\n  ('dtstart on listed day',\n   ['2025-01-06', 2, [0, 3], 0, 4],\n   ['2025-01-06', '2025-01-09', '2025-01-20', '2025-01-23'])],\n [('WKST=SU weekly SA,SU',\n   ['2024-03-09', 1, [5, 6], 6, 4],\n   ['2024-03-09', '2024-03-10', '2024-03-16', '2024-03-17']),\n  ('interval 3 friday from monday', ['2024-05-06', 3, [4], 0, 3], ['2024-05-10', '2024-05-31', '2024-06-21']),\n  ('WKST=WE interval 2 MO,TH',\n   ['2024-06-04', 2, [0, 3], 2, 5],\n   ['2024-06-13', '2024-06-17', '2024-06-27', '2024-07-01', '2024-07-11']),\n  ('single sunday series', ['2024-12-29', 2, [6], 0, 3], ['2024-12-29', '2025-01-12', '2025-01-26']),\n  ('dtstart on listed day',\n   ['2025-01-06', 2, [0, 3], 0, 4],\n   ['2025-01-06', '2025-01-09', '2025-01-20', '2025-01-23']),\n  ('WKST=SU interval 2 from saturday',\n   ['2025-03-01', 2, [6, 5], 6, 5],\n   ['2025-03-01', '2025-03-09', '2025-03-15', '2025-03-23', '2025-03-29']),\n  ('regression: WKST=SU interval 2 TU,SU',\n   ['1997-08-05', 2, [1, 6], 6, 4],\n   ['1997-08-05', '1997-08-17', '1997-08-19', '1997-08-31'])],\n [('WKST=WE interval 2 MO,TH',\n   ['2024-06-04', 2, [0, 3], 2, 5],\n   ['2024-06-13', '2024-06-17', '2024-06-27', '2024-07-01', '2024-07-11']),\n  ('single sunday series', ['2024-12-29', 2, [6], 0, 3], ['2024-12-29', '2025-01-12', '2025-01-26']),\n  ('dtstart on listed day',\n   ['2025-01-06', 2, [0, 3], 0, 4],\n   ['2025-01-06', '2025-01-09', '2025-01-20', '2025-01-23']),\n  ('WKST=SU interval 2 from saturday',\n   ['2025-03-01', 2, [6, 5], 6, 5],\n   ['2025-03-01', '2025-03-09', '2025-03-15', '2025-03-23', '2025-03-29']),\n  ('regression: WKST=SU interval 2 TU,SU',\n   ['1997-08-05', 2, [1, 6], 6, 4],\n   ['1997-08-05', '1997-08-17', '1997-08-19', '1997-08-31']),\n  ('regression: WKST=MO interval 2 TU,SU',\n   ['1997-08-05', 2, [1, 6], 0, 4],\n   ['1997-08-05', '1997-08-10', '1997-08-19', '1997-08-24']),\n  ('non-matching dtstart Wednesday',\n   ['2024-01-03', 1, [0, 4], 0, 3],\n   ['2024-01-05', '2024-01-08', '2024-01-12'])]]\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-weekly-byday-wkst-week-anchor","generated_at":"2026-09-29T14:49:19.989911+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 week anchor decision use `(start.weekday() - wkst) % 7`, leaving the other decision sites of the model unchanged.","root_cause":"The week containing dtstart is anchored at Monday instead of the configured WKST day.","sha256":"951a8e35e0a8358b0081d27f557a022728816cf23d3d051131bdf88eb74ba3a5","title":"Weekly BYDAY expansion honouring the week-start day: week anchor · case 01","variant":1,"variant_policy":"Five numbered records share a model and may reuse boundary fixtures.","verification":{"attempt":{"elapsed_ms":42.529,"exit_code":1,"observations":[{"actual":["1997-08-14","1997-08-16","1997-08-28","1997-08-30"],"check":"regression: WKST=SU interval 2 TU,SU","expected":["1997-08-05","1997-08-17","1997-08-19","1997-08-31"],"passed":false},{"actual":["1997-08-05","1997-08-14","1997-08-19","1997-08-28"],"check":"regression: WKST=MO interval 2 TU,SU","expected":["1997-08-05","1997-08-10","1997-08-19","1997-08-24"],"passed":false},{"actual":["2024-01-05","2024-01-09","2024-01-12"],"check":"non-matching dtstart Wednesday","expected":["2024-01-05","2024-01-08","2024-01-12"],"passed":false},{"actual":["2024-01-04","2024-01-07","2024-01-09","2024-01-11","2024-01-14"],"check":"dtstart mid-week weekly MO,WE,FR","expected":["2024-01-05","2024-01-08","2024-01-10","2024-01-12","2024-01-15"],"passed":false},{"actual":["2024-03-20","2024-04-10","2024-05-01"],"check":"empty BYDAY uses dtstart weekday","expected":["2024-02-29","2024-03-21","2024-04-11"],"passed":false},{"actual":[],"check":"count zero","expected":[],"passed":true},{"actual":["2024-03-14","2024-03-15","2024-03-21","2024-03-22"],"check":"WKST=SU weekly SA,SU","expected":["2024-03-09","2024-03-10","2024-03-16","2024-03-17"],"passed":false}],"passed":false,"stderr":"","stdout":"{\"observations\": [{\"check\": \"regression: WKST=SU interval 2 TU,SU\", \"actual\": [\"1997-08-14\", \"1997-08-16\", \"1997-08-28\", \"1997-08-30\"], \"expected\": [\"1997-08-05\", \"1997-08-17\", \"1997-08-19\", \"1997-08-31\"], \"passed\": false}, {\"check\": \"regression: WKST=MO interval 2 TU,SU\", \"actual\": [\"1997-08-05\", \"1997-08-14\", \"1997-08-19\", \"1997-08-28\"], \"expected\": [\"1997-08-05\", \"1997-08-10\", \"1997-08-19\", \"1997-08-24\"], \"passed\": false}, {\"check\": \"non-matching dtstart Wednesday\", \"actual\": [\"2024-01-05\", \"2024-01-09\", \"2024-01-12\"], \"expected\": [\"2024-01-05\", \"2024-01-08\", \"2024-01-12\"], \"passed\": false}, {\"check\": \"dtstart mid-week weekly MO,WE,FR\", \"actual\": [\"2024-01-04\", \"2024-01-07\", \"2024-01-09\", \"2024-01-11\", \"2024-01-14\"], \"expected\": [\"2024-01-05\", \"2024-01-08\", \"2024-01-10\", \"2024-01-12\", \"2024-01-15\"], \"passed\": false}, {\"check\": \"empty BYDAY uses dtstart weekday\", \"actual\": [\"2024-03-20\", \"2024-04-10\", \"2024-05-01\"], \"expected\": [\"2024-02-29\", \"2024-03-21\", \"2024-04-11\"], \"passed\": false}, {\"check\": \"count zero\", \"actual\": [], \"expected\": [], \"passed\": true}, {\"check\": \"WKST=SU weekly SA,SU\", \"actual\": [\"2024-03-14\", \"2024-03-15\", \"2024-03-21\", \"2024-03-22\"], \"expected\": [\"2024-03-09\", \"2024-03-10\", \"2024-03-16\", \"2024-03-17\"], \"passed\": false}], \"passed\": false}\n"},"broken":{"elapsed_ms":44.673,"exit_code":1,"observations":[{"actual":["1997-08-06","1997-08-18","1997-08-20","1997-09-01"],"check":"regression: WKST=SU interval 2 TU,SU","expected":["1997-08-05","1997-08-17","1997-08-19","1997-08-31"],"passed":false},{"actual":["1997-08-05","1997-08-10","1997-08-19","1997-08-24"],"check":"regression: WKST=MO interval 2 TU,SU","expected":["1997-08-05","1997-08-10","1997-08-19","1997-08-24"],"passed":true},{"actual":["2024-01-05","2024-01-08","2024-01-12"],"check":"non-matching dtstart Wednesday","expected":["2024-01-05","2024-01-08","2024-01-12"],"passed":true},{"actual":["2024-01-05","2024-01-08","2024-01-10","2024-01-12","2024-01-15"],"check":"dtstart mid-week weekly MO,WE,FR","expected":["2024-01-05","2024-01-08","2024-01-10","2024-01-12","2024-01-15"],"passed":true},{"actual":["2024-02-29","2024-03-21","2024-04-11"],"check":"empty BYDAY uses dtstart weekday","expected":["2024-02-29","2024-03-21","2024-04-11"],"passed":true},{"actual":[],"check":"count zero","expected":[],"passed":true},{"actual":["2024-03-10","2024-03-11","2024-03-17","2024-03-18"],"check":"WKST=SU weekly SA,SU","expected":["2024-03-09","2024-03-10","2024-03-16","2024-03-17"],"passed":false}],"passed":false,"stderr":"","stdout":"{\"observations\": [{\"check\": \"regression: WKST=SU interval 2 TU,SU\", \"actual\": [\"1997-08-06\", \"1997-08-18\", \"1997-08-20\", \"1997-09-01\"], \"expected\": [\"1997-08-05\", \"1997-08-17\", \"1997-08-19\", \"1997-08-31\"], \"passed\": false}, {\"check\": \"regression: WKST=MO interval 2 TU,SU\", \"actual\": [\"1997-08-05\", \"1997-08-10\", \"1997-08-19\", \"1997-08-24\"], \"expected\": [\"1997-08-05\", \"1997-08-10\", \"1997-08-19\", \"1997-08-24\"], \"passed\": true}, {\"check\": \"non-matching dtstart Wednesday\", \"actual\": [\"2024-01-05\", \"2024-01-08\", \"2024-01-12\"], \"expected\": [\"2024-01-05\", \"2024-01-08\", \"2024-01-12\"], \"passed\": true}, {\"check\": \"dtstart mid-week weekly MO,WE,FR\", \"actual\": [\"2024-01-05\", \"2024-01-08\", \"2024-01-10\", \"2024-01-12\", \"2024-01-15\"], \"expected\": [\"2024-01-05\", \"2024-01-08\", \"2024-01-10\", \"2024-01-12\", \"2024-01-15\"], \"passed\": true}, {\"check\": \"empty BYDAY uses dtstart weekday\", \"actual\": [\"2024-02-29\", \"2024-03-21\", \"2024-04-11\"], \"expected\": [\"2024-02-29\", \"2024-03-21\", \"2024-04-11\"], \"passed\": true}, {\"check\": \"count zero\", \"actual\": [], \"expected\": [], \"passed\": true}, {\"check\": \"WKST=SU weekly SA,SU\", \"actual\": [\"2024-03-10\", \"2024-03-11\", \"2024-03-17\", \"2024-03-18\"], \"expected\": [\"2024-03-09\", \"2024-03-10\", \"2024-03-16\", \"2024-03-17\"], \"passed\": false}], \"passed\": false}\n"},"fixed":{"elapsed_ms":42.541,"exit_code":0,"observations":[{"actual":["1997-08-05","1997-08-17","1997-08-19","1997-08-31"],"check":"regression: WKST=SU interval 2 TU,SU","expected":["1997-08-05","1997-08-17","1997-08-19","1997-08-31"],"passed":true},{"actual":["1997-08-05","1997-08-10","1997-08-19","1997-08-24"],"check":"regression: WKST=MO interval 2 TU,SU","expected":["1997-08-05","1997-08-10","1997-08-19","1997-08-24"],"passed":true},{"actual":["2024-01-05","2024-01-08","2024-01-12"],"check":"non-matching dtstart Wednesday","expected":["2024-01-05","2024-01-08","2024-01-12"],"passed":true},{"actual":["2024-01-05","2024-01-08","2024-01-10","2024-01-12","2024-01-15"],"check":"dtstart mid-week weekly MO,WE,FR","expected":["2024-01-05","2024-01-08","2024-01-10","2024-01-12","2024-01-15"],"passed":true},{"actual":["2024-02-29","2024-03-21","2024-04-11"],"check":"empty BYDAY uses dtstart weekday","expected":["2024-02-29","2024-03-21","2024-04-11"],"passed":true},{"actual":[],"check":"count zero","expected":[],"passed":true},{"actual":["2024-03-09","2024-03-10","2024-03-16","2024-03-17"],"check":"WKST=SU weekly SA,SU","expected":["2024-03-09","2024-03-10","2024-03-16","2024-03-17"],"passed":true}],"passed":true,"stderr":"","stdout":"{\"observations\": [{\"check\": \"regression: WKST=SU interval 2 TU,SU\", \"actual\": [\"1997-08-05\", \"1997-08-17\", \"1997-08-19\", \"1997-08-31\"], \"expected\": [\"1997-08-05\", \"1997-08-17\", \"1997-08-19\", \"1997-08-31\"], \"passed\": true}, {\"check\": \"regression: WKST=MO interval 2 TU,SU\", \"actual\": [\"1997-08-05\", \"1997-08-10\", \"1997-08-19\", \"1997-08-24\"], \"expected\": [\"1997-08-05\", \"1997-08-10\", \"1997-08-19\", \"1997-08-24\"], \"passed\": true}, {\"check\": \"non-matching dtstart Wednesday\", \"actual\": [\"2024-01-05\", \"2024-01-08\", \"2024-01-12\"], \"expected\": [\"2024-01-05\", \"2024-01-08\", \"2024-01-12\"], \"passed\": true}, {\"check\": \"dtstart mid-week weekly MO,WE,FR\", \"actual\": [\"2024-01-05\", \"2024-01-08\", \"2024-01-10\", \"2024-01-12\", \"2024-01-15\"], \"expected\": [\"2024-01-05\", \"2024-01-08\", \"2024-01-10\", \"2024-01-12\", \"2024-01-15\"], \"passed\": true}, {\"check\": \"empty BYDAY uses dtstart weekday\", \"actual\": [\"2024-02-29\", \"2024-03-21\", \"2024-04-11\"], \"expected\": [\"2024-02-29\", \"2024-03-21\", \"2024-04-11\"], \"passed\": true}, {\"check\": \"count zero\", \"actual\": [], \"expected\": [], \"passed\": true}, {\"check\": \"WKST=SU weekly SA,SU\", \"actual\": [\"2024-03-09\", \"2024-03-10\", \"2024-03-16\", \"2024-03-17\"], \"expected\": [\"2024-03-09\", \"2024-03-10\", \"2024-03-16\", \"2024-03-17\"], \"passed\": true}], \"passed\": true}\n"}},"verified":true,"visibility":"public"}