FAILURE MAP
← Case archive

FA-76856 / Calendar recurrence rules / Open access

Weekly BYDAY expansion honouring the week-start day: before start · case 01

Days of the first week that precede dtstart are reported as instances.

Verified by executionVariant 1 · 7 checks per implementationDownload source bundle ↓JSON ↗

ROOT CAUSE

The first-week filter compares against the week anchor instead of dtstart.

VERIFIED REPAIR

At the before start decision use `d < start`, leaving the other decision sites of the model unchanged.

Unsuccessful approach: The partial repair `d <= start` uses a strict comparison that drops dtstart itself when dtstart is a listed weekday.

Case 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.

Why this case matters

Recurring calendar series are expanded into concrete instances for display, reminders and conflict checks.

1 / The failure

Exit 1
"""Failure Map reference implementation. Python standard library only."""
import json
import datetime as dt
import calendar
N = 1
observations = []
def solve(dtstart, interval, byday, wkst, count):
    start = dt.date.fromisoformat(dtstart)
    days = sorted(set(byday)) if byday else [start.weekday()]
    week0 = start - dt.timedelta(days=(start.weekday() - wkst) % 7)
    out = []
    for k in range(600):
        week = week0 + dt.timedelta(weeks=k * interval)
        for wd in sorted(days, key=lambda w: (w - wkst) % 7):
            d = week + dt.timedelta(days=(wd - wkst) % 7)
            if d < week0:
                continue
            if len(out) >= count:
                return out
            out.append(d.isoformat())
    return out
def check(label, actual, expected):
    observations.append({"check": label, "actual": actual, "expected": expected, "passed": actual == expected})
fixtures = [[('regression: WKST=SU interval 2 TU,SU',
   ['1997-08-05', 2, [1, 6], 6, 4],
   ['1997-08-05', '1997-08-17', '1997-08-19', '1997-08-31']),
  ('regression: WKST=MO interval 2 TU,SU',
   ['1997-08-05', 2, [1, 6], 0, 4],
   ['1997-08-05', '1997-08-10', '1997-08-19', '1997-08-24']),
  ('non-matching dtstart Wednesday',
   ['2024-01-03', 1, [0, 4], 0, 3],
   ['2024-01-05', '2024-01-08', '2024-01-12']),
  ('dtstart mid-week weekly MO,WE,FR',
   ['2024-01-04', 1, [0, 2, 4], 0, 5],
   ['2024-01-05', '2024-01-08', '2024-01-10', '2024-01-12', '2024-01-15']),
  ('empty BYDAY uses dtstart weekday',
   ['2024-02-29', 3, [], 0, 3],
   ['2024-02-29', '2024-03-21', '2024-04-11']),
  ('count zero', ['2024-01-01', 1, [0], 0, 0], []),
  ('WKST=SU weekly SA,SU',
   ['2024-03-09', 1, [5, 6], 6, 4],
   ['2024-03-09', '2024-03-10', '2024-03-16', '2024-03-17'])],
 [('non-matching dtstart Wednesday',
   ['2024-01-03', 1, [0, 4], 0, 3],
   ['2024-01-05', '2024-01-08', '2024-01-12']),
  ('dtstart mid-week weekly MO,WE,FR',
   ['2024-01-04', 1, [0, 2, 4], 0, 5],
   ['2024-01-05', '2024-01-08', '2024-01-10', '2024-01-12', '2024-01-15']),
  ('empty BYDAY uses dtstart weekday',
   ['2024-02-29', 3, [], 0, 3],
   ['2024-02-29', '2024-03-21', '2024-04-11']),
  ('count zero', ['2024-01-01', 1, [0], 0, 0], []),
  ('WKST=SU weekly SA,SU',
   ['2024-03-09', 1, [5, 6], 6, 4],
   ['2024-03-09', '2024-03-10', '2024-03-16', '2024-03-17']),
  ('interval 3 friday from monday', ['2024-05-06', 3, [4], 0, 3], ['2024-05-10', '2024-05-31', '2024-06-21']),
  ('WKST=WE interval 2 MO,TH',
   ['2024-06-04', 2, [0, 3], 2, 5],
   ['2024-06-13', '2024-06-17', '2024-06-27', '2024-07-01', '2024-07-11'])],
 [('empty BYDAY uses dtstart weekday',
   ['2024-02-29', 3, [], 0, 3],
   ['2024-02-29', '2024-03-21', '2024-04-11']),
  ('count zero', ['2024-01-01', 1, [0], 0, 0], []),
  ('WKST=SU weekly SA,SU',
   ['2024-03-09', 1, [5, 6], 6, 4],
   ['2024-03-09', '2024-03-10', '2024-03-16', '2024-03-17']),
  ('interval 3 friday from monday', ['2024-05-06', 3, [4], 0, 3], ['2024-05-10', '2024-05-31', '2024-06-21']),
  ('WKST=WE interval 2 MO,TH',
   ['2024-06-04', 2, [0, 3], 2, 5],
   ['2024-06-13', '2024-06-17', '2024-06-27', '2024-07-01', '2024-07-11']),
  ('single sunday series', ['2024-12-29', 2, [6], 0, 3], ['2024-12-29', '2025-01-12', '2025-01-26']),
  ('dtstart on listed day',
   ['2025-01-06', 2, [0, 3], 0, 4],
   ['2025-01-06', '2025-01-09', '2025-01-20', '2025-01-23'])],
 [('WKST=SU weekly SA,SU',
   ['2024-03-09', 1, [5, 6], 6, 4],
   ['2024-03-09', '2024-03-10', '2024-03-16', '2024-03-17']),
  ('interval 3 friday from monday', ['2024-05-06', 3, [4], 0, 3], ['2024-05-10', '2024-05-31', '2024-06-21']),
  ('WKST=WE interval 2 MO,TH',
   ['2024-06-04', 2, [0, 3], 2, 5],
   ['2024-06-13', '2024-06-17', '2024-06-27', '2024-07-01', '2024-07-11']),
  ('single sunday series', ['2024-12-29', 2, [6], 0, 3], ['2024-12-29', '2025-01-12', '2025-01-26']),
  ('dtstart on listed day',
   ['2025-01-06', 2, [0, 3], 0, 4],
   ['2025-01-06', '2025-01-09', '2025-01-20', '2025-01-23']),
  ('WKST=SU interval 2 from saturday',
   ['2025-03-01', 2, [6, 5], 6, 5],
   ['2025-03-01', '2025-03-09', '2025-03-15', '2025-03-23', '2025-03-29']),
  ('regression: WKST=SU interval 2 TU,SU',
   ['1997-08-05', 2, [1, 6], 6, 4],
   ['1997-08-05', '1997-08-17', '1997-08-19', '1997-08-31'])],
 [('WKST=WE interval 2 MO,TH',
   ['2024-06-04', 2, [0, 3], 2, 5],
   ['2024-06-13', '2024-06-17', '2024-06-27', '2024-07-01', '2024-07-11']),
  ('single sunday series', ['2024-12-29', 2, [6], 0, 3], ['2024-12-29', '2025-01-12', '2025-01-26']),
  ('dtstart on listed day',
   ['2025-01-06', 2, [0, 3], 0, 4],
   ['2025-01-06', '2025-01-09', '2025-01-20', '2025-01-23']),
  ('WKST=SU interval 2 from saturday',
   ['2025-03-01', 2, [6, 5], 6, 5],
   ['2025-03-01', '2025-03-09', '2025-03-15', '2025-03-23', '2025-03-29']),
  ('regression: WKST=SU interval 2 TU,SU',
   ['1997-08-05', 2, [1, 6], 6, 4],
   ['1997-08-05', '1997-08-17', '1997-08-19', '1997-08-31']),
  ('regression: WKST=MO interval 2 TU,SU',
   ['1997-08-05', 2, [1, 6], 0, 4],
   ['1997-08-05', '1997-08-10', '1997-08-19', '1997-08-24']),
  ('non-matching dtstart Wednesday',
   ['2024-01-03', 1, [0, 4], 0, 3],
   ['2024-01-05', '2024-01-08', '2024-01-12'])]]
for label, args, expected in fixtures[N-1]:
    check(label, solve(*args), expected)
print(json.dumps({"observations": observations, "passed": all(x["passed"] for x in observations)}, ensure_ascii=False))
raise SystemExit(0 if all(x["passed"] for x in observations) else 1)
Boundary fixtureActualExpectedOutcome
regression: WKST=SU interval 2 TU,SU['1997-08-03', '1997-08-05', '1997-08-17', '1997-08-19']['1997-08-05', '1997-08-17', '1997-08-19', '1997-08-31']Failed
regression: WKST=MO interval 2 TU,SU['1997-08-05', '1997-08-10', '1997-08-19', '1997-08-24']['1997-08-05', '1997-08-10', '1997-08-19', '1997-08-24']Passed
non-matching dtstart Wednesday['2024-01-01', '2024-01-05', '2024-01-08']['2024-01-05', '2024-01-08', '2024-01-12']Failed
dtstart mid-week weekly MO,WE,FR['2024-01-01', '2024-01-03', '2024-01-05', '2024-01-08', '2024-01-10']['2024-01-05', '2024-01-08', '2024-01-10', '2024-01-12', '2024-01-15']Failed
empty BYDAY uses dtstart weekday['2024-02-29', '2024-03-21', '2024-04-11']['2024-02-29', '2024-03-21', '2024-04-11']Passed
count zero[][]Passed
WKST=SU weekly SA,SU['2024-03-03', '2024-03-09', '2024-03-10', '2024-03-16']['2024-03-09', '2024-03-10', '2024-03-16', '2024-03-17']Failed

SHA-256 / f7fb48433d91919ca538fe33c3f16c00381dbae773300afba23622f662c3cedb

2 / The unsuccessful fix

Exit 1
"""Failure Map reference implementation. Python standard library only."""
import json
import datetime as dt
import calendar
N = 1
observations = []
def solve(dtstart, interval, byday, wkst, count):
    start = dt.date.fromisoformat(dtstart)
    days = sorted(set(byday)) if byday else [start.weekday()]
    week0 = start - dt.timedelta(days=(start.weekday() - wkst) % 7)
    out = []
    for k in range(600):
        week = week0 + dt.timedelta(weeks=k * interval)
        for wd in sorted(days, key=lambda w: (w - wkst) % 7):
            d = week + dt.timedelta(days=(wd - wkst) % 7)
            if d <= start:
                continue
            if len(out) >= count:
                return out
            out.append(d.isoformat())
    return out
def check(label, actual, expected):
    observations.append({"check": label, "actual": actual, "expected": expected, "passed": actual == expected})
fixtures = [[('regression: WKST=SU interval 2 TU,SU',
   ['1997-08-05', 2, [1, 6], 6, 4],
   ['1997-08-05', '1997-08-17', '1997-08-19', '1997-08-31']),
  ('regression: WKST=MO interval 2 TU,SU',
   ['1997-08-05', 2, [1, 6], 0, 4],
   ['1997-08-05', '1997-08-10', '1997-08-19', '1997-08-24']),
  ('non-matching dtstart Wednesday',
   ['2024-01-03', 1, [0, 4], 0, 3],
   ['2024-01-05', '2024-01-08', '2024-01-12']),
  ('dtstart mid-week weekly MO,WE,FR',
   ['2024-01-04', 1, [0, 2, 4], 0, 5],
   ['2024-01-05', '2024-01-08', '2024-01-10', '2024-01-12', '2024-01-15']),
  ('empty BYDAY uses dtstart weekday',
   ['2024-02-29', 3, [], 0, 3],
   ['2024-02-29', '2024-03-21', '2024-04-11']),
  ('count zero', ['2024-01-01', 1, [0], 0, 0], []),
  ('WKST=SU weekly SA,SU',
   ['2024-03-09', 1, [5, 6], 6, 4],
   ['2024-03-09', '2024-03-10', '2024-03-16', '2024-03-17'])],
 [('non-matching dtstart Wednesday',
   ['2024-01-03', 1, [0, 4], 0, 3],
   ['2024-01-05', '2024-01-08', '2024-01-12']),
  ('dtstart mid-week weekly MO,WE,FR',
   ['2024-01-04', 1, [0, 2, 4], 0, 5],
   ['2024-01-05', '2024-01-08', '2024-01-10', '2024-01-12', '2024-01-15']),
  ('empty BYDAY uses dtstart weekday',
   ['2024-02-29', 3, [], 0, 3],
   ['2024-02-29', '2024-03-21', '2024-04-11']),
  ('count zero', ['2024-01-01', 1, [0], 0, 0], []),
  ('WKST=SU weekly SA,SU',
   ['2024-03-09', 1, [5, 6], 6, 4],
   ['2024-03-09', '2024-03-10', '2024-03-16', '2024-03-17']),
  ('interval 3 friday from monday', ['2024-05-06', 3, [4], 0, 3], ['2024-05-10', '2024-05-31', '2024-06-21']),
  ('WKST=WE interval 2 MO,TH',
   ['2024-06-04', 2, [0, 3], 2, 5],
   ['2024-06-13', '2024-06-17', '2024-06-27', '2024-07-01', '2024-07-11'])],
 [('empty BYDAY uses dtstart weekday',
   ['2024-02-29', 3, [], 0, 3],
   ['2024-02-29', '2024-03-21', '2024-04-11']),
  ('count zero', ['2024-01-01', 1, [0], 0, 0], []),
  ('WKST=SU weekly SA,SU',
   ['2024-03-09', 1, [5, 6], 6, 4],
   ['2024-03-09', '2024-03-10', '2024-03-16', '2024-03-17']),
  ('interval 3 friday from monday', ['2024-05-06', 3, [4], 0, 3], ['2024-05-10', '2024-05-31', '2024-06-21']),
  ('WKST=WE interval 2 MO,TH',
   ['2024-06-04', 2, [0, 3], 2, 5],
   ['2024-06-13', '2024-06-17', '2024-06-27', '2024-07-01', '2024-07-11']),
  ('single sunday series', ['2024-12-29', 2, [6], 0, 3], ['2024-12-29', '2025-01-12', '2025-01-26']),
  ('dtstart on listed day',
   ['2025-01-06', 2, [0, 3], 0, 4],
   ['2025-01-06', '2025-01-09', '2025-01-20', '2025-01-23'])],
 [('WKST=SU weekly SA,SU',
   ['2024-03-09', 1, [5, 6], 6, 4],
   ['2024-03-09', '2024-03-10', '2024-03-16', '2024-03-17']),
  ('interval 3 friday from monday', ['2024-05-06', 3, [4], 0, 3], ['2024-05-10', '2024-05-31', '2024-06-21']),
  ('WKST=WE interval 2 MO,TH',
   ['2024-06-04', 2, [0, 3], 2, 5],
   ['2024-06-13', '2024-06-17', '2024-06-27', '2024-07-01', '2024-07-11']),
  ('single sunday series', ['2024-12-29', 2, [6], 0, 3], ['2024-12-29', '2025-01-12', '2025-01-26']),
  ('dtstart on listed day',
   ['2025-01-06', 2, [0, 3], 0, 4],
   ['2025-01-06', '2025-01-09', '2025-01-20', '2025-01-23']),
  ('WKST=SU interval 2 from saturday',
   ['2025-03-01', 2, [6, 5], 6, 5],
   ['2025-03-01', '2025-03-09', '2025-03-15', '2025-03-23', '2025-03-29']),
  ('regression: WKST=SU interval 2 TU,SU',
   ['1997-08-05', 2, [1, 6], 6, 4],
   ['1997-08-05', '1997-08-17', '1997-08-19', '1997-08-31'])],
 [('WKST=WE interval 2 MO,TH',
   ['2024-06-04', 2, [0, 3], 2, 5],
   ['2024-06-13', '2024-06-17', '2024-06-27', '2024-07-01', '2024-07-11']),
  ('single sunday series', ['2024-12-29', 2, [6], 0, 3], ['2024-12-29', '2025-01-12', '2025-01-26']),
  ('dtstart on listed day',
   ['2025-01-06', 2, [0, 3], 0, 4],
   ['2025-01-06', '2025-01-09', '2025-01-20', '2025-01-23']),
  ('WKST=SU interval 2 from saturday',
   ['2025-03-01', 2, [6, 5], 6, 5],
   ['2025-03-01', '2025-03-09', '2025-03-15', '2025-03-23', '2025-03-29']),
  ('regression: WKST=SU interval 2 TU,SU',
   ['1997-08-05', 2, [1, 6], 6, 4],
   ['1997-08-05', '1997-08-17', '1997-08-19', '1997-08-31']),
  ('regression: WKST=MO interval 2 TU,SU',
   ['1997-08-05', 2, [1, 6], 0, 4],
   ['1997-08-05', '1997-08-10', '1997-08-19', '1997-08-24']),
  ('non-matching dtstart Wednesday',
   ['2024-01-03', 1, [0, 4], 0, 3],
   ['2024-01-05', '2024-01-08', '2024-01-12'])]]
for label, args, expected in fixtures[N-1]:
    check(label, solve(*args), expected)
print(json.dumps({"observations": observations, "passed": all(x["passed"] for x in observations)}, ensure_ascii=False))
raise SystemExit(0 if all(x["passed"] for x in observations) else 1)
Boundary fixtureActualExpectedOutcome
regression: WKST=SU interval 2 TU,SU['1997-08-17', '1997-08-19', '1997-08-31', '1997-09-02']['1997-08-05', '1997-08-17', '1997-08-19', '1997-08-31']Failed
regression: WKST=MO interval 2 TU,SU['1997-08-10', '1997-08-19', '1997-08-24', '1997-09-02']['1997-08-05', '1997-08-10', '1997-08-19', '1997-08-24']Failed
non-matching dtstart Wednesday['2024-01-05', '2024-01-08', '2024-01-12']['2024-01-05', '2024-01-08', '2024-01-12']Passed
dtstart mid-week weekly MO,WE,FR['2024-01-05', '2024-01-08', '2024-01-10', '2024-01-12', '2024-01-15']['2024-01-05', '2024-01-08', '2024-01-10', '2024-01-12', '2024-01-15']Passed
empty BYDAY uses dtstart weekday['2024-03-21', '2024-04-11', '2024-05-02']['2024-02-29', '2024-03-21', '2024-04-11']Failed
count zero[][]Passed
WKST=SU weekly SA,SU['2024-03-10', '2024-03-16', '2024-03-17', '2024-03-23']['2024-03-09', '2024-03-10', '2024-03-16', '2024-03-17']Failed

SHA-256 / b38966b393f3e8969be3f80dba5a66d0ca3027dfd2a22331b2b31082a5eac496

3 / The verified repair

Exit 0
"""Failure Map reference implementation. Python standard library only."""
import json
import datetime as dt
import calendar
N = 1
observations = []
def solve(dtstart, interval, byday, wkst, count):
    start = dt.date.fromisoformat(dtstart)
    days = sorted(set(byday)) if byday else [start.weekday()]
    week0 = start - dt.timedelta(days=(start.weekday() - wkst) % 7)
    out = []
    for k in range(600):
        week = week0 + dt.timedelta(weeks=k * interval)
        for wd in sorted(days, key=lambda w: (w - wkst) % 7):
            d = week + dt.timedelta(days=(wd - wkst) % 7)
            if d < start:
                continue
            if len(out) >= count:
                return out
            out.append(d.isoformat())
    return out
def check(label, actual, expected):
    observations.append({"check": label, "actual": actual, "expected": expected, "passed": actual == expected})
fixtures = [[('regression: WKST=SU interval 2 TU,SU',
   ['1997-08-05', 2, [1, 6], 6, 4],
   ['1997-08-05', '1997-08-17', '1997-08-19', '1997-08-31']),
  ('regression: WKST=MO interval 2 TU,SU',
   ['1997-08-05', 2, [1, 6], 0, 4],
   ['1997-08-05', '1997-08-10', '1997-08-19', '1997-08-24']),
  ('non-matching dtstart Wednesday',
   ['2024-01-03', 1, [0, 4], 0, 3],
   ['2024-01-05', '2024-01-08', '2024-01-12']),
  ('dtstart mid-week weekly MO,WE,FR',
   ['2024-01-04', 1, [0, 2, 4], 0, 5],
   ['2024-01-05', '2024-01-08', '2024-01-10', '2024-01-12', '2024-01-15']),
  ('empty BYDAY uses dtstart weekday',
   ['2024-02-29', 3, [], 0, 3],
   ['2024-02-29', '2024-03-21', '2024-04-11']),
  ('count zero', ['2024-01-01', 1, [0], 0, 0], []),
  ('WKST=SU weekly SA,SU',
   ['2024-03-09', 1, [5, 6], 6, 4],
   ['2024-03-09', '2024-03-10', '2024-03-16', '2024-03-17'])],
 [('non-matching dtstart Wednesday',
   ['2024-01-03', 1, [0, 4], 0, 3],
   ['2024-01-05', '2024-01-08', '2024-01-12']),
  ('dtstart mid-week weekly MO,WE,FR',
   ['2024-01-04', 1, [0, 2, 4], 0, 5],
   ['2024-01-05', '2024-01-08', '2024-01-10', '2024-01-12', '2024-01-15']),
  ('empty BYDAY uses dtstart weekday',
   ['2024-02-29', 3, [], 0, 3],
   ['2024-02-29', '2024-03-21', '2024-04-11']),
  ('count zero', ['2024-01-01', 1, [0], 0, 0], []),
  ('WKST=SU weekly SA,SU',
   ['2024-03-09', 1, [5, 6], 6, 4],
   ['2024-03-09', '2024-03-10', '2024-03-16', '2024-03-17']),
  ('interval 3 friday from monday', ['2024-05-06', 3, [4], 0, 3], ['2024-05-10', '2024-05-31', '2024-06-21']),
  ('WKST=WE interval 2 MO,TH',
   ['2024-06-04', 2, [0, 3], 2, 5],
   ['2024-06-13', '2024-06-17', '2024-06-27', '2024-07-01', '2024-07-11'])],
 [('empty BYDAY uses dtstart weekday',
   ['2024-02-29', 3, [], 0, 3],
   ['2024-02-29', '2024-03-21', '2024-04-11']),
  ('count zero', ['2024-01-01', 1, [0], 0, 0], []),
  ('WKST=SU weekly SA,SU',
   ['2024-03-09', 1, [5, 6], 6, 4],
   ['2024-03-09', '2024-03-10', '2024-03-16', '2024-03-17']),
  ('interval 3 friday from monday', ['2024-05-06', 3, [4], 0, 3], ['2024-05-10', '2024-05-31', '2024-06-21']),
  ('WKST=WE interval 2 MO,TH',
   ['2024-06-04', 2, [0, 3], 2, 5],
   ['2024-06-13', '2024-06-17', '2024-06-27', '2024-07-01', '2024-07-11']),
  ('single sunday series', ['2024-12-29', 2, [6], 0, 3], ['2024-12-29', '2025-01-12', '2025-01-26']),
  ('dtstart on listed day',
   ['2025-01-06', 2, [0, 3], 0, 4],
   ['2025-01-06', '2025-01-09', '2025-01-20', '2025-01-23'])],
 [('WKST=SU weekly SA,SU',
   ['2024-03-09', 1, [5, 6], 6, 4],
   ['2024-03-09', '2024-03-10', '2024-03-16', '2024-03-17']),
  ('interval 3 friday from monday', ['2024-05-06', 3, [4], 0, 3], ['2024-05-10', '2024-05-31', '2024-06-21']),
  ('WKST=WE interval 2 MO,TH',
   ['2024-06-04', 2, [0, 3], 2, 5],
   ['2024-06-13', '2024-06-17', '2024-06-27', '2024-07-01', '2024-07-11']),
  ('single sunday series', ['2024-12-29', 2, [6], 0, 3], ['2024-12-29', '2025-01-12', '2025-01-26']),
  ('dtstart on listed day',
   ['2025-01-06', 2, [0, 3], 0, 4],
   ['2025-01-06', '2025-01-09', '2025-01-20', '2025-01-23']),
  ('WKST=SU interval 2 from saturday',
   ['2025-03-01', 2, [6, 5], 6, 5],
   ['2025-03-01', '2025-03-09', '2025-03-15', '2025-03-23', '2025-03-29']),
  ('regression: WKST=SU interval 2 TU,SU',
   ['1997-08-05', 2, [1, 6], 6, 4],
   ['1997-08-05', '1997-08-17', '1997-08-19', '1997-08-31'])],
 [('WKST=WE interval 2 MO,TH',
   ['2024-06-04', 2, [0, 3], 2, 5],
   ['2024-06-13', '2024-06-17', '2024-06-27', '2024-07-01', '2024-07-11']),
  ('single sunday series', ['2024-12-29', 2, [6], 0, 3], ['2024-12-29', '2025-01-12', '2025-01-26']),
  ('dtstart on listed day',
   ['2025-01-06', 2, [0, 3], 0, 4],
   ['2025-01-06', '2025-01-09', '2025-01-20', '2025-01-23']),
  ('WKST=SU interval 2 from saturday',
   ['2025-03-01', 2, [6, 5], 6, 5],
   ['2025-03-01', '2025-03-09', '2025-03-15', '2025-03-23', '2025-03-29']),
  ('regression: WKST=SU interval 2 TU,SU',
   ['1997-08-05', 2, [1, 6], 6, 4],
   ['1997-08-05', '1997-08-17', '1997-08-19', '1997-08-31']),
  ('regression: WKST=MO interval 2 TU,SU',
   ['1997-08-05', 2, [1, 6], 0, 4],
   ['1997-08-05', '1997-08-10', '1997-08-19', '1997-08-24']),
  ('non-matching dtstart Wednesday',
   ['2024-01-03', 1, [0, 4], 0, 3],
   ['2024-01-05', '2024-01-08', '2024-01-12'])]]
for label, args, expected in fixtures[N-1]:
    check(label, solve(*args), expected)
print(json.dumps({"observations": observations, "passed": all(x["passed"] for x in observations)}, ensure_ascii=False))
raise SystemExit(0 if all(x["passed"] for x in observations) else 1)
Boundary fixtureActualExpectedOutcome
regression: WKST=SU interval 2 TU,SU['1997-08-05', '1997-08-17', '1997-08-19', '1997-08-31']['1997-08-05', '1997-08-17', '1997-08-19', '1997-08-31']Passed
regression: WKST=MO interval 2 TU,SU['1997-08-05', '1997-08-10', '1997-08-19', '1997-08-24']['1997-08-05', '1997-08-10', '1997-08-19', '1997-08-24']Passed
non-matching dtstart Wednesday['2024-01-05', '2024-01-08', '2024-01-12']['2024-01-05', '2024-01-08', '2024-01-12']Passed
dtstart mid-week weekly MO,WE,FR['2024-01-05', '2024-01-08', '2024-01-10', '2024-01-12', '2024-01-15']['2024-01-05', '2024-01-08', '2024-01-10', '2024-01-12', '2024-01-15']Passed
empty BYDAY uses dtstart weekday['2024-02-29', '2024-03-21', '2024-04-11']['2024-02-29', '2024-03-21', '2024-04-11']Passed
count zero[][]Passed
WKST=SU weekly SA,SU['2024-03-09', '2024-03-10', '2024-03-16', '2024-03-17']['2024-03-09', '2024-03-10', '2024-03-16', '2024-03-17']Passed

SHA-256 / bf0638a224bfd45196184fc0d883901496b446834ce5fe5ef559de0bc3b8fabf

Verification & scope

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.

Observations recorded using Python 3.12.14 at 2026-09-29T14:49:20.030470+00:00.

Case digest / 418196890071f796cfe585221e0a9cc5cee61f532193fc60103bb61ef752586f