FA-77141 / Calendar recurrence rules / Open access
Monthly day 29-31 with OMIT/BACKWARD/FORWARD skip policy: skip default · case 01
A series without an explicit skip policy moves missing days forward instead of omitting them.
ROOT CAUSE
A missing skip value falls through to the FORWARD branch.
VERIFIED REPAIR
At the skip default decision use `skip in (None, 'OMIT')`, leaving the other decision sites of the model unchanged.
Unsuccessful approach: The partial repair `not skip or skip == 'omit'` compares against a lowercase token, so an explicit OMIT falls through to FORWARD.
Case contract
FREQ=MONTHLY on a fixed monthday from the dtstart month. When the day does not exist in a month, skip decides: OMIT (also the default when skip is None) drops the month, BACKWARD uses the last day of the month, FORWARD uses the first day of the following month. February has 29 days in leap years. Instances before dtstart are dropped. 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, monthday, skip, count):
start = dt.date.fromisoformat(dtstart)
out = []
for k in range(240):
mi = start.month - 1 + k
y, m = start.year + mi // 12, mi % 12 + 1
dim = calendar.monthrange(y, m)[1]
if monthday <= dim:
d = dt.date(y, m, monthday)
elif skip == 'OMIT':
continue
elif skip == 'BACKWARD':
d = dt.date(y, m, dim)
else:
d = dt.date(y, m, dim) + dt.timedelta(days=1)
if d < start:
continue
out.append(d.isoformat())
if len(out) >= count:
break
return out
def check(label, actual, expected):
observations.append({"check": label, "actual": actual, "expected": expected, "passed": actual == expected})
fixtures = [[('regression: 31st forward in common year',
['2023-01-31', 31, 'FORWARD', 4],
['2023-01-31', '2023-03-01', '2023-03-31', '2023-05-01']),
('default omits', ['2023-01-30', 30, None, 3], ['2023-01-30', '2023-03-30', '2023-04-30']),
('explicit omit', ['2023-01-31', 31, 'OMIT', 3], ['2023-01-31', '2023-03-31', '2023-05-31']),
('backward from 31st',
['2024-03-31', 31, 'BACKWARD', 4],
['2024-03-31', '2024-04-30', '2024-05-31', '2024-06-30']),
('leap february 29', ['2024-01-29', 29, 'BACKWARD', 3], ['2024-01-29', '2024-02-29', '2024-03-29']),
('common february 29 backward',
['2023-01-29', 29, 'BACKWARD', 3],
['2023-01-29', '2023-02-28', '2023-03-29']),
('forward 30th in february leap',
['2024-01-30', 30, 'FORWARD', 3],
['2024-01-30', '2024-03-01', '2024-03-30'])],
[('explicit omit', ['2023-01-31', 31, 'OMIT', 3], ['2023-01-31', '2023-03-31', '2023-05-31']),
('backward from 31st',
['2024-03-31', 31, 'BACKWARD', 4],
['2024-03-31', '2024-04-30', '2024-05-31', '2024-06-30']),
('leap february 29', ['2024-01-29', 29, 'BACKWARD', 3], ['2024-01-29', '2024-02-29', '2024-03-29']),
('common february 29 backward',
['2023-01-29', 29, 'BACKWARD', 3],
['2023-01-29', '2023-02-28', '2023-03-29']),
('forward 30th in february leap',
['2024-01-30', 30, 'FORWARD', 3],
['2024-01-30', '2024-03-01', '2024-03-30']),
('backward 30th in february',
['2023-01-30', 30, 'BACKWARD', 3],
['2023-01-30', '2023-02-28', '2023-03-30']),
('forward 29th in common february',
['2023-01-29', 29, 'FORWARD', 3],
['2023-01-29', '2023-03-01', '2023-03-29']),
('default omits', ['2023-01-30', 30, None, 3], ['2023-01-30', '2023-03-30', '2023-04-30'])],
[('leap february 29', ['2024-01-29', 29, 'BACKWARD', 3], ['2024-01-29', '2024-02-29', '2024-03-29']),
('common february 29 backward',
['2023-01-29', 29, 'BACKWARD', 3],
['2023-01-29', '2023-02-28', '2023-03-29']),
('forward 30th in february leap',
['2024-01-30', 30, 'FORWARD', 3],
['2024-01-30', '2024-03-01', '2024-03-30']),
('backward 30th in february',
['2023-01-30', 30, 'BACKWARD', 3],
['2023-01-30', '2023-02-28', '2023-03-30']),
('forward 29th in common february',
['2023-01-29', 29, 'FORWARD', 3],
['2023-01-29', '2023-03-01', '2023-03-29']),
('leap day omit', ['2024-01-29', 29, None, 3], ['2024-01-29', '2024-02-29', '2024-03-29']),
('forward from april 31', ['2024-04-15', 31, 'FORWARD', 3], ['2024-05-01', '2024-05-31', '2024-07-01']),
('century common february', ['2100-01-29', 29, 'OMIT', 3], ['2100-01-29', '2100-03-29', '2100-04-29']),
('default omits', ['2023-01-30', 30, None, 3], ['2023-01-30', '2023-03-30', '2023-04-30'])],
[('forward 30th in february leap',
['2024-01-30', 30, 'FORWARD', 3],
['2024-01-30', '2024-03-01', '2024-03-30']),
('backward 30th in february',
['2023-01-30', 30, 'BACKWARD', 3],
['2023-01-30', '2023-02-28', '2023-03-30']),
('forward 29th in common february',
['2023-01-29', 29, 'FORWARD', 3],
['2023-01-29', '2023-03-01', '2023-03-29']),
('leap day omit', ['2024-01-29', 29, None, 3], ['2024-01-29', '2024-02-29', '2024-03-29']),
('forward from april 31', ['2024-04-15', 31, 'FORWARD', 3], ['2024-05-01', '2024-05-31', '2024-07-01']),
('backward 31st leap february',
['2024-01-31', 31, 'BACKWARD', 3],
['2024-01-31', '2024-02-29', '2024-03-31']),
('century leap day', ['2000-01-29', 29, 'OMIT', 3], ['2000-01-29', '2000-02-29', '2000-03-29']),
('default omits', ['2023-01-30', 30, None, 3], ['2023-01-30', '2023-03-30', '2023-04-30']),
('explicit omit', ['2023-01-31', 31, 'OMIT', 3], ['2023-01-31', '2023-03-31', '2023-05-31'])],
[('forward 29th in common february',
['2023-01-29', 29, 'FORWARD', 3],
['2023-01-29', '2023-03-01', '2023-03-29']),
('leap day omit', ['2024-01-29', 29, None, 3], ['2024-01-29', '2024-02-29', '2024-03-29']),
('forward from april 31', ['2024-04-15', 31, 'FORWARD', 3], ['2024-05-01', '2024-05-31', '2024-07-01']),
('backward 31st leap february',
['2024-01-31', 31, 'BACKWARD', 3],
['2024-01-31', '2024-02-29', '2024-03-31']),
('century leap day', ['2000-01-29', 29, 'OMIT', 3], ['2000-01-29', '2000-02-29', '2000-03-29']),
('century common february', ['2100-01-29', 29, 'OMIT', 3], ['2100-01-29', '2100-03-29', '2100-04-29']),
('regression: 31st forward in common year',
['2023-01-31', 31, 'FORWARD', 4],
['2023-01-31', '2023-03-01', '2023-03-31', '2023-05-01']),
('default omits', ['2023-01-30', 30, None, 3], ['2023-01-30', '2023-03-30', '2023-04-30'])]]
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 fixture | Actual | Expected | Outcome |
|---|---|---|---|
| regression: 31st forward in common year | ['2023-01-31', '2023-03-01', '2023-03-31', '2023-05-01'] | ['2023-01-31', '2023-03-01', '2023-03-31', '2023-05-01'] | Passed |
| default omits | ['2023-01-30', '2023-03-01', '2023-03-30'] | ['2023-01-30', '2023-03-30', '2023-04-30'] | Failed |
| explicit omit | ['2023-01-31', '2023-03-31', '2023-05-31'] | ['2023-01-31', '2023-03-31', '2023-05-31'] | Passed |
| backward from 31st | ['2024-03-31', '2024-04-30', '2024-05-31', '2024-06-30'] | ['2024-03-31', '2024-04-30', '2024-05-31', '2024-06-30'] | Passed |
| leap february 29 | ['2024-01-29', '2024-02-29', '2024-03-29'] | ['2024-01-29', '2024-02-29', '2024-03-29'] | Passed |
| common february 29 backward | ['2023-01-29', '2023-02-28', '2023-03-29'] | ['2023-01-29', '2023-02-28', '2023-03-29'] | Passed |
| forward 30th in february leap | ['2024-01-30', '2024-03-01', '2024-03-30'] | ['2024-01-30', '2024-03-01', '2024-03-30'] | Passed |
SHA-256 / a0b53b60e4d16fc7be0a4715a920f8d5e54fed04c9a89d29f75a3688ab533e81
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, monthday, skip, count):
start = dt.date.fromisoformat(dtstart)
out = []
for k in range(240):
mi = start.month - 1 + k
y, m = start.year + mi // 12, mi % 12 + 1
dim = calendar.monthrange(y, m)[1]
if monthday <= dim:
d = dt.date(y, m, monthday)
elif not skip or skip == 'omit':
continue
elif skip == 'BACKWARD':
d = dt.date(y, m, dim)
else:
d = dt.date(y, m, dim) + dt.timedelta(days=1)
if d < start:
continue
out.append(d.isoformat())
if len(out) >= count:
break
return out
def check(label, actual, expected):
observations.append({"check": label, "actual": actual, "expected": expected, "passed": actual == expected})
fixtures = [[('regression: 31st forward in common year',
['2023-01-31', 31, 'FORWARD', 4],
['2023-01-31', '2023-03-01', '2023-03-31', '2023-05-01']),
('default omits', ['2023-01-30', 30, None, 3], ['2023-01-30', '2023-03-30', '2023-04-30']),
('explicit omit', ['2023-01-31', 31, 'OMIT', 3], ['2023-01-31', '2023-03-31', '2023-05-31']),
('backward from 31st',
['2024-03-31', 31, 'BACKWARD', 4],
['2024-03-31', '2024-04-30', '2024-05-31', '2024-06-30']),
('leap february 29', ['2024-01-29', 29, 'BACKWARD', 3], ['2024-01-29', '2024-02-29', '2024-03-29']),
('common february 29 backward',
['2023-01-29', 29, 'BACKWARD', 3],
['2023-01-29', '2023-02-28', '2023-03-29']),
('forward 30th in february leap',
['2024-01-30', 30, 'FORWARD', 3],
['2024-01-30', '2024-03-01', '2024-03-30'])],
[('explicit omit', ['2023-01-31', 31, 'OMIT', 3], ['2023-01-31', '2023-03-31', '2023-05-31']),
('backward from 31st',
['2024-03-31', 31, 'BACKWARD', 4],
['2024-03-31', '2024-04-30', '2024-05-31', '2024-06-30']),
('leap february 29', ['2024-01-29', 29, 'BACKWARD', 3], ['2024-01-29', '2024-02-29', '2024-03-29']),
('common february 29 backward',
['2023-01-29', 29, 'BACKWARD', 3],
['2023-01-29', '2023-02-28', '2023-03-29']),
('forward 30th in february leap',
['2024-01-30', 30, 'FORWARD', 3],
['2024-01-30', '2024-03-01', '2024-03-30']),
('backward 30th in february',
['2023-01-30', 30, 'BACKWARD', 3],
['2023-01-30', '2023-02-28', '2023-03-30']),
('forward 29th in common february',
['2023-01-29', 29, 'FORWARD', 3],
['2023-01-29', '2023-03-01', '2023-03-29']),
('default omits', ['2023-01-30', 30, None, 3], ['2023-01-30', '2023-03-30', '2023-04-30'])],
[('leap february 29', ['2024-01-29', 29, 'BACKWARD', 3], ['2024-01-29', '2024-02-29', '2024-03-29']),
('common february 29 backward',
['2023-01-29', 29, 'BACKWARD', 3],
['2023-01-29', '2023-02-28', '2023-03-29']),
('forward 30th in february leap',
['2024-01-30', 30, 'FORWARD', 3],
['2024-01-30', '2024-03-01', '2024-03-30']),
('backward 30th in february',
['2023-01-30', 30, 'BACKWARD', 3],
['2023-01-30', '2023-02-28', '2023-03-30']),
('forward 29th in common february',
['2023-01-29', 29, 'FORWARD', 3],
['2023-01-29', '2023-03-01', '2023-03-29']),
('leap day omit', ['2024-01-29', 29, None, 3], ['2024-01-29', '2024-02-29', '2024-03-29']),
('forward from april 31', ['2024-04-15', 31, 'FORWARD', 3], ['2024-05-01', '2024-05-31', '2024-07-01']),
('century common february', ['2100-01-29', 29, 'OMIT', 3], ['2100-01-29', '2100-03-29', '2100-04-29']),
('default omits', ['2023-01-30', 30, None, 3], ['2023-01-30', '2023-03-30', '2023-04-30'])],
[('forward 30th in february leap',
['2024-01-30', 30, 'FORWARD', 3],
['2024-01-30', '2024-03-01', '2024-03-30']),
('backward 30th in february',
['2023-01-30', 30, 'BACKWARD', 3],
['2023-01-30', '2023-02-28', '2023-03-30']),
('forward 29th in common february',
['2023-01-29', 29, 'FORWARD', 3],
['2023-01-29', '2023-03-01', '2023-03-29']),
('leap day omit', ['2024-01-29', 29, None, 3], ['2024-01-29', '2024-02-29', '2024-03-29']),
('forward from april 31', ['2024-04-15', 31, 'FORWARD', 3], ['2024-05-01', '2024-05-31', '2024-07-01']),
('backward 31st leap february',
['2024-01-31', 31, 'BACKWARD', 3],
['2024-01-31', '2024-02-29', '2024-03-31']),
('century leap day', ['2000-01-29', 29, 'OMIT', 3], ['2000-01-29', '2000-02-29', '2000-03-29']),
('default omits', ['2023-01-30', 30, None, 3], ['2023-01-30', '2023-03-30', '2023-04-30']),
('explicit omit', ['2023-01-31', 31, 'OMIT', 3], ['2023-01-31', '2023-03-31', '2023-05-31'])],
[('forward 29th in common february',
['2023-01-29', 29, 'FORWARD', 3],
['2023-01-29', '2023-03-01', '2023-03-29']),
('leap day omit', ['2024-01-29', 29, None, 3], ['2024-01-29', '2024-02-29', '2024-03-29']),
('forward from april 31', ['2024-04-15', 31, 'FORWARD', 3], ['2024-05-01', '2024-05-31', '2024-07-01']),
('backward 31st leap february',
['2024-01-31', 31, 'BACKWARD', 3],
['2024-01-31', '2024-02-29', '2024-03-31']),
('century leap day', ['2000-01-29', 29, 'OMIT', 3], ['2000-01-29', '2000-02-29', '2000-03-29']),
('century common february', ['2100-01-29', 29, 'OMIT', 3], ['2100-01-29', '2100-03-29', '2100-04-29']),
('regression: 31st forward in common year',
['2023-01-31', 31, 'FORWARD', 4],
['2023-01-31', '2023-03-01', '2023-03-31', '2023-05-01']),
('default omits', ['2023-01-30', 30, None, 3], ['2023-01-30', '2023-03-30', '2023-04-30'])]]
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 fixture | Actual | Expected | Outcome |
|---|---|---|---|
| regression: 31st forward in common year | ['2023-01-31', '2023-03-01', '2023-03-31', '2023-05-01'] | ['2023-01-31', '2023-03-01', '2023-03-31', '2023-05-01'] | Passed |
| default omits | ['2023-01-30', '2023-03-30', '2023-04-30'] | ['2023-01-30', '2023-03-30', '2023-04-30'] | Passed |
| explicit omit | ['2023-01-31', '2023-03-01', '2023-03-31'] | ['2023-01-31', '2023-03-31', '2023-05-31'] | Failed |
| backward from 31st | ['2024-03-31', '2024-04-30', '2024-05-31', '2024-06-30'] | ['2024-03-31', '2024-04-30', '2024-05-31', '2024-06-30'] | Passed |
| leap february 29 | ['2024-01-29', '2024-02-29', '2024-03-29'] | ['2024-01-29', '2024-02-29', '2024-03-29'] | Passed |
| common february 29 backward | ['2023-01-29', '2023-02-28', '2023-03-29'] | ['2023-01-29', '2023-02-28', '2023-03-29'] | Passed |
| forward 30th in february leap | ['2024-01-30', '2024-03-01', '2024-03-30'] | ['2024-01-30', '2024-03-01', '2024-03-30'] | Passed |
SHA-256 / 498cbd21f5782d05a8bef01c60b79d41e673be195527aec7fb69b3f823f0e158
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, monthday, skip, count):
start = dt.date.fromisoformat(dtstart)
out = []
for k in range(240):
mi = start.month - 1 + k
y, m = start.year + mi // 12, mi % 12 + 1
dim = calendar.monthrange(y, m)[1]
if monthday <= dim:
d = dt.date(y, m, monthday)
elif skip in (None, 'OMIT'):
continue
elif skip == 'BACKWARD':
d = dt.date(y, m, dim)
else:
d = dt.date(y, m, dim) + dt.timedelta(days=1)
if d < start:
continue
out.append(d.isoformat())
if len(out) >= count:
break
return out
def check(label, actual, expected):
observations.append({"check": label, "actual": actual, "expected": expected, "passed": actual == expected})
fixtures = [[('regression: 31st forward in common year',
['2023-01-31', 31, 'FORWARD', 4],
['2023-01-31', '2023-03-01', '2023-03-31', '2023-05-01']),
('default omits', ['2023-01-30', 30, None, 3], ['2023-01-30', '2023-03-30', '2023-04-30']),
('explicit omit', ['2023-01-31', 31, 'OMIT', 3], ['2023-01-31', '2023-03-31', '2023-05-31']),
('backward from 31st',
['2024-03-31', 31, 'BACKWARD', 4],
['2024-03-31', '2024-04-30', '2024-05-31', '2024-06-30']),
('leap february 29', ['2024-01-29', 29, 'BACKWARD', 3], ['2024-01-29', '2024-02-29', '2024-03-29']),
('common february 29 backward',
['2023-01-29', 29, 'BACKWARD', 3],
['2023-01-29', '2023-02-28', '2023-03-29']),
('forward 30th in february leap',
['2024-01-30', 30, 'FORWARD', 3],
['2024-01-30', '2024-03-01', '2024-03-30'])],
[('explicit omit', ['2023-01-31', 31, 'OMIT', 3], ['2023-01-31', '2023-03-31', '2023-05-31']),
('backward from 31st',
['2024-03-31', 31, 'BACKWARD', 4],
['2024-03-31', '2024-04-30', '2024-05-31', '2024-06-30']),
('leap february 29', ['2024-01-29', 29, 'BACKWARD', 3], ['2024-01-29', '2024-02-29', '2024-03-29']),
('common february 29 backward',
['2023-01-29', 29, 'BACKWARD', 3],
['2023-01-29', '2023-02-28', '2023-03-29']),
('forward 30th in february leap',
['2024-01-30', 30, 'FORWARD', 3],
['2024-01-30', '2024-03-01', '2024-03-30']),
('backward 30th in february',
['2023-01-30', 30, 'BACKWARD', 3],
['2023-01-30', '2023-02-28', '2023-03-30']),
('forward 29th in common february',
['2023-01-29', 29, 'FORWARD', 3],
['2023-01-29', '2023-03-01', '2023-03-29']),
('default omits', ['2023-01-30', 30, None, 3], ['2023-01-30', '2023-03-30', '2023-04-30'])],
[('leap february 29', ['2024-01-29', 29, 'BACKWARD', 3], ['2024-01-29', '2024-02-29', '2024-03-29']),
('common february 29 backward',
['2023-01-29', 29, 'BACKWARD', 3],
['2023-01-29', '2023-02-28', '2023-03-29']),
('forward 30th in february leap',
['2024-01-30', 30, 'FORWARD', 3],
['2024-01-30', '2024-03-01', '2024-03-30']),
('backward 30th in february',
['2023-01-30', 30, 'BACKWARD', 3],
['2023-01-30', '2023-02-28', '2023-03-30']),
('forward 29th in common february',
['2023-01-29', 29, 'FORWARD', 3],
['2023-01-29', '2023-03-01', '2023-03-29']),
('leap day omit', ['2024-01-29', 29, None, 3], ['2024-01-29', '2024-02-29', '2024-03-29']),
('forward from april 31', ['2024-04-15', 31, 'FORWARD', 3], ['2024-05-01', '2024-05-31', '2024-07-01']),
('century common february', ['2100-01-29', 29, 'OMIT', 3], ['2100-01-29', '2100-03-29', '2100-04-29']),
('default omits', ['2023-01-30', 30, None, 3], ['2023-01-30', '2023-03-30', '2023-04-30'])],
[('forward 30th in february leap',
['2024-01-30', 30, 'FORWARD', 3],
['2024-01-30', '2024-03-01', '2024-03-30']),
('backward 30th in february',
['2023-01-30', 30, 'BACKWARD', 3],
['2023-01-30', '2023-02-28', '2023-03-30']),
('forward 29th in common february',
['2023-01-29', 29, 'FORWARD', 3],
['2023-01-29', '2023-03-01', '2023-03-29']),
('leap day omit', ['2024-01-29', 29, None, 3], ['2024-01-29', '2024-02-29', '2024-03-29']),
('forward from april 31', ['2024-04-15', 31, 'FORWARD', 3], ['2024-05-01', '2024-05-31', '2024-07-01']),
('backward 31st leap february',
['2024-01-31', 31, 'BACKWARD', 3],
['2024-01-31', '2024-02-29', '2024-03-31']),
('century leap day', ['2000-01-29', 29, 'OMIT', 3], ['2000-01-29', '2000-02-29', '2000-03-29']),
('default omits', ['2023-01-30', 30, None, 3], ['2023-01-30', '2023-03-30', '2023-04-30']),
('explicit omit', ['2023-01-31', 31, 'OMIT', 3], ['2023-01-31', '2023-03-31', '2023-05-31'])],
[('forward 29th in common february',
['2023-01-29', 29, 'FORWARD', 3],
['2023-01-29', '2023-03-01', '2023-03-29']),
('leap day omit', ['2024-01-29', 29, None, 3], ['2024-01-29', '2024-02-29', '2024-03-29']),
('forward from april 31', ['2024-04-15', 31, 'FORWARD', 3], ['2024-05-01', '2024-05-31', '2024-07-01']),
('backward 31st leap february',
['2024-01-31', 31, 'BACKWARD', 3],
['2024-01-31', '2024-02-29', '2024-03-31']),
('century leap day', ['2000-01-29', 29, 'OMIT', 3], ['2000-01-29', '2000-02-29', '2000-03-29']),
('century common february', ['2100-01-29', 29, 'OMIT', 3], ['2100-01-29', '2100-03-29', '2100-04-29']),
('regression: 31st forward in common year',
['2023-01-31', 31, 'FORWARD', 4],
['2023-01-31', '2023-03-01', '2023-03-31', '2023-05-01']),
('default omits', ['2023-01-30', 30, None, 3], ['2023-01-30', '2023-03-30', '2023-04-30'])]]
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 fixture | Actual | Expected | Outcome |
|---|---|---|---|
| regression: 31st forward in common year | ['2023-01-31', '2023-03-01', '2023-03-31', '2023-05-01'] | ['2023-01-31', '2023-03-01', '2023-03-31', '2023-05-01'] | Passed |
| default omits | ['2023-01-30', '2023-03-30', '2023-04-30'] | ['2023-01-30', '2023-03-30', '2023-04-30'] | Passed |
| explicit omit | ['2023-01-31', '2023-03-31', '2023-05-31'] | ['2023-01-31', '2023-03-31', '2023-05-31'] | Passed |
| backward from 31st | ['2024-03-31', '2024-04-30', '2024-05-31', '2024-06-30'] | ['2024-03-31', '2024-04-30', '2024-05-31', '2024-06-30'] | Passed |
| leap february 29 | ['2024-01-29', '2024-02-29', '2024-03-29'] | ['2024-01-29', '2024-02-29', '2024-03-29'] | Passed |
| common february 29 backward | ['2023-01-29', '2023-02-28', '2023-03-29'] | ['2023-01-29', '2023-02-28', '2023-03-29'] | Passed |
| forward 30th in february leap | ['2024-01-30', '2024-03-01', '2024-03-30'] | ['2024-01-30', '2024-03-01', '2024-03-30'] | Passed |
SHA-256 / 30a5dc54e908994baf7340d22ccb88fe72ddd1b02436842353a82472622c8232
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:22.636886+00:00.
Case digest / 958313c4ef97144a0e4840752a987ca843ade24230a06a86cad53b596f3c7521