FAILURE MAP
← Case archive

FA-56701 / Auction allocation rules / Open access

Soft close: hard stop cap · case 01

Soft-close extensions overrun the immutable hard stop.

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

ROOT CAUSE

Soft-close extensions overrun the immutable hard stop.

VERIFIED REPAIR

For hard stop cap, apply the stipulated decision min(x["hard_stop"],x["close"]+x["extension"]).

Unsuccessful approach: The attempted repair uses max(x["hard_stop"],x["close"]+x["extension"]); the explicit regression cases demonstrate that this still violates the stipulated auction rule.

Case contract

Toy soft-close auction scheduling uses integer ticks. Only eligible bids in the final extension window extend close, extending from the later existing deadline, with a fixed hard stop and a finite extension count. A batch carries submission and admission times separately. Named decision hard-stop-cap: For hard stop cap, apply the stipulated decision min(x["hard_stop"],x["close"]+x["extension"]).

Why this case matters

Offline administrative auction model for software failure analysis.

1 / The failure

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

N = 1
observations = []
def solve(x):
    v0 = x["close"]-x["window"]<=x["now"]<x["close"]
    v1 = max(x["close"],x["now"]+x["extension"])
    v2 = x["close"]+x["extension"]
    v3 = x["close"]+x["extension"] if x["eligible"] and not x["withdrawn"] else x["close"]
    v4 = x["count"]<x["max_count"]
    v5 = x["submitted"]<x["close"]
    v6 = min(x["hard_stop"],x["close"]+x["pause_length"]) if x["paused"] else x["close"]
    v7 = max(x["close"],x["last_bid"]+x["grace"])
    v8 = len(set(x["batch_times"])-set(x["seen_times"]))
    v9 = not x["paused"] and x["now"]>=x["close"]
    return {'extension-window':v0,'extension-base':v1,'hard-stop-cap':v2,'eligible-bid-extension':v3,'extension-budget':v4,'timely-submission':v5,'paused-deadline':v6,'quiet-period-close':v7,'new-batch-extensions':v8,'paused-close-event':v9}
def check(label, actual, expected):
    observations.append({"check": label, "actual": actual, "expected": expected, "passed": actual == expected})
fixtures = [('hard stop near', {'close': 20, 'now': 18, 'window': 3, 'extension': 5, 'hard_stop': 22, 'count': 1, 'max_count': 3, 'eligible': True, 'submitted': 19, 'admitted': 21, 'paused': False, 'pause_length': 4, 'last_bid': 15, 'grace': 2, 'withdrawn': False, 'batch_times': [17, 19], 'seen_times': [17]}, [22, 44, 66, 88, 110]), ('hard stop below close', {'close': 20, 'now': 18, 'window': 3, 'extension': 5, 'hard_stop': 19, 'count': 1, 'max_count': 3, 'eligible': True, 'submitted': 19, 'admitted': 21, 'paused': False, 'pause_length': 4, 'last_bid': 15, 'grace': 2, 'withdrawn': False, 'batch_times': [17, 19], 'seen_times': [17]}, [19, 38, 57, 76, 95]), ('normal contract', {'close': 20, 'now': 18, 'window': 3, 'extension': 5, 'hard_stop': 30, 'count': 1, 'max_count': 3, 'eligible': True, 'submitted': 19, 'admitted': 21, 'paused': False, 'pause_length': 4, 'last_bid': 15, 'grace': 2, 'withdrawn': False, 'batch_times': [17, 19], 'seen_times': [17]}, [25, 50, 75, 100, 125]), ('submission exactly closing', {'close': 20, 'now': 18, 'window': 3, 'extension': 5, 'hard_stop': 30, 'count': 1, 'max_count': 3, 'eligible': True, 'submitted': 20, 'admitted': 21, 'paused': False, 'pause_length': 4, 'last_bid': 15, 'grace': 2, 'withdrawn': False, 'batch_times': [17, 19], 'seen_times': [17]}, [25, 50, 75, 100, 125]), ('quiet grace extends close', {'close': 20, 'now': 18, 'window': 3, 'extension': 5, 'hard_stop': 30, 'count': 1, 'max_count': 3, 'eligible': True, 'submitted': 19, 'admitted': 21, 'paused': False, 'pause_length': 4, 'last_bid': 19, 'grace': 4, 'withdrawn': False, 'batch_times': [17, 19], 'seen_times': [17]}, [25, 50, 75, 100, 125]), ('early bid', {'close': 20, 'now': 10, 'window': 3, 'extension': 5, 'hard_stop': 30, 'count': 1, 'max_count': 3, 'eligible': True, 'submitted': 19, 'admitted': 21, 'paused': False, 'pause_length': 4, 'last_bid': 15, 'grace': 2, 'withdrawn': False, 'batch_times': [17, 19], 'seen_times': [17]}, [25, 50, 75, 100, 125]), ('at deadline', {'close': 20, 'now': 20, 'window': 3, 'extension': 5, 'hard_stop': 30, 'count': 1, 'max_count': 3, 'eligible': True, 'submitted': 19, 'admitted': 21, 'paused': False, 'pause_length': 4, 'last_bid': 15, 'grace': 2, 'withdrawn': False, 'batch_times': [17, 19], 'seen_times': [17]}, [25, 50, 75, 100, 125]), ('past deadline', {'close': 20, 'now': 21, 'window': 3, 'extension': 5, 'hard_stop': 30, 'count': 1, 'max_count': 3, 'eligible': True, 'submitted': 19, 'admitted': 21, 'paused': False, 'pause_length': 4, 'last_bid': 15, 'grace': 2, 'withdrawn': False, 'batch_times': [17, 19], 'seen_times': [17]}, [25, 50, 75, 100, 125]), ('ineligible bid', {'close': 20, 'now': 18, 'window': 3, 'extension': 5, 'hard_stop': 30, 'count': 1, 'max_count': 3, 'eligible': False, 'submitted': 19, 'admitted': 21, 'paused': False, 'pause_length': 4, 'last_bid': 15, 'grace': 2, 'withdrawn': False, 'batch_times': [17, 19], 'seen_times': [17]}, [25, 50, 75, 100, 125]), ('no extensions left', {'close': 20, 'now': 18, 'window': 3, 'extension': 5, 'hard_stop': 30, 'count': 3, 'max_count': 3, 'eligible': True, 'submitted': 19, 'admitted': 21, 'paused': False, 'pause_length': 4, 'last_bid': 15, 'grace': 2, 'withdrawn': False, 'batch_times': [17, 19], 'seen_times': [17]}, [25, 50, 75, 100, 125])]
def vary(value):
 if type(value) is int: return value*N
 if isinstance(value,list): return [vary(v) for v in value]
 if isinstance(value,dict): return {k:(v if k in ['count', 'delivery_index', 'disputed', 'max_count', 'maximum_set', 'minimum_set', 'stage', 'threshold', 'waived'] else vary(v)) for k,v in value.items()}
 return value
for label, request, expected in fixtures:
 check(label, solve(vary(request))['hard-stop-cap'], expected[N-1])
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
hard stop near2522Failed
hard stop below close2519Failed
normal contract2525Passed
submission exactly closing2525Passed
quiet grace extends close2525Passed
early bid2525Passed
at deadline2525Passed
past deadline2525Passed
ineligible bid2525Passed
no extensions left2525Passed

SHA-256 / 6731436e067dc6bc1b6893583bc2bb986dfad0ee488d1a22e8c0dd24620a5996

2 / The unsuccessful fix

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

N = 1
observations = []
def solve(x):
    v0 = x["close"]-x["window"]<=x["now"]<x["close"]
    v1 = max(x["close"],x["now"]+x["extension"])
    v2 = max(x["hard_stop"],x["close"]+x["extension"])
    v3 = x["close"]+x["extension"] if x["eligible"] and not x["withdrawn"] else x["close"]
    v4 = x["count"]<x["max_count"]
    v5 = x["submitted"]<x["close"]
    v6 = min(x["hard_stop"],x["close"]+x["pause_length"]) if x["paused"] else x["close"]
    v7 = max(x["close"],x["last_bid"]+x["grace"])
    v8 = len(set(x["batch_times"])-set(x["seen_times"]))
    v9 = not x["paused"] and x["now"]>=x["close"]
    return {'extension-window':v0,'extension-base':v1,'hard-stop-cap':v2,'eligible-bid-extension':v3,'extension-budget':v4,'timely-submission':v5,'paused-deadline':v6,'quiet-period-close':v7,'new-batch-extensions':v8,'paused-close-event':v9}
def check(label, actual, expected):
    observations.append({"check": label, "actual": actual, "expected": expected, "passed": actual == expected})
fixtures = [('hard stop near', {'close': 20, 'now': 18, 'window': 3, 'extension': 5, 'hard_stop': 22, 'count': 1, 'max_count': 3, 'eligible': True, 'submitted': 19, 'admitted': 21, 'paused': False, 'pause_length': 4, 'last_bid': 15, 'grace': 2, 'withdrawn': False, 'batch_times': [17, 19], 'seen_times': [17]}, [22, 44, 66, 88, 110]), ('hard stop below close', {'close': 20, 'now': 18, 'window': 3, 'extension': 5, 'hard_stop': 19, 'count': 1, 'max_count': 3, 'eligible': True, 'submitted': 19, 'admitted': 21, 'paused': False, 'pause_length': 4, 'last_bid': 15, 'grace': 2, 'withdrawn': False, 'batch_times': [17, 19], 'seen_times': [17]}, [19, 38, 57, 76, 95]), ('normal contract', {'close': 20, 'now': 18, 'window': 3, 'extension': 5, 'hard_stop': 30, 'count': 1, 'max_count': 3, 'eligible': True, 'submitted': 19, 'admitted': 21, 'paused': False, 'pause_length': 4, 'last_bid': 15, 'grace': 2, 'withdrawn': False, 'batch_times': [17, 19], 'seen_times': [17]}, [25, 50, 75, 100, 125]), ('submission exactly closing', {'close': 20, 'now': 18, 'window': 3, 'extension': 5, 'hard_stop': 30, 'count': 1, 'max_count': 3, 'eligible': True, 'submitted': 20, 'admitted': 21, 'paused': False, 'pause_length': 4, 'last_bid': 15, 'grace': 2, 'withdrawn': False, 'batch_times': [17, 19], 'seen_times': [17]}, [25, 50, 75, 100, 125]), ('quiet grace extends close', {'close': 20, 'now': 18, 'window': 3, 'extension': 5, 'hard_stop': 30, 'count': 1, 'max_count': 3, 'eligible': True, 'submitted': 19, 'admitted': 21, 'paused': False, 'pause_length': 4, 'last_bid': 19, 'grace': 4, 'withdrawn': False, 'batch_times': [17, 19], 'seen_times': [17]}, [25, 50, 75, 100, 125]), ('early bid', {'close': 20, 'now': 10, 'window': 3, 'extension': 5, 'hard_stop': 30, 'count': 1, 'max_count': 3, 'eligible': True, 'submitted': 19, 'admitted': 21, 'paused': False, 'pause_length': 4, 'last_bid': 15, 'grace': 2, 'withdrawn': False, 'batch_times': [17, 19], 'seen_times': [17]}, [25, 50, 75, 100, 125]), ('at deadline', {'close': 20, 'now': 20, 'window': 3, 'extension': 5, 'hard_stop': 30, 'count': 1, 'max_count': 3, 'eligible': True, 'submitted': 19, 'admitted': 21, 'paused': False, 'pause_length': 4, 'last_bid': 15, 'grace': 2, 'withdrawn': False, 'batch_times': [17, 19], 'seen_times': [17]}, [25, 50, 75, 100, 125]), ('past deadline', {'close': 20, 'now': 21, 'window': 3, 'extension': 5, 'hard_stop': 30, 'count': 1, 'max_count': 3, 'eligible': True, 'submitted': 19, 'admitted': 21, 'paused': False, 'pause_length': 4, 'last_bid': 15, 'grace': 2, 'withdrawn': False, 'batch_times': [17, 19], 'seen_times': [17]}, [25, 50, 75, 100, 125]), ('ineligible bid', {'close': 20, 'now': 18, 'window': 3, 'extension': 5, 'hard_stop': 30, 'count': 1, 'max_count': 3, 'eligible': False, 'submitted': 19, 'admitted': 21, 'paused': False, 'pause_length': 4, 'last_bid': 15, 'grace': 2, 'withdrawn': False, 'batch_times': [17, 19], 'seen_times': [17]}, [25, 50, 75, 100, 125]), ('no extensions left', {'close': 20, 'now': 18, 'window': 3, 'extension': 5, 'hard_stop': 30, 'count': 3, 'max_count': 3, 'eligible': True, 'submitted': 19, 'admitted': 21, 'paused': False, 'pause_length': 4, 'last_bid': 15, 'grace': 2, 'withdrawn': False, 'batch_times': [17, 19], 'seen_times': [17]}, [25, 50, 75, 100, 125])]
def vary(value):
 if type(value) is int: return value*N
 if isinstance(value,list): return [vary(v) for v in value]
 if isinstance(value,dict): return {k:(v if k in ['count', 'delivery_index', 'disputed', 'max_count', 'maximum_set', 'minimum_set', 'stage', 'threshold', 'waived'] else vary(v)) for k,v in value.items()}
 return value
for label, request, expected in fixtures:
 check(label, solve(vary(request))['hard-stop-cap'], expected[N-1])
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
hard stop near2522Failed
hard stop below close2519Failed
normal contract3025Failed
submission exactly closing3025Failed
quiet grace extends close3025Failed
early bid3025Failed
at deadline3025Failed
past deadline3025Failed
ineligible bid3025Failed
no extensions left3025Failed

SHA-256 / 3cde4c414ab9590af7c1d37c24a4b6a8cc935ea1705b815dd01a18badcd30fb0

3 / The verified repair

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

N = 1
observations = []
def solve(x):
    v0 = x["close"]-x["window"]<=x["now"]<x["close"]
    v1 = max(x["close"],x["now"]+x["extension"])
    v2 = min(x["hard_stop"],x["close"]+x["extension"])
    v3 = x["close"]+x["extension"] if x["eligible"] and not x["withdrawn"] else x["close"]
    v4 = x["count"]<x["max_count"]
    v5 = x["submitted"]<x["close"]
    v6 = min(x["hard_stop"],x["close"]+x["pause_length"]) if x["paused"] else x["close"]
    v7 = max(x["close"],x["last_bid"]+x["grace"])
    v8 = len(set(x["batch_times"])-set(x["seen_times"]))
    v9 = not x["paused"] and x["now"]>=x["close"]
    return {'extension-window':v0,'extension-base':v1,'hard-stop-cap':v2,'eligible-bid-extension':v3,'extension-budget':v4,'timely-submission':v5,'paused-deadline':v6,'quiet-period-close':v7,'new-batch-extensions':v8,'paused-close-event':v9}
def check(label, actual, expected):
    observations.append({"check": label, "actual": actual, "expected": expected, "passed": actual == expected})
fixtures = [('hard stop near', {'close': 20, 'now': 18, 'window': 3, 'extension': 5, 'hard_stop': 22, 'count': 1, 'max_count': 3, 'eligible': True, 'submitted': 19, 'admitted': 21, 'paused': False, 'pause_length': 4, 'last_bid': 15, 'grace': 2, 'withdrawn': False, 'batch_times': [17, 19], 'seen_times': [17]}, [22, 44, 66, 88, 110]), ('hard stop below close', {'close': 20, 'now': 18, 'window': 3, 'extension': 5, 'hard_stop': 19, 'count': 1, 'max_count': 3, 'eligible': True, 'submitted': 19, 'admitted': 21, 'paused': False, 'pause_length': 4, 'last_bid': 15, 'grace': 2, 'withdrawn': False, 'batch_times': [17, 19], 'seen_times': [17]}, [19, 38, 57, 76, 95]), ('normal contract', {'close': 20, 'now': 18, 'window': 3, 'extension': 5, 'hard_stop': 30, 'count': 1, 'max_count': 3, 'eligible': True, 'submitted': 19, 'admitted': 21, 'paused': False, 'pause_length': 4, 'last_bid': 15, 'grace': 2, 'withdrawn': False, 'batch_times': [17, 19], 'seen_times': [17]}, [25, 50, 75, 100, 125]), ('submission exactly closing', {'close': 20, 'now': 18, 'window': 3, 'extension': 5, 'hard_stop': 30, 'count': 1, 'max_count': 3, 'eligible': True, 'submitted': 20, 'admitted': 21, 'paused': False, 'pause_length': 4, 'last_bid': 15, 'grace': 2, 'withdrawn': False, 'batch_times': [17, 19], 'seen_times': [17]}, [25, 50, 75, 100, 125]), ('quiet grace extends close', {'close': 20, 'now': 18, 'window': 3, 'extension': 5, 'hard_stop': 30, 'count': 1, 'max_count': 3, 'eligible': True, 'submitted': 19, 'admitted': 21, 'paused': False, 'pause_length': 4, 'last_bid': 19, 'grace': 4, 'withdrawn': False, 'batch_times': [17, 19], 'seen_times': [17]}, [25, 50, 75, 100, 125]), ('early bid', {'close': 20, 'now': 10, 'window': 3, 'extension': 5, 'hard_stop': 30, 'count': 1, 'max_count': 3, 'eligible': True, 'submitted': 19, 'admitted': 21, 'paused': False, 'pause_length': 4, 'last_bid': 15, 'grace': 2, 'withdrawn': False, 'batch_times': [17, 19], 'seen_times': [17]}, [25, 50, 75, 100, 125]), ('at deadline', {'close': 20, 'now': 20, 'window': 3, 'extension': 5, 'hard_stop': 30, 'count': 1, 'max_count': 3, 'eligible': True, 'submitted': 19, 'admitted': 21, 'paused': False, 'pause_length': 4, 'last_bid': 15, 'grace': 2, 'withdrawn': False, 'batch_times': [17, 19], 'seen_times': [17]}, [25, 50, 75, 100, 125]), ('past deadline', {'close': 20, 'now': 21, 'window': 3, 'extension': 5, 'hard_stop': 30, 'count': 1, 'max_count': 3, 'eligible': True, 'submitted': 19, 'admitted': 21, 'paused': False, 'pause_length': 4, 'last_bid': 15, 'grace': 2, 'withdrawn': False, 'batch_times': [17, 19], 'seen_times': [17]}, [25, 50, 75, 100, 125]), ('ineligible bid', {'close': 20, 'now': 18, 'window': 3, 'extension': 5, 'hard_stop': 30, 'count': 1, 'max_count': 3, 'eligible': False, 'submitted': 19, 'admitted': 21, 'paused': False, 'pause_length': 4, 'last_bid': 15, 'grace': 2, 'withdrawn': False, 'batch_times': [17, 19], 'seen_times': [17]}, [25, 50, 75, 100, 125]), ('no extensions left', {'close': 20, 'now': 18, 'window': 3, 'extension': 5, 'hard_stop': 30, 'count': 3, 'max_count': 3, 'eligible': True, 'submitted': 19, 'admitted': 21, 'paused': False, 'pause_length': 4, 'last_bid': 15, 'grace': 2, 'withdrawn': False, 'batch_times': [17, 19], 'seen_times': [17]}, [25, 50, 75, 100, 125])]
def vary(value):
 if type(value) is int: return value*N
 if isinstance(value,list): return [vary(v) for v in value]
 if isinstance(value,dict): return {k:(v if k in ['count', 'delivery_index', 'disputed', 'max_count', 'maximum_set', 'minimum_set', 'stage', 'threshold', 'waived'] else vary(v)) for k,v in value.items()}
 return value
for label, request, expected in fixtures:
 check(label, solve(vary(request))['hard-stop-cap'], expected[N-1])
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
hard stop near2222Passed
hard stop below close1919Passed
normal contract2525Passed
submission exactly closing2525Passed
quiet grace extends close2525Passed
early bid2525Passed
at deadline2525Passed
past deadline2525Passed
ineligible bid2525Passed
no extensions left2525Passed

SHA-256 / c0431eb115d9692cd36f880156693464c08a8320516e16c961fb3041f2dd6cf2

Verification & scope

Stipulated toy auction rules, not a venue specification, financial advice, optimization claim, or live trading implementation. Nonnegative integer inputs and internally aligned list fields only. 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:46:09.637090+00:00.

Case digest / dbc5f74a6eebf91dac42d87193084dbcfa27c0390dc84dccd7ba68f2aef2cf21