FAILURE MAP
← Case archive

FA-66646 / Airline fare rule evaluation / Open access

Validity stays anchored on issue after travel begins · case 01

A ticket first used three months after issue expires three months early.

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

ROOT CAUSE

Once travel commences the validity is still computed from the issue date.

VERIFIED REPAIR

Re-anchor validity to one year from first travel.

Unsuccessful approach: Ending validity the day before the anniversary shortens every ticket by a day.

Case contract

Input {'issue','first_travel' (ISO or None)}. One calendar year = same month/day next year (29 Feb -> 28 Feb). Unused -> ['UNUSED', issue+1y]. First travel later than issue+1y -> ['EXPIRED_UNUSED', issue+1y] (travel on that date is still valid). Otherwise ['TRAVEL', first travel+1y].

Why this case matters

Normal ticket validity runs one year from issue until travel commences, then one year from first travel, with calendar-year and leap-day 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):
    iss = datetime.date.fromisoformat(x['issue'])
    def plus_year(d):
        try:
            return d.replace(year=d.year + 1)
        except ValueError:
            return datetime.date(d.year + 1, 2, 28)
    if x['first_travel'] is None:
        return ['UNUSED', plus_year(iss).isoformat()]
    ft = datetime.date.fromisoformat(x['first_travel'])
    if ft > plus_year(iss): return ['EXPIRED_UNUSED', plus_year(iss).isoformat()]
    return ['TRAVEL', plus_year(iss).isoformat()]
def check(label, actual, expected):
    observations.append({"check": label, "actual": actual, "expected": expected, "passed": actual == expected})
fixtures = [[['travel commenced mid-year', {'issue': '2027-03-10', 'first_travel': '2027-06-02'}, ['TRAVEL', '2028-06-02']], ['unused ticket', {'issue': '2027-01-15', 'first_travel': None}, ['UNUSED', '2028-01-15']], ['leap day issue', {'issue': '2028-02-29', 'first_travel': None}, ['UNUSED', '2029-02-28']], ['leap day first travel', {'issue': '2028-01-11', 'first_travel': '2028-02-29'}, ['TRAVEL', '2029-02-28']], ['travel exactly one year after issue', {'issue': '2027-05-11', 'first_travel': '2028-05-11'}, ['TRAVEL', '2029-05-11']], ['travel one day too late', {'issue': '2027-05-10', 'first_travel': '2028-05-11'}, ['EXPIRED_UNUSED', '2028-05-10']], ['span includes Feb 29', {'issue': '2027-06-01', 'first_travel': '2027-06-01'}, ['TRAVEL', '2028-06-01']], ['late leap-year start', {'issue': '2028-05-01', 'first_travel': '2028-06-11'}, ['TRAVEL', '2029-06-11']], ['sampled case 1', {'issue': '2028-11-11', 'first_travel': '2029-05-16'}, ['TRAVEL', '2030-05-16']], ['sampled case 2', {'issue': '2027-07-24', 'first_travel': '2027-07-26'}, ['TRAVEL', '2028-07-26']], ['sampled case 3', {'issue': '2029-01-16', 'first_travel': None}, ['UNUSED', '2030-01-16']]], [['travel commenced mid-year', {'issue': '2027-03-10', 'first_travel': '2027-06-03'}, ['TRAVEL', '2028-06-03']], ['unused ticket', {'issue': '2027-02-15', 'first_travel': None}, ['UNUSED', '2028-02-15']], ['leap day issue', {'issue': '2028-02-29', 'first_travel': None}, ['UNUSED', '2029-02-28']], ['leap day first travel', {'issue': '2028-01-12', 'first_travel': '2028-02-29'}, ['TRAVEL', '2029-02-28']], ['travel exactly one year after issue', {'issue': '2027-05-12', 'first_travel': '2028-05-12'}, ['TRAVEL', '2029-05-12']], ['travel one day too late', {'issue': '2027-05-10', 'first_travel': '2028-05-11'}, ['EXPIRED_UNUSED', '2028-05-10']], ['span includes Feb 29', {'issue': '2027-06-01', 'first_travel': '2027-06-02'}, ['TRAVEL', '2028-06-02']], ['late leap-year start', {'issue': '2028-05-01', 'first_travel': '2028-06-12'}, ['TRAVEL', '2029-06-12']], ['sampled case 1', {'issue': '2027-08-03', 'first_travel': '2028-08-03'}, ['TRAVEL', '2029-08-03']], ['sampled case 2', {'issue': '2028-03-31', 'first_travel': None}, ['UNUSED', '2029-03-31']], ['sampled case 3', {'issue': '2028-06-12', 'first_travel': '2029-06-12'}, ['TRAVEL', '2030-06-12']]], [['travel commenced mid-year', {'issue': '2027-03-10', 'first_travel': '2027-06-04'}, ['TRAVEL', '2028-06-04']], ['unused ticket', {'issue': '2027-03-15', 'first_travel': None}, ['UNUSED', '2028-03-15']], ['leap day issue', {'issue': '2028-02-29', 'first_travel': None}, ['UNUSED', '2029-02-28']], ['leap day first travel', {'issue': '2028-01-13', 'first_travel': '2028-02-29'}, ['TRAVEL', '2029-02-28']], ['travel exactly one year after issue', {'issue': '2027-05-13', 'first_travel': '2028-05-13'}, ['TRAVEL', '2029-05-13']], ['travel one day too late', {'issue': '2027-05-10', 'first_travel': '2028-05-11'}, ['EXPIRED_UNUSED', '2028-05-10']], ['span includes Feb 29', {'issue': '2027-06-01', 'first_travel': '2027-06-03'}, ['TRAVEL', '2028-06-03']], ['late leap-year start', {'issue': '2028-05-01', 'first_travel': '2028-06-13'}, ['TRAVEL', '2029-06-13']], ['sampled case 1', {'issue': '2028-10-17', 'first_travel': None}, ['UNUSED', '2029-10-17']], ['sampled case 2', {'issue': '2027-02-28', 'first_travel': '2028-02-28'}, ['TRAVEL', '2029-02-28']], ['sampled case 3', {'issue': '2029-06-17', 'first_travel': '2030-04-20'}, ['TRAVEL', '2031-04-20']]], [['travel commenced mid-year', {'issue': '2027-03-10', 'first_travel': '2027-06-05'}, ['TRAVEL', '2028-06-05']], ['unused ticket', {'issue': '2027-04-15', 'first_travel': None}, ['UNUSED', '2028-04-15']], ['leap day issue', {'issue': '2028-02-29', 'first_travel': None}, ['UNUSED', '2029-02-28']], ['leap day first travel', {'issue': '2028-01-14', 'first_travel': '2028-02-29'}, ['TRAVEL', '2029-02-28']], ['travel exactly one year after issue', {'issue': '2027-05-14', 'first_travel': '2028-05-14'}, ['TRAVEL', '2029-05-14']], ['travel one day too late', {'issue': '2027-05-10', 'first_travel': '2028-05-11'}, ['EXPIRED_UNUSED', '2028-05-10']], ['span includes Feb 29', {'issue': '2027-06-01', 'first_travel': '2027-06-04'}, ['TRAVEL', '2028-06-04']], ['late leap-year start', {'issue': '2028-05-01', 'first_travel': '2028-06-14'}, ['TRAVEL', '2029-06-14']], ['sampled case 1', {'issue': '2028-11-25', 'first_travel': '2029-11-26'}, ['EXPIRED_UNUSED', '2029-11-25']], ['sampled case 2', {'issue': '2029-06-03', 'first_travel': '2030-06-04'}, ['EXPIRED_UNUSED', '2030-06-03']], ['sampled case 3', {'issue': '2028-06-18', 'first_travel': None}, ['UNUSED', '2029-06-18']]], [['travel commenced mid-year', {'issue': '2027-03-10', 'first_travel': '2027-06-06'}, ['TRAVEL', '2028-06-06']], ['unused ticket', {'issue': '2027-05-15', 'first_travel': None}, ['UNUSED', '2028-05-15']], ['leap day issue', {'issue': '2028-02-29', 'first_travel': None}, ['UNUSED', '2029-02-28']], ['leap day first travel', {'issue': '2028-01-15', 'first_travel': '2028-02-29'}, ['TRAVEL', '2029-02-28']], ['travel exactly one year after issue', {'issue': '2027-05-15', 'first_travel': '2028-05-15'}, ['TRAVEL', '2029-05-15']], ['travel one day too late', {'issue': '2027-05-10', 'first_travel': '2028-05-11'}, ['EXPIRED_UNUSED', '2028-05-10']], ['span includes Feb 29', {'issue': '2027-06-01', 'first_travel': '2027-06-05'}, ['TRAVEL', '2028-06-05']], ['late leap-year start', {'issue': '2028-05-01', 'first_travel': '2028-06-15'}, ['TRAVEL', '2029-06-15']], ['sampled case 1', {'issue': '2028-07-20', 'first_travel': '2029-07-20'}, ['TRAVEL', '2030-07-20']], ['sampled case 2', {'issue': '2027-10-29', 'first_travel': '2027-12-02'}, ['TRAVEL', '2028-12-02']], ['sampled case 3', {'issue': '2029-03-08', 'first_travel': '2029-05-13'}, ['TRAVEL', '2030-05-13']]]]
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
travel commenced mid-year['TRAVEL', '2028-03-10']['TRAVEL', '2028-06-02']Failed
unused ticket['UNUSED', '2028-01-15']['UNUSED', '2028-01-15']Passed
leap day issue['UNUSED', '2029-02-28']['UNUSED', '2029-02-28']Passed
leap day first travel['TRAVEL', '2029-01-11']['TRAVEL', '2029-02-28']Failed
travel exactly one year after issue['TRAVEL', '2028-05-11']['TRAVEL', '2029-05-11']Failed
travel one day too late['EXPIRED_UNUSED', '2028-05-10']['EXPIRED_UNUSED', '2028-05-10']Passed
span includes Feb 29['TRAVEL', '2028-06-01']['TRAVEL', '2028-06-01']Passed
late leap-year start['TRAVEL', '2029-05-01']['TRAVEL', '2029-06-11']Failed
sampled case 1['TRAVEL', '2029-11-11']['TRAVEL', '2030-05-16']Failed
sampled case 2['TRAVEL', '2028-07-24']['TRAVEL', '2028-07-26']Failed
sampled case 3['UNUSED', '2030-01-16']['UNUSED', '2030-01-16']Passed

SHA-256 / 466c81965d429aebba6dc5a70684a3f4764e074d89bfed0eb47de0eaab72cf0c

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):
    iss = datetime.date.fromisoformat(x['issue'])
    def plus_year(d):
        try:
            return d.replace(year=d.year + 1)
        except ValueError:
            return datetime.date(d.year + 1, 2, 28)
    if x['first_travel'] is None:
        return ['UNUSED', plus_year(iss).isoformat()]
    ft = datetime.date.fromisoformat(x['first_travel'])
    if ft > plus_year(iss): return ['EXPIRED_UNUSED', plus_year(iss).isoformat()]
    return ['TRAVEL', (plus_year(ft) - datetime.timedelta(days=1)).isoformat()]
def check(label, actual, expected):
    observations.append({"check": label, "actual": actual, "expected": expected, "passed": actual == expected})
fixtures = [[['travel commenced mid-year', {'issue': '2027-03-10', 'first_travel': '2027-06-02'}, ['TRAVEL', '2028-06-02']], ['unused ticket', {'issue': '2027-01-15', 'first_travel': None}, ['UNUSED', '2028-01-15']], ['leap day issue', {'issue': '2028-02-29', 'first_travel': None}, ['UNUSED', '2029-02-28']], ['leap day first travel', {'issue': '2028-01-11', 'first_travel': '2028-02-29'}, ['TRAVEL', '2029-02-28']], ['travel exactly one year after issue', {'issue': '2027-05-11', 'first_travel': '2028-05-11'}, ['TRAVEL', '2029-05-11']], ['travel one day too late', {'issue': '2027-05-10', 'first_travel': '2028-05-11'}, ['EXPIRED_UNUSED', '2028-05-10']], ['span includes Feb 29', {'issue': '2027-06-01', 'first_travel': '2027-06-01'}, ['TRAVEL', '2028-06-01']], ['late leap-year start', {'issue': '2028-05-01', 'first_travel': '2028-06-11'}, ['TRAVEL', '2029-06-11']], ['sampled case 1', {'issue': '2028-11-11', 'first_travel': '2029-05-16'}, ['TRAVEL', '2030-05-16']], ['sampled case 2', {'issue': '2027-07-24', 'first_travel': '2027-07-26'}, ['TRAVEL', '2028-07-26']], ['sampled case 3', {'issue': '2029-01-16', 'first_travel': None}, ['UNUSED', '2030-01-16']]], [['travel commenced mid-year', {'issue': '2027-03-10', 'first_travel': '2027-06-03'}, ['TRAVEL', '2028-06-03']], ['unused ticket', {'issue': '2027-02-15', 'first_travel': None}, ['UNUSED', '2028-02-15']], ['leap day issue', {'issue': '2028-02-29', 'first_travel': None}, ['UNUSED', '2029-02-28']], ['leap day first travel', {'issue': '2028-01-12', 'first_travel': '2028-02-29'}, ['TRAVEL', '2029-02-28']], ['travel exactly one year after issue', {'issue': '2027-05-12', 'first_travel': '2028-05-12'}, ['TRAVEL', '2029-05-12']], ['travel one day too late', {'issue': '2027-05-10', 'first_travel': '2028-05-11'}, ['EXPIRED_UNUSED', '2028-05-10']], ['span includes Feb 29', {'issue': '2027-06-01', 'first_travel': '2027-06-02'}, ['TRAVEL', '2028-06-02']], ['late leap-year start', {'issue': '2028-05-01', 'first_travel': '2028-06-12'}, ['TRAVEL', '2029-06-12']], ['sampled case 1', {'issue': '2027-08-03', 'first_travel': '2028-08-03'}, ['TRAVEL', '2029-08-03']], ['sampled case 2', {'issue': '2028-03-31', 'first_travel': None}, ['UNUSED', '2029-03-31']], ['sampled case 3', {'issue': '2028-06-12', 'first_travel': '2029-06-12'}, ['TRAVEL', '2030-06-12']]], [['travel commenced mid-year', {'issue': '2027-03-10', 'first_travel': '2027-06-04'}, ['TRAVEL', '2028-06-04']], ['unused ticket', {'issue': '2027-03-15', 'first_travel': None}, ['UNUSED', '2028-03-15']], ['leap day issue', {'issue': '2028-02-29', 'first_travel': None}, ['UNUSED', '2029-02-28']], ['leap day first travel', {'issue': '2028-01-13', 'first_travel': '2028-02-29'}, ['TRAVEL', '2029-02-28']], ['travel exactly one year after issue', {'issue': '2027-05-13', 'first_travel': '2028-05-13'}, ['TRAVEL', '2029-05-13']], ['travel one day too late', {'issue': '2027-05-10', 'first_travel': '2028-05-11'}, ['EXPIRED_UNUSED', '2028-05-10']], ['span includes Feb 29', {'issue': '2027-06-01', 'first_travel': '2027-06-03'}, ['TRAVEL', '2028-06-03']], ['late leap-year start', {'issue': '2028-05-01', 'first_travel': '2028-06-13'}, ['TRAVEL', '2029-06-13']], ['sampled case 1', {'issue': '2028-10-17', 'first_travel': None}, ['UNUSED', '2029-10-17']], ['sampled case 2', {'issue': '2027-02-28', 'first_travel': '2028-02-28'}, ['TRAVEL', '2029-02-28']], ['sampled case 3', {'issue': '2029-06-17', 'first_travel': '2030-04-20'}, ['TRAVEL', '2031-04-20']]], [['travel commenced mid-year', {'issue': '2027-03-10', 'first_travel': '2027-06-05'}, ['TRAVEL', '2028-06-05']], ['unused ticket', {'issue': '2027-04-15', 'first_travel': None}, ['UNUSED', '2028-04-15']], ['leap day issue', {'issue': '2028-02-29', 'first_travel': None}, ['UNUSED', '2029-02-28']], ['leap day first travel', {'issue': '2028-01-14', 'first_travel': '2028-02-29'}, ['TRAVEL', '2029-02-28']], ['travel exactly one year after issue', {'issue': '2027-05-14', 'first_travel': '2028-05-14'}, ['TRAVEL', '2029-05-14']], ['travel one day too late', {'issue': '2027-05-10', 'first_travel': '2028-05-11'}, ['EXPIRED_UNUSED', '2028-05-10']], ['span includes Feb 29', {'issue': '2027-06-01', 'first_travel': '2027-06-04'}, ['TRAVEL', '2028-06-04']], ['late leap-year start', {'issue': '2028-05-01', 'first_travel': '2028-06-14'}, ['TRAVEL', '2029-06-14']], ['sampled case 1', {'issue': '2028-11-25', 'first_travel': '2029-11-26'}, ['EXPIRED_UNUSED', '2029-11-25']], ['sampled case 2', {'issue': '2029-06-03', 'first_travel': '2030-06-04'}, ['EXPIRED_UNUSED', '2030-06-03']], ['sampled case 3', {'issue': '2028-06-18', 'first_travel': None}, ['UNUSED', '2029-06-18']]], [['travel commenced mid-year', {'issue': '2027-03-10', 'first_travel': '2027-06-06'}, ['TRAVEL', '2028-06-06']], ['unused ticket', {'issue': '2027-05-15', 'first_travel': None}, ['UNUSED', '2028-05-15']], ['leap day issue', {'issue': '2028-02-29', 'first_travel': None}, ['UNUSED', '2029-02-28']], ['leap day first travel', {'issue': '2028-01-15', 'first_travel': '2028-02-29'}, ['TRAVEL', '2029-02-28']], ['travel exactly one year after issue', {'issue': '2027-05-15', 'first_travel': '2028-05-15'}, ['TRAVEL', '2029-05-15']], ['travel one day too late', {'issue': '2027-05-10', 'first_travel': '2028-05-11'}, ['EXPIRED_UNUSED', '2028-05-10']], ['span includes Feb 29', {'issue': '2027-06-01', 'first_travel': '2027-06-05'}, ['TRAVEL', '2028-06-05']], ['late leap-year start', {'issue': '2028-05-01', 'first_travel': '2028-06-15'}, ['TRAVEL', '2029-06-15']], ['sampled case 1', {'issue': '2028-07-20', 'first_travel': '2029-07-20'}, ['TRAVEL', '2030-07-20']], ['sampled case 2', {'issue': '2027-10-29', 'first_travel': '2027-12-02'}, ['TRAVEL', '2028-12-02']], ['sampled case 3', {'issue': '2029-03-08', 'first_travel': '2029-05-13'}, ['TRAVEL', '2030-05-13']]]]
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
travel commenced mid-year['TRAVEL', '2028-06-01']['TRAVEL', '2028-06-02']Failed
unused ticket['UNUSED', '2028-01-15']['UNUSED', '2028-01-15']Passed
leap day issue['UNUSED', '2029-02-28']['UNUSED', '2029-02-28']Passed
leap day first travel['TRAVEL', '2029-02-27']['TRAVEL', '2029-02-28']Failed
travel exactly one year after issue['TRAVEL', '2029-05-10']['TRAVEL', '2029-05-11']Failed
travel one day too late['EXPIRED_UNUSED', '2028-05-10']['EXPIRED_UNUSED', '2028-05-10']Passed
span includes Feb 29['TRAVEL', '2028-05-31']['TRAVEL', '2028-06-01']Failed
late leap-year start['TRAVEL', '2029-06-10']['TRAVEL', '2029-06-11']Failed
sampled case 1['TRAVEL', '2030-05-15']['TRAVEL', '2030-05-16']Failed
sampled case 2['TRAVEL', '2028-07-25']['TRAVEL', '2028-07-26']Failed
sampled case 3['UNUSED', '2030-01-16']['UNUSED', '2030-01-16']Passed

SHA-256 / 38f0b96088ce912a611e7c34d63bb9330184778cf3353a4e1f31ea3fed6fe5e3

3 / The verified repair

Exit 0
"""Failure Map reference implementation. Python standard library only."""
import json
import datetime
import calendar
N = 1
observations = []
def solve(x):
    iss = datetime.date.fromisoformat(x['issue'])
    def plus_year(d):
        try:
            return d.replace(year=d.year + 1)
        except ValueError:
            return datetime.date(d.year + 1, 2, 28)
    if x['first_travel'] is None:
        return ['UNUSED', plus_year(iss).isoformat()]
    ft = datetime.date.fromisoformat(x['first_travel'])
    if ft > plus_year(iss): return ['EXPIRED_UNUSED', plus_year(iss).isoformat()]
    return ['TRAVEL', plus_year(ft).isoformat()]
def check(label, actual, expected):
    observations.append({"check": label, "actual": actual, "expected": expected, "passed": actual == expected})
fixtures = [[['travel commenced mid-year', {'issue': '2027-03-10', 'first_travel': '2027-06-02'}, ['TRAVEL', '2028-06-02']], ['unused ticket', {'issue': '2027-01-15', 'first_travel': None}, ['UNUSED', '2028-01-15']], ['leap day issue', {'issue': '2028-02-29', 'first_travel': None}, ['UNUSED', '2029-02-28']], ['leap day first travel', {'issue': '2028-01-11', 'first_travel': '2028-02-29'}, ['TRAVEL', '2029-02-28']], ['travel exactly one year after issue', {'issue': '2027-05-11', 'first_travel': '2028-05-11'}, ['TRAVEL', '2029-05-11']], ['travel one day too late', {'issue': '2027-05-10', 'first_travel': '2028-05-11'}, ['EXPIRED_UNUSED', '2028-05-10']], ['span includes Feb 29', {'issue': '2027-06-01', 'first_travel': '2027-06-01'}, ['TRAVEL', '2028-06-01']], ['late leap-year start', {'issue': '2028-05-01', 'first_travel': '2028-06-11'}, ['TRAVEL', '2029-06-11']], ['sampled case 1', {'issue': '2028-11-11', 'first_travel': '2029-05-16'}, ['TRAVEL', '2030-05-16']], ['sampled case 2', {'issue': '2027-07-24', 'first_travel': '2027-07-26'}, ['TRAVEL', '2028-07-26']], ['sampled case 3', {'issue': '2029-01-16', 'first_travel': None}, ['UNUSED', '2030-01-16']]], [['travel commenced mid-year', {'issue': '2027-03-10', 'first_travel': '2027-06-03'}, ['TRAVEL', '2028-06-03']], ['unused ticket', {'issue': '2027-02-15', 'first_travel': None}, ['UNUSED', '2028-02-15']], ['leap day issue', {'issue': '2028-02-29', 'first_travel': None}, ['UNUSED', '2029-02-28']], ['leap day first travel', {'issue': '2028-01-12', 'first_travel': '2028-02-29'}, ['TRAVEL', '2029-02-28']], ['travel exactly one year after issue', {'issue': '2027-05-12', 'first_travel': '2028-05-12'}, ['TRAVEL', '2029-05-12']], ['travel one day too late', {'issue': '2027-05-10', 'first_travel': '2028-05-11'}, ['EXPIRED_UNUSED', '2028-05-10']], ['span includes Feb 29', {'issue': '2027-06-01', 'first_travel': '2027-06-02'}, ['TRAVEL', '2028-06-02']], ['late leap-year start', {'issue': '2028-05-01', 'first_travel': '2028-06-12'}, ['TRAVEL', '2029-06-12']], ['sampled case 1', {'issue': '2027-08-03', 'first_travel': '2028-08-03'}, ['TRAVEL', '2029-08-03']], ['sampled case 2', {'issue': '2028-03-31', 'first_travel': None}, ['UNUSED', '2029-03-31']], ['sampled case 3', {'issue': '2028-06-12', 'first_travel': '2029-06-12'}, ['TRAVEL', '2030-06-12']]], [['travel commenced mid-year', {'issue': '2027-03-10', 'first_travel': '2027-06-04'}, ['TRAVEL', '2028-06-04']], ['unused ticket', {'issue': '2027-03-15', 'first_travel': None}, ['UNUSED', '2028-03-15']], ['leap day issue', {'issue': '2028-02-29', 'first_travel': None}, ['UNUSED', '2029-02-28']], ['leap day first travel', {'issue': '2028-01-13', 'first_travel': '2028-02-29'}, ['TRAVEL', '2029-02-28']], ['travel exactly one year after issue', {'issue': '2027-05-13', 'first_travel': '2028-05-13'}, ['TRAVEL', '2029-05-13']], ['travel one day too late', {'issue': '2027-05-10', 'first_travel': '2028-05-11'}, ['EXPIRED_UNUSED', '2028-05-10']], ['span includes Feb 29', {'issue': '2027-06-01', 'first_travel': '2027-06-03'}, ['TRAVEL', '2028-06-03']], ['late leap-year start', {'issue': '2028-05-01', 'first_travel': '2028-06-13'}, ['TRAVEL', '2029-06-13']], ['sampled case 1', {'issue': '2028-10-17', 'first_travel': None}, ['UNUSED', '2029-10-17']], ['sampled case 2', {'issue': '2027-02-28', 'first_travel': '2028-02-28'}, ['TRAVEL', '2029-02-28']], ['sampled case 3', {'issue': '2029-06-17', 'first_travel': '2030-04-20'}, ['TRAVEL', '2031-04-20']]], [['travel commenced mid-year', {'issue': '2027-03-10', 'first_travel': '2027-06-05'}, ['TRAVEL', '2028-06-05']], ['unused ticket', {'issue': '2027-04-15', 'first_travel': None}, ['UNUSED', '2028-04-15']], ['leap day issue', {'issue': '2028-02-29', 'first_travel': None}, ['UNUSED', '2029-02-28']], ['leap day first travel', {'issue': '2028-01-14', 'first_travel': '2028-02-29'}, ['TRAVEL', '2029-02-28']], ['travel exactly one year after issue', {'issue': '2027-05-14', 'first_travel': '2028-05-14'}, ['TRAVEL', '2029-05-14']], ['travel one day too late', {'issue': '2027-05-10', 'first_travel': '2028-05-11'}, ['EXPIRED_UNUSED', '2028-05-10']], ['span includes Feb 29', {'issue': '2027-06-01', 'first_travel': '2027-06-04'}, ['TRAVEL', '2028-06-04']], ['late leap-year start', {'issue': '2028-05-01', 'first_travel': '2028-06-14'}, ['TRAVEL', '2029-06-14']], ['sampled case 1', {'issue': '2028-11-25', 'first_travel': '2029-11-26'}, ['EXPIRED_UNUSED', '2029-11-25']], ['sampled case 2', {'issue': '2029-06-03', 'first_travel': '2030-06-04'}, ['EXPIRED_UNUSED', '2030-06-03']], ['sampled case 3', {'issue': '2028-06-18', 'first_travel': None}, ['UNUSED', '2029-06-18']]], [['travel commenced mid-year', {'issue': '2027-03-10', 'first_travel': '2027-06-06'}, ['TRAVEL', '2028-06-06']], ['unused ticket', {'issue': '2027-05-15', 'first_travel': None}, ['UNUSED', '2028-05-15']], ['leap day issue', {'issue': '2028-02-29', 'first_travel': None}, ['UNUSED', '2029-02-28']], ['leap day first travel', {'issue': '2028-01-15', 'first_travel': '2028-02-29'}, ['TRAVEL', '2029-02-28']], ['travel exactly one year after issue', {'issue': '2027-05-15', 'first_travel': '2028-05-15'}, ['TRAVEL', '2029-05-15']], ['travel one day too late', {'issue': '2027-05-10', 'first_travel': '2028-05-11'}, ['EXPIRED_UNUSED', '2028-05-10']], ['span includes Feb 29', {'issue': '2027-06-01', 'first_travel': '2027-06-05'}, ['TRAVEL', '2028-06-05']], ['late leap-year start', {'issue': '2028-05-01', 'first_travel': '2028-06-15'}, ['TRAVEL', '2029-06-15']], ['sampled case 1', {'issue': '2028-07-20', 'first_travel': '2029-07-20'}, ['TRAVEL', '2030-07-20']], ['sampled case 2', {'issue': '2027-10-29', 'first_travel': '2027-12-02'}, ['TRAVEL', '2028-12-02']], ['sampled case 3', {'issue': '2029-03-08', 'first_travel': '2029-05-13'}, ['TRAVEL', '2030-05-13']]]]
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
travel commenced mid-year['TRAVEL', '2028-06-02']['TRAVEL', '2028-06-02']Passed
unused ticket['UNUSED', '2028-01-15']['UNUSED', '2028-01-15']Passed
leap day issue['UNUSED', '2029-02-28']['UNUSED', '2029-02-28']Passed
leap day first travel['TRAVEL', '2029-02-28']['TRAVEL', '2029-02-28']Passed
travel exactly one year after issue['TRAVEL', '2029-05-11']['TRAVEL', '2029-05-11']Passed
travel one day too late['EXPIRED_UNUSED', '2028-05-10']['EXPIRED_UNUSED', '2028-05-10']Passed
span includes Feb 29['TRAVEL', '2028-06-01']['TRAVEL', '2028-06-01']Passed
late leap-year start['TRAVEL', '2029-06-11']['TRAVEL', '2029-06-11']Passed
sampled case 1['TRAVEL', '2030-05-16']['TRAVEL', '2030-05-16']Passed
sampled case 2['TRAVEL', '2028-07-26']['TRAVEL', '2028-07-26']Passed
sampled case 3['UNUSED', '2030-01-16']['UNUSED', '2030-01-16']Passed

SHA-256 / 9ad052ebbaa76684faac17e8c0b861e155b27e67a4dc152b5a5bb33c435063cf

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:45.602247+00:00.

Case digest / 7726ffea61943c9c8f935625e99c7271b68cb31a926a882158654eed85f110cf