FA-61786 / Options payoff and settlement / Open access
Early call exercise before an ex-dividend date: a dividend equal to extrinsic value triggers exercise · case 01
Exercise happens when the holder is indifferent.
ROOT CAUSE
The comparison is >=.
VERIFIED REPAIR
Exercise only when the dividend strictly exceeds extrinsic value.
Unsuccessful approach: Requiring a one-cent margin rejects dividends exactly one cent above.
Case contract
Inputs call price, spot, strike, dividend and whether today is the last cum-dividend day. Exercise only on the last cum-dividend day, only if the call is in the money, and only if the dividend is strictly greater than the call's extrinsic value (price - intrinsic). Amounts compared exactly in cents. Return true/false.
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(call_price, S, K, dividend, last_cum_day):
c = round(call_price * 100)
intrinsic = max(round(S * 100) - round(K * 100), 0)
if not last_cum_day or intrinsic == 0:
return False
extrinsic = c - intrinsic
return round(dividend * 100) >= extrinsic
def check(label, actual, expected):
observations.append({"check": label, "actual": actual, "expected": expected, "passed": actual == expected})
fixtures = [[['regression break-even tie 1', [15.5, 105.0, 90.0, 0.5, True], False], ['regression break-even tie 2', [8.5, 98.0, 90.0, 0.5, True], False], ['partial repair probe 1', [15.25, 105.0, 90.0, 0.26, True], True], ['partial repair probe 2', [5.5, 105.0, 100.0, 0.51, True], True], ['normal control 1', [21.0, 120.0, 100.0, 0.5, True], False], ['normal control 2', [0.5, 100.0, 100.0, 0.51, True], False], ['normal control 3', [0.5, 100.0, 100.0, 0.5, False], False], ['normal control 4', [1.5, 100.0, 110.0, 1.51, True], False]], [['regression break-even tie 1', [10.5, 100.0, 90.0, 0.5, True], False], ['regression break-even tie 2', [16.5, 105.0, 90.0, 1.5, True], False], ['partial repair probe 1', [15.5, 105.0, 90.0, 0.51, True], True], ['partial repair probe 2', [10.25, 120.0, 110.0, 0.26, True], True], ['normal control 1', [0.25, 98.0, 110.0, 1.0, True], False], ['normal control 2', [0.5, 98.0, 110.0, 0.5, True], False], ['normal control 3', [1.5, 100.0, 100.0, 1.0, True], False], ['normal control 4', [0.25, 98.0, 100.0, 0.26, True], False]], [['regression break-even tie 1', [8.5, 98.0, 90.0, 0.5, True], False], ['regression break-even tie 2', [11.5, 120.0, 110.0, 1.5, True], False], ['partial repair probe 1', [20.25, 120.0, 100.0, 0.26, True], True], ['partial repair probe 2', [11.5, 120.0, 110.0, 1.51, True], True], ['normal control 1', [5.05, 105.0, 100.0, 0.5, True], True], ['normal control 2', [0.25, 105.0, 110.0, 0.5, True], False], ['normal control 3', [10.5, 120.0, 110.0, 1.0, True], True], ['normal control 4', [1.0, 98.0, 100.0, 0.5, True], False]], [['regression break-even tie 1', [15.5, 105.0, 90.0, 0.5, True], False], ['regression break-even tie 2', [20.25, 120.0, 100.0, 0.25, True], False], ['partial repair probe 1', [11.0, 120.0, 110.0, 1.01, True], True], ['partial repair probe 2', [5.5, 105.0, 100.0, 0.51, True], True], ['normal control 1', [8.05, 98.0, 90.0, 0.05, False], False], ['normal control 2', [0.25, 100.0, 110.0, 0.5, True], False], ['normal control 3', [9.5, 98.0, 90.0, 1.51, False], False], ['normal control 4', [1.0, 98.0, 100.0, 1.0, True], False]], [['regression break-even tie 1', [10.25, 120.0, 110.0, 0.25, True], False], ['regression break-even tie 2', [11.0, 120.0, 110.0, 1.0, True], False], ['partial repair probe 1', [11.0, 120.0, 110.0, 1.01, True], True], ['partial repair probe 2', [6.5, 105.0, 100.0, 1.51, True], True], ['normal control 1', [0.5, 105.0, 110.0, 0.25, True], False], ['normal control 2', [1.0, 98.0, 100.0, 0.5, True], False], ['normal control 3', [8.05, 98.0, 90.0, 0.060000000000000005, False], False], ['normal control 4', [0.25, 98.0, 100.0, 1.0, True], False]]]
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 break-even tie 1 | True | False | Failed |
| regression break-even tie 2 | True | False | Failed |
| partial repair probe 1 | True | True | Passed |
| partial repair probe 2 | True | True | Passed |
| normal control 1 | False | False | Passed |
| normal control 2 | False | False | Passed |
| normal control 3 | False | False | Passed |
| normal control 4 | False | False | Passed |
SHA-256 / fbdad43036c9d74161dc1dd1c3553207b3f9d04e3b5a2aa32b9fe6f024281a77
2 / The unsuccessful fix
Exit 1"""Failure Map reference implementation. Python standard library only."""
import json
N = 1
observations = []
def solve(call_price, S, K, dividend, last_cum_day):
c = round(call_price * 100)
intrinsic = max(round(S * 100) - round(K * 100), 0)
if not last_cum_day or intrinsic == 0:
return False
extrinsic = c - intrinsic
return round(dividend * 100) > extrinsic + 1
def check(label, actual, expected):
observations.append({"check": label, "actual": actual, "expected": expected, "passed": actual == expected})
fixtures = [[['regression break-even tie 1', [15.5, 105.0, 90.0, 0.5, True], False], ['regression break-even tie 2', [8.5, 98.0, 90.0, 0.5, True], False], ['partial repair probe 1', [15.25, 105.0, 90.0, 0.26, True], True], ['partial repair probe 2', [5.5, 105.0, 100.0, 0.51, True], True], ['normal control 1', [21.0, 120.0, 100.0, 0.5, True], False], ['normal control 2', [0.5, 100.0, 100.0, 0.51, True], False], ['normal control 3', [0.5, 100.0, 100.0, 0.5, False], False], ['normal control 4', [1.5, 100.0, 110.0, 1.51, True], False]], [['regression break-even tie 1', [10.5, 100.0, 90.0, 0.5, True], False], ['regression break-even tie 2', [16.5, 105.0, 90.0, 1.5, True], False], ['partial repair probe 1', [15.5, 105.0, 90.0, 0.51, True], True], ['partial repair probe 2', [10.25, 120.0, 110.0, 0.26, True], True], ['normal control 1', [0.25, 98.0, 110.0, 1.0, True], False], ['normal control 2', [0.5, 98.0, 110.0, 0.5, True], False], ['normal control 3', [1.5, 100.0, 100.0, 1.0, True], False], ['normal control 4', [0.25, 98.0, 100.0, 0.26, True], False]], [['regression break-even tie 1', [8.5, 98.0, 90.0, 0.5, True], False], ['regression break-even tie 2', [11.5, 120.0, 110.0, 1.5, True], False], ['partial repair probe 1', [20.25, 120.0, 100.0, 0.26, True], True], ['partial repair probe 2', [11.5, 120.0, 110.0, 1.51, True], True], ['normal control 1', [5.05, 105.0, 100.0, 0.5, True], True], ['normal control 2', [0.25, 105.0, 110.0, 0.5, True], False], ['normal control 3', [10.5, 120.0, 110.0, 1.0, True], True], ['normal control 4', [1.0, 98.0, 100.0, 0.5, True], False]], [['regression break-even tie 1', [15.5, 105.0, 90.0, 0.5, True], False], ['regression break-even tie 2', [20.25, 120.0, 100.0, 0.25, True], False], ['partial repair probe 1', [11.0, 120.0, 110.0, 1.01, True], True], ['partial repair probe 2', [5.5, 105.0, 100.0, 0.51, True], True], ['normal control 1', [8.05, 98.0, 90.0, 0.05, False], False], ['normal control 2', [0.25, 100.0, 110.0, 0.5, True], False], ['normal control 3', [9.5, 98.0, 90.0, 1.51, False], False], ['normal control 4', [1.0, 98.0, 100.0, 1.0, True], False]], [['regression break-even tie 1', [10.25, 120.0, 110.0, 0.25, True], False], ['regression break-even tie 2', [11.0, 120.0, 110.0, 1.0, True], False], ['partial repair probe 1', [11.0, 120.0, 110.0, 1.01, True], True], ['partial repair probe 2', [6.5, 105.0, 100.0, 1.51, True], True], ['normal control 1', [0.5, 105.0, 110.0, 0.25, True], False], ['normal control 2', [1.0, 98.0, 100.0, 0.5, True], False], ['normal control 3', [8.05, 98.0, 90.0, 0.060000000000000005, False], False], ['normal control 4', [0.25, 98.0, 100.0, 1.0, True], False]]]
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 break-even tie 1 | False | False | Passed |
| regression break-even tie 2 | False | False | Passed |
| partial repair probe 1 | False | True | Failed |
| partial repair probe 2 | False | True | Failed |
| normal control 1 | False | False | Passed |
| normal control 2 | False | False | Passed |
| normal control 3 | False | False | Passed |
| normal control 4 | False | False | Passed |
SHA-256 / 7c7c5f44d425e98dd5c718fde0b2a553d342e96fe3ba191342b96fad68c2eac2
3 / The verified repair
Exit 0"""Failure Map reference implementation. Python standard library only."""
import json
N = 1
observations = []
def solve(call_price, S, K, dividend, last_cum_day):
c = round(call_price * 100)
intrinsic = max(round(S * 100) - round(K * 100), 0)
if not last_cum_day or intrinsic == 0:
return False
extrinsic = c - intrinsic
return round(dividend * 100) > extrinsic
def check(label, actual, expected):
observations.append({"check": label, "actual": actual, "expected": expected, "passed": actual == expected})
fixtures = [[['regression break-even tie 1', [15.5, 105.0, 90.0, 0.5, True], False], ['regression break-even tie 2', [8.5, 98.0, 90.0, 0.5, True], False], ['partial repair probe 1', [15.25, 105.0, 90.0, 0.26, True], True], ['partial repair probe 2', [5.5, 105.0, 100.0, 0.51, True], True], ['normal control 1', [21.0, 120.0, 100.0, 0.5, True], False], ['normal control 2', [0.5, 100.0, 100.0, 0.51, True], False], ['normal control 3', [0.5, 100.0, 100.0, 0.5, False], False], ['normal control 4', [1.5, 100.0, 110.0, 1.51, True], False]], [['regression break-even tie 1', [10.5, 100.0, 90.0, 0.5, True], False], ['regression break-even tie 2', [16.5, 105.0, 90.0, 1.5, True], False], ['partial repair probe 1', [15.5, 105.0, 90.0, 0.51, True], True], ['partial repair probe 2', [10.25, 120.0, 110.0, 0.26, True], True], ['normal control 1', [0.25, 98.0, 110.0, 1.0, True], False], ['normal control 2', [0.5, 98.0, 110.0, 0.5, True], False], ['normal control 3', [1.5, 100.0, 100.0, 1.0, True], False], ['normal control 4', [0.25, 98.0, 100.0, 0.26, True], False]], [['regression break-even tie 1', [8.5, 98.0, 90.0, 0.5, True], False], ['regression break-even tie 2', [11.5, 120.0, 110.0, 1.5, True], False], ['partial repair probe 1', [20.25, 120.0, 100.0, 0.26, True], True], ['partial repair probe 2', [11.5, 120.0, 110.0, 1.51, True], True], ['normal control 1', [5.05, 105.0, 100.0, 0.5, True], True], ['normal control 2', [0.25, 105.0, 110.0, 0.5, True], False], ['normal control 3', [10.5, 120.0, 110.0, 1.0, True], True], ['normal control 4', [1.0, 98.0, 100.0, 0.5, True], False]], [['regression break-even tie 1', [15.5, 105.0, 90.0, 0.5, True], False], ['regression break-even tie 2', [20.25, 120.0, 100.0, 0.25, True], False], ['partial repair probe 1', [11.0, 120.0, 110.0, 1.01, True], True], ['partial repair probe 2', [5.5, 105.0, 100.0, 0.51, True], True], ['normal control 1', [8.05, 98.0, 90.0, 0.05, False], False], ['normal control 2', [0.25, 100.0, 110.0, 0.5, True], False], ['normal control 3', [9.5, 98.0, 90.0, 1.51, False], False], ['normal control 4', [1.0, 98.0, 100.0, 1.0, True], False]], [['regression break-even tie 1', [10.25, 120.0, 110.0, 0.25, True], False], ['regression break-even tie 2', [11.0, 120.0, 110.0, 1.0, True], False], ['partial repair probe 1', [11.0, 120.0, 110.0, 1.01, True], True], ['partial repair probe 2', [6.5, 105.0, 100.0, 1.51, True], True], ['normal control 1', [0.5, 105.0, 110.0, 0.25, True], False], ['normal control 2', [1.0, 98.0, 100.0, 0.5, True], False], ['normal control 3', [8.05, 98.0, 90.0, 0.060000000000000005, False], False], ['normal control 4', [0.25, 98.0, 100.0, 1.0, True], False]]]
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 break-even tie 1 | False | False | Passed |
| regression break-even tie 2 | False | False | Passed |
| partial repair probe 1 | True | True | Passed |
| partial repair probe 2 | True | True | Passed |
| normal control 1 | False | False | Passed |
| normal control 2 | False | False | Passed |
| normal control 3 | False | False | Passed |
| normal control 4 | False | False | Passed |
SHA-256 / 33d57d828a5552e3c164ae04b857a1e32d57f4c2e8570bbb10d3d806cd5e9faf
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:58.517489+00:00.
Case digest / 06fe5b26b6e7121c9643c453ffa2feb98e58c1ea8e1ae1c523023f28ac4c00b7