{"abstract":"The third sector of an itinerary remains open after the passenger missed the first.","category":"Airline fare rule evaluation","checks":9,"contract":"Input {'status':[FLOWN|OPEN|NOSHOW per coupon],'fee'}. After the first NOSHOW, every later OPEN coupon becomes VOID (earlier coupons are untouched, FLOWN stays FLOWN). The no-show fee is charged once per ticket. Return [statuses, fee].","evaluation_group":"w2-airline-fare-rules-no-show-sequence","failed_approach":"Requiring the previous coupon to be void or no-show stops cancelling after a flown anomaly.","family":"w2-airline-fare-rules-no-show-sequence-void-next-only","id":"FA-66766","implementations":{"attempt":{"sha256":"7bc7dbe2b7ed8893e5e85a1b92e358524b49d35a8cd784369263e9a563f85a25","source":"\"\"\"Failure Map reference implementation. Python standard library only.\"\"\"\nimport json\n\nN = 1\nobservations = []\ndef solve(x):\n    st = list(x['status'])\n    fee = 0\n    seen = False\n    for i, s in enumerate(st):\n        if s == 'NOSHOW':\n            if not seen: fee += x['fee']\n            seen = True\n        elif seen and s == 'OPEN' and st[i - 1] in ('NOSHOW', 'VOID'):\n            st[i] = 'VOID'\n    return [st, fee]\ndef check(label, actual, expected):\n    observations.append({\"check\": label, \"actual\": actual, \"expected\": expected, \"passed\": actual == expected})\nfixtures = [[['missed second leg', {'status': ['FLOWN', 'NOSHOW', 'OPEN', 'OPEN'], 'fee': 101}, [['FLOWN', 'NOSHOW', 'VOID', 'VOID'], 101]], ['missed first leg', {'status': ['NOSHOW', 'OPEN', 'OPEN'], 'fee': 150}, [['NOSHOW', 'VOID', 'VOID'], 150]], ['open before noshow', {'status': ['OPEN', 'NOSHOW', 'OPEN'], 'fee': 75}, [['OPEN', 'NOSHOW', 'VOID'], 75]], ['two noshows', {'status': ['FLOWN', 'NOSHOW', 'OPEN', 'NOSHOW', 'OPEN'], 'fee': 120}, [['FLOWN', 'NOSHOW', 'VOID', 'NOSHOW', 'VOID'], 120]], ['flown anomaly after noshow', {'status': ['NOSHOW', 'FLOWN', 'OPEN'], 'fee': 90}, [['NOSHOW', 'FLOWN', 'VOID'], 90]], ['all flown', {'status': ['FLOWN', 'FLOWN'], 'fee': 100}, [['FLOWN', 'FLOWN'], 0]], ['sampled case 1', {'status': ['OPEN', 'NOSHOW', 'OPEN', 'NOSHOW', 'NOSHOW', 'OPEN'], 'fee': 100}, [['OPEN', 'NOSHOW', 'VOID', 'NOSHOW', 'NOSHOW', 'VOID'], 100]], ['sampled case 2', {'status': ['FLOWN', 'OPEN', 'FLOWN', 'OPEN', 'OPEN', 'OPEN'], 'fee': 150}, [['FLOWN', 'OPEN', 'FLOWN', 'OPEN', 'OPEN', 'OPEN'], 0]], ['sampled case 3', {'status': ['OPEN'], 'fee': 100}, [['OPEN'], 0]]], [['missed second leg', {'status': ['FLOWN', 'NOSHOW', 'OPEN', 'OPEN'], 'fee': 102}, [['FLOWN', 'NOSHOW', 'VOID', 'VOID'], 102]], ['missed first leg', {'status': ['NOSHOW', 'OPEN', 'OPEN'], 'fee': 150}, [['NOSHOW', 'VOID', 'VOID'], 150]], ['open before noshow', {'status': ['OPEN', 'NOSHOW', 'OPEN'], 'fee': 150}, [['OPEN', 'NOSHOW', 'VOID'], 150]], ['two noshows', {'status': ['FLOWN', 'NOSHOW', 'OPEN', 'NOSHOW', 'OPEN'], 'fee': 120}, [['FLOWN', 'NOSHOW', 'VOID', 'NOSHOW', 'VOID'], 120]], ['flown anomaly after noshow', {'status': ['NOSHOW', 'FLOWN', 'OPEN'], 'fee': 90}, [['NOSHOW', 'FLOWN', 'VOID'], 90]], ['all flown', {'status': ['FLOWN', 'FLOWN', 'FLOWN'], 'fee': 100}, [['FLOWN', 'FLOWN', 'FLOWN'], 0]], ['sampled case 1', {'status': ['OPEN', 'OPEN', 'NOSHOW', 'OPEN'], 'fee': 150}, [['OPEN', 'OPEN', 'NOSHOW', 'VOID'], 150]], ['sampled case 2', {'status': ['OPEN', 'OPEN', 'NOSHOW', 'NOSHOW', 'NOSHOW'], 'fee': 50}, [['OPEN', 'OPEN', 'NOSHOW', 'NOSHOW', 'NOSHOW'], 50]], ['sampled case 3', {'status': ['FLOWN', 'NOSHOW', 'NOSHOW', 'NOSHOW', 'OPEN'], 'fee': 100}, [['FLOWN', 'NOSHOW', 'NOSHOW', 'NOSHOW', 'VOID'], 100]]], [['missed second leg', {'status': ['FLOWN', 'NOSHOW', 'OPEN', 'OPEN'], 'fee': 103}, [['FLOWN', 'NOSHOW', 'VOID', 'VOID'], 103]], ['missed first leg', {'status': ['NOSHOW', 'OPEN', 'OPEN'], 'fee': 150}, [['NOSHOW', 'VOID', 'VOID'], 150]], ['open before noshow', {'status': ['OPEN', 'NOSHOW', 'OPEN'], 'fee': 225}, [['OPEN', 'NOSHOW', 'VOID'], 225]], ['two noshows', {'status': ['FLOWN', 'NOSHOW', 'OPEN', 'NOSHOW', 'OPEN'], 'fee': 120}, [['FLOWN', 'NOSHOW', 'VOID', 'NOSHOW', 'VOID'], 120]], ['flown anomaly after noshow', {'status': ['NOSHOW', 'FLOWN', 'OPEN'], 'fee': 90}, [['NOSHOW', 'FLOWN', 'VOID'], 90]], ['all flown', {'status': ['FLOWN', 'FLOWN', 'FLOWN', 'FLOWN'], 'fee': 100}, [['FLOWN', 'FLOWN', 'FLOWN', 'FLOWN'], 0]], ['sampled case 1', {'status': ['OPEN', 'FLOWN', 'FLOWN', 'FLOWN', 'NOSHOW', 'NOSHOW'], 'fee': 75}, [['OPEN', 'FLOWN', 'FLOWN', 'FLOWN', 'NOSHOW', 'NOSHOW'], 75]], ['sampled case 2', {'status': ['FLOWN', 'OPEN', 'OPEN', 'OPEN', 'OPEN', 'FLOWN'], 'fee': 75}, [['FLOWN', 'OPEN', 'OPEN', 'OPEN', 'OPEN', 'FLOWN'], 0]], ['sampled case 3', {'status': ['OPEN'], 'fee': 50}, [['OPEN'], 0]]], [['missed second leg', {'status': ['FLOWN', 'NOSHOW', 'OPEN', 'OPEN'], 'fee': 104}, [['FLOWN', 'NOSHOW', 'VOID', 'VOID'], 104]], ['missed first leg', {'status': ['NOSHOW', 'OPEN', 'OPEN'], 'fee': 150}, [['NOSHOW', 'VOID', 'VOID'], 150]], ['open before noshow', {'status': ['OPEN', 'NOSHOW', 'OPEN'], 'fee': 300}, [['OPEN', 'NOSHOW', 'VOID'], 300]], ['two noshows', {'status': ['FLOWN', 'NOSHOW', 'OPEN', 'NOSHOW', 'OPEN'], 'fee': 120}, [['FLOWN', 'NOSHOW', 'VOID', 'NOSHOW', 'VOID'], 120]], ['flown anomaly after noshow', {'status': ['NOSHOW', 'FLOWN', 'OPEN'], 'fee': 90}, [['NOSHOW', 'FLOWN', 'VOID'], 90]], ['all flown', {'status': ['FLOWN', 'FLOWN', 'FLOWN', 'FLOWN', 'FLOWN'], 'fee': 100}, [['FLOWN', 'FLOWN', 'FLOWN', 'FLOWN', 'FLOWN'], 0]], ['sampled case 1', {'status': ['OPEN', 'NOSHOW', 'OPEN', 'OPEN', 'FLOWN'], 'fee': 75}, [['OPEN', 'NOSHOW', 'VOID', 'VOID', 'FLOWN'], 75]], ['sampled case 2', {'status': ['NOSHOW', 'OPEN', 'OPEN', 'FLOWN'], 'fee': 75}, [['NOSHOW', 'VOID', 'VOID', 'FLOWN'], 75]], ['sampled case 3', {'status': ['OPEN', 'OPEN', 'OPEN', 'FLOWN', 'OPEN', 'NOSHOW'], 'fee': 50}, [['OPEN', 'OPEN', 'OPEN', 'FLOWN', 'OPEN', 'NOSHOW'], 50]]], [['missed second leg', {'status': ['FLOWN', 'NOSHOW', 'OPEN', 'OPEN'], 'fee': 105}, [['FLOWN', 'NOSHOW', 'VOID', 'VOID'], 105]], ['missed first leg', {'status': ['NOSHOW', 'OPEN', 'OPEN'], 'fee': 150}, [['NOSHOW', 'VOID', 'VOID'], 150]], ['open before noshow', {'status': ['OPEN', 'NOSHOW', 'OPEN'], 'fee': 375}, [['OPEN', 'NOSHOW', 'VOID'], 375]], ['two noshows', {'status': ['FLOWN', 'NOSHOW', 'OPEN', 'NOSHOW', 'OPEN'], 'fee': 120}, [['FLOWN', 'NOSHOW', 'VOID', 'NOSHOW', 'VOID'], 120]], ['flown anomaly after noshow', {'status': ['NOSHOW', 'FLOWN', 'OPEN'], 'fee': 90}, [['NOSHOW', 'FLOWN', 'VOID'], 90]], ['all flown', {'status': ['FLOWN', 'FLOWN', 'FLOWN', 'FLOWN', 'FLOWN', 'FLOWN'], 'fee': 100}, [['FLOWN', 'FLOWN', 'FLOWN', 'FLOWN', 'FLOWN', 'FLOWN'], 0]], ['sampled case 1', {'status': ['NOSHOW', 'OPEN'], 'fee': 150}, [['NOSHOW', 'VOID'], 150]], ['sampled case 2', {'status': ['OPEN', 'OPEN', 'FLOWN', 'NOSHOW', 'OPEN', 'OPEN'], 'fee': 50}, [['OPEN', 'OPEN', 'FLOWN', 'NOSHOW', 'VOID', 'VOID'], 50]], ['sampled case 3', {'status': ['FLOWN', 'OPEN', 'NOSHOW', 'OPEN', 'NOSHOW', 'OPEN'], 'fee': 150}, [['FLOWN', 'OPEN', 'NOSHOW', 'VOID', 'NOSHOW', 'VOID'], 150]]]]\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":"7dff9281a77ba23e6ab39540c8a231936cb2cb11a824a546e527c060e4a12936","source":"\"\"\"Failure Map reference implementation. Python standard library only.\"\"\"\nimport json\n\nN = 1\nobservations = []\ndef solve(x):\n    st = list(x['status'])\n    fee = 0\n    seen = False\n    for i, s in enumerate(st):\n        if s == 'NOSHOW':\n            if not seen: fee += x['fee']\n            seen = True\n        elif seen and s == 'OPEN':\n            st[i] = 'VOID'\n            seen = False\n    return [st, fee]\ndef check(label, actual, expected):\n    observations.append({\"check\": label, \"actual\": actual, \"expected\": expected, \"passed\": actual == expected})\nfixtures = [[['missed second leg', {'status': ['FLOWN', 'NOSHOW', 'OPEN', 'OPEN'], 'fee': 101}, [['FLOWN', 'NOSHOW', 'VOID', 'VOID'], 101]], ['missed first leg', {'status': ['NOSHOW', 'OPEN', 'OPEN'], 'fee': 150}, [['NOSHOW', 'VOID', 'VOID'], 150]], ['open before noshow', {'status': ['OPEN', 'NOSHOW', 'OPEN'], 'fee': 75}, [['OPEN', 'NOSHOW', 'VOID'], 75]], ['two noshows', {'status': ['FLOWN', 'NOSHOW', 'OPEN', 'NOSHOW', 'OPEN'], 'fee': 120}, [['FLOWN', 'NOSHOW', 'VOID', 'NOSHOW', 'VOID'], 120]], ['flown anomaly after noshow', {'status': ['NOSHOW', 'FLOWN', 'OPEN'], 'fee': 90}, [['NOSHOW', 'FLOWN', 'VOID'], 90]], ['all flown', {'status': ['FLOWN', 'FLOWN'], 'fee': 100}, [['FLOWN', 'FLOWN'], 0]], ['sampled case 1', {'status': ['OPEN', 'NOSHOW', 'OPEN', 'NOSHOW', 'NOSHOW', 'OPEN'], 'fee': 100}, [['OPEN', 'NOSHOW', 'VOID', 'NOSHOW', 'NOSHOW', 'VOID'], 100]], ['sampled case 2', {'status': ['FLOWN', 'OPEN', 'FLOWN', 'OPEN', 'OPEN', 'OPEN'], 'fee': 150}, [['FLOWN', 'OPEN', 'FLOWN', 'OPEN', 'OPEN', 'OPEN'], 0]], ['sampled case 3', {'status': ['OPEN'], 'fee': 100}, [['OPEN'], 0]]], [['missed second leg', {'status': ['FLOWN', 'NOSHOW', 'OPEN', 'OPEN'], 'fee': 102}, [['FLOWN', 'NOSHOW', 'VOID', 'VOID'], 102]], ['missed first leg', {'status': ['NOSHOW', 'OPEN', 'OPEN'], 'fee': 150}, [['NOSHOW', 'VOID', 'VOID'], 150]], ['open before noshow', {'status': ['OPEN', 'NOSHOW', 'OPEN'], 'fee': 150}, [['OPEN', 'NOSHOW', 'VOID'], 150]], ['two noshows', {'status': ['FLOWN', 'NOSHOW', 'OPEN', 'NOSHOW', 'OPEN'], 'fee': 120}, [['FLOWN', 'NOSHOW', 'VOID', 'NOSHOW', 'VOID'], 120]], ['flown anomaly after noshow', {'status': ['NOSHOW', 'FLOWN', 'OPEN'], 'fee': 90}, [['NOSHOW', 'FLOWN', 'VOID'], 90]], ['all flown', {'status': ['FLOWN', 'FLOWN', 'FLOWN'], 'fee': 100}, [['FLOWN', 'FLOWN', 'FLOWN'], 0]], ['sampled case 1', {'status': ['OPEN', 'OPEN', 'NOSHOW', 'OPEN'], 'fee': 150}, [['OPEN', 'OPEN', 'NOSHOW', 'VOID'], 150]], ['sampled case 2', {'status': ['OPEN', 'OPEN', 'NOSHOW', 'NOSHOW', 'NOSHOW'], 'fee': 50}, [['OPEN', 'OPEN', 'NOSHOW', 'NOSHOW', 'NOSHOW'], 50]], ['sampled case 3', {'status': ['FLOWN', 'NOSHOW', 'NOSHOW', 'NOSHOW', 'OPEN'], 'fee': 100}, [['FLOWN', 'NOSHOW', 'NOSHOW', 'NOSHOW', 'VOID'], 100]]], [['missed second leg', {'status': ['FLOWN', 'NOSHOW', 'OPEN', 'OPEN'], 'fee': 103}, [['FLOWN', 'NOSHOW', 'VOID', 'VOID'], 103]], ['missed first leg', {'status': ['NOSHOW', 'OPEN', 'OPEN'], 'fee': 150}, [['NOSHOW', 'VOID', 'VOID'], 150]], ['open before noshow', {'status': ['OPEN', 'NOSHOW', 'OPEN'], 'fee': 225}, [['OPEN', 'NOSHOW', 'VOID'], 225]], ['two noshows', {'status': ['FLOWN', 'NOSHOW', 'OPEN', 'NOSHOW', 'OPEN'], 'fee': 120}, [['FLOWN', 'NOSHOW', 'VOID', 'NOSHOW', 'VOID'], 120]], ['flown anomaly after noshow', {'status': ['NOSHOW', 'FLOWN', 'OPEN'], 'fee': 90}, [['NOSHOW', 'FLOWN', 'VOID'], 90]], ['all flown', {'status': ['FLOWN', 'FLOWN', 'FLOWN', 'FLOWN'], 'fee': 100}, [['FLOWN', 'FLOWN', 'FLOWN', 'FLOWN'], 0]], ['sampled case 1', {'status': ['OPEN', 'FLOWN', 'FLOWN', 'FLOWN', 'NOSHOW', 'NOSHOW'], 'fee': 75}, [['OPEN', 'FLOWN', 'FLOWN', 'FLOWN', 'NOSHOW', 'NOSHOW'], 75]], ['sampled case 2', {'status': ['FLOWN', 'OPEN', 'OPEN', 'OPEN', 'OPEN', 'FLOWN'], 'fee': 75}, [['FLOWN', 'OPEN', 'OPEN', 'OPEN', 'OPEN', 'FLOWN'], 0]], ['sampled case 3', {'status': ['OPEN'], 'fee': 50}, [['OPEN'], 0]]], [['missed second leg', {'status': ['FLOWN', 'NOSHOW', 'OPEN', 'OPEN'], 'fee': 104}, [['FLOWN', 'NOSHOW', 'VOID', 'VOID'], 104]], ['missed first leg', {'status': ['NOSHOW', 'OPEN', 'OPEN'], 'fee': 150}, [['NOSHOW', 'VOID', 'VOID'], 150]], ['open before noshow', {'status': ['OPEN', 'NOSHOW', 'OPEN'], 'fee': 300}, [['OPEN', 'NOSHOW', 'VOID'], 300]], ['two noshows', {'status': ['FLOWN', 'NOSHOW', 'OPEN', 'NOSHOW', 'OPEN'], 'fee': 120}, [['FLOWN', 'NOSHOW', 'VOID', 'NOSHOW', 'VOID'], 120]], ['flown anomaly after noshow', {'status': ['NOSHOW', 'FLOWN', 'OPEN'], 'fee': 90}, [['NOSHOW', 'FLOWN', 'VOID'], 90]], ['all flown', {'status': ['FLOWN', 'FLOWN', 'FLOWN', 'FLOWN', 'FLOWN'], 'fee': 100}, [['FLOWN', 'FLOWN', 'FLOWN', 'FLOWN', 'FLOWN'], 0]], ['sampled case 1', {'status': ['OPEN', 'NOSHOW', 'OPEN', 'OPEN', 'FLOWN'], 'fee': 75}, [['OPEN', 'NOSHOW', 'VOID', 'VOID', 'FLOWN'], 75]], ['sampled case 2', {'status': ['NOSHOW', 'OPEN', 'OPEN', 'FLOWN'], 'fee': 75}, [['NOSHOW', 'VOID', 'VOID', 'FLOWN'], 75]], ['sampled case 3', {'status': ['OPEN', 'OPEN', 'OPEN', 'FLOWN', 'OPEN', 'NOSHOW'], 'fee': 50}, [['OPEN', 'OPEN', 'OPEN', 'FLOWN', 'OPEN', 'NOSHOW'], 50]]], [['missed second leg', {'status': ['FLOWN', 'NOSHOW', 'OPEN', 'OPEN'], 'fee': 105}, [['FLOWN', 'NOSHOW', 'VOID', 'VOID'], 105]], ['missed first leg', {'status': ['NOSHOW', 'OPEN', 'OPEN'], 'fee': 150}, [['NOSHOW', 'VOID', 'VOID'], 150]], ['open before noshow', {'status': ['OPEN', 'NOSHOW', 'OPEN'], 'fee': 375}, [['OPEN', 'NOSHOW', 'VOID'], 375]], ['two noshows', {'status': ['FLOWN', 'NOSHOW', 'OPEN', 'NOSHOW', 'OPEN'], 'fee': 120}, [['FLOWN', 'NOSHOW', 'VOID', 'NOSHOW', 'VOID'], 120]], ['flown anomaly after noshow', {'status': ['NOSHOW', 'FLOWN', 'OPEN'], 'fee': 90}, [['NOSHOW', 'FLOWN', 'VOID'], 90]], ['all flown', {'status': ['FLOWN', 'FLOWN', 'FLOWN', 'FLOWN', 'FLOWN', 'FLOWN'], 'fee': 100}, [['FLOWN', 'FLOWN', 'FLOWN', 'FLOWN', 'FLOWN', 'FLOWN'], 0]], ['sampled case 1', {'status': ['NOSHOW', 'OPEN'], 'fee': 150}, [['NOSHOW', 'VOID'], 150]], ['sampled case 2', {'status': ['OPEN', 'OPEN', 'FLOWN', 'NOSHOW', 'OPEN', 'OPEN'], 'fee': 50}, [['OPEN', 'OPEN', 'FLOWN', 'NOSHOW', 'VOID', 'VOID'], 50]], ['sampled case 3', {'status': ['FLOWN', 'OPEN', 'NOSHOW', 'OPEN', 'NOSHOW', 'OPEN'], 'fee': 150}, [['FLOWN', 'OPEN', 'NOSHOW', 'VOID', 'NOSHOW', 'VOID'], 150]]]]\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":"591bd559c7daea09985ae7dc1e2567df18a6efe2f5bb8f362b66be6f110f669a","source":"\"\"\"Failure Map reference implementation. Python standard library only.\"\"\"\nimport json\n\nN = 1\nobservations = []\ndef solve(x):\n    st = list(x['status'])\n    fee = 0\n    seen = False\n    for i, s in enumerate(st):\n        if s == 'NOSHOW':\n            if not seen: fee += x['fee']\n            seen = True\n        elif seen and s == 'OPEN':\n            st[i] = 'VOID'\n    return [st, fee]\ndef check(label, actual, expected):\n    observations.append({\"check\": label, \"actual\": actual, \"expected\": expected, \"passed\": actual == expected})\nfixtures = [[['missed second leg', {'status': ['FLOWN', 'NOSHOW', 'OPEN', 'OPEN'], 'fee': 101}, [['FLOWN', 'NOSHOW', 'VOID', 'VOID'], 101]], ['missed first leg', {'status': ['NOSHOW', 'OPEN', 'OPEN'], 'fee': 150}, [['NOSHOW', 'VOID', 'VOID'], 150]], ['open before noshow', {'status': ['OPEN', 'NOSHOW', 'OPEN'], 'fee': 75}, [['OPEN', 'NOSHOW', 'VOID'], 75]], ['two noshows', {'status': ['FLOWN', 'NOSHOW', 'OPEN', 'NOSHOW', 'OPEN'], 'fee': 120}, [['FLOWN', 'NOSHOW', 'VOID', 'NOSHOW', 'VOID'], 120]], ['flown anomaly after noshow', {'status': ['NOSHOW', 'FLOWN', 'OPEN'], 'fee': 90}, [['NOSHOW', 'FLOWN', 'VOID'], 90]], ['all flown', {'status': ['FLOWN', 'FLOWN'], 'fee': 100}, [['FLOWN', 'FLOWN'], 0]], ['sampled case 1', {'status': ['OPEN', 'NOSHOW', 'OPEN', 'NOSHOW', 'NOSHOW', 'OPEN'], 'fee': 100}, [['OPEN', 'NOSHOW', 'VOID', 'NOSHOW', 'NOSHOW', 'VOID'], 100]], ['sampled case 2', {'status': ['FLOWN', 'OPEN', 'FLOWN', 'OPEN', 'OPEN', 'OPEN'], 'fee': 150}, [['FLOWN', 'OPEN', 'FLOWN', 'OPEN', 'OPEN', 'OPEN'], 0]], ['sampled case 3', {'status': ['OPEN'], 'fee': 100}, [['OPEN'], 0]]], [['missed second leg', {'status': ['FLOWN', 'NOSHOW', 'OPEN', 'OPEN'], 'fee': 102}, [['FLOWN', 'NOSHOW', 'VOID', 'VOID'], 102]], ['missed first leg', {'status': ['NOSHOW', 'OPEN', 'OPEN'], 'fee': 150}, [['NOSHOW', 'VOID', 'VOID'], 150]], ['open before noshow', {'status': ['OPEN', 'NOSHOW', 'OPEN'], 'fee': 150}, [['OPEN', 'NOSHOW', 'VOID'], 150]], ['two noshows', {'status': ['FLOWN', 'NOSHOW', 'OPEN', 'NOSHOW', 'OPEN'], 'fee': 120}, [['FLOWN', 'NOSHOW', 'VOID', 'NOSHOW', 'VOID'], 120]], ['flown anomaly after noshow', {'status': ['NOSHOW', 'FLOWN', 'OPEN'], 'fee': 90}, [['NOSHOW', 'FLOWN', 'VOID'], 90]], ['all flown', {'status': ['FLOWN', 'FLOWN', 'FLOWN'], 'fee': 100}, [['FLOWN', 'FLOWN', 'FLOWN'], 0]], ['sampled case 1', {'status': ['OPEN', 'OPEN', 'NOSHOW', 'OPEN'], 'fee': 150}, [['OPEN', 'OPEN', 'NOSHOW', 'VOID'], 150]], ['sampled case 2', {'status': ['OPEN', 'OPEN', 'NOSHOW', 'NOSHOW', 'NOSHOW'], 'fee': 50}, [['OPEN', 'OPEN', 'NOSHOW', 'NOSHOW', 'NOSHOW'], 50]], ['sampled case 3', {'status': ['FLOWN', 'NOSHOW', 'NOSHOW', 'NOSHOW', 'OPEN'], 'fee': 100}, [['FLOWN', 'NOSHOW', 'NOSHOW', 'NOSHOW', 'VOID'], 100]]], [['missed second leg', {'status': ['FLOWN', 'NOSHOW', 'OPEN', 'OPEN'], 'fee': 103}, [['FLOWN', 'NOSHOW', 'VOID', 'VOID'], 103]], ['missed first leg', {'status': ['NOSHOW', 'OPEN', 'OPEN'], 'fee': 150}, [['NOSHOW', 'VOID', 'VOID'], 150]], ['open before noshow', {'status': ['OPEN', 'NOSHOW', 'OPEN'], 'fee': 225}, [['OPEN', 'NOSHOW', 'VOID'], 225]], ['two noshows', {'status': ['FLOWN', 'NOSHOW', 'OPEN', 'NOSHOW', 'OPEN'], 'fee': 120}, [['FLOWN', 'NOSHOW', 'VOID', 'NOSHOW', 'VOID'], 120]], ['flown anomaly after noshow', {'status': ['NOSHOW', 'FLOWN', 'OPEN'], 'fee': 90}, [['NOSHOW', 'FLOWN', 'VOID'], 90]], ['all flown', {'status': ['FLOWN', 'FLOWN', 'FLOWN', 'FLOWN'], 'fee': 100}, [['FLOWN', 'FLOWN', 'FLOWN', 'FLOWN'], 0]], ['sampled case 1', {'status': ['OPEN', 'FLOWN', 'FLOWN', 'FLOWN', 'NOSHOW', 'NOSHOW'], 'fee': 75}, [['OPEN', 'FLOWN', 'FLOWN', 'FLOWN', 'NOSHOW', 'NOSHOW'], 75]], ['sampled case 2', {'status': ['FLOWN', 'OPEN', 'OPEN', 'OPEN', 'OPEN', 'FLOWN'], 'fee': 75}, [['FLOWN', 'OPEN', 'OPEN', 'OPEN', 'OPEN', 'FLOWN'], 0]], ['sampled case 3', {'status': ['OPEN'], 'fee': 50}, [['OPEN'], 0]]], [['missed second leg', {'status': ['FLOWN', 'NOSHOW', 'OPEN', 'OPEN'], 'fee': 104}, [['FLOWN', 'NOSHOW', 'VOID', 'VOID'], 104]], ['missed first leg', {'status': ['NOSHOW', 'OPEN', 'OPEN'], 'fee': 150}, [['NOSHOW', 'VOID', 'VOID'], 150]], ['open before noshow', {'status': ['OPEN', 'NOSHOW', 'OPEN'], 'fee': 300}, [['OPEN', 'NOSHOW', 'VOID'], 300]], ['two noshows', {'status': ['FLOWN', 'NOSHOW', 'OPEN', 'NOSHOW', 'OPEN'], 'fee': 120}, [['FLOWN', 'NOSHOW', 'VOID', 'NOSHOW', 'VOID'], 120]], ['flown anomaly after noshow', {'status': ['NOSHOW', 'FLOWN', 'OPEN'], 'fee': 90}, [['NOSHOW', 'FLOWN', 'VOID'], 90]], ['all flown', {'status': ['FLOWN', 'FLOWN', 'FLOWN', 'FLOWN', 'FLOWN'], 'fee': 100}, [['FLOWN', 'FLOWN', 'FLOWN', 'FLOWN', 'FLOWN'], 0]], ['sampled case 1', {'status': ['OPEN', 'NOSHOW', 'OPEN', 'OPEN', 'FLOWN'], 'fee': 75}, [['OPEN', 'NOSHOW', 'VOID', 'VOID', 'FLOWN'], 75]], ['sampled case 2', {'status': ['NOSHOW', 'OPEN', 'OPEN', 'FLOWN'], 'fee': 75}, [['NOSHOW', 'VOID', 'VOID', 'FLOWN'], 75]], ['sampled case 3', {'status': ['OPEN', 'OPEN', 'OPEN', 'FLOWN', 'OPEN', 'NOSHOW'], 'fee': 50}, [['OPEN', 'OPEN', 'OPEN', 'FLOWN', 'OPEN', 'NOSHOW'], 50]]], [['missed second leg', {'status': ['FLOWN', 'NOSHOW', 'OPEN', 'OPEN'], 'fee': 105}, [['FLOWN', 'NOSHOW', 'VOID', 'VOID'], 105]], ['missed first leg', {'status': ['NOSHOW', 'OPEN', 'OPEN'], 'fee': 150}, [['NOSHOW', 'VOID', 'VOID'], 150]], ['open before noshow', {'status': ['OPEN', 'NOSHOW', 'OPEN'], 'fee': 375}, [['OPEN', 'NOSHOW', 'VOID'], 375]], ['two noshows', {'status': ['FLOWN', 'NOSHOW', 'OPEN', 'NOSHOW', 'OPEN'], 'fee': 120}, [['FLOWN', 'NOSHOW', 'VOID', 'NOSHOW', 'VOID'], 120]], ['flown anomaly after noshow', {'status': ['NOSHOW', 'FLOWN', 'OPEN'], 'fee': 90}, [['NOSHOW', 'FLOWN', 'VOID'], 90]], ['all flown', {'status': ['FLOWN', 'FLOWN', 'FLOWN', 'FLOWN', 'FLOWN', 'FLOWN'], 'fee': 100}, [['FLOWN', 'FLOWN', 'FLOWN', 'FLOWN', 'FLOWN', 'FLOWN'], 0]], ['sampled case 1', {'status': ['NOSHOW', 'OPEN'], 'fee': 150}, [['NOSHOW', 'VOID'], 150]], ['sampled case 2', {'status': ['OPEN', 'OPEN', 'FLOWN', 'NOSHOW', 'OPEN', 'OPEN'], 'fee': 50}, [['OPEN', 'OPEN', 'FLOWN', 'NOSHOW', 'VOID', 'VOID'], 50]], ['sampled case 3', {'status': ['FLOWN', 'OPEN', 'NOSHOW', 'OPEN', 'NOSHOW', 'OPEN'], 'fee': 150}, [['FLOWN', 'OPEN', 'NOSHOW', 'VOID', 'NOSHOW', 'VOID'], 150]]]]\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-no-show-sequence-void-next-only","generated_at":"2026-09-29T14:47:46.803295+00:00","license":"CC0-1.0","python":"3.12.14","seed":1,"split":"open-access"},"relevance":"Coupon sequence rules cancel onward segments after a no-show and assess a single penalty.","repair":"Keep the no-show state for the remainder of the ticket.","root_cause":"The no-show state is reset after voiding one coupon.","sha256":"58320d1d87a8c2d1b56f47383b2082b54832d354e3e6a5d904bc553535118120","title":"Only the coupon right after a no-show is cancelled · case 01","variant":1,"variant_policy":"Five numbered records share a model and may reuse boundary fixtures.","verification":{"attempt":{"elapsed_ms":39.981,"exit_code":1,"observations":[{"actual":[["FLOWN","NOSHOW","VOID","VOID"],101],"check":"missed second leg","expected":[["FLOWN","NOSHOW","VOID","VOID"],101],"passed":true},{"actual":[["NOSHOW","VOID","VOID"],150],"check":"missed first leg","expected":[["NOSHOW","VOID","VOID"],150],"passed":true},{"actual":[["OPEN","NOSHOW","VOID"],75],"check":"open before noshow","expected":[["OPEN","NOSHOW","VOID"],75],"passed":true},{"actual":[["FLOWN","NOSHOW","VOID","NOSHOW","VOID"],120],"check":"two noshows","expected":[["FLOWN","NOSHOW","VOID","NOSHOW","VOID"],120],"passed":true},{"actual":[["NOSHOW","FLOWN","OPEN"],90],"check":"flown anomaly after noshow","expected":[["NOSHOW","FLOWN","VOID"],90],"passed":false},{"actual":[["FLOWN","FLOWN"],0],"check":"all flown","expected":[["FLOWN","FLOWN"],0],"passed":true},{"actual":[["OPEN","NOSHOW","VOID","NOSHOW","NOSHOW","VOID"],100],"check":"sampled case 1","expected":[["OPEN","NOSHOW","VOID","NOSHOW","NOSHOW","VOID"],100],"passed":true},{"actual":[["FLOWN","OPEN","FLOWN","OPEN","OPEN","OPEN"],0],"check":"sampled case 2","expected":[["FLOWN","OPEN","FLOWN","OPEN","OPEN","OPEN"],0],"passed":true},{"actual":[["OPEN"],0],"check":"sampled case 3","expected":[["OPEN"],0],"passed":true}],"passed":false,"stderr":"","stdout":"{\"observations\": [{\"check\": \"missed second leg\", \"actual\": [[\"FLOWN\", \"NOSHOW\", \"VOID\", \"VOID\"], 101], \"expected\": [[\"FLOWN\", \"NOSHOW\", \"VOID\", \"VOID\"], 101], \"passed\": true}, {\"check\": \"missed first leg\", \"actual\": [[\"NOSHOW\", \"VOID\", \"VOID\"], 150], \"expected\": [[\"NOSHOW\", \"VOID\", \"VOID\"], 150], \"passed\": true}, {\"check\": \"open before noshow\", \"actual\": [[\"OPEN\", \"NOSHOW\", \"VOID\"], 75], \"expected\": [[\"OPEN\", \"NOSHOW\", \"VOID\"], 75], \"passed\": true}, {\"check\": \"two noshows\", \"actual\": [[\"FLOWN\", \"NOSHOW\", \"VOID\", \"NOSHOW\", \"VOID\"], 120], \"expected\": [[\"FLOWN\", \"NOSHOW\", \"VOID\", \"NOSHOW\", \"VOID\"], 120], \"passed\": true}, {\"check\": \"flown anomaly after noshow\", \"actual\": [[\"NOSHOW\", \"FLOWN\", \"OPEN\"], 90], \"expected\": [[\"NOSHOW\", \"FLOWN\", \"VOID\"], 90], \"passed\": false}, {\"check\": \"all flown\", \"actual\": [[\"FLOWN\", \"FLOWN\"], 0], \"expected\": [[\"FLOWN\", \"FLOWN\"], 0], \"passed\": true}, {\"check\": \"sampled case 1\", \"actual\": [[\"OPEN\", \"NOSHOW\", \"VOID\", \"NOSHOW\", \"NOSHOW\", \"VOID\"], 100], \"expected\": [[\"OPEN\", \"NOSHOW\", \"VOID\", \"NOSHOW\", \"NOSHOW\", \"VOID\"], 100], \"passed\": true}, {\"check\": \"sampled case 2\", \"actual\": [[\"FLOWN\", \"OPEN\", \"FLOWN\", \"OPEN\", \"OPEN\", \"OPEN\"], 0], \"expected\": [[\"FLOWN\", \"OPEN\", \"FLOWN\", \"OPEN\", \"OPEN\", \"OPEN\"], 0], \"passed\": true}, {\"check\": \"sampled case 3\", \"actual\": [[\"OPEN\"], 0], \"expected\": [[\"OPEN\"], 0], \"passed\": true}], \"passed\": false}\n"},"broken":{"elapsed_ms":39.339,"exit_code":1,"observations":[{"actual":[["FLOWN","NOSHOW","VOID","OPEN"],101],"check":"missed second leg","expected":[["FLOWN","NOSHOW","VOID","VOID"],101],"passed":false},{"actual":[["NOSHOW","VOID","OPEN"],150],"check":"missed first leg","expected":[["NOSHOW","VOID","VOID"],150],"passed":false},{"actual":[["OPEN","NOSHOW","VOID"],75],"check":"open before noshow","expected":[["OPEN","NOSHOW","VOID"],75],"passed":true},{"actual":[["FLOWN","NOSHOW","VOID","NOSHOW","VOID"],240],"check":"two noshows","expected":[["FLOWN","NOSHOW","VOID","NOSHOW","VOID"],120],"passed":false},{"actual":[["NOSHOW","FLOWN","VOID"],90],"check":"flown anomaly after noshow","expected":[["NOSHOW","FLOWN","VOID"],90],"passed":true},{"actual":[["FLOWN","FLOWN"],0],"check":"all flown","expected":[["FLOWN","FLOWN"],0],"passed":true},{"actual":[["OPEN","NOSHOW","VOID","NOSHOW","NOSHOW","VOID"],200],"check":"sampled case 1","expected":[["OPEN","NOSHOW","VOID","NOSHOW","NOSHOW","VOID"],100],"passed":false},{"actual":[["FLOWN","OPEN","FLOWN","OPEN","OPEN","OPEN"],0],"check":"sampled case 2","expected":[["FLOWN","OPEN","FLOWN","OPEN","OPEN","OPEN"],0],"passed":true},{"actual":[["OPEN"],0],"check":"sampled case 3","expected":[["OPEN"],0],"passed":true}],"passed":false,"stderr":"","stdout":"{\"observations\": [{\"check\": \"missed second leg\", \"actual\": [[\"FLOWN\", \"NOSHOW\", \"VOID\", \"OPEN\"], 101], \"expected\": [[\"FLOWN\", \"NOSHOW\", \"VOID\", \"VOID\"], 101], \"passed\": false}, {\"check\": \"missed first leg\", \"actual\": [[\"NOSHOW\", \"VOID\", \"OPEN\"], 150], \"expected\": [[\"NOSHOW\", \"VOID\", \"VOID\"], 150], \"passed\": false}, {\"check\": \"open before noshow\", \"actual\": [[\"OPEN\", \"NOSHOW\", \"VOID\"], 75], \"expected\": [[\"OPEN\", \"NOSHOW\", \"VOID\"], 75], \"passed\": true}, {\"check\": \"two noshows\", \"actual\": [[\"FLOWN\", \"NOSHOW\", \"VOID\", \"NOSHOW\", \"VOID\"], 240], \"expected\": [[\"FLOWN\", \"NOSHOW\", \"VOID\", \"NOSHOW\", \"VOID\"], 120], \"passed\": false}, {\"check\": \"flown anomaly after noshow\", \"actual\": [[\"NOSHOW\", \"FLOWN\", \"VOID\"], 90], \"expected\": [[\"NOSHOW\", \"FLOWN\", \"VOID\"], 90], \"passed\": true}, {\"check\": \"all flown\", \"actual\": [[\"FLOWN\", \"FLOWN\"], 0], \"expected\": [[\"FLOWN\", \"FLOWN\"], 0], \"passed\": true}, {\"check\": \"sampled case 1\", \"actual\": [[\"OPEN\", \"NOSHOW\", \"VOID\", \"NOSHOW\", \"NOSHOW\", \"VOID\"], 200], \"expected\": [[\"OPEN\", \"NOSHOW\", \"VOID\", \"NOSHOW\", \"NOSHOW\", \"VOID\"], 100], \"passed\": false}, {\"check\": \"sampled case 2\", \"actual\": [[\"FLOWN\", \"OPEN\", \"FLOWN\", \"OPEN\", \"OPEN\", \"OPEN\"], 0], \"expected\": [[\"FLOWN\", \"OPEN\", \"FLOWN\", \"OPEN\", \"OPEN\", \"OPEN\"], 0], \"passed\": true}, {\"check\": \"sampled case 3\", \"actual\": [[\"OPEN\"], 0], \"expected\": [[\"OPEN\"], 0], \"passed\": true}], \"passed\": false}\n"},"fixed":{"elapsed_ms":38.69,"exit_code":0,"observations":[{"actual":[["FLOWN","NOSHOW","VOID","VOID"],101],"check":"missed second leg","expected":[["FLOWN","NOSHOW","VOID","VOID"],101],"passed":true},{"actual":[["NOSHOW","VOID","VOID"],150],"check":"missed first leg","expected":[["NOSHOW","VOID","VOID"],150],"passed":true},{"actual":[["OPEN","NOSHOW","VOID"],75],"check":"open before noshow","expected":[["OPEN","NOSHOW","VOID"],75],"passed":true},{"actual":[["FLOWN","NOSHOW","VOID","NOSHOW","VOID"],120],"check":"two noshows","expected":[["FLOWN","NOSHOW","VOID","NOSHOW","VOID"],120],"passed":true},{"actual":[["NOSHOW","FLOWN","VOID"],90],"check":"flown anomaly after noshow","expected":[["NOSHOW","FLOWN","VOID"],90],"passed":true},{"actual":[["FLOWN","FLOWN"],0],"check":"all flown","expected":[["FLOWN","FLOWN"],0],"passed":true},{"actual":[["OPEN","NOSHOW","VOID","NOSHOW","NOSHOW","VOID"],100],"check":"sampled case 1","expected":[["OPEN","NOSHOW","VOID","NOSHOW","NOSHOW","VOID"],100],"passed":true},{"actual":[["FLOWN","OPEN","FLOWN","OPEN","OPEN","OPEN"],0],"check":"sampled case 2","expected":[["FLOWN","OPEN","FLOWN","OPEN","OPEN","OPEN"],0],"passed":true},{"actual":[["OPEN"],0],"check":"sampled case 3","expected":[["OPEN"],0],"passed":true}],"passed":true,"stderr":"","stdout":"{\"observations\": [{\"check\": \"missed second leg\", \"actual\": [[\"FLOWN\", \"NOSHOW\", \"VOID\", \"VOID\"], 101], \"expected\": [[\"FLOWN\", \"NOSHOW\", \"VOID\", \"VOID\"], 101], \"passed\": true}, {\"check\": \"missed first leg\", \"actual\": [[\"NOSHOW\", \"VOID\", \"VOID\"], 150], \"expected\": [[\"NOSHOW\", \"VOID\", \"VOID\"], 150], \"passed\": true}, {\"check\": \"open before noshow\", \"actual\": [[\"OPEN\", \"NOSHOW\", \"VOID\"], 75], \"expected\": [[\"OPEN\", \"NOSHOW\", \"VOID\"], 75], \"passed\": true}, {\"check\": \"two noshows\", \"actual\": [[\"FLOWN\", \"NOSHOW\", \"VOID\", \"NOSHOW\", \"VOID\"], 120], \"expected\": [[\"FLOWN\", \"NOSHOW\", \"VOID\", \"NOSHOW\", \"VOID\"], 120], \"passed\": true}, {\"check\": \"flown anomaly after noshow\", \"actual\": [[\"NOSHOW\", \"FLOWN\", \"VOID\"], 90], \"expected\": [[\"NOSHOW\", \"FLOWN\", \"VOID\"], 90], \"passed\": true}, {\"check\": \"all flown\", \"actual\": [[\"FLOWN\", \"FLOWN\"], 0], \"expected\": [[\"FLOWN\", \"FLOWN\"], 0], \"passed\": true}, {\"check\": \"sampled case 1\", \"actual\": [[\"OPEN\", \"NOSHOW\", \"VOID\", \"NOSHOW\", \"NOSHOW\", \"VOID\"], 100], \"expected\": [[\"OPEN\", \"NOSHOW\", \"VOID\", \"NOSHOW\", \"NOSHOW\", \"VOID\"], 100], \"passed\": true}, {\"check\": \"sampled case 2\", \"actual\": [[\"FLOWN\", \"OPEN\", \"FLOWN\", \"OPEN\", \"OPEN\", \"OPEN\"], 0], \"expected\": [[\"FLOWN\", \"OPEN\", \"FLOWN\", \"OPEN\", \"OPEN\", \"OPEN\"], 0], \"passed\": true}, {\"check\": \"sampled case 3\", \"actual\": [[\"OPEN\"], 0], \"expected\": [[\"OPEN\"], 0], \"passed\": true}], \"passed\": true}\n"}},"verified":true,"visibility":"public"}