FAILURE MAP
← Case archive

FA-12691 / Auction allocation rules / Open access

A reserve-qualified winner pays its own bid · case 01

A reserve-qualified winner pays its own bid.

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

ROOT CAUSE

The winning value replaces the runner-up opportunity cost.

THE FAILURE

The winning value replaces the runner-up opportunity cost.

Unsuccessful approach: Charging the runner-up alone can charge below reserve.

Case contract

For nonnegative integer bids and reserve, sell one unit if maximum bid >= reserve; return payment max(reserve, second-highest bid), using zero when no runner-up. No sale returns None.

Why this case matters

Deterministic teaching model for reviewing auction allocation software; not a representation of any venue or financial advice.

1 / The failure

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

N = 1
observations = []
def solve(bids, reserve):
    return max(bids) if bids and max(bids)>=reserve else None
def check(label, actual, expected):
    observations.append({"check": label, "actual": actual, "expected": expected, "passed": actual == expected})
check('reserve binds', solve([20+N,2], 10), 10)
check('runner up binds', solve([20,15], 10), 15)
check('single bidder', solve([20], 10), 10)
check('empty', solve([], 10), None)
check('no qualifying bid', solve([9,8], 10), None)
check('equality qualifies', solve([10], 10), 10)
check('zero reserve', solve([7,3], 0), 3)
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
reserve binds2110Failed
runner up binds2015Failed
single bidder2010Failed
emptyNoneNonePassed
no qualifying bidNoneNonePassed
equality qualifies1010Passed
zero reserve73Failed

SHA-256 / 00373979a50873759b388651d3a825e01e35d765d5725805f74cc07f054b3e83

2 / The unsuccessful fix

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

N = 1
observations = []
def solve(bids, reserve):
    return sorted(bids,reverse=True)[1] if len(bids)>1 and max(bids)>=reserve else (0 if bids and max(bids)>=reserve else None)
def check(label, actual, expected):
    observations.append({"check": label, "actual": actual, "expected": expected, "passed": actual == expected})
check('reserve binds', solve([20+N,2], 10), 10)
check('runner up binds', solve([20,15], 10), 15)
check('single bidder', solve([20], 10), 10)
check('empty', solve([], 10), None)
check('no qualifying bid', solve([9,8], 10), None)
check('equality qualifies', solve([10], 10), 10)
check('zero reserve', solve([7,3], 0), 3)
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
reserve binds210Failed
runner up binds1515Passed
single bidder010Failed
emptyNoneNonePassed
no qualifying bidNoneNonePassed
equality qualifies010Failed
zero reserve33Passed

SHA-256 / d52c0fb3a56fa5cae12301d18cb1c559481b4e2917584b7ea661421685b0f84d

HELD IN THE MEMBER ARCHIVE

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

This mechanism has 7 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

Offline toy model with explicit integer inputs; no strategic behavior or real market execution. 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:38:59.266601+00:00.

Case digest / 78cbd7487bc4b7aaa2011a27fdb1bd9474e3e91683c69d3b16105e9eace4be4a