FA-61681 / Options payoff and settlement / Open access
Lookback option payoff: the initial fixing is excluded from the minimum · case 01
Floating-strike calls ignore a minimum set at inception.
ROOT CAUSE
The minimum is taken over path[1:].
VERIFIED REPAIR
Include every observation, including the initial fixing.
Unsuccessful approach: Excluding the final observation instead can make the payoff negative.
Case contract
Inputs kind, the observed path including initial and final prices, and strike. float-call pays final - min(path); float-put pays max(path) - final; fixed-call pays max(max(path) - K, 0); fixed-put pays max(K - min(path), 0). Round to 6.
Why this case matters
Option expiry, exercise and settlement engines move cash and shares; a wrong branch misstates obligations.
1 / The failure
Exit 1"""Failure Map reference implementation. Python standard library only."""
import json
N = 1
observations = []
def solve(kind, path, strike):
final = path[-1]
if kind == 'float-call':
pay = final - min(path[1:])
elif kind == 'float-put':
pay = max(path) - final
elif kind == 'fixed-call':
pay = max(max(path) - strike, 0)
else:
pay = max(strike - min(path), 0)
return round(pay, 6)
def check(label, actual, expected):
observations.append({"check": label, "actual": actual, "expected": expected, "passed": actual == expected})
fixtures = [[['regression floating call reference 1', ['float-call', [81.0, 90.0, 100.0], 115], 19.0], ['regression floating call reference 2', ['float-call', [100.0, 110.0], 115], 10.0], ['partial repair probe 1', ['float-call', [100.0, 100.0, 90.0, 90.0, 90.0, 81.0], 115], 0.0], ['partial repair probe 2', ['float-call', [100.0, 90.0, 85.5], 115], 0.0], ['boundary control 1', ['fixed-put', [100.0, 80.0, 100.0], 100], 20.0], ['normal control 1', ['fixed-call', [100.0, 100.0, 95.0, 104.5], 100], 4.5], ['normal control 2', ['fixed-put', [100.0, 95.0, 90.25, 99.28, 89.35], 90], 0.65], ['normal control 3', ['fixed-call', [104.0, 100.0], 90], 14.0]], [['regression floating call reference 1', ['float-call', [100.0, 110.0, 110.0, 104.5, 104.5], 90], 4.5], ['regression floating call reference 2', ['float-call', [100.0, 104.0], 90], 4.0], ['partial repair probe 1', ['float-call', [100.0, 95.0, 90.25, 85.74, 81.45, 73.31], 115], 0.0], ['partial repair probe 2', ['float-call', [100.0, 110.0, 114.4, 108.68, 97.81, 92.92], 100], 0.0], ['boundary control 1', ['fixed-put', [100.0, 80.0, 100.0], 100], 20.0], ['normal control 1', ['fixed-call', [90.0, 100.0, 100.0, 100.0], 115], 0], ['normal control 2', ['fixed-put', [100.0, 90.0, 81.0], 115], 34.0], ['normal control 3', ['float-put', [100.0, 110.0, 110.0, 99.0, 102.96, 97.81, 101.72], 105], 8.28]], [['regression floating call reference 1', ['float-call', [94.05, 104.5, 110.0, 110.0, 100.0], 90], 5.95], ['regression floating call reference 2', ['float-call', [100.0, 110.0, 114.4, 118.98, 107.08, 111.36], 105], 11.36], ['partial repair probe 1', ['float-call', [100.0, 95.0, 90.25, 85.74], 115], 0.0], ['partial repair probe 2', ['float-call', [100.0, 90.0], 105], 0.0], ['boundary control 1', ['fixed-put', [100.0, 80.0, 100.0], 100], 20.0], ['normal control 1', ['fixed-put', [92.48, 102.75, 98.8, 104.0, 104.0, 100.0], 105], 12.52], ['normal control 2', ['fixed-call', [100.0, 110.0, 121.0, 121.0, 114.95, 119.55], 90], 31.0], ['normal control 3', ['float-call', [100.0, 95.0, 104.5, 99.27, 103.24], 100], 8.24]], [['regression floating call reference 1', ['float-call', [100.0, 104.0, 114.4, 125.84, 113.26, 113.26], 90], 13.26], ['regression floating call reference 2', ['float-call', [90.0, 100.0, 100.0], 100], 10.0], ['partial repair probe 1', ['float-call', [100.0, 110.0, 99.0], 105], 0.0], ['partial repair probe 2', ['float-call', [100.0, 104.0, 98.8, 93.86], 100], 0.0], ['boundary control 1', ['fixed-put', [100.0, 80.0, 100.0], 100], 20.0], ['normal control 1', ['fixed-call', [100.0, 104.0, 98.8], 115], 0], ['normal control 2', ['float-call', [100.0, 100.0, 110.0, 121.0], 115], 21.0], ['normal control 3', ['float-put', [100.0, 104.0, 93.6, 102.96, 102.96, 113.26], 90], 0.0]], [['regression floating call reference 1', ['float-call', [100.0, 104.0], 90], 4.0], ['regression floating call reference 2', ['float-call', [100.0, 104.0, 104.0, 114.4, 102.96, 102.96, 113.26], 105], 13.26], ['partial repair probe 1', ['float-call', [100.0, 100.0, 100.0, 90.0, 85.5, 81.22], 90], 0.0], ['partial repair probe 2', ['float-call', [100.0, 90.0], 100], 0.0], ['boundary control 1', ['fixed-put', [100.0, 80.0, 100.0], 100], 20.0], ['normal control 1', ['fixed-put', [100.0, 104.0, 98.8, 108.68, 119.55], 100], 1.2], ['normal control 2', ['float-put', [100.0, 100.0], 105], 0.0], ['normal control 3', ['fixed-call', [100.0, 110.0], 115], 0]]]
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 fixture | Actual | Expected | Outcome |
|---|---|---|---|
| regression floating call reference 1 | 10.0 | 19.0 | Failed |
| regression floating call reference 2 | 0.0 | 10.0 | Failed |
| partial repair probe 1 | 0.0 | 0.0 | Passed |
| partial repair probe 2 | 0.0 | 0.0 | Passed |
| boundary control 1 | 20.0 | 20.0 | Passed |
| normal control 1 | 4.5 | 4.5 | Passed |
| normal control 2 | 0.65 | 0.65 | Passed |
| normal control 3 | 14.0 | 14.0 | Passed |
SHA-256 / 26af8078ba445ec3f2247536ae2bfc4960dbeaec83f53ff2ca357a5738e91f6c
2 / The unsuccessful fix
Exit 1"""Failure Map reference implementation. Python standard library only."""
import json
N = 1
observations = []
def solve(kind, path, strike):
final = path[-1]
if kind == 'float-call':
pay = final - min(path[:-1])
elif kind == 'float-put':
pay = max(path) - final
elif kind == 'fixed-call':
pay = max(max(path) - strike, 0)
else:
pay = max(strike - min(path), 0)
return round(pay, 6)
def check(label, actual, expected):
observations.append({"check": label, "actual": actual, "expected": expected, "passed": actual == expected})
fixtures = [[['regression floating call reference 1', ['float-call', [81.0, 90.0, 100.0], 115], 19.0], ['regression floating call reference 2', ['float-call', [100.0, 110.0], 115], 10.0], ['partial repair probe 1', ['float-call', [100.0, 100.0, 90.0, 90.0, 90.0, 81.0], 115], 0.0], ['partial repair probe 2', ['float-call', [100.0, 90.0, 85.5], 115], 0.0], ['boundary control 1', ['fixed-put', [100.0, 80.0, 100.0], 100], 20.0], ['normal control 1', ['fixed-call', [100.0, 100.0, 95.0, 104.5], 100], 4.5], ['normal control 2', ['fixed-put', [100.0, 95.0, 90.25, 99.28, 89.35], 90], 0.65], ['normal control 3', ['fixed-call', [104.0, 100.0], 90], 14.0]], [['regression floating call reference 1', ['float-call', [100.0, 110.0, 110.0, 104.5, 104.5], 90], 4.5], ['regression floating call reference 2', ['float-call', [100.0, 104.0], 90], 4.0], ['partial repair probe 1', ['float-call', [100.0, 95.0, 90.25, 85.74, 81.45, 73.31], 115], 0.0], ['partial repair probe 2', ['float-call', [100.0, 110.0, 114.4, 108.68, 97.81, 92.92], 100], 0.0], ['boundary control 1', ['fixed-put', [100.0, 80.0, 100.0], 100], 20.0], ['normal control 1', ['fixed-call', [90.0, 100.0, 100.0, 100.0], 115], 0], ['normal control 2', ['fixed-put', [100.0, 90.0, 81.0], 115], 34.0], ['normal control 3', ['float-put', [100.0, 110.0, 110.0, 99.0, 102.96, 97.81, 101.72], 105], 8.28]], [['regression floating call reference 1', ['float-call', [94.05, 104.5, 110.0, 110.0, 100.0], 90], 5.95], ['regression floating call reference 2', ['float-call', [100.0, 110.0, 114.4, 118.98, 107.08, 111.36], 105], 11.36], ['partial repair probe 1', ['float-call', [100.0, 95.0, 90.25, 85.74], 115], 0.0], ['partial repair probe 2', ['float-call', [100.0, 90.0], 105], 0.0], ['boundary control 1', ['fixed-put', [100.0, 80.0, 100.0], 100], 20.0], ['normal control 1', ['fixed-put', [92.48, 102.75, 98.8, 104.0, 104.0, 100.0], 105], 12.52], ['normal control 2', ['fixed-call', [100.0, 110.0, 121.0, 121.0, 114.95, 119.55], 90], 31.0], ['normal control 3', ['float-call', [100.0, 95.0, 104.5, 99.27, 103.24], 100], 8.24]], [['regression floating call reference 1', ['float-call', [100.0, 104.0, 114.4, 125.84, 113.26, 113.26], 90], 13.26], ['regression floating call reference 2', ['float-call', [90.0, 100.0, 100.0], 100], 10.0], ['partial repair probe 1', ['float-call', [100.0, 110.0, 99.0], 105], 0.0], ['partial repair probe 2', ['float-call', [100.0, 104.0, 98.8, 93.86], 100], 0.0], ['boundary control 1', ['fixed-put', [100.0, 80.0, 100.0], 100], 20.0], ['normal control 1', ['fixed-call', [100.0, 104.0, 98.8], 115], 0], ['normal control 2', ['float-call', [100.0, 100.0, 110.0, 121.0], 115], 21.0], ['normal control 3', ['float-put', [100.0, 104.0, 93.6, 102.96, 102.96, 113.26], 90], 0.0]], [['regression floating call reference 1', ['float-call', [100.0, 104.0], 90], 4.0], ['regression floating call reference 2', ['float-call', [100.0, 104.0, 104.0, 114.4, 102.96, 102.96, 113.26], 105], 13.26], ['partial repair probe 1', ['float-call', [100.0, 100.0, 100.0, 90.0, 85.5, 81.22], 90], 0.0], ['partial repair probe 2', ['float-call', [100.0, 90.0], 100], 0.0], ['boundary control 1', ['fixed-put', [100.0, 80.0, 100.0], 100], 20.0], ['normal control 1', ['fixed-put', [100.0, 104.0, 98.8, 108.68, 119.55], 100], 1.2], ['normal control 2', ['float-put', [100.0, 100.0], 105], 0.0], ['normal control 3', ['fixed-call', [100.0, 110.0], 115], 0]]]
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 fixture | Actual | Expected | Outcome |
|---|---|---|---|
| regression floating call reference 1 | 19.0 | 19.0 | Passed |
| regression floating call reference 2 | 10.0 | 10.0 | Passed |
| partial repair probe 1 | -9.0 | 0.0 | Failed |
| partial repair probe 2 | -4.5 | 0.0 | Failed |
| boundary control 1 | 20.0 | 20.0 | Passed |
| normal control 1 | 4.5 | 4.5 | Passed |
| normal control 2 | 0.65 | 0.65 | Passed |
| normal control 3 | 14.0 | 14.0 | Passed |
SHA-256 / 973ca50610ac1a4c447e84bb0ef363c1c1a2107eb09fc613f218da9b00924fe3
3 / The verified repair
Exit 0"""Failure Map reference implementation. Python standard library only."""
import json
N = 1
observations = []
def solve(kind, path, strike):
final = path[-1]
if kind == 'float-call':
pay = final - min(path)
elif kind == 'float-put':
pay = max(path) - final
elif kind == 'fixed-call':
pay = max(max(path) - strike, 0)
else:
pay = max(strike - min(path), 0)
return round(pay, 6)
def check(label, actual, expected):
observations.append({"check": label, "actual": actual, "expected": expected, "passed": actual == expected})
fixtures = [[['regression floating call reference 1', ['float-call', [81.0, 90.0, 100.0], 115], 19.0], ['regression floating call reference 2', ['float-call', [100.0, 110.0], 115], 10.0], ['partial repair probe 1', ['float-call', [100.0, 100.0, 90.0, 90.0, 90.0, 81.0], 115], 0.0], ['partial repair probe 2', ['float-call', [100.0, 90.0, 85.5], 115], 0.0], ['boundary control 1', ['fixed-put', [100.0, 80.0, 100.0], 100], 20.0], ['normal control 1', ['fixed-call', [100.0, 100.0, 95.0, 104.5], 100], 4.5], ['normal control 2', ['fixed-put', [100.0, 95.0, 90.25, 99.28, 89.35], 90], 0.65], ['normal control 3', ['fixed-call', [104.0, 100.0], 90], 14.0]], [['regression floating call reference 1', ['float-call', [100.0, 110.0, 110.0, 104.5, 104.5], 90], 4.5], ['regression floating call reference 2', ['float-call', [100.0, 104.0], 90], 4.0], ['partial repair probe 1', ['float-call', [100.0, 95.0, 90.25, 85.74, 81.45, 73.31], 115], 0.0], ['partial repair probe 2', ['float-call', [100.0, 110.0, 114.4, 108.68, 97.81, 92.92], 100], 0.0], ['boundary control 1', ['fixed-put', [100.0, 80.0, 100.0], 100], 20.0], ['normal control 1', ['fixed-call', [90.0, 100.0, 100.0, 100.0], 115], 0], ['normal control 2', ['fixed-put', [100.0, 90.0, 81.0], 115], 34.0], ['normal control 3', ['float-put', [100.0, 110.0, 110.0, 99.0, 102.96, 97.81, 101.72], 105], 8.28]], [['regression floating call reference 1', ['float-call', [94.05, 104.5, 110.0, 110.0, 100.0], 90], 5.95], ['regression floating call reference 2', ['float-call', [100.0, 110.0, 114.4, 118.98, 107.08, 111.36], 105], 11.36], ['partial repair probe 1', ['float-call', [100.0, 95.0, 90.25, 85.74], 115], 0.0], ['partial repair probe 2', ['float-call', [100.0, 90.0], 105], 0.0], ['boundary control 1', ['fixed-put', [100.0, 80.0, 100.0], 100], 20.0], ['normal control 1', ['fixed-put', [92.48, 102.75, 98.8, 104.0, 104.0, 100.0], 105], 12.52], ['normal control 2', ['fixed-call', [100.0, 110.0, 121.0, 121.0, 114.95, 119.55], 90], 31.0], ['normal control 3', ['float-call', [100.0, 95.0, 104.5, 99.27, 103.24], 100], 8.24]], [['regression floating call reference 1', ['float-call', [100.0, 104.0, 114.4, 125.84, 113.26, 113.26], 90], 13.26], ['regression floating call reference 2', ['float-call', [90.0, 100.0, 100.0], 100], 10.0], ['partial repair probe 1', ['float-call', [100.0, 110.0, 99.0], 105], 0.0], ['partial repair probe 2', ['float-call', [100.0, 104.0, 98.8, 93.86], 100], 0.0], ['boundary control 1', ['fixed-put', [100.0, 80.0, 100.0], 100], 20.0], ['normal control 1', ['fixed-call', [100.0, 104.0, 98.8], 115], 0], ['normal control 2', ['float-call', [100.0, 100.0, 110.0, 121.0], 115], 21.0], ['normal control 3', ['float-put', [100.0, 104.0, 93.6, 102.96, 102.96, 113.26], 90], 0.0]], [['regression floating call reference 1', ['float-call', [100.0, 104.0], 90], 4.0], ['regression floating call reference 2', ['float-call', [100.0, 104.0, 104.0, 114.4, 102.96, 102.96, 113.26], 105], 13.26], ['partial repair probe 1', ['float-call', [100.0, 100.0, 100.0, 90.0, 85.5, 81.22], 90], 0.0], ['partial repair probe 2', ['float-call', [100.0, 90.0], 100], 0.0], ['boundary control 1', ['fixed-put', [100.0, 80.0, 100.0], 100], 20.0], ['normal control 1', ['fixed-put', [100.0, 104.0, 98.8, 108.68, 119.55], 100], 1.2], ['normal control 2', ['float-put', [100.0, 100.0], 105], 0.0], ['normal control 3', ['fixed-call', [100.0, 110.0], 115], 0]]]
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 fixture | Actual | Expected | Outcome |
|---|---|---|---|
| regression floating call reference 1 | 19.0 | 19.0 | Passed |
| regression floating call reference 2 | 10.0 | 10.0 | Passed |
| partial repair probe 1 | 0.0 | 0.0 | Passed |
| partial repair probe 2 | 0.0 | 0.0 | Passed |
| boundary control 1 | 20.0 | 20.0 | Passed |
| normal control 1 | 4.5 | 4.5 | Passed |
| normal control 2 | 0.65 | 0.65 | Passed |
| normal control 3 | 14.0 | 14.0 | Passed |
SHA-256 / 2bca49e161c00a5749eca63d644d3f53513dbb17b27dc7612514578f6eb979ad
Verification & scope
A deterministic toy contract stated explicitly in the contract field; no claim of conformance to any exchange or clearing rulebook. 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:57.448861+00:00.
Case digest / bb2317f35ab3b866d46d0092a4a1c205df642853dcb4054425146199522df3d5