FAILURE MAP
← Case archive

FA-66396 / Airline fare rule evaluation / Open access

Year carry computed from one-based month · case 01

A November departure with a one-month maximum stay gets a December limit in the following year.

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

ROOT CAUSE

The year carry divides the one-based month sum, so reaching December rolls the year early.

THE FAILURE

The year carry divides the one-based month sum, so reaching December rolls the year early.

Unsuccessful approach: Ignoring the month carry fails to roll the year for late-year departures.

Case contract

Input {'depart','return' ISO dates,'rule':{'sat_night','min_days','max_months'}}. Saturday-night rule: return on or after the Sunday following the first Saturday on or after departure. Min stay: return - depart >= min_days. Max stay: return <= departure date plus max_months calendar months; a month-end departure maps to the target month end, otherwise day clamps to month length. Return failed rule names in order SAT, MIN, MAX.

Why this case matters

Stay restrictions mix weekday logic and calendar-month arithmetic with month-end and year-rollover rules.

1 / The failure

Exit 1
"""Failure Map reference implementation. Python standard library only."""
import json
import datetime
import calendar
N = 1
observations = []
def solve(x):
    d = datetime.date.fromisoformat(x['depart'])
    r = datetime.date.fromisoformat(x['return'])
    rule = x['rule']
    fails = []
    if rule['sat_night']:
        sun = d + datetime.timedelta(days=(5 - d.weekday()) % 7 + 1)
        if r < sun: fails.append('SAT')
    if (r - d).days < rule['min_days']: fails.append('MIN')
    mo = d.month - 1 + rule['max_months']
    y, mo = d.year + (d.month + rule['max_months']) // 12, mo % 12 + 1
    last = calendar.monthrange(y, mo)[1]
    eom = d.day == calendar.monthrange(d.year, d.month)[1]
    lim = datetime.date(y, mo, last if eom else min(d.day, last))
    if r > lim: fails.append('MAX')
    return fails
def check(label, actual, expected):
    observations.append({"check": label, "actual": actual, "expected": expected, "passed": actual == expected})
fixtures = [[['Sunday departure next-day return', {'depart': '2027-03-07', 'return': '2027-03-08', 'rule': {'sat_night': True, 'min_days': 0, 'max_months': 1}}, ['SAT']], ['Saturday departure Sunday return', {'depart': '2027-03-13', 'return': '2027-03-14', 'rule': {'sat_night': True, 'min_days': 1, 'max_months': 1}}, []], ['Friday out Saturday back', {'depart': '2027-03-12', 'return': '2027-03-13', 'rule': {'sat_night': True, 'min_days': 0, 'max_months': 3}}, ['SAT']], ['month-end max stay', {'depart': '2027-02-28', 'return': '2027-03-30', 'rule': {'sat_night': False, 'min_days': 3, 'max_months': 1}}, []], ['the 28th is not month end', {'depart': '2027-04-28', 'return': '2027-05-30', 'rule': {'sat_night': False, 'min_days': 0, 'max_months': 1}}, ['MAX']], ['Jan 31 plus one month', {'depart': '2027-01-31', 'return': '2027-02-28', 'rule': {'sat_night': False, 'min_days': 0, 'max_months': 1}}, []], ['year rollover max stay', {'depart': '2027-11-11', 'return': '2028-01-10', 'rule': {'sat_night': False, 'min_days': 7, 'max_months': 2}}, []], ['exact minimum stay', {'depart': '2027-06-01', 'return': '2027-06-08', 'rule': {'sat_night': False, 'min_days': 7, 'max_months': 12}}, []], ['December twelve months', {'depart': '2027-12-15', 'return': '2028-12-14', 'rule': {'sat_night': True, 'min_days': 2, 'max_months': 12}}, []], ['sampled case 1', {'depart': '2029-08-19', 'return': '2029-08-28', 'rule': {'sat_night': True, 'min_days': 2, 'max_months': 2}}, []], ['sampled case 2', {'depart': '2028-06-13', 'return': '2028-12-13', 'rule': {'sat_night': True, 'min_days': 0, 'max_months': 12}}, []], ['sampled case 3', {'depart': '2028-04-16', 'return': '2028-08-20', 'rule': {'sat_night': False, 'min_days': 1, 'max_months': 1}}, ['MAX']], ['regression: maximum stay year rollover', {'depart': '2029-10-01', 'return': '2030-01-17', 'rule': {'sat_night': True, 'min_days': 0, 'max_months': 2}}, ['MAX']]], [['Sunday departure next-day return', {'depart': '2027-03-07', 'return': '2027-03-09', 'rule': {'sat_night': True, 'min_days': 0, 'max_months': 1}}, ['SAT']], ['Saturday departure Sunday return', {'depart': '2027-03-13', 'return': '2027-03-14', 'rule': {'sat_night': True, 'min_days': 1, 'max_months': 1}}, []], ['Friday out Saturday back', {'depart': '2027-03-12', 'return': '2027-03-13', 'rule': {'sat_night': True, 'min_days': 0, 'max_months': 3}}, ['SAT']], ['month-end max stay', {'depart': '2027-02-28', 'return': '2027-03-31', 'rule': {'sat_night': False, 'min_days': 3, 'max_months': 1}}, []], ['the 28th is not month end', {'depart': '2027-04-28', 'return': '2027-05-31', 'rule': {'sat_night': False, 'min_days': 0, 'max_months': 1}}, ['MAX']], ['Jan 31 plus one month', {'depart': '2027-01-31', 'return': '2027-02-28', 'rule': {'sat_night': False, 'min_days': 0, 'max_months': 1}}, []], ['year rollover max stay', {'depart': '2027-11-12', 'return': '2028-01-12', 'rule': {'sat_night': False, 'min_days': 7, 'max_months': 2}}, []], ['exact minimum stay', {'depart': '2027-06-01', 'return': '2027-06-08', 'rule': {'sat_night': False, 'min_days': 7, 'max_months': 12}}, []], ['December twelve months', {'depart': '2027-12-15', 'return': '2028-12-15', 'rule': {'sat_night': True, 'min_days': 2, 'max_months': 12}}, []], ['sampled case 1', {'depart': '2029-07-11', 'return': '2029-07-23', 'rule': {'sat_night': True, 'min_days': 7, 'max_months': 12}}, []], ['sampled case 2', {'depart': '2029-06-25', 'return': '2029-12-12', 'rule': {'sat_night': True, 'min_days': 2, 'max_months': 2}}, ['MAX']], ['sampled case 3', {'depart': '2029-02-02', 'return': '2030-02-22', 'rule': {'sat_night': True, 'min_days': 1, 'max_months': 6}}, ['MAX']], ['regression: maximum stay year rollover', {'depart': '2027-11-21', 'return': '2028-01-18', 'rule': {'sat_night': True, 'min_days': 3, 'max_months': 1}}, ['MAX']]], [['Sunday departure next-day return', {'depart': '2027-03-07', 'return': '2027-03-10', 'rule': {'sat_night': True, 'min_days': 0, 'max_months': 1}}, ['SAT']], ['Saturday departure Sunday return', {'depart': '2027-03-13', 'return': '2027-03-14', 'rule': {'sat_night': True, 'min_days': 1, 'max_months': 1}}, []], ['Friday out Saturday back', {'depart': '2027-03-12', 'return': '2027-03-13', 'rule': {'sat_night': True, 'min_days': 0, 'max_months': 3}}, ['SAT']], ['month-end max stay', {'depart': '2027-02-28', 'return': '2027-03-29', 'rule': {'sat_night': False, 'min_days': 3, 'max_months': 1}}, []], ['the 28th is not month end', {'depart': '2027-04-28', 'return': '2027-05-29', 'rule': {'sat_night': False, 'min_days': 0, 'max_months': 1}}, ['MAX']], ['Jan 31 plus one month', {'depart': '2027-01-31', 'return': '2027-02-28', 'rule': {'sat_night': False, 'min_days': 0, 'max_months': 1}}, []], ['year rollover max stay', {'depart': '2027-11-13', 'return': '2028-01-14', 'rule': {'sat_night': False, 'min_days': 7, 'max_months': 2}}, ['MAX']], ['exact minimum stay', {'depart': '2027-06-01', 'return': '2027-06-08', 'rule': {'sat_night': False, 'min_days': 7, 'max_months': 12}}, []], ['December twelve months', {'depart': '2027-12-15', 'return': '2028-12-16', 'rule': {'sat_night': True, 'min_days': 2, 'max_months': 12}}, ['MAX']], ['sampled case 1', {'depart': '2027-10-05', 'return': '2027-10-14', 'rule': {'sat_night': True, 'min_days': 3, 'max_months': 6}}, []], ['sampled case 2', {'depart': '2028-04-06', 'return': '2028-10-12', 'rule': {'sat_night': False, 'min_days': 7, 'max_months': 11}}, []], ['sampled case 3', {'depart': '2027-11-12', 'return': '2027-11-21', 'rule': {'sat_night': False, 'min_days': 0, 'max_months': 2}}, []]], [['Sunday departure next-day return', {'depart': '2027-03-07', 'return': '2027-03-11', 'rule': {'sat_night': True, 'min_days': 0, 'max_months': 1}}, ['SAT']], ['Saturday departure Sunday return', {'depart': '2027-03-13', 'return': '2027-03-14', 'rule': {'sat_night': True, 'min_days': 1, 'max_months': 1}}, []], ['Friday out Saturday back', {'depart': '2027-03-12', 'return': '2027-03-13', 'rule': {'sat_night': True, 'min_days': 0, 'max_months': 3}}, ['SAT']], ['month-end max stay', {'depart': '2027-02-28', 'return': '2027-03-30', 'rule': {'sat_night': False, 'min_days': 3, 'max_months': 1}}, []], ['the 28th is not month end', {'depart': '2027-04-28', 'return': '2027-05-30', 'rule': {'sat_night': False, 'min_days': 0, 'max_months': 1}}, ['MAX']], ['Jan 31 plus one month', {'depart': '2027-01-31', 'return': '2027-02-28', 'rule': {'sat_night': False, 'min_days': 0, 'max_months': 1}}, []], ['year rollover max stay', {'depart': '2027-11-14', 'return': '2028-01-16', 'rule': {'sat_night': False, 'min_days': 7, 'max_months': 2}}, ['MAX']], ['exact minimum stay', {'depart': '2027-06-01', 'return': '2027-06-08', 'rule': {'sat_night': False, 'min_days': 7, 'max_months': 12}}, []], ['December twelve months', {'depart': '2027-12-15', 'return': '2028-12-17', 'rule': {'sat_night': True, 'min_days': 2, 'max_months': 12}}, ['MAX']], ['sampled case 1', {'depart': '2027-06-01', 'return': '2027-06-09', 'rule': {'sat_night': True, 'min_days': 7, 'max_months': 1}}, []], ['sampled case 2', {'depart': '2028-03-04', 'return': '2028-06-07', 'rule': {'sat_night': True, 'min_days': 1, 'max_months': 6}}, []], ['sampled case 3', {'depart': '2029-03-17', 'return': '2029-03-25', 'rule': {'sat_night': True, 'min_days': 0, 'max_months': 12}}, []], ['regression: maximum stay year rollover', {'depart': '2028-12-22', 'return': '2029-08-30', 'rule': {'sat_night': False, 'min_days': 7, 'max_months': 11}}, []]], [['Sunday departure next-day return', {'depart': '2027-03-07', 'return': '2027-03-12', 'rule': {'sat_night': True, 'min_days': 0, 'max_months': 1}}, ['SAT']], ['Saturday departure Sunday return', {'depart': '2027-03-13', 'return': '2027-03-14', 'rule': {'sat_night': True, 'min_days': 1, 'max_months': 1}}, []], ['Friday out Saturday back', {'depart': '2027-03-12', 'return': '2027-03-13', 'rule': {'sat_night': True, 'min_days': 0, 'max_months': 3}}, ['SAT']], ['month-end max stay', {'depart': '2027-02-28', 'return': '2027-03-31', 'rule': {'sat_night': False, 'min_days': 3, 'max_months': 1}}, []], ['the 28th is not month end', {'depart': '2027-04-28', 'return': '2027-05-31', 'rule': {'sat_night': False, 'min_days': 0, 'max_months': 1}}, ['MAX']], ['Jan 31 plus one month', {'depart': '2027-01-31', 'return': '2027-02-28', 'rule': {'sat_night': False, 'min_days': 0, 'max_months': 1}}, []], ['year rollover max stay', {'depart': '2027-11-15', 'return': '2028-01-18', 'rule': {'sat_night': False, 'min_days': 7, 'max_months': 2}}, ['MAX']], ['exact minimum stay', {'depart': '2027-06-01', 'return': '2027-06-08', 'rule': {'sat_night': False, 'min_days': 7, 'max_months': 12}}, []], ['December twelve months', {'depart': '2027-12-15', 'return': '2028-12-18', 'rule': {'sat_night': True, 'min_days': 2, 'max_months': 12}}, ['MAX']], ['sampled case 1', {'depart': '2029-08-05', 'return': '2030-07-02', 'rule': {'sat_night': True, 'min_days': 1, 'max_months': 11}}, []], ['sampled case 2', {'depart': '2028-05-10', 'return': '2028-05-12', 'rule': {'sat_night': False, 'min_days': 2, 'max_months': 11}}, []], ['sampled case 3', {'depart': '2027-09-03', 'return': '2027-09-03', 'rule': {'sat_night': True, 'min_days': 0, 'max_months': 6}}, ['SAT']]]]
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
Sunday departure next-day return['SAT']['SAT']Passed
Saturday departure Sunday return[][]Passed
Friday out Saturday back['SAT']['SAT']Passed
month-end max stay[][]Passed
the 28th is not month end['MAX']['MAX']Passed
Jan 31 plus one month[][]Passed
year rollover max stay[][]Passed
exact minimum stay[][]Passed
December twelve months[][]Passed
sampled case 1[][]Passed
sampled case 2[][]Passed
sampled case 3['MAX']['MAX']Passed
regression: maximum stay year rollover[]['MAX']Failed

SHA-256 / ecc6451c77abeee2fe2857328a68f8ba79e4fe194b795b5712c4a17fcb8401a8

2 / The unsuccessful fix

Exit 1
"""Failure Map reference implementation. Python standard library only."""
import json
import datetime
import calendar
N = 1
observations = []
def solve(x):
    d = datetime.date.fromisoformat(x['depart'])
    r = datetime.date.fromisoformat(x['return'])
    rule = x['rule']
    fails = []
    if rule['sat_night']:
        sun = d + datetime.timedelta(days=(5 - d.weekday()) % 7 + 1)
        if r < sun: fails.append('SAT')
    if (r - d).days < rule['min_days']: fails.append('MIN')
    mo = d.month - 1 + rule['max_months']
    y, mo = d.year + rule['max_months'] // 12, mo % 12 + 1
    last = calendar.monthrange(y, mo)[1]
    eom = d.day == calendar.monthrange(d.year, d.month)[1]
    lim = datetime.date(y, mo, last if eom else min(d.day, last))
    if r > lim: fails.append('MAX')
    return fails
def check(label, actual, expected):
    observations.append({"check": label, "actual": actual, "expected": expected, "passed": actual == expected})
fixtures = [[['Sunday departure next-day return', {'depart': '2027-03-07', 'return': '2027-03-08', 'rule': {'sat_night': True, 'min_days': 0, 'max_months': 1}}, ['SAT']], ['Saturday departure Sunday return', {'depart': '2027-03-13', 'return': '2027-03-14', 'rule': {'sat_night': True, 'min_days': 1, 'max_months': 1}}, []], ['Friday out Saturday back', {'depart': '2027-03-12', 'return': '2027-03-13', 'rule': {'sat_night': True, 'min_days': 0, 'max_months': 3}}, ['SAT']], ['month-end max stay', {'depart': '2027-02-28', 'return': '2027-03-30', 'rule': {'sat_night': False, 'min_days': 3, 'max_months': 1}}, []], ['the 28th is not month end', {'depart': '2027-04-28', 'return': '2027-05-30', 'rule': {'sat_night': False, 'min_days': 0, 'max_months': 1}}, ['MAX']], ['Jan 31 plus one month', {'depart': '2027-01-31', 'return': '2027-02-28', 'rule': {'sat_night': False, 'min_days': 0, 'max_months': 1}}, []], ['year rollover max stay', {'depart': '2027-11-11', 'return': '2028-01-10', 'rule': {'sat_night': False, 'min_days': 7, 'max_months': 2}}, []], ['exact minimum stay', {'depart': '2027-06-01', 'return': '2027-06-08', 'rule': {'sat_night': False, 'min_days': 7, 'max_months': 12}}, []], ['December twelve months', {'depart': '2027-12-15', 'return': '2028-12-14', 'rule': {'sat_night': True, 'min_days': 2, 'max_months': 12}}, []], ['sampled case 1', {'depart': '2029-08-19', 'return': '2029-08-28', 'rule': {'sat_night': True, 'min_days': 2, 'max_months': 2}}, []], ['sampled case 2', {'depart': '2028-06-13', 'return': '2028-12-13', 'rule': {'sat_night': True, 'min_days': 0, 'max_months': 12}}, []], ['sampled case 3', {'depart': '2028-04-16', 'return': '2028-08-20', 'rule': {'sat_night': False, 'min_days': 1, 'max_months': 1}}, ['MAX']], ['regression: maximum stay year rollover', {'depart': '2029-10-01', 'return': '2030-01-17', 'rule': {'sat_night': True, 'min_days': 0, 'max_months': 2}}, ['MAX']]], [['Sunday departure next-day return', {'depart': '2027-03-07', 'return': '2027-03-09', 'rule': {'sat_night': True, 'min_days': 0, 'max_months': 1}}, ['SAT']], ['Saturday departure Sunday return', {'depart': '2027-03-13', 'return': '2027-03-14', 'rule': {'sat_night': True, 'min_days': 1, 'max_months': 1}}, []], ['Friday out Saturday back', {'depart': '2027-03-12', 'return': '2027-03-13', 'rule': {'sat_night': True, 'min_days': 0, 'max_months': 3}}, ['SAT']], ['month-end max stay', {'depart': '2027-02-28', 'return': '2027-03-31', 'rule': {'sat_night': False, 'min_days': 3, 'max_months': 1}}, []], ['the 28th is not month end', {'depart': '2027-04-28', 'return': '2027-05-31', 'rule': {'sat_night': False, 'min_days': 0, 'max_months': 1}}, ['MAX']], ['Jan 31 plus one month', {'depart': '2027-01-31', 'return': '2027-02-28', 'rule': {'sat_night': False, 'min_days': 0, 'max_months': 1}}, []], ['year rollover max stay', {'depart': '2027-11-12', 'return': '2028-01-12', 'rule': {'sat_night': False, 'min_days': 7, 'max_months': 2}}, []], ['exact minimum stay', {'depart': '2027-06-01', 'return': '2027-06-08', 'rule': {'sat_night': False, 'min_days': 7, 'max_months': 12}}, []], ['December twelve months', {'depart': '2027-12-15', 'return': '2028-12-15', 'rule': {'sat_night': True, 'min_days': 2, 'max_months': 12}}, []], ['sampled case 1', {'depart': '2029-07-11', 'return': '2029-07-23', 'rule': {'sat_night': True, 'min_days': 7, 'max_months': 12}}, []], ['sampled case 2', {'depart': '2029-06-25', 'return': '2029-12-12', 'rule': {'sat_night': True, 'min_days': 2, 'max_months': 2}}, ['MAX']], ['sampled case 3', {'depart': '2029-02-02', 'return': '2030-02-22', 'rule': {'sat_night': True, 'min_days': 1, 'max_months': 6}}, ['MAX']], ['regression: maximum stay year rollover', {'depart': '2027-11-21', 'return': '2028-01-18', 'rule': {'sat_night': True, 'min_days': 3, 'max_months': 1}}, ['MAX']]], [['Sunday departure next-day return', {'depart': '2027-03-07', 'return': '2027-03-10', 'rule': {'sat_night': True, 'min_days': 0, 'max_months': 1}}, ['SAT']], ['Saturday departure Sunday return', {'depart': '2027-03-13', 'return': '2027-03-14', 'rule': {'sat_night': True, 'min_days': 1, 'max_months': 1}}, []], ['Friday out Saturday back', {'depart': '2027-03-12', 'return': '2027-03-13', 'rule': {'sat_night': True, 'min_days': 0, 'max_months': 3}}, ['SAT']], ['month-end max stay', {'depart': '2027-02-28', 'return': '2027-03-29', 'rule': {'sat_night': False, 'min_days': 3, 'max_months': 1}}, []], ['the 28th is not month end', {'depart': '2027-04-28', 'return': '2027-05-29', 'rule': {'sat_night': False, 'min_days': 0, 'max_months': 1}}, ['MAX']], ['Jan 31 plus one month', {'depart': '2027-01-31', 'return': '2027-02-28', 'rule': {'sat_night': False, 'min_days': 0, 'max_months': 1}}, []], ['year rollover max stay', {'depart': '2027-11-13', 'return': '2028-01-14', 'rule': {'sat_night': False, 'min_days': 7, 'max_months': 2}}, ['MAX']], ['exact minimum stay', {'depart': '2027-06-01', 'return': '2027-06-08', 'rule': {'sat_night': False, 'min_days': 7, 'max_months': 12}}, []], ['December twelve months', {'depart': '2027-12-15', 'return': '2028-12-16', 'rule': {'sat_night': True, 'min_days': 2, 'max_months': 12}}, ['MAX']], ['sampled case 1', {'depart': '2027-10-05', 'return': '2027-10-14', 'rule': {'sat_night': True, 'min_days': 3, 'max_months': 6}}, []], ['sampled case 2', {'depart': '2028-04-06', 'return': '2028-10-12', 'rule': {'sat_night': False, 'min_days': 7, 'max_months': 11}}, []], ['sampled case 3', {'depart': '2027-11-12', 'return': '2027-11-21', 'rule': {'sat_night': False, 'min_days': 0, 'max_months': 2}}, []]], [['Sunday departure next-day return', {'depart': '2027-03-07', 'return': '2027-03-11', 'rule': {'sat_night': True, 'min_days': 0, 'max_months': 1}}, ['SAT']], ['Saturday departure Sunday return', {'depart': '2027-03-13', 'return': '2027-03-14', 'rule': {'sat_night': True, 'min_days': 1, 'max_months': 1}}, []], ['Friday out Saturday back', {'depart': '2027-03-12', 'return': '2027-03-13', 'rule': {'sat_night': True, 'min_days': 0, 'max_months': 3}}, ['SAT']], ['month-end max stay', {'depart': '2027-02-28', 'return': '2027-03-30', 'rule': {'sat_night': False, 'min_days': 3, 'max_months': 1}}, []], ['the 28th is not month end', {'depart': '2027-04-28', 'return': '2027-05-30', 'rule': {'sat_night': False, 'min_days': 0, 'max_months': 1}}, ['MAX']], ['Jan 31 plus one month', {'depart': '2027-01-31', 'return': '2027-02-28', 'rule': {'sat_night': False, 'min_days': 0, 'max_months': 1}}, []], ['year rollover max stay', {'depart': '2027-11-14', 'return': '2028-01-16', 'rule': {'sat_night': False, 'min_days': 7, 'max_months': 2}}, ['MAX']], ['exact minimum stay', {'depart': '2027-06-01', 'return': '2027-06-08', 'rule': {'sat_night': False, 'min_days': 7, 'max_months': 12}}, []], ['December twelve months', {'depart': '2027-12-15', 'return': '2028-12-17', 'rule': {'sat_night': True, 'min_days': 2, 'max_months': 12}}, ['MAX']], ['sampled case 1', {'depart': '2027-06-01', 'return': '2027-06-09', 'rule': {'sat_night': True, 'min_days': 7, 'max_months': 1}}, []], ['sampled case 2', {'depart': '2028-03-04', 'return': '2028-06-07', 'rule': {'sat_night': True, 'min_days': 1, 'max_months': 6}}, []], ['sampled case 3', {'depart': '2029-03-17', 'return': '2029-03-25', 'rule': {'sat_night': True, 'min_days': 0, 'max_months': 12}}, []], ['regression: maximum stay year rollover', {'depart': '2028-12-22', 'return': '2029-08-30', 'rule': {'sat_night': False, 'min_days': 7, 'max_months': 11}}, []]], [['Sunday departure next-day return', {'depart': '2027-03-07', 'return': '2027-03-12', 'rule': {'sat_night': True, 'min_days': 0, 'max_months': 1}}, ['SAT']], ['Saturday departure Sunday return', {'depart': '2027-03-13', 'return': '2027-03-14', 'rule': {'sat_night': True, 'min_days': 1, 'max_months': 1}}, []], ['Friday out Saturday back', {'depart': '2027-03-12', 'return': '2027-03-13', 'rule': {'sat_night': True, 'min_days': 0, 'max_months': 3}}, ['SAT']], ['month-end max stay', {'depart': '2027-02-28', 'return': '2027-03-31', 'rule': {'sat_night': False, 'min_days': 3, 'max_months': 1}}, []], ['the 28th is not month end', {'depart': '2027-04-28', 'return': '2027-05-31', 'rule': {'sat_night': False, 'min_days': 0, 'max_months': 1}}, ['MAX']], ['Jan 31 plus one month', {'depart': '2027-01-31', 'return': '2027-02-28', 'rule': {'sat_night': False, 'min_days': 0, 'max_months': 1}}, []], ['year rollover max stay', {'depart': '2027-11-15', 'return': '2028-01-18', 'rule': {'sat_night': False, 'min_days': 7, 'max_months': 2}}, ['MAX']], ['exact minimum stay', {'depart': '2027-06-01', 'return': '2027-06-08', 'rule': {'sat_night': False, 'min_days': 7, 'max_months': 12}}, []], ['December twelve months', {'depart': '2027-12-15', 'return': '2028-12-18', 'rule': {'sat_night': True, 'min_days': 2, 'max_months': 12}}, ['MAX']], ['sampled case 1', {'depart': '2029-08-05', 'return': '2030-07-02', 'rule': {'sat_night': True, 'min_days': 1, 'max_months': 11}}, []], ['sampled case 2', {'depart': '2028-05-10', 'return': '2028-05-12', 'rule': {'sat_night': False, 'min_days': 2, 'max_months': 11}}, []], ['sampled case 3', {'depart': '2027-09-03', 'return': '2027-09-03', 'rule': {'sat_night': True, 'min_days': 0, 'max_months': 6}}, ['SAT']]]]
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
Sunday departure next-day return['SAT']['SAT']Passed
Saturday departure Sunday return[][]Passed
Friday out Saturday back['SAT']['SAT']Passed
month-end max stay[][]Passed
the 28th is not month end['MAX']['MAX']Passed
Jan 31 plus one month[][]Passed
year rollover max stay['MAX'][]Failed
exact minimum stay[][]Passed
December twelve months[][]Passed
sampled case 1[][]Passed
sampled case 2[][]Passed
sampled case 3['MAX']['MAX']Passed
regression: maximum stay year rollover['MAX']['MAX']Passed

SHA-256 / 541ba72eab51a55af75e3b9f64cf590c74f0093b7f2baaa987dad7ea57cf791e

HELD IN THE MEMBER ARCHIVE

The verified repair and its recorded checks are member-only.

This mechanism has 13 recorded checks per implementation. The open-access tier publishes the failure and the unsuccessful fix; the repaired source that passes every check, and the observations that prove it, are available to members.

Every case sharing this mechanism uses the same contract and the same repair, so this one record is held back for all of them.

Member access is invitation-based. Sign in with your invited account to inspect the repair.

Sign in to the archive ↗

Verification & scope

A stipulated toy fare-rule contract with invented constants; it is not an ATPCO or carrier tariff implementation and makes no claim of industry-standard 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:47:43.358386+00:00.

Case digest / 9c922891b48eb8f7cda98fe7d2ceafbe22abc3fb53939e3527edd73686464052