FAILURE MAP
← Case archive

FA-66761 / Airline fare rule evaluation / Open access

Coupons before the no-show also cancelled · case 01

An open coupon earlier in the itinerary is voided because a later sector was missed.

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

ROOT CAUSE

Voiding checks whether any NOSHOW exists on the ticket instead of whether one has already occurred.

THE FAILURE

Voiding checks whether any NOSHOW exists on the ticket instead of whether one has already occurred.

Unsuccessful approach: Looking one coupon back still voids the coupon immediately before a no-show.

Case 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].

Why this case matters

Coupon sequence rules cancel onward segments after a no-show and assess a single penalty.

1 / The failure

Exit 1
"""Failure Map reference implementation. Python standard library only."""
import json

N = 1
observations = []
def solve(x):
    st = list(x['status'])
    fee = 0
    seen = False
    for i, s in enumerate(st):
        if s == 'NOSHOW':
            if not seen: fee += x['fee']
            seen = True
        elif s == 'OPEN' and 'NOSHOW' in st:
            st[i] = 'VOID'
    return [st, fee]
def check(label, actual, expected):
    observations.append({"check": label, "actual": actual, "expected": expected, "passed": actual == expected})
fixtures = [[['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]]]]
for label, args, expected in fixtures[N-1]:
    check(label, solve(args), expected)
print(json.dumps({"observations": observations, "passed": all(x["passed"] for x in observations)}, ensure_ascii=False))
raise SystemExit(0 if all(x["passed"] for x in observations) else 1)
Boundary fixtureActualExpectedOutcome
missed second leg[['FLOWN', 'NOSHOW', 'VOID', 'VOID'], 101][['FLOWN', 'NOSHOW', 'VOID', 'VOID'], 101]Passed
missed first leg[['NOSHOW', 'VOID', 'VOID'], 150][['NOSHOW', 'VOID', 'VOID'], 150]Passed
open before noshow[['VOID', 'NOSHOW', 'VOID'], 75][['OPEN', 'NOSHOW', 'VOID'], 75]Failed
two noshows[['FLOWN', 'NOSHOW', 'VOID', 'NOSHOW', 'VOID'], 120][['FLOWN', 'NOSHOW', 'VOID', 'NOSHOW', 'VOID'], 120]Passed
flown anomaly after noshow[['NOSHOW', 'FLOWN', 'VOID'], 90][['NOSHOW', 'FLOWN', 'VOID'], 90]Passed
all flown[['FLOWN', 'FLOWN'], 0][['FLOWN', 'FLOWN'], 0]Passed
sampled case 1[['VOID', 'NOSHOW', 'VOID', 'NOSHOW', 'NOSHOW', 'VOID'], 100][['OPEN', 'NOSHOW', 'VOID', 'NOSHOW', 'NOSHOW', 'VOID'], 100]Failed
sampled case 2[['FLOWN', 'OPEN', 'FLOWN', 'OPEN', 'OPEN', 'OPEN'], 0][['FLOWN', 'OPEN', 'FLOWN', 'OPEN', 'OPEN', 'OPEN'], 0]Passed
sampled case 3[['OPEN'], 0][['OPEN'], 0]Passed

SHA-256 / 12c5596fcdafe5eec6256f249e4676a51711ec6a00c6a604be337be4825b222e

2 / The unsuccessful fix

Exit 1
"""Failure Map reference implementation. Python standard library only."""
import json

N = 1
observations = []
def solve(x):
    st = list(x['status'])
    fee = 0
    seen = False
    for i, s in enumerate(st):
        if s == 'NOSHOW':
            if not seen: fee += x['fee']
            seen = True
        elif s == 'OPEN' and 'NOSHOW' in st[max(0, i - 1):]:
            st[i] = 'VOID'
    return [st, fee]
def check(label, actual, expected):
    observations.append({"check": label, "actual": actual, "expected": expected, "passed": actual == expected})
fixtures = [[['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]]]]
for label, args, expected in fixtures[N-1]:
    check(label, solve(args), expected)
print(json.dumps({"observations": observations, "passed": all(x["passed"] for x in observations)}, ensure_ascii=False))
raise SystemExit(0 if all(x["passed"] for x in observations) else 1)
Boundary fixtureActualExpectedOutcome
missed second leg[['FLOWN', 'NOSHOW', 'VOID', 'OPEN'], 101][['FLOWN', 'NOSHOW', 'VOID', 'VOID'], 101]Failed
missed first leg[['NOSHOW', 'VOID', 'OPEN'], 150][['NOSHOW', 'VOID', 'VOID'], 150]Failed
open before noshow[['VOID', 'NOSHOW', 'VOID'], 75][['OPEN', 'NOSHOW', 'VOID'], 75]Failed
two noshows[['FLOWN', 'NOSHOW', 'VOID', 'NOSHOW', 'VOID'], 120][['FLOWN', 'NOSHOW', 'VOID', 'NOSHOW', 'VOID'], 120]Passed
flown anomaly after noshow[['NOSHOW', 'FLOWN', 'OPEN'], 90][['NOSHOW', 'FLOWN', 'VOID'], 90]Failed
all flown[['FLOWN', 'FLOWN'], 0][['FLOWN', 'FLOWN'], 0]Passed
sampled case 1[['VOID', 'NOSHOW', 'VOID', 'NOSHOW', 'NOSHOW', 'VOID'], 100][['OPEN', 'NOSHOW', 'VOID', 'NOSHOW', 'NOSHOW', 'VOID'], 100]Failed
sampled case 2[['FLOWN', 'OPEN', 'FLOWN', 'OPEN', 'OPEN', 'OPEN'], 0][['FLOWN', 'OPEN', 'FLOWN', 'OPEN', 'OPEN', 'OPEN'], 0]Passed
sampled case 3[['OPEN'], 0][['OPEN'], 0]Passed

SHA-256 / 720e5af125ff32623592a0f3b6d52fc829ca695abc12b6d2d7cb399b2e884986

HELD IN THE MEMBER ARCHIVE

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

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

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

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

Sign in to the archive ↗

Verification & scope

A stipulated toy fare-rule contract with invented constants; it is not an ATPCO or carrier tariff implementation and makes no claim of industry-standard conformance. This reproducer isolates one failure mechanism. Results cover the supplied fixtures. Variants within a family share a test contract and should remain grouped when constructing evaluation splits. Related mechanisms with a shared evaluation_group must also remain together; these controlled models are not independent production incidents.

Observations recorded using Python 3.12.14 at 2026-09-29T14:47:46.800297+00:00.

Case digest / c3e7f2c2cb368424a96ba785f03b94106c108f9c731ba0ebebc5fcc09df409bf