{"abstract":"Schedules that start with a disrupted fixing average in the strike.","category":"Options payoff and settlement","checks":8,"contract":"Inputs kind (price-call, price-put, strike-call), fixings (None = disrupted), strike and final price. A disrupted fixing takes the last preceding filled value; if none precedes, the next valid fixing. avg = mean of the filled fixings. price-call pays max(avg-K,0), price-put max(K-avg,0), strike-call max(final-avg,0). Round to 6.","contract_signature":"kind, fixings, strike, final","evaluation_group":"w2-options_payoff_and_settlement-asian-disrupted-fixings","failed_approach":"Taking the last valid fixing of the schedule looks too far ahead.","family":"w2-options_payoff_and_settlement-asian-disrupted-fixings-leading-disruption","id":"FA-61426","implementations":{"attempt":{"sha256":"e7c6a7fbadc7700fdf351692748cae89202c7467f8970bc41c98dbf49adc1bab","source":"\"\"\"Failure Map reference implementation. Python standard library only.\"\"\"\nimport json\n\nN = 1\nobservations = []\ndef solve(kind, fixings, strike, final):\n    vals = list(fixings)\n    filled = []\n    for i, v in enumerate(vals):\n        if v is None:\n            prev = [x for x in filled if x is not None]\n            later = [x for x in vals[i + 1:] if x is not None]\n            v = prev[-1] if prev else later[-1]\n        filled.append(v)\n    avg = sum(filled) / len(filled)\n    if kind == 'price-call':\n        pay = max(avg - strike, 0.0)\n    elif kind == 'price-put':\n        pay = max(strike - avg, 0.0)\n    else:\n        pay = max(final - avg, 0.0)\n    return round(pay, 6)\ndef check(label, actual, expected):\n    observations.append({\"check\": label, \"actual\": actual, \"expected\": expected, \"passed\": actual == expected})\nfixtures = [[['regression leading disruption 1', ['price-call', [None, 114.94, 81.32], 90, 117.66], 13.733333], ['regression leading disruption 2', ['strike-call', [None, 100.0], 110, 106.13], 6.13], ['partial repair probe 1', ['price-call', [None, 100.0, 110.0], 100, 100.0], 3.333333], ['partial repair probe 2', ['price-put', [None, None, None, 116.32, None, 103.45], 110, 84.85], 0.0], ['boundary control 1', ['strike-call', [100.0, None, 90.0], 100, 120.0], 23.333333], ['normal control 1', ['strike-call', [108.09, 82.6, 92.83, None, 118.91, 91.14, None], 100, 85.45], 0.0], ['normal control 2', ['price-call', [85.01, 94.18, 82.1], 105, 116.61], 0.0], ['normal control 3', ['price-call', [100.84, 82.19, 118.59, 115.87, 90.57], 110, 107.03], 0.0]], [['regression leading disruption 1', ['price-call', [None, 91.48, 111.91, 116.49, 84.19, None, 82.85, 115.29], 90, 118.37], 7.235], ['regression leading disruption 2', ['price-put', [None, 108.91, 94.86], 105, 114.49], 0.773333], ['partial repair probe 1', ['price-call', [None, 100.0, 110.0], 100, 100.0], 3.333333], ['partial repair probe 2', ['price-put', [None, None, 108.41, None, None, 89.67], 100, 105.65], 0.0], ['boundary control 1', ['strike-call', [100.0, None, 90.0], 100, 120.0], 23.333333], ['normal control 1', ['strike-call', [119.84, 86.93, 84.4, 83.0, 99.72], 100, 106.94], 12.162], ['normal control 2', ['price-put', [85.42, 115.2, None, 88.06], 110, 85.92], 9.03], ['normal control 3', ['price-call', [None, None, 98.45, 106.81], 105, 119.97], 0.0]], [['regression leading disruption 1', ['price-put', [None, None, 85.09], 100, 101.35], 14.91], ['regression leading disruption 2', ['price-call', [None, 95.74, 111.04, None, 108.46, 115.32, 119.28, 106.15], 105, 114.03], 2.84625], ['partial repair probe 1', ['strike-call', [None, 119.28, 84.0], 110, 100.97], 0.0], ['partial repair probe 2', ['strike-call', [None, 114.32, 85.85, 84.03, 87.82, 93.76, 99.3, 80.58], 110, 93.61], 0.0], ['boundary control 1', ['strike-call', [100.0, None, 90.0], 100, 120.0], 23.333333], ['normal control 1', ['price-call', [83.94, None, 90.41, None], 110, 81.54], 0.0], ['normal control 2', ['price-put', [99.0, None, 90.73, None, None, 112.43], 90, 80.77], 0.0], ['normal control 3', ['price-put', [115.63, None, None], 110, 88.42], 0.0]], [['regression leading disruption 1', ['strike-call', [None, None, 103.2, 95.9, 102.92], 90, 119.13], 17.446], ['regression leading disruption 2', ['strike-call', [None, 91.0, 85.59, None, 86.07, None, None], 110, 104.25], 16.908571], ['partial repair probe 1', ['price-call', [None, 100.0, 110.0], 100, 100.0], 3.333333], ['partial repair probe 2', ['strike-call', [None, 110.67, 87.17, None, None, 85.45], 90, 91.16], 0.0], ['boundary control 1', ['strike-call', [100.0, None, 90.0], 100, 120.0], 23.333333], ['normal control 1', ['price-call', [108.9, None, 106.45], 100, 117.18], 8.083333], ['normal control 2', ['strike-call', [93.3, 112.85], 90, 109.53], 6.455], ['normal control 3', ['price-put', [80.04, 94.93, None, 116.64, 87.99, None], 100, 114.94], 6.246667]], [['regression leading disruption 1', ['price-call', [None, 81.2, None, 82.68, 83.48, 83.72, 115.81, 110.77], 90, 93.39], 0.0075], ['regression leading disruption 2', ['strike-call', [None, 81.52, None, None, 94.05], 110, 84.49], 0.464], ['partial repair probe 1', ['price-put', [None, None, 94.96, 105.69, 84.52, None], 90, 83.58], 0.0], ['partial repair probe 2', ['price-call', [None, None, 96.59, None, 80.55, 118.41], 100, 119.18], 0.0], ['boundary control 1', ['strike-call', [100.0, None, 90.0], 100, 120.0], 23.333333], ['normal control 1', ['strike-call', [None, None, 109.7, 99.56, 90.86, 92.96, 99.08, None], 110, 90.22], 0.0], ['normal control 2', ['strike-call', [92.29, 83.29, None, 108.83, None, None, 117.63, 114.49], 110, 88.43], 0.0], ['normal control 3', ['strike-call', [108.57, 82.78, 81.2, 97.9], 100, 107.11], 14.4975]]]\nfor label, args, expected in fixtures[N-1]:\n    check(label, solve(*args), expected)\nprint(json.dumps({\"observations\": observations, \"passed\": all(x[\"passed\"] for x in observations)}, ensure_ascii=False))\nraise SystemExit(0 if all(x[\"passed\"] for x in observations) else 1)\n"},"broken":{"sha256":"26866b5b6b2666130940c2fa8e7620434539ebc937c530282158f495c221aef0","source":"\"\"\"Failure Map reference implementation. Python standard library only.\"\"\"\nimport json\n\nN = 1\nobservations = []\ndef solve(kind, fixings, strike, final):\n    vals = list(fixings)\n    filled = []\n    for i, v in enumerate(vals):\n        if v is None:\n            prev = [x for x in filled if x is not None]\n            later = [x for x in vals[i + 1:] if x is not None]\n            v = prev[-1] if prev else strike\n        filled.append(v)\n    avg = sum(filled) / len(filled)\n    if kind == 'price-call':\n        pay = max(avg - strike, 0.0)\n    elif kind == 'price-put':\n        pay = max(strike - avg, 0.0)\n    else:\n        pay = max(final - avg, 0.0)\n    return round(pay, 6)\ndef check(label, actual, expected):\n    observations.append({\"check\": label, \"actual\": actual, \"expected\": expected, \"passed\": actual == expected})\nfixtures = [[['regression leading disruption 1', ['price-call', [None, 114.94, 81.32], 90, 117.66], 13.733333], ['regression leading disruption 2', ['strike-call', [None, 100.0], 110, 106.13], 6.13], ['partial repair probe 1', ['price-call', [None, 100.0, 110.0], 100, 100.0], 3.333333], ['partial repair probe 2', ['price-put', [None, None, None, 116.32, None, 103.45], 110, 84.85], 0.0], ['boundary control 1', ['strike-call', [100.0, None, 90.0], 100, 120.0], 23.333333], ['normal control 1', ['strike-call', [108.09, 82.6, 92.83, None, 118.91, 91.14, None], 100, 85.45], 0.0], ['normal control 2', ['price-call', [85.01, 94.18, 82.1], 105, 116.61], 0.0], ['normal control 3', ['price-call', [100.84, 82.19, 118.59, 115.87, 90.57], 110, 107.03], 0.0]], [['regression leading disruption 1', ['price-call', [None, 91.48, 111.91, 116.49, 84.19, None, 82.85, 115.29], 90, 118.37], 7.235], ['regression leading disruption 2', ['price-put', [None, 108.91, 94.86], 105, 114.49], 0.773333], ['partial repair probe 1', ['price-call', [None, 100.0, 110.0], 100, 100.0], 3.333333], ['partial repair probe 2', ['price-put', [None, None, 108.41, None, None, 89.67], 100, 105.65], 0.0], ['boundary control 1', ['strike-call', [100.0, None, 90.0], 100, 120.0], 23.333333], ['normal control 1', ['strike-call', [119.84, 86.93, 84.4, 83.0, 99.72], 100, 106.94], 12.162], ['normal control 2', ['price-put', [85.42, 115.2, None, 88.06], 110, 85.92], 9.03], ['normal control 3', ['price-call', [None, None, 98.45, 106.81], 105, 119.97], 0.0]], [['regression leading disruption 1', ['price-put', [None, None, 85.09], 100, 101.35], 14.91], ['regression leading disruption 2', ['price-call', [None, 95.74, 111.04, None, 108.46, 115.32, 119.28, 106.15], 105, 114.03], 2.84625], ['partial repair probe 1', ['strike-call', [None, 119.28, 84.0], 110, 100.97], 0.0], ['partial repair probe 2', ['strike-call', [None, 114.32, 85.85, 84.03, 87.82, 93.76, 99.3, 80.58], 110, 93.61], 0.0], ['boundary control 1', ['strike-call', [100.0, None, 90.0], 100, 120.0], 23.333333], ['normal control 1', ['price-call', [83.94, None, 90.41, None], 110, 81.54], 0.0], ['normal control 2', ['price-put', [99.0, None, 90.73, None, None, 112.43], 90, 80.77], 0.0], ['normal control 3', ['price-put', [115.63, None, None], 110, 88.42], 0.0]], [['regression leading disruption 1', ['strike-call', [None, None, 103.2, 95.9, 102.92], 90, 119.13], 17.446], ['regression leading disruption 2', ['strike-call', [None, 91.0, 85.59, None, 86.07, None, None], 110, 104.25], 16.908571], ['partial repair probe 1', ['price-call', [None, 100.0, 110.0], 100, 100.0], 3.333333], ['partial repair probe 2', ['strike-call', [None, 110.67, 87.17, None, None, 85.45], 90, 91.16], 0.0], ['boundary control 1', ['strike-call', [100.0, None, 90.0], 100, 120.0], 23.333333], ['normal control 1', ['price-call', [108.9, None, 106.45], 100, 117.18], 8.083333], ['normal control 2', ['strike-call', [93.3, 112.85], 90, 109.53], 6.455], ['normal control 3', ['price-put', [80.04, 94.93, None, 116.64, 87.99, None], 100, 114.94], 6.246667]], [['regression leading disruption 1', ['price-call', [None, 81.2, None, 82.68, 83.48, 83.72, 115.81, 110.77], 90, 93.39], 0.0075], ['regression leading disruption 2', ['strike-call', [None, 81.52, None, None, 94.05], 110, 84.49], 0.464], ['partial repair probe 1', ['price-put', [None, None, 94.96, 105.69, 84.52, None], 90, 83.58], 0.0], ['partial repair probe 2', ['price-call', [None, None, 96.59, None, 80.55, 118.41], 100, 119.18], 0.0], ['boundary control 1', ['strike-call', [100.0, None, 90.0], 100, 120.0], 23.333333], ['normal control 1', ['strike-call', [None, None, 109.7, 99.56, 90.86, 92.96, 99.08, None], 110, 90.22], 0.0], ['normal control 2', ['strike-call', [92.29, 83.29, None, 108.83, None, None, 117.63, 114.49], 110, 88.43], 0.0], ['normal control 3', ['strike-call', [108.57, 82.78, 81.2, 97.9], 100, 107.11], 14.4975]]]\nfor label, args, expected in fixtures[N-1]:\n    check(label, solve(*args), expected)\nprint(json.dumps({\"observations\": observations, \"passed\": all(x[\"passed\"] for x in observations)}, ensure_ascii=False))\nraise SystemExit(0 if all(x[\"passed\"] for x in observations) else 1)\n"}},"limitations":"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.","method":"Deterministic executable model with adversarial boundary fixtures.","provenance":{"created_by":"Failure Map","dependencies":"Python standard library","family":"w2-options_payoff_and_settlement-asian-disrupted-fixings-leading-disruption","generated_at":"2026-09-29T14:46:55.101289+00:00","license":"CC0-1.0","python":"3.12.14","seed":1,"split":"open-access"},"relevance":"Option expiry, exercise and settlement engines move cash and shares; a wrong branch misstates obligations.","root_cause":"The no-predecessor case substitutes the strike instead of the next valid fixing.","sha256":"e14928ed178e2d0264afdb558fab9e5cb4a8973c1d7a9b17f2fb81bdf19ee228","title":"Arithmetic Asian payoff with disrupted fixings: a disruption before any valid fixing falls back to the strike · case 01","variant":1,"variant_policy":"Five numbered records share a model and may reuse boundary fixtures.","verified":true,"visibility":"public","verification":{"attempt":{"elapsed_ms":42.521,"exit_code":1,"observations":[{"actual":2.526667,"check":"regression leading disruption 1","expected":13.733333,"passed":false},{"actual":6.13,"check":"regression leading disruption 2","expected":6.13,"passed":true},{"actual":6.666667,"check":"partial repair probe 1","expected":3.333333,"passed":false},{"actual":2.26,"check":"partial repair probe 2","expected":0.0,"passed":false},{"actual":23.333333,"check":"boundary control 1","expected":23.333333,"passed":true},{"actual":0.0,"check":"normal control 1","expected":0.0,"passed":true},{"actual":0.0,"check":"normal control 2","expected":0.0,"passed":true},{"actual":0.0,"check":"normal control 3","expected":0.0,"passed":true}],"passed":false,"stderr":"","stdout":"{\"observations\": [{\"check\": \"regression leading disruption 1\", \"actual\": 2.526667, \"expected\": 13.733333, \"passed\": false}, {\"check\": \"regression leading disruption 2\", \"actual\": 6.13, \"expected\": 6.13, \"passed\": true}, {\"check\": \"partial repair probe 1\", \"actual\": 6.666667, \"expected\": 3.333333, \"passed\": false}, {\"check\": \"partial repair probe 2\", \"actual\": 2.26, \"expected\": 0.0, \"passed\": false}, {\"check\": \"boundary control 1\", \"actual\": 23.333333, \"expected\": 23.333333, \"passed\": true}, {\"check\": \"normal control 1\", \"actual\": 0.0, \"expected\": 0.0, \"passed\": true}, {\"check\": \"normal control 2\", \"actual\": 0.0, \"expected\": 0.0, \"passed\": true}, {\"check\": \"normal control 3\", \"actual\": 0.0, \"expected\": 0.0, \"passed\": true}], \"passed\": false}\n"},"broken":{"elapsed_ms":40.3,"exit_code":1,"observations":[{"actual":5.42,"check":"regression leading disruption 1","expected":13.733333,"passed":false},{"actual":1.13,"check":"regression leading disruption 2","expected":6.13,"passed":false},{"actual":3.333333,"check":"partial repair probe 1","expected":3.333333,"passed":true},{"actual":0.0,"check":"partial repair probe 2","expected":0.0,"passed":true},{"actual":23.333333,"check":"boundary control 1","expected":23.333333,"passed":true},{"actual":0.0,"check":"normal control 1","expected":0.0,"passed":true},{"actual":0.0,"check":"normal control 2","expected":0.0,"passed":true},{"actual":0.0,"check":"normal control 3","expected":0.0,"passed":true}],"passed":false,"stderr":"","stdout":"{\"observations\": [{\"check\": \"regression leading disruption 1\", \"actual\": 5.42, \"expected\": 13.733333, \"passed\": false}, {\"check\": \"regression leading disruption 2\", \"actual\": 1.13, \"expected\": 6.13, \"passed\": false}, {\"check\": \"partial repair probe 1\", \"actual\": 3.333333, \"expected\": 3.333333, \"passed\": true}, {\"check\": \"partial repair probe 2\", \"actual\": 0.0, \"expected\": 0.0, \"passed\": true}, {\"check\": \"boundary control 1\", \"actual\": 23.333333, \"expected\": 23.333333, \"passed\": true}, {\"check\": \"normal control 1\", \"actual\": 0.0, \"expected\": 0.0, \"passed\": true}, {\"check\": \"normal control 2\", \"actual\": 0.0, \"expected\": 0.0, \"passed\": true}, {\"check\": \"normal control 3\", \"actual\": 0.0, \"expected\": 0.0, \"passed\": true}], \"passed\": false}\n"}},"member_only":{"stages":["fixed"],"fields":["implementations.fixed","verification.fixed","harness","repair"],"note":"The verified repair, its recorded checks, the repair description, and the scoring harness are available to members."}}