{"abstract":"Fares whose rule explicitly sets sat_night to false still report SAT failures.","category":"Airline fare rule evaluation","checks":13,"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.","evaluation_group":"w2-airline-fare-rules-stay-requirements","failed_approach":"Testing for None still treats an explicit false as enabled.","family":"w2-airline-fare-rules-stay-requirements-sat-flag-presence","id":"FA-66386","implementations":{"attempt":{"sha256":"4a9618b2a981b52870c8db26efbaa8b7d9a051559cf567c04568cafc2fe5fe0d","source":"\"\"\"Failure Map reference implementation. Python standard library only.\"\"\"\nimport json\nimport datetime\nimport calendar\nN = 1\nobservations = []\ndef solve(x):\n    d = datetime.date.fromisoformat(x['depart'])\n    r = datetime.date.fromisoformat(x['return'])\n    rule = x['rule']\n    fails = []\n    if rule['sat_night'] is not None:\n        sun = d + datetime.timedelta(days=(5 - d.weekday()) % 7 + 1)\n        if r < sun: fails.append('SAT')\n    if (r - d).days < rule['min_days']: fails.append('MIN')\n    mo = d.month - 1 + rule['max_months']\n    y, mo = d.year + mo // 12, mo % 12 + 1\n    last = calendar.monthrange(y, mo)[1]\n    eom = d.day == calendar.monthrange(d.year, d.month)[1]\n    lim = datetime.date(y, mo, last if eom else min(d.day, last))\n    if r > lim: fails.append('MAX')\n    return fails\ndef check(label, actual, expected):\n    observations.append({\"check\": label, \"actual\": actual, \"expected\": expected, \"passed\": actual == expected})\nfixtures = [[['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: Saturday rule applicability', {'depart': '2028-08-06', 'return': '2028-08-07', 'rule': {'sat_night': False, 'min_days': 3, 'max_months': 3}}, ['MIN']]], [['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: Saturday rule applicability', {'depart': '2028-02-01', 'return': '2028-02-04', 'rule': {'sat_night': False, 'min_days': 3, 'max_months': 2}}, []]], [['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}}, []], ['regression: Saturday rule applicability', {'depart': '2028-04-03', 'return': '2028-04-08', 'rule': {'sat_night': False, 'min_days': 3, 'max_months': 3}}, []]], [['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: Saturday rule applicability', {'depart': '2029-04-18', 'return': '2029-04-21', 'rule': {'sat_night': False, 'min_days': 3, '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']]]]\nfor label, args, expected in fixtures[N-1]:\n    check(label, solve(args), expected)\nprint(json.dumps({\"observations\": observations, \"passed\": all(x[\"passed\"] for x in observations)}, ensure_ascii=False))\nraise SystemExit(0 if all(x[\"passed\"] for x in observations) else 1)\n"},"broken":{"sha256":"97fc5ae62bc155091dbb82ea4fd06de0aaabb7cf2dee4fd89f392b742b48db8b","source":"\"\"\"Failure Map reference implementation. Python standard library only.\"\"\"\nimport json\nimport datetime\nimport calendar\nN = 1\nobservations = []\ndef solve(x):\n    d = datetime.date.fromisoformat(x['depart'])\n    r = datetime.date.fromisoformat(x['return'])\n    rule = x['rule']\n    fails = []\n    if 'sat_night' in rule:\n        sun = d + datetime.timedelta(days=(5 - d.weekday()) % 7 + 1)\n        if r < sun: fails.append('SAT')\n    if (r - d).days < rule['min_days']: fails.append('MIN')\n    mo = d.month - 1 + rule['max_months']\n    y, mo = d.year + mo // 12, mo % 12 + 1\n    last = calendar.monthrange(y, mo)[1]\n    eom = d.day == calendar.monthrange(d.year, d.month)[1]\n    lim = datetime.date(y, mo, last if eom else min(d.day, last))\n    if r > lim: fails.append('MAX')\n    return fails\ndef check(label, actual, expected):\n    observations.append({\"check\": label, \"actual\": actual, \"expected\": expected, \"passed\": actual == expected})\nfixtures = [[['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: Saturday rule applicability', {'depart': '2028-08-06', 'return': '2028-08-07', 'rule': {'sat_night': False, 'min_days': 3, 'max_months': 3}}, ['MIN']]], [['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: Saturday rule applicability', {'depart': '2028-02-01', 'return': '2028-02-04', 'rule': {'sat_night': False, 'min_days': 3, 'max_months': 2}}, []]], [['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}}, []], ['regression: Saturday rule applicability', {'depart': '2028-04-03', 'return': '2028-04-08', 'rule': {'sat_night': False, 'min_days': 3, 'max_months': 3}}, []]], [['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: Saturday rule applicability', {'depart': '2029-04-18', 'return': '2029-04-21', 'rule': {'sat_night': False, 'min_days': 3, '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']]]]\nfor label, args, expected in fixtures[N-1]:\n    check(label, solve(args), expected)\nprint(json.dumps({\"observations\": observations, \"passed\": all(x[\"passed\"] for x in observations)}, ensure_ascii=False))\nraise SystemExit(0 if all(x[\"passed\"] for x in observations) else 1)\n"},"fixed":{"sha256":"826e1fcd78490250ccdae9850c6cb77af7bf9e4e1feb734d6d46acba7980bd96","source":"\"\"\"Failure Map reference implementation. Python standard library only.\"\"\"\nimport json\nimport datetime\nimport calendar\nN = 1\nobservations = []\ndef solve(x):\n    d = datetime.date.fromisoformat(x['depart'])\n    r = datetime.date.fromisoformat(x['return'])\n    rule = x['rule']\n    fails = []\n    if rule['sat_night']:\n        sun = d + datetime.timedelta(days=(5 - d.weekday()) % 7 + 1)\n        if r < sun: fails.append('SAT')\n    if (r - d).days < rule['min_days']: fails.append('MIN')\n    mo = d.month - 1 + rule['max_months']\n    y, mo = d.year + mo // 12, mo % 12 + 1\n    last = calendar.monthrange(y, mo)[1]\n    eom = d.day == calendar.monthrange(d.year, d.month)[1]\n    lim = datetime.date(y, mo, last if eom else min(d.day, last))\n    if r > lim: fails.append('MAX')\n    return fails\ndef check(label, actual, expected):\n    observations.append({\"check\": label, \"actual\": actual, \"expected\": expected, \"passed\": actual == expected})\nfixtures = [[['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: Saturday rule applicability', {'depart': '2028-08-06', 'return': '2028-08-07', 'rule': {'sat_night': False, 'min_days': 3, 'max_months': 3}}, ['MIN']]], [['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: Saturday rule applicability', {'depart': '2028-02-01', 'return': '2028-02-04', 'rule': {'sat_night': False, 'min_days': 3, 'max_months': 2}}, []]], [['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}}, []], ['regression: Saturday rule applicability', {'depart': '2028-04-03', 'return': '2028-04-08', 'rule': {'sat_night': False, 'min_days': 3, 'max_months': 3}}, []]], [['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: Saturday rule applicability', {'depart': '2029-04-18', 'return': '2029-04-21', 'rule': {'sat_night': False, 'min_days': 3, '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']]]]\nfor label, args, expected in fixtures[N-1]:\n    check(label, solve(args), expected)\nprint(json.dumps({\"observations\": observations, \"passed\": all(x[\"passed\"] for x in observations)}, ensure_ascii=False))\nraise SystemExit(0 if all(x[\"passed\"] for x in observations) else 1)\n"}},"limitations":"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.","method":"Deterministic executable model with adversarial boundary fixtures.","provenance":{"created_by":"Failure Map","dependencies":"Python standard library","family":"w2-airline-fare-rules-stay-requirements-sat-flag-presence","generated_at":"2026-09-29T14:47:43.166138+00:00","license":"CC0-1.0","python":"3.12.14","seed":1,"split":"open-access"},"relevance":"Stay restrictions mix weekday logic and calendar-month arithmetic with month-end and year-rollover rules.","repair":"Apply the Saturday-night rule only when the flag is true.","root_cause":"The code tests for the key being present instead of its boolean value.","sha256":"aaa2e296376c6f6ac097543931d4c365479af4ca492cedfd972154990cbc4c6d","title":"Saturday-night rule applied when disabled · case 01","variant":1,"variant_policy":"Five numbered records share a model and may reuse boundary fixtures.","verification":{"attempt":{"elapsed_ms":46.996,"exit_code":1,"observations":[{"actual":["SAT"],"check":"Sunday departure next-day return","expected":["SAT"],"passed":true},{"actual":[],"check":"Saturday departure Sunday return","expected":[],"passed":true},{"actual":["SAT"],"check":"Friday out Saturday back","expected":["SAT"],"passed":true},{"actual":[],"check":"month-end max stay","expected":[],"passed":true},{"actual":["MAX"],"check":"the 28th is not month end","expected":["MAX"],"passed":true},{"actual":[],"check":"Jan 31 plus one month","expected":[],"passed":true},{"actual":[],"check":"year rollover max stay","expected":[],"passed":true},{"actual":[],"check":"exact minimum stay","expected":[],"passed":true},{"actual":[],"check":"December twelve months","expected":[],"passed":true},{"actual":[],"check":"sampled case 1","expected":[],"passed":true},{"actual":[],"check":"sampled case 2","expected":[],"passed":true},{"actual":["MAX"],"check":"sampled case 3","expected":["MAX"],"passed":true},{"actual":["SAT","MIN"],"check":"regression: Saturday rule applicability","expected":["MIN"],"passed":false}],"passed":false,"stderr":"","stdout":"{\"observations\": [{\"check\": \"Sunday departure next-day return\", \"actual\": [\"SAT\"], \"expected\": [\"SAT\"], \"passed\": true}, {\"check\": \"Saturday departure Sunday return\", \"actual\": [], \"expected\": [], \"passed\": true}, {\"check\": \"Friday out Saturday back\", \"actual\": [\"SAT\"], \"expected\": [\"SAT\"], \"passed\": true}, {\"check\": \"month-end max stay\", \"actual\": [], \"expected\": [], \"passed\": true}, {\"check\": \"the 28th is not month end\", \"actual\": [\"MAX\"], \"expected\": [\"MAX\"], \"passed\": true}, {\"check\": \"Jan 31 plus one month\", \"actual\": [], \"expected\": [], \"passed\": true}, {\"check\": \"year rollover max stay\", \"actual\": [], \"expected\": [], \"passed\": true}, {\"check\": \"exact minimum stay\", \"actual\": [], \"expected\": [], \"passed\": true}, {\"check\": \"December twelve months\", \"actual\": [], \"expected\": [], \"passed\": true}, {\"check\": \"sampled case 1\", \"actual\": [], \"expected\": [], \"passed\": true}, {\"check\": \"sampled case 2\", \"actual\": [], \"expected\": [], \"passed\": true}, {\"check\": \"sampled case 3\", \"actual\": [\"MAX\"], \"expected\": [\"MAX\"], \"passed\": true}, {\"check\": \"regression: Saturday rule applicability\", \"actual\": [\"SAT\", \"MIN\"], \"expected\": [\"MIN\"], \"passed\": false}], \"passed\": false}\n"},"broken":{"elapsed_ms":44.089,"exit_code":1,"observations":[{"actual":["SAT"],"check":"Sunday departure next-day return","expected":["SAT"],"passed":true},{"actual":[],"check":"Saturday departure Sunday return","expected":[],"passed":true},{"actual":["SAT"],"check":"Friday out Saturday back","expected":["SAT"],"passed":true},{"actual":[],"check":"month-end max stay","expected":[],"passed":true},{"actual":["MAX"],"check":"the 28th is not month end","expected":["MAX"],"passed":true},{"actual":[],"check":"Jan 31 plus one month","expected":[],"passed":true},{"actual":[],"check":"year rollover max stay","expected":[],"passed":true},{"actual":[],"check":"exact minimum stay","expected":[],"passed":true},{"actual":[],"check":"December twelve months","expected":[],"passed":true},{"actual":[],"check":"sampled case 1","expected":[],"passed":true},{"actual":[],"check":"sampled case 2","expected":[],"passed":true},{"actual":["MAX"],"check":"sampled case 3","expected":["MAX"],"passed":true},{"actual":["SAT","MIN"],"check":"regression: Saturday rule applicability","expected":["MIN"],"passed":false}],"passed":false,"stderr":"","stdout":"{\"observations\": [{\"check\": \"Sunday departure next-day return\", \"actual\": [\"SAT\"], \"expected\": [\"SAT\"], \"passed\": true}, {\"check\": \"Saturday departure Sunday return\", \"actual\": [], \"expected\": [], \"passed\": true}, {\"check\": \"Friday out Saturday back\", \"actual\": [\"SAT\"], \"expected\": [\"SAT\"], \"passed\": true}, {\"check\": \"month-end max stay\", \"actual\": [], \"expected\": [], \"passed\": true}, {\"check\": \"the 28th is not month end\", \"actual\": [\"MAX\"], \"expected\": [\"MAX\"], \"passed\": true}, {\"check\": \"Jan 31 plus one month\", \"actual\": [], \"expected\": [], \"passed\": true}, {\"check\": \"year rollover max stay\", \"actual\": [], \"expected\": [], \"passed\": true}, {\"check\": \"exact minimum stay\", \"actual\": [], \"expected\": [], \"passed\": true}, {\"check\": \"December twelve months\", \"actual\": [], \"expected\": [], \"passed\": true}, {\"check\": \"sampled case 1\", \"actual\": [], \"expected\": [], \"passed\": true}, {\"check\": \"sampled case 2\", \"actual\": [], \"expected\": [], \"passed\": true}, {\"check\": \"sampled case 3\", \"actual\": [\"MAX\"], \"expected\": [\"MAX\"], \"passed\": true}, {\"check\": \"regression: Saturday rule applicability\", \"actual\": [\"SAT\", \"MIN\"], \"expected\": [\"MIN\"], \"passed\": false}], \"passed\": false}\n"},"fixed":{"elapsed_ms":44.447,"exit_code":0,"observations":[{"actual":["SAT"],"check":"Sunday departure next-day return","expected":["SAT"],"passed":true},{"actual":[],"check":"Saturday departure Sunday return","expected":[],"passed":true},{"actual":["SAT"],"check":"Friday out Saturday back","expected":["SAT"],"passed":true},{"actual":[],"check":"month-end max stay","expected":[],"passed":true},{"actual":["MAX"],"check":"the 28th is not month end","expected":["MAX"],"passed":true},{"actual":[],"check":"Jan 31 plus one month","expected":[],"passed":true},{"actual":[],"check":"year rollover max stay","expected":[],"passed":true},{"actual":[],"check":"exact minimum stay","expected":[],"passed":true},{"actual":[],"check":"December twelve months","expected":[],"passed":true},{"actual":[],"check":"sampled case 1","expected":[],"passed":true},{"actual":[],"check":"sampled case 2","expected":[],"passed":true},{"actual":["MAX"],"check":"sampled case 3","expected":["MAX"],"passed":true},{"actual":["MIN"],"check":"regression: Saturday rule applicability","expected":["MIN"],"passed":true}],"passed":true,"stderr":"","stdout":"{\"observations\": [{\"check\": \"Sunday departure next-day return\", \"actual\": [\"SAT\"], \"expected\": [\"SAT\"], \"passed\": true}, {\"check\": \"Saturday departure Sunday return\", \"actual\": [], \"expected\": [], \"passed\": true}, {\"check\": \"Friday out Saturday back\", \"actual\": [\"SAT\"], \"expected\": [\"SAT\"], \"passed\": true}, {\"check\": \"month-end max stay\", \"actual\": [], \"expected\": [], \"passed\": true}, {\"check\": \"the 28th is not month end\", \"actual\": [\"MAX\"], \"expected\": [\"MAX\"], \"passed\": true}, {\"check\": \"Jan 31 plus one month\", \"actual\": [], \"expected\": [], \"passed\": true}, {\"check\": \"year rollover max stay\", \"actual\": [], \"expected\": [], \"passed\": true}, {\"check\": \"exact minimum stay\", \"actual\": [], \"expected\": [], \"passed\": true}, {\"check\": \"December twelve months\", \"actual\": [], \"expected\": [], \"passed\": true}, {\"check\": \"sampled case 1\", \"actual\": [], \"expected\": [], \"passed\": true}, {\"check\": \"sampled case 2\", \"actual\": [], \"expected\": [], \"passed\": true}, {\"check\": \"sampled case 3\", \"actual\": [\"MAX\"], \"expected\": [\"MAX\"], \"passed\": true}, {\"check\": \"regression: Saturday rule applicability\", \"actual\": [\"MIN\"], \"expected\": [\"MIN\"], \"passed\": true}], \"passed\": true}\n"}},"verified":true,"visibility":"public"}