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.
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 fixture | Actual | Expected | Outcome |
|---|---|---|---|
| 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 fixture | Actual | Expected | Outcome |
|---|---|---|---|
| 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 fixture | Actual | Expected | Outcome |
|---|---|---|---|
| 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