FA-61796 / Options payoff and settlement / Open access
Exercise notice acceptance cutoff: the extension applies to every submitter · case 01
Non-member notices are accepted after the cutoff.
ROOT CAUSE
The extension is added unconditionally.
VERIFIED REPAIR
Add the extension only for member firms.
Unsuccessful approach: Dropping the extension entirely rejects valid member notices.
Case contract
Inputs expiry date, submission [y,m,d,hh,mm], cutoff [hh,mm], extension minutes and member flag. Notices after the expiry date are "expired"; notices on earlier dates are "accepted"; on the expiry date a notice is accepted if its minute of day <= cutoff (+extension for members), else "late".
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
import datetime
N = 1
observations = []
def solve(expiry, submit, cutoff, extension, member):
e = datetime.date(*expiry)
y, m, d, hh, mm = submit
sd = datetime.date(y, m, d)
if sd > e:
return 'expired'
if sd < e:
return 'accepted'
limit = cutoff[0] * 60 + cutoff[1] + extension
return 'accepted' if hh * 60 + mm <= limit else 'late'
def check(label, actual, expected):
observations.append({"check": label, "actual": actual, "expected": expected, "passed": actual == expected})
fixtures = [[['regression member extension 1', [[2020, 8, 24], [2020, 8, 24, 17, 30], [17, 0], 90, False], 'late'], ['regression member extension 2', [[2026, 7, 31], [2026, 7, 31, 18, 0], [17, 30], 30, False], 'late'], ['partial repair probe 1', [[2030, 3, 26], [2030, 3, 26, 18, 0], [17, 30], 90, True], 'accepted'], ['partial repair probe 2', [[2024, 1, 31], [2024, 1, 31, 17, 1], [17, 0], 30, True], 'accepted'], ['boundary control 1', [[2024, 6, 21], [2024, 6, 20, 23, 0], [17, 30], 0, False], 'accepted'], ['boundary control 2', [[2024, 6, 21], [2024, 6, 21, 17, 30], [17, 30], 0, False], 'accepted'], ['normal control 1', [[2023, 4, 16], [2023, 4, 16, 15, 29], [16, 0], 0, True], 'accepted'], ['normal control 2', [[2020, 7, 30], [2020, 7, 31, 16, 0], [17, 30], 90, False], 'expired']], [['regression member extension 1', [[2029, 11, 30], [2029, 11, 30, 17, 1], [17, 0], 90, False], 'late'], ['regression member extension 2', [[2027, 12, 22], [2027, 12, 22, 17, 0], [16, 0], 90, False], 'late'], ['partial repair probe 1', [[2022, 12, 20], [2022, 12, 20, 19, 0], [17, 30], 90, True], 'accepted'], ['partial repair probe 2', [[2026, 3, 4], [2026, 3, 4, 17, 30], [16, 0], 90, True], 'accepted'], ['boundary control 1', [[2024, 6, 21], [2024, 6, 21, 17, 30], [17, 30], 0, False], 'accepted'], ['boundary control 2', [[2024, 6, 21], [2024, 6, 20, 23, 0], [17, 30], 0, False], 'accepted'], ['normal control 1', [[2027, 6, 29], [2027, 6, 28, 17, 29], [17, 30], 30, False], 'accepted'], ['normal control 2', [[2028, 2, 7], [2028, 2, 7, 18, 30], [17, 0], 30, True], 'late']], [['regression member extension 1', [[2025, 6, 19], [2025, 6, 19, 19, 0], [17, 30], 90, False], 'late'], ['regression member extension 2', [[2030, 7, 15], [2030, 7, 15, 17, 31], [17, 30], 30, False], 'late'], ['partial repair probe 1', [[2022, 12, 8], [2022, 12, 8, 17, 30], [17, 0], 30, True], 'accepted'], ['partial repair probe 2', [[2021, 12, 19], [2021, 12, 19, 18, 0], [17, 30], 30, True], 'accepted'], ['boundary control 1', [[2024, 6, 21], [2024, 6, 21, 17, 30], [17, 30], 0, False], 'accepted'], ['boundary control 2', [[2024, 6, 21], [2024, 6, 20, 23, 0], [17, 30], 0, False], 'accepted'], ['normal control 1', [[2022, 1, 30], [2022, 1, 30, 15, 59], [16, 0], 30, True], 'accepted'], ['normal control 2', [[2021, 7, 31], [2021, 7, 30, 17, 0], [16, 0], 0, True], 'accepted']], [['regression member extension 1', [[2030, 11, 9], [2030, 11, 9, 17, 1], [17, 0], 90, False], 'late'], ['regression member extension 2', [[2023, 9, 23], [2023, 9, 23, 16, 30], [16, 0], 90, False], 'late'], ['partial repair probe 1', [[2029, 6, 30], [2029, 6, 30, 18, 0], [17, 30], 90, True], 'accepted'], ['partial repair probe 2', [[2027, 2, 28], [2027, 2, 28, 17, 31], [17, 30], 30, True], 'accepted'], ['boundary control 1', [[2024, 6, 21], [2024, 6, 20, 23, 0], [17, 30], 0, False], 'accepted'], ['boundary control 2', [[2024, 6, 21], [2024, 6, 21, 17, 30], [17, 30], 0, False], 'accepted'], ['normal control 1', [[2029, 9, 9], [2029, 9, 7, 17, 31], [17, 30], 0, False], 'accepted'], ['normal control 2', [[2025, 7, 15], [2025, 7, 14, 17, 30], [17, 30], 0, False], 'accepted']], [['regression member extension 1', [[2029, 2, 24], [2029, 2, 24, 17, 30], [17, 0], 30, False], 'late'], ['regression member extension 2', [[2022, 6, 25], [2022, 6, 25, 18, 30], [17, 0], 90, False], 'late'], ['partial repair probe 1', [[2021, 7, 29], [2021, 7, 29, 17, 31], [17, 30], 90, True], 'accepted'], ['partial repair probe 2', [[2028, 3, 8], [2028, 3, 8, 17, 1], [17, 0], 90, True], 'accepted'], ['boundary control 1', [[2024, 6, 21], [2024, 6, 21, 17, 30], [17, 30], 0, False], 'accepted'], ['boundary control 2', [[2024, 6, 21], [2024, 6, 20, 23, 0], [17, 30], 0, False], 'accepted'], ['normal control 1', [[2029, 10, 1], [2029, 10, 1, 17, 30], [17, 30], 30, False], 'accepted'], ['normal control 2', [[2024, 10, 14], [2024, 10, 14, 18, 31], [17, 0], 90, False], 'late']]]
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 member extension 1 | accepted | late | Failed |
| regression member extension 2 | accepted | late | Failed |
| partial repair probe 1 | accepted | accepted | Passed |
| partial repair probe 2 | accepted | accepted | Passed |
| boundary control 1 | accepted | accepted | Passed |
| boundary control 2 | accepted | accepted | Passed |
| normal control 1 | accepted | accepted | Passed |
| normal control 2 | expired | expired | Passed |
SHA-256 / 0983d95418ba6b3a8fa8f3260da5369922d0d10f43d7f618dc884b1e53276243
2 / The unsuccessful fix
Exit 1"""Failure Map reference implementation. Python standard library only."""
import json
import datetime
N = 1
observations = []
def solve(expiry, submit, cutoff, extension, member):
e = datetime.date(*expiry)
y, m, d, hh, mm = submit
sd = datetime.date(y, m, d)
if sd > e:
return 'expired'
if sd < e:
return 'accepted'
limit = cutoff[0] * 60 + cutoff[1] + 0
return 'accepted' if hh * 60 + mm <= limit else 'late'
def check(label, actual, expected):
observations.append({"check": label, "actual": actual, "expected": expected, "passed": actual == expected})
fixtures = [[['regression member extension 1', [[2020, 8, 24], [2020, 8, 24, 17, 30], [17, 0], 90, False], 'late'], ['regression member extension 2', [[2026, 7, 31], [2026, 7, 31, 18, 0], [17, 30], 30, False], 'late'], ['partial repair probe 1', [[2030, 3, 26], [2030, 3, 26, 18, 0], [17, 30], 90, True], 'accepted'], ['partial repair probe 2', [[2024, 1, 31], [2024, 1, 31, 17, 1], [17, 0], 30, True], 'accepted'], ['boundary control 1', [[2024, 6, 21], [2024, 6, 20, 23, 0], [17, 30], 0, False], 'accepted'], ['boundary control 2', [[2024, 6, 21], [2024, 6, 21, 17, 30], [17, 30], 0, False], 'accepted'], ['normal control 1', [[2023, 4, 16], [2023, 4, 16, 15, 29], [16, 0], 0, True], 'accepted'], ['normal control 2', [[2020, 7, 30], [2020, 7, 31, 16, 0], [17, 30], 90, False], 'expired']], [['regression member extension 1', [[2029, 11, 30], [2029, 11, 30, 17, 1], [17, 0], 90, False], 'late'], ['regression member extension 2', [[2027, 12, 22], [2027, 12, 22, 17, 0], [16, 0], 90, False], 'late'], ['partial repair probe 1', [[2022, 12, 20], [2022, 12, 20, 19, 0], [17, 30], 90, True], 'accepted'], ['partial repair probe 2', [[2026, 3, 4], [2026, 3, 4, 17, 30], [16, 0], 90, True], 'accepted'], ['boundary control 1', [[2024, 6, 21], [2024, 6, 21, 17, 30], [17, 30], 0, False], 'accepted'], ['boundary control 2', [[2024, 6, 21], [2024, 6, 20, 23, 0], [17, 30], 0, False], 'accepted'], ['normal control 1', [[2027, 6, 29], [2027, 6, 28, 17, 29], [17, 30], 30, False], 'accepted'], ['normal control 2', [[2028, 2, 7], [2028, 2, 7, 18, 30], [17, 0], 30, True], 'late']], [['regression member extension 1', [[2025, 6, 19], [2025, 6, 19, 19, 0], [17, 30], 90, False], 'late'], ['regression member extension 2', [[2030, 7, 15], [2030, 7, 15, 17, 31], [17, 30], 30, False], 'late'], ['partial repair probe 1', [[2022, 12, 8], [2022, 12, 8, 17, 30], [17, 0], 30, True], 'accepted'], ['partial repair probe 2', [[2021, 12, 19], [2021, 12, 19, 18, 0], [17, 30], 30, True], 'accepted'], ['boundary control 1', [[2024, 6, 21], [2024, 6, 21, 17, 30], [17, 30], 0, False], 'accepted'], ['boundary control 2', [[2024, 6, 21], [2024, 6, 20, 23, 0], [17, 30], 0, False], 'accepted'], ['normal control 1', [[2022, 1, 30], [2022, 1, 30, 15, 59], [16, 0], 30, True], 'accepted'], ['normal control 2', [[2021, 7, 31], [2021, 7, 30, 17, 0], [16, 0], 0, True], 'accepted']], [['regression member extension 1', [[2030, 11, 9], [2030, 11, 9, 17, 1], [17, 0], 90, False], 'late'], ['regression member extension 2', [[2023, 9, 23], [2023, 9, 23, 16, 30], [16, 0], 90, False], 'late'], ['partial repair probe 1', [[2029, 6, 30], [2029, 6, 30, 18, 0], [17, 30], 90, True], 'accepted'], ['partial repair probe 2', [[2027, 2, 28], [2027, 2, 28, 17, 31], [17, 30], 30, True], 'accepted'], ['boundary control 1', [[2024, 6, 21], [2024, 6, 20, 23, 0], [17, 30], 0, False], 'accepted'], ['boundary control 2', [[2024, 6, 21], [2024, 6, 21, 17, 30], [17, 30], 0, False], 'accepted'], ['normal control 1', [[2029, 9, 9], [2029, 9, 7, 17, 31], [17, 30], 0, False], 'accepted'], ['normal control 2', [[2025, 7, 15], [2025, 7, 14, 17, 30], [17, 30], 0, False], 'accepted']], [['regression member extension 1', [[2029, 2, 24], [2029, 2, 24, 17, 30], [17, 0], 30, False], 'late'], ['regression member extension 2', [[2022, 6, 25], [2022, 6, 25, 18, 30], [17, 0], 90, False], 'late'], ['partial repair probe 1', [[2021, 7, 29], [2021, 7, 29, 17, 31], [17, 30], 90, True], 'accepted'], ['partial repair probe 2', [[2028, 3, 8], [2028, 3, 8, 17, 1], [17, 0], 90, True], 'accepted'], ['boundary control 1', [[2024, 6, 21], [2024, 6, 21, 17, 30], [17, 30], 0, False], 'accepted'], ['boundary control 2', [[2024, 6, 21], [2024, 6, 20, 23, 0], [17, 30], 0, False], 'accepted'], ['normal control 1', [[2029, 10, 1], [2029, 10, 1, 17, 30], [17, 30], 30, False], 'accepted'], ['normal control 2', [[2024, 10, 14], [2024, 10, 14, 18, 31], [17, 0], 90, False], 'late']]]
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 member extension 1 | late | late | Passed |
| regression member extension 2 | late | late | Passed |
| partial repair probe 1 | late | accepted | Failed |
| partial repair probe 2 | late | accepted | Failed |
| boundary control 1 | accepted | accepted | Passed |
| boundary control 2 | accepted | accepted | Passed |
| normal control 1 | accepted | accepted | Passed |
| normal control 2 | expired | expired | Passed |
SHA-256 / aabd5f4c34853bcdcb9bddc64bfc9dd6f46fba05d15807a025127432542cbde6
3 / The verified repair
Exit 0"""Failure Map reference implementation. Python standard library only."""
import json
import datetime
N = 1
observations = []
def solve(expiry, submit, cutoff, extension, member):
e = datetime.date(*expiry)
y, m, d, hh, mm = submit
sd = datetime.date(y, m, d)
if sd > e:
return 'expired'
if sd < e:
return 'accepted'
limit = cutoff[0] * 60 + cutoff[1] + (extension if member else 0)
return 'accepted' if hh * 60 + mm <= limit else 'late'
def check(label, actual, expected):
observations.append({"check": label, "actual": actual, "expected": expected, "passed": actual == expected})
fixtures = [[['regression member extension 1', [[2020, 8, 24], [2020, 8, 24, 17, 30], [17, 0], 90, False], 'late'], ['regression member extension 2', [[2026, 7, 31], [2026, 7, 31, 18, 0], [17, 30], 30, False], 'late'], ['partial repair probe 1', [[2030, 3, 26], [2030, 3, 26, 18, 0], [17, 30], 90, True], 'accepted'], ['partial repair probe 2', [[2024, 1, 31], [2024, 1, 31, 17, 1], [17, 0], 30, True], 'accepted'], ['boundary control 1', [[2024, 6, 21], [2024, 6, 20, 23, 0], [17, 30], 0, False], 'accepted'], ['boundary control 2', [[2024, 6, 21], [2024, 6, 21, 17, 30], [17, 30], 0, False], 'accepted'], ['normal control 1', [[2023, 4, 16], [2023, 4, 16, 15, 29], [16, 0], 0, True], 'accepted'], ['normal control 2', [[2020, 7, 30], [2020, 7, 31, 16, 0], [17, 30], 90, False], 'expired']], [['regression member extension 1', [[2029, 11, 30], [2029, 11, 30, 17, 1], [17, 0], 90, False], 'late'], ['regression member extension 2', [[2027, 12, 22], [2027, 12, 22, 17, 0], [16, 0], 90, False], 'late'], ['partial repair probe 1', [[2022, 12, 20], [2022, 12, 20, 19, 0], [17, 30], 90, True], 'accepted'], ['partial repair probe 2', [[2026, 3, 4], [2026, 3, 4, 17, 30], [16, 0], 90, True], 'accepted'], ['boundary control 1', [[2024, 6, 21], [2024, 6, 21, 17, 30], [17, 30], 0, False], 'accepted'], ['boundary control 2', [[2024, 6, 21], [2024, 6, 20, 23, 0], [17, 30], 0, False], 'accepted'], ['normal control 1', [[2027, 6, 29], [2027, 6, 28, 17, 29], [17, 30], 30, False], 'accepted'], ['normal control 2', [[2028, 2, 7], [2028, 2, 7, 18, 30], [17, 0], 30, True], 'late']], [['regression member extension 1', [[2025, 6, 19], [2025, 6, 19, 19, 0], [17, 30], 90, False], 'late'], ['regression member extension 2', [[2030, 7, 15], [2030, 7, 15, 17, 31], [17, 30], 30, False], 'late'], ['partial repair probe 1', [[2022, 12, 8], [2022, 12, 8, 17, 30], [17, 0], 30, True], 'accepted'], ['partial repair probe 2', [[2021, 12, 19], [2021, 12, 19, 18, 0], [17, 30], 30, True], 'accepted'], ['boundary control 1', [[2024, 6, 21], [2024, 6, 21, 17, 30], [17, 30], 0, False], 'accepted'], ['boundary control 2', [[2024, 6, 21], [2024, 6, 20, 23, 0], [17, 30], 0, False], 'accepted'], ['normal control 1', [[2022, 1, 30], [2022, 1, 30, 15, 59], [16, 0], 30, True], 'accepted'], ['normal control 2', [[2021, 7, 31], [2021, 7, 30, 17, 0], [16, 0], 0, True], 'accepted']], [['regression member extension 1', [[2030, 11, 9], [2030, 11, 9, 17, 1], [17, 0], 90, False], 'late'], ['regression member extension 2', [[2023, 9, 23], [2023, 9, 23, 16, 30], [16, 0], 90, False], 'late'], ['partial repair probe 1', [[2029, 6, 30], [2029, 6, 30, 18, 0], [17, 30], 90, True], 'accepted'], ['partial repair probe 2', [[2027, 2, 28], [2027, 2, 28, 17, 31], [17, 30], 30, True], 'accepted'], ['boundary control 1', [[2024, 6, 21], [2024, 6, 20, 23, 0], [17, 30], 0, False], 'accepted'], ['boundary control 2', [[2024, 6, 21], [2024, 6, 21, 17, 30], [17, 30], 0, False], 'accepted'], ['normal control 1', [[2029, 9, 9], [2029, 9, 7, 17, 31], [17, 30], 0, False], 'accepted'], ['normal control 2', [[2025, 7, 15], [2025, 7, 14, 17, 30], [17, 30], 0, False], 'accepted']], [['regression member extension 1', [[2029, 2, 24], [2029, 2, 24, 17, 30], [17, 0], 30, False], 'late'], ['regression member extension 2', [[2022, 6, 25], [2022, 6, 25, 18, 30], [17, 0], 90, False], 'late'], ['partial repair probe 1', [[2021, 7, 29], [2021, 7, 29, 17, 31], [17, 30], 90, True], 'accepted'], ['partial repair probe 2', [[2028, 3, 8], [2028, 3, 8, 17, 1], [17, 0], 90, True], 'accepted'], ['boundary control 1', [[2024, 6, 21], [2024, 6, 21, 17, 30], [17, 30], 0, False], 'accepted'], ['boundary control 2', [[2024, 6, 21], [2024, 6, 20, 23, 0], [17, 30], 0, False], 'accepted'], ['normal control 1', [[2029, 10, 1], [2029, 10, 1, 17, 30], [17, 30], 30, False], 'accepted'], ['normal control 2', [[2024, 10, 14], [2024, 10, 14, 18, 31], [17, 0], 90, False], 'late']]]
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 member extension 1 | late | late | Passed |
| regression member extension 2 | late | late | Passed |
| partial repair probe 1 | accepted | accepted | Passed |
| partial repair probe 2 | accepted | accepted | Passed |
| boundary control 1 | accepted | accepted | Passed |
| boundary control 2 | accepted | accepted | Passed |
| normal control 1 | accepted | accepted | Passed |
| normal control 2 | expired | expired | Passed |
SHA-256 / 7aef48043440f9e8d2c20c938ad51afc81314c47880197a7ab0aff6958750b1e
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.706763+00:00.
Case digest / 3e2ea20c8db1546f00e850d54b2f3c46dccf50a2ba243e7e5e5f374bade85c5a