FAILURE MAP
← Case archive

FA-61241 / Bond day-count conventions / Open access

Money-market certificate priced from yield: maturity interest is computed from settlement · case 01

Secondary-market prices ignore interest earned before the buyer settled.

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

ROOT CAUSE

The redemption amount uses days from settlement instead of days from issue.

VERIFIED REPAIR

Compute the maturity value over the full term from issue to maturity.

Unsuccessful approach: Using the full term on a 365-day basis still misstates the maturity value.

Case contract

Inputs issue, maturity and settlement dates, coupon and yield (decimals). The instrument pays 100*(1 + coupon*T/360) at maturity where T = days(issue, maturity). Dirty = redemption/(1 + y*R/360) with R = days(settle, maturity); accrued = 100*coupon*A/360 with A = days(issue, settle). Return [dirty, dirty-accrued] rounded to 6.

Why this case matters

Bond accrual and pricing systems depend on exact day-count arithmetic; a single-day error changes settlement cash.

1 / The failure

Exit 1
"""Failure Map reference implementation. Python standard library only."""
import json
import datetime
N = 1
observations = []
def solve(issue, maturity, settle, coupon, y):
    I = datetime.date(*issue)
    M = datetime.date(*maturity)
    S = datetime.date(*settle)
    T = (M - S).days
    R = (M - S).days
    A = (S - I).days
    redemption = 100 * (1 + coupon * T / 360)
    dirty = redemption / (1 + y * R / 360)
    accrued = 100 * coupon * A / 360
    return [round(dirty, 6), round(dirty - accrued, 6)]
def check(label, actual, expected):
    observations.append({"check": label, "actual": actual, "expected": expected, "passed": actual == expected})
fixtures = [[['regression redemption term 1', [[2029, 10, 28], [2030, 8, 24], [2030, 2, 20], 0.02, 0.03], [100.123102, 99.484213]], ['regression redemption term 2', [[2025, 4, 12], [2025, 10, 12], [2025, 5, 25], 0.05, 0.01], [102.144438, 101.547216]], ['partial repair probe 1', [[2032, 5, 6], [2032, 6, 9], [2032, 5, 6], 0.065, 0.01], [100.518954, 100.518954]], ['partial repair probe 2', [[2024, 1, 1], [2024, 12, 31], [2024, 1, 1], 0.05, 0.05], [100.0, 100.0]], ['normal control 1', [[2031, 8, 29], [2031, 10, 25], [2031, 9, 26], 0.0, 0.06], [99.518992, 99.518992]], ['normal control 2', [[2037, 6, 30], [2038, 9, 24], [2038, 4, 20], 0.0, 0.03], [98.708563, 98.708563]], ['normal control 3', [[2014, 7, 19], [2014, 12, 12], [2014, 12, 6], 0.0, 0.03], [99.950025, 99.950025]], ['normal control 4', [[2040, 7, 31], [2042, 1, 19], [2041, 10, 9], 0.0, 0.01], [99.717467, 99.717467]]], [['regression redemption term 1', [[2034, 7, 18], [2035, 4, 15], [2035, 3, 8], 0.0375, 0.06], [102.175803, 99.74872]], ['regression redemption term 2', [[2021, 8, 10], [2022, 3, 21], [2021, 9, 6], 0.05, 0.09], [98.281432, 97.906432]], ['partial repair probe 1', [[2024, 1, 1], [2024, 12, 31], [2024, 1, 1], 0.05, 0.05], [100.0, 100.0]], ['partial repair probe 2', [[2011, 7, 30], [2011, 11, 18], [2011, 7, 30], 0.065, 0.045], [100.608228, 100.608228]], ['normal control 1', [[2038, 3, 7], [2040, 1, 31], [2038, 3, 29], 0.0, 0.06], [89.914581, 89.914581]], ['normal control 2', [[2017, 3, 30], [2018, 6, 7], [2017, 11, 7], 0.0, 0.09], [94.966762, 94.966762]], ['normal control 3', [[2032, 11, 15], [2033, 8, 24], [2033, 3, 20], 0.0, 0.09], [96.223238, 96.223238]], ['normal control 4', [[2037, 3, 31], [2038, 11, 4], [2037, 6, 27], 0.0, 0.09], [88.987764, 88.987764]]], [['regression redemption term 1', [[2022, 8, 2], [2024, 1, 17], [2023, 9, 3], 0.0375, 0.045], [103.787693, 99.652276]], ['regression redemption term 2', [[2020, 12, 14], [2022, 7, 5], [2021, 6, 28], 0.0375, 0.03], [102.731975, 100.690309]], ['partial repair probe 1', [[2022, 4, 1], [2022, 6, 29], [2022, 4, 1], 0.02, 0.01], [100.246613, 100.246613]], ['partial repair probe 2', [[2013, 1, 27], [2014, 6, 9], [2013, 1, 27], 0.02, 0.01], [101.364458, 101.364458]], ['normal control 1', [[2034, 7, 12], [2035, 1, 19], [2034, 12, 19], 0.0, 0.045], [99.613996, 99.613996]], ['normal control 2', [[2038, 1, 2], [2038, 4, 24], [2038, 3, 30], 0.0, 0.06], [99.585062, 99.585062]], ['normal control 3', [[2022, 3, 28], [2023, 4, 17], [2022, 5, 29], 0.0, 0.06], [94.891665, 94.891665]], ['normal control 4', [[2037, 2, 2], [2037, 6, 30], [2037, 3, 17], 0.0, 0.03], [99.13259, 99.13259]]], [['regression redemption term 1', [[2014, 4, 30], [2014, 6, 15], [2014, 6, 2], 0.0375, 0.06], [100.261932, 99.918182]], ['regression redemption term 2', [[2010, 7, 31], [2012, 1, 12], [2010, 12, 7], 0.0375, 0.03], [102.108701, 100.764951]], ['partial repair probe 1', [[2024, 1, 1], [2024, 12, 31], [2024, 1, 1], 0.05, 0.05], [100.0, 100.0]], ['normal control 1', [[2010, 2, 28], [2010, 5, 24], [2010, 4, 17], 0.0, 0.045], [99.539629, 99.539629]], ['normal control 2', [[2032, 9, 18], [2034, 6, 5], [2032, 11, 24], 0.0, 0.06], [91.491308, 91.491308]], ['normal control 3', [[2037, 10, 30], [2038, 12, 30], [2038, 7, 26], 0.0, 0.03], [98.708563, 98.708563]], ['normal control 4', [[2028, 5, 9], [2030, 3, 30], [2029, 8, 23], 0.0, 0.045], [97.335442, 97.335442]], ['normal control 5', [[2012, 2, 19], [2013, 8, 4], [2012, 10, 7], 0.0, 0.03], [97.553044, 97.553044]]], [['regression redemption term 1', [[2036, 8, 31], [2038, 1, 30], [2038, 1, 22], 0.0375, 0.01], [105.362003, 100.05992]], ['regression redemption term 2', [[2025, 3, 24], [2025, 10, 24], [2025, 4, 8], 0.065, 0.09], [98.941547, 98.670714]], ['partial repair probe 1', [[2024, 1, 1], [2024, 12, 31], [2024, 1, 1], 0.05, 0.05], [100.0, 100.0]], ['partial repair probe 2', [[2015, 4, 27], [2015, 8, 19], [2015, 4, 27], 0.065, 0.09], [99.230271, 99.230271]], ['normal control 1', [[2022, 12, 24], [2024, 10, 20], [2023, 4, 18], 0.0, 0.01], [98.492517, 98.492517]], ['normal control 2', [[2022, 3, 30], [2023, 12, 23], [2022, 9, 5], 0.0, 0.045], [94.40642, 94.40642]], ['normal control 3', [[2018, 12, 13], [2020, 1, 13], [2019, 6, 21], 0.0, 0.01], [99.431034, 99.431034]], ['normal control 4', [[2022, 10, 11], [2023, 5, 27], [2023, 1, 24], 0.0, 0.03], [98.9854, 98.9854]]]]
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 fixtureActualExpectedOutcome
regression redemption term 1[99.493913, 98.855024][100.123102, 99.484213]Failed
regression redemption term 2[101.54953, 100.952307][102.144438, 101.547216]Failed
partial repair probe 1[100.518954, 100.518954][100.518954, 100.518954]Passed
partial repair probe 2[100.0, 100.0][100.0, 100.0]Passed
normal control 1[99.518992, 99.518992][99.518992, 99.518992]Passed
normal control 2[98.708563, 98.708563][98.708563, 98.708563]Passed
normal control 3[99.950025, 99.950025][99.950025, 99.950025]Passed
normal control 4[99.717467, 99.717467][99.717467, 99.717467]Passed

SHA-256 / 4892b84b48142a32d21abdeadbb26d3250e50ae1a4330b646681aff0be9c4e8d

2 / The unsuccessful fix

Exit 1
"""Failure Map reference implementation. Python standard library only."""
import json
import datetime
N = 1
observations = []
def solve(issue, maturity, settle, coupon, y):
    I = datetime.date(*issue)
    M = datetime.date(*maturity)
    S = datetime.date(*settle)
    T = (M - I).days
    R = (M - S).days
    A = (S - I).days
    redemption = 100 * (1 + coupon * T / 365)
    dirty = redemption / (1 + y * R / 360)
    accrued = 100 * coupon * A / 360
    return [round(dirty, 6), round(dirty - accrued, 6)]
def check(label, actual, expected):
    observations.append({"check": label, "actual": actual, "expected": expected, "passed": actual == expected})
fixtures = [[['regression redemption term 1', [[2029, 10, 28], [2030, 8, 24], [2030, 2, 20], 0.02, 0.03], [100.123102, 99.484213]], ['regression redemption term 2', [[2025, 4, 12], [2025, 10, 12], [2025, 5, 25], 0.05, 0.01], [102.144438, 101.547216]], ['partial repair probe 1', [[2032, 5, 6], [2032, 6, 9], [2032, 5, 6], 0.065, 0.01], [100.518954, 100.518954]], ['partial repair probe 2', [[2024, 1, 1], [2024, 12, 31], [2024, 1, 1], 0.05, 0.05], [100.0, 100.0]], ['normal control 1', [[2031, 8, 29], [2031, 10, 25], [2031, 9, 26], 0.0, 0.06], [99.518992, 99.518992]], ['normal control 2', [[2037, 6, 30], [2038, 9, 24], [2038, 4, 20], 0.0, 0.03], [98.708563, 98.708563]], ['normal control 3', [[2014, 7, 19], [2014, 12, 12], [2014, 12, 6], 0.0, 0.03], [99.950025, 99.950025]], ['normal control 4', [[2040, 7, 31], [2042, 1, 19], [2041, 10, 9], 0.0, 0.01], [99.717467, 99.717467]]], [['regression redemption term 1', [[2034, 7, 18], [2035, 4, 15], [2035, 3, 8], 0.0375, 0.06], [102.175803, 99.74872]], ['regression redemption term 2', [[2021, 8, 10], [2022, 3, 21], [2021, 9, 6], 0.05, 0.09], [98.281432, 97.906432]], ['partial repair probe 1', [[2024, 1, 1], [2024, 12, 31], [2024, 1, 1], 0.05, 0.05], [100.0, 100.0]], ['partial repair probe 2', [[2011, 7, 30], [2011, 11, 18], [2011, 7, 30], 0.065, 0.045], [100.608228, 100.608228]], ['normal control 1', [[2038, 3, 7], [2040, 1, 31], [2038, 3, 29], 0.0, 0.06], [89.914581, 89.914581]], ['normal control 2', [[2017, 3, 30], [2018, 6, 7], [2017, 11, 7], 0.0, 0.09], [94.966762, 94.966762]], ['normal control 3', [[2032, 11, 15], [2033, 8, 24], [2033, 3, 20], 0.0, 0.09], [96.223238, 96.223238]], ['normal control 4', [[2037, 3, 31], [2038, 11, 4], [2037, 6, 27], 0.0, 0.09], [88.987764, 88.987764]]], [['regression redemption term 1', [[2022, 8, 2], [2024, 1, 17], [2023, 9, 3], 0.0375, 0.045], [103.787693, 99.652276]], ['regression redemption term 2', [[2020, 12, 14], [2022, 7, 5], [2021, 6, 28], 0.0375, 0.03], [102.731975, 100.690309]], ['partial repair probe 1', [[2022, 4, 1], [2022, 6, 29], [2022, 4, 1], 0.02, 0.01], [100.246613, 100.246613]], ['partial repair probe 2', [[2013, 1, 27], [2014, 6, 9], [2013, 1, 27], 0.02, 0.01], [101.364458, 101.364458]], ['normal control 1', [[2034, 7, 12], [2035, 1, 19], [2034, 12, 19], 0.0, 0.045], [99.613996, 99.613996]], ['normal control 2', [[2038, 1, 2], [2038, 4, 24], [2038, 3, 30], 0.0, 0.06], [99.585062, 99.585062]], ['normal control 3', [[2022, 3, 28], [2023, 4, 17], [2022, 5, 29], 0.0, 0.06], [94.891665, 94.891665]], ['normal control 4', [[2037, 2, 2], [2037, 6, 30], [2037, 3, 17], 0.0, 0.03], [99.13259, 99.13259]]], [['regression redemption term 1', [[2014, 4, 30], [2014, 6, 15], [2014, 6, 2], 0.0375, 0.06], [100.261932, 99.918182]], ['regression redemption term 2', [[2010, 7, 31], [2012, 1, 12], [2010, 12, 7], 0.0375, 0.03], [102.108701, 100.764951]], ['partial repair probe 1', [[2024, 1, 1], [2024, 12, 31], [2024, 1, 1], 0.05, 0.05], [100.0, 100.0]], ['normal control 1', [[2010, 2, 28], [2010, 5, 24], [2010, 4, 17], 0.0, 0.045], [99.539629, 99.539629]], ['normal control 2', [[2032, 9, 18], [2034, 6, 5], [2032, 11, 24], 0.0, 0.06], [91.491308, 91.491308]], ['normal control 3', [[2037, 10, 30], [2038, 12, 30], [2038, 7, 26], 0.0, 0.03], [98.708563, 98.708563]], ['normal control 4', [[2028, 5, 9], [2030, 3, 30], [2029, 8, 23], 0.0, 0.045], [97.335442, 97.335442]], ['normal control 5', [[2012, 2, 19], [2013, 8, 4], [2012, 10, 7], 0.0, 0.03], [97.553044, 97.553044]]], [['regression redemption term 1', [[2036, 8, 31], [2038, 1, 30], [2038, 1, 22], 0.0375, 0.01], [105.362003, 100.05992]], ['regression redemption term 2', [[2025, 3, 24], [2025, 10, 24], [2025, 4, 8], 0.065, 0.09], [98.941547, 98.670714]], ['partial repair probe 1', [[2024, 1, 1], [2024, 12, 31], [2024, 1, 1], 0.05, 0.05], [100.0, 100.0]], ['partial repair probe 2', [[2015, 4, 27], [2015, 8, 19], [2015, 4, 27], 0.065, 0.09], [99.230271, 99.230271]], ['normal control 1', [[2022, 12, 24], [2024, 10, 20], [2023, 4, 18], 0.0, 0.01], [98.492517, 98.492517]], ['normal control 2', [[2022, 3, 30], [2023, 12, 23], [2022, 9, 5], 0.0, 0.045], [94.40642, 94.40642]], ['normal control 3', [[2018, 12, 13], [2020, 1, 13], [2019, 6, 21], 0.0, 0.01], [99.431034, 99.431034]], ['normal control 4', [[2022, 10, 11], [2023, 5, 27], [2023, 1, 24], 0.0, 0.03], [98.9854, 98.9854]]]]
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 fixtureActualExpectedOutcome
regression redemption term 1[100.100618, 99.461729][100.123102, 99.484213]Failed
regression redemption term 2[102.109756, 101.512534][102.144438, 101.547216]Failed
partial repair probe 1[100.510553, 100.510553][100.518954, 100.518954]Failed
partial repair probe 2[99.933906, 99.933906][100.0, 100.0]Failed
normal control 1[99.518992, 99.518992][99.518992, 99.518992]Passed
normal control 2[98.708563, 98.708563][98.708563, 98.708563]Passed
normal control 3[99.950025, 99.950025][99.950025, 99.950025]Passed
normal control 4[99.717467, 99.717467][99.717467, 99.717467]Passed

SHA-256 / c1e70406592550881f355a2d6fec75449aa262240bfaa554d8df7720b64d2688

3 / The verified repair

Exit 0
"""Failure Map reference implementation. Python standard library only."""
import json
import datetime
N = 1
observations = []
def solve(issue, maturity, settle, coupon, y):
    I = datetime.date(*issue)
    M = datetime.date(*maturity)
    S = datetime.date(*settle)
    T = (M - I).days
    R = (M - S).days
    A = (S - I).days
    redemption = 100 * (1 + coupon * T / 360)
    dirty = redemption / (1 + y * R / 360)
    accrued = 100 * coupon * A / 360
    return [round(dirty, 6), round(dirty - accrued, 6)]
def check(label, actual, expected):
    observations.append({"check": label, "actual": actual, "expected": expected, "passed": actual == expected})
fixtures = [[['regression redemption term 1', [[2029, 10, 28], [2030, 8, 24], [2030, 2, 20], 0.02, 0.03], [100.123102, 99.484213]], ['regression redemption term 2', [[2025, 4, 12], [2025, 10, 12], [2025, 5, 25], 0.05, 0.01], [102.144438, 101.547216]], ['partial repair probe 1', [[2032, 5, 6], [2032, 6, 9], [2032, 5, 6], 0.065, 0.01], [100.518954, 100.518954]], ['partial repair probe 2', [[2024, 1, 1], [2024, 12, 31], [2024, 1, 1], 0.05, 0.05], [100.0, 100.0]], ['normal control 1', [[2031, 8, 29], [2031, 10, 25], [2031, 9, 26], 0.0, 0.06], [99.518992, 99.518992]], ['normal control 2', [[2037, 6, 30], [2038, 9, 24], [2038, 4, 20], 0.0, 0.03], [98.708563, 98.708563]], ['normal control 3', [[2014, 7, 19], [2014, 12, 12], [2014, 12, 6], 0.0, 0.03], [99.950025, 99.950025]], ['normal control 4', [[2040, 7, 31], [2042, 1, 19], [2041, 10, 9], 0.0, 0.01], [99.717467, 99.717467]]], [['regression redemption term 1', [[2034, 7, 18], [2035, 4, 15], [2035, 3, 8], 0.0375, 0.06], [102.175803, 99.74872]], ['regression redemption term 2', [[2021, 8, 10], [2022, 3, 21], [2021, 9, 6], 0.05, 0.09], [98.281432, 97.906432]], ['partial repair probe 1', [[2024, 1, 1], [2024, 12, 31], [2024, 1, 1], 0.05, 0.05], [100.0, 100.0]], ['partial repair probe 2', [[2011, 7, 30], [2011, 11, 18], [2011, 7, 30], 0.065, 0.045], [100.608228, 100.608228]], ['normal control 1', [[2038, 3, 7], [2040, 1, 31], [2038, 3, 29], 0.0, 0.06], [89.914581, 89.914581]], ['normal control 2', [[2017, 3, 30], [2018, 6, 7], [2017, 11, 7], 0.0, 0.09], [94.966762, 94.966762]], ['normal control 3', [[2032, 11, 15], [2033, 8, 24], [2033, 3, 20], 0.0, 0.09], [96.223238, 96.223238]], ['normal control 4', [[2037, 3, 31], [2038, 11, 4], [2037, 6, 27], 0.0, 0.09], [88.987764, 88.987764]]], [['regression redemption term 1', [[2022, 8, 2], [2024, 1, 17], [2023, 9, 3], 0.0375, 0.045], [103.787693, 99.652276]], ['regression redemption term 2', [[2020, 12, 14], [2022, 7, 5], [2021, 6, 28], 0.0375, 0.03], [102.731975, 100.690309]], ['partial repair probe 1', [[2022, 4, 1], [2022, 6, 29], [2022, 4, 1], 0.02, 0.01], [100.246613, 100.246613]], ['partial repair probe 2', [[2013, 1, 27], [2014, 6, 9], [2013, 1, 27], 0.02, 0.01], [101.364458, 101.364458]], ['normal control 1', [[2034, 7, 12], [2035, 1, 19], [2034, 12, 19], 0.0, 0.045], [99.613996, 99.613996]], ['normal control 2', [[2038, 1, 2], [2038, 4, 24], [2038, 3, 30], 0.0, 0.06], [99.585062, 99.585062]], ['normal control 3', [[2022, 3, 28], [2023, 4, 17], [2022, 5, 29], 0.0, 0.06], [94.891665, 94.891665]], ['normal control 4', [[2037, 2, 2], [2037, 6, 30], [2037, 3, 17], 0.0, 0.03], [99.13259, 99.13259]]], [['regression redemption term 1', [[2014, 4, 30], [2014, 6, 15], [2014, 6, 2], 0.0375, 0.06], [100.261932, 99.918182]], ['regression redemption term 2', [[2010, 7, 31], [2012, 1, 12], [2010, 12, 7], 0.0375, 0.03], [102.108701, 100.764951]], ['partial repair probe 1', [[2024, 1, 1], [2024, 12, 31], [2024, 1, 1], 0.05, 0.05], [100.0, 100.0]], ['normal control 1', [[2010, 2, 28], [2010, 5, 24], [2010, 4, 17], 0.0, 0.045], [99.539629, 99.539629]], ['normal control 2', [[2032, 9, 18], [2034, 6, 5], [2032, 11, 24], 0.0, 0.06], [91.491308, 91.491308]], ['normal control 3', [[2037, 10, 30], [2038, 12, 30], [2038, 7, 26], 0.0, 0.03], [98.708563, 98.708563]], ['normal control 4', [[2028, 5, 9], [2030, 3, 30], [2029, 8, 23], 0.0, 0.045], [97.335442, 97.335442]], ['normal control 5', [[2012, 2, 19], [2013, 8, 4], [2012, 10, 7], 0.0, 0.03], [97.553044, 97.553044]]], [['regression redemption term 1', [[2036, 8, 31], [2038, 1, 30], [2038, 1, 22], 0.0375, 0.01], [105.362003, 100.05992]], ['regression redemption term 2', [[2025, 3, 24], [2025, 10, 24], [2025, 4, 8], 0.065, 0.09], [98.941547, 98.670714]], ['partial repair probe 1', [[2024, 1, 1], [2024, 12, 31], [2024, 1, 1], 0.05, 0.05], [100.0, 100.0]], ['partial repair probe 2', [[2015, 4, 27], [2015, 8, 19], [2015, 4, 27], 0.065, 0.09], [99.230271, 99.230271]], ['normal control 1', [[2022, 12, 24], [2024, 10, 20], [2023, 4, 18], 0.0, 0.01], [98.492517, 98.492517]], ['normal control 2', [[2022, 3, 30], [2023, 12, 23], [2022, 9, 5], 0.0, 0.045], [94.40642, 94.40642]], ['normal control 3', [[2018, 12, 13], [2020, 1, 13], [2019, 6, 21], 0.0, 0.01], [99.431034, 99.431034]], ['normal control 4', [[2022, 10, 11], [2023, 5, 27], [2023, 1, 24], 0.0, 0.03], [98.9854, 98.9854]]]]
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 fixtureActualExpectedOutcome
regression redemption term 1[100.123102, 99.484213][100.123102, 99.484213]Passed
regression redemption term 2[102.144438, 101.547216][102.144438, 101.547216]Passed
partial repair probe 1[100.518954, 100.518954][100.518954, 100.518954]Passed
partial repair probe 2[100.0, 100.0][100.0, 100.0]Passed
normal control 1[99.518992, 99.518992][99.518992, 99.518992]Passed
normal control 2[98.708563, 98.708563][98.708563, 98.708563]Passed
normal control 3[99.950025, 99.950025][99.950025, 99.950025]Passed
normal control 4[99.717467, 99.717467][99.717467, 99.717467]Passed

SHA-256 / 89fc0200622a32865f372d50969387c69c4c08954e4bf3661ccef80f6700e8d8

Verification & scope

A deterministic toy contract stated explicitly in the contract field; no claim of conformance to any published convention text. 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:53.513910+00:00.

Case digest / 585cf47217d39a106a002338f120910e0b78efa532f9a14292305b6875f03bfe