{"abstract":"The final observation is double counted in the average.","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":"Dropping the last fixing removes a scheduled observation instead.","family":"w2-options_payoff_and_settlement-asian-disrupted-fixings-averaging-set","id":"FA-61436","implementations":{"attempt":{"sha256":"f94d56adb1d193ee43d4feda55abcc6a56efc0890dc27a2ffa6a18f912a42f43","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[0]\n        filled.append(v)\n    avg = sum(filled[:-1]) / (len(filled) - 1)\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 averaging set 1', ['strike-call', [80.18, 83.29, 83.37, 113.46, 117.92, 113.69, 91.1], 90, 101.49], 3.917143], ['regression averaging set 2', ['price-call', [None, 93.86, 86.82, 114.78, 116.01, 106.72, 113.09, 99.31], 100, 97.7], 3.05625], ['partial repair probe 1', ['price-put', [85.47, None, 89.36, 119.71], 90, 108.07], 0.0], ['partial repair probe 2', ['price-put', [94.35, 82.66, 99.58], 90, 119.87], 0.0], ['normal control 1', ['price-put', [119.18, 101.58, None, 97.92, None, 103.75, 115.65, 99.76], 90, 86.86], 0.0], ['normal control 2', ['strike-call', [101.08, 83.38, None, 111.97, 96.17, 119.36, None, 112.17], 110, 97.0], 0.0], ['normal control 3', ['price-put', [109.69, 95.98, 111.39, None, 88.5, 86.77, 109.74], 100, 105.11], 0.0], ['normal control 4', ['price-put', [106.22, 117.4], 100, 88.61], 0.0]], [['regression averaging set 1', ['price-put', [None, None, 112.93, 108.05, 83.92, None], 105, 112.17], 2.553333], ['regression averaging set 2', ['price-put', [105.66, 81.85, 81.44], 105, 87.44], 15.35], ['partial repair probe 1', ['strike-call', [None, 103.34, 92.64, 96.71, 88.34, 81.7, 89.42, 115.57], 105, 96.03], 0.0], ['partial repair probe 2', ['price-put', [119.7, 95.16, None, 116.26], 105, 104.79], 0.0], ['normal control 1', ['strike-call', [None, 103.36, 82.5, 116.07], 90, 85.2], 0.0], ['normal control 2', ['price-put', [85.46, 80.82, 107.2, 114.95, None, 110.68, 98.77, 101.95], 100, 103.02], 0.0], ['normal control 3', ['price-put', [100.59, 114.99, None, 90.36, 118.38], 100, 91.41], 0.0], ['normal control 4', ['strike-call', [86.04, 112.95, None, 116.44, 114.1, 97.61], 100, 81.41], 0.0]], [['regression averaging set 1', ['price-call', [None, None, None, 110.46], 90, 114.65], 20.46], ['regression averaging set 2', ['price-put', [116.89, 107.33, 103.44], 110, 109.18], 0.78], ['partial repair probe 1', ['price-call', [116.24, 96.14, 118.53, 80.19], 110, 110.74], 0.0], ['partial repair probe 2', ['strike-call', [None, 92.85, 108.32], 90, 93.35], 0.0], ['normal control 1', ['strike-call', [104.59, None, None, 82.73], 100, 94.24], 0.0], ['normal control 2', ['price-call', [None, 86.46, 94.24, 98.57, 80.49, 97.12], 100, 113.48], 0.0], ['normal control 3', ['strike-call', [97.17, 95.11, 96.49, 111.33, 93.94, 102.96, None, 84.02], 100, 89.71], 0.0], ['normal control 4', ['strike-call', [None, 96.59, None, 113.0, 114.72, 97.55], 110, 99.24], 0.0]], [['regression averaging set 1', ['price-put', [109.13, None], 110, 105.91], 0.87], ['regression averaging set 2', ['price-call', [None, 100.0, 110.0], 100, 100.0], 3.333333], ['partial repair probe 1', ['strike-call', [102.88, 113.6, None], 105, 109.21], 0.0], ['partial repair probe 2', ['price-put', [83.4, 115.69, 97.25, None, 92.32, 111.92, None], 100, 103.18], 0.0], ['normal control 1', ['strike-call', [None, 100.74], 100, 80.87], 0.0], ['normal control 2', ['price-put', [None, 117.64, 104.34, 103.25, 96.88, None], 90, 117.22], 0.0], ['normal control 3', ['strike-call', [117.52, None, 102.65, 89.79, None, 113.85, 95.03], 100, 86.43], 0.0], ['normal control 4', ['price-put', [116.99, None, 112.3, 80.06, 83.34, 105.61, 104.54], 90, 119.98], 0.0]], [['regression averaging set 1', ['price-put', [None, 89.31, 115.64, None, 109.9, None], 110, 110.17], 5.05], ['regression averaging set 2', ['price-call', [92.38, 89.49, 108.11], 90, 88.72], 6.66], ['partial repair probe 1', ['price-call', [111.39, 81.66], 100, 81.74], 0.0], ['partial repair probe 2', ['strike-call', [None, 94.49, 102.83], 100, 95.06], 0.0], ['normal control 1', ['price-call', [None, 104.44, 84.71, 91.43, 87.51], 110, 116.96], 0.0], ['normal control 2', ['price-call', [82.28, 99.04, 80.7, 106.55, None, None], 110, 81.57], 0.0], ['normal control 3', ['price-call', [99.04, None, 87.34, None, 102.98, 83.37, 84.75], 110, 97.22], 0.0], ['normal control 4', ['strike-call', [108.54, 108.11, 96.0, 97.59, 80.67], 110, 95.07], 0.0]]]\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":"ec96ba11f11ca7c7926d310afb93d75426860354b06d69f2a7b500f1bf81f09c","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[0]\n        filled.append(v)\n    avg = (sum(filled) + final) / (len(filled) + 1)\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 averaging set 1', ['strike-call', [80.18, 83.29, 83.37, 113.46, 117.92, 113.69, 91.1], 90, 101.49], 3.917143], ['regression averaging set 2', ['price-call', [None, 93.86, 86.82, 114.78, 116.01, 106.72, 113.09, 99.31], 100, 97.7], 3.05625], ['partial repair probe 1', ['price-put', [85.47, None, 89.36, 119.71], 90, 108.07], 0.0], ['partial repair probe 2', ['price-put', [94.35, 82.66, 99.58], 90, 119.87], 0.0], ['normal control 1', ['price-put', [119.18, 101.58, None, 97.92, None, 103.75, 115.65, 99.76], 90, 86.86], 0.0], ['normal control 2', ['strike-call', [101.08, 83.38, None, 111.97, 96.17, 119.36, None, 112.17], 110, 97.0], 0.0], ['normal control 3', ['price-put', [109.69, 95.98, 111.39, None, 88.5, 86.77, 109.74], 100, 105.11], 0.0], ['normal control 4', ['price-put', [106.22, 117.4], 100, 88.61], 0.0]], [['regression averaging set 1', ['price-put', [None, None, 112.93, 108.05, 83.92, None], 105, 112.17], 2.553333], ['regression averaging set 2', ['price-put', [105.66, 81.85, 81.44], 105, 87.44], 15.35], ['partial repair probe 1', ['strike-call', [None, 103.34, 92.64, 96.71, 88.34, 81.7, 89.42, 115.57], 105, 96.03], 0.0], ['partial repair probe 2', ['price-put', [119.7, 95.16, None, 116.26], 105, 104.79], 0.0], ['normal control 1', ['strike-call', [None, 103.36, 82.5, 116.07], 90, 85.2], 0.0], ['normal control 2', ['price-put', [85.46, 80.82, 107.2, 114.95, None, 110.68, 98.77, 101.95], 100, 103.02], 0.0], ['normal control 3', ['price-put', [100.59, 114.99, None, 90.36, 118.38], 100, 91.41], 0.0], ['normal control 4', ['strike-call', [86.04, 112.95, None, 116.44, 114.1, 97.61], 100, 81.41], 0.0]], [['regression averaging set 1', ['price-call', [None, None, None, 110.46], 90, 114.65], 20.46], ['regression averaging set 2', ['price-put', [116.89, 107.33, 103.44], 110, 109.18], 0.78], ['partial repair probe 1', ['price-call', [116.24, 96.14, 118.53, 80.19], 110, 110.74], 0.0], ['partial repair probe 2', ['strike-call', [None, 92.85, 108.32], 90, 93.35], 0.0], ['normal control 1', ['strike-call', [104.59, None, None, 82.73], 100, 94.24], 0.0], ['normal control 2', ['price-call', [None, 86.46, 94.24, 98.57, 80.49, 97.12], 100, 113.48], 0.0], ['normal control 3', ['strike-call', [97.17, 95.11, 96.49, 111.33, 93.94, 102.96, None, 84.02], 100, 89.71], 0.0], ['normal control 4', ['strike-call', [None, 96.59, None, 113.0, 114.72, 97.55], 110, 99.24], 0.0]], [['regression averaging set 1', ['price-put', [109.13, None], 110, 105.91], 0.87], ['regression averaging set 2', ['price-call', [None, 100.0, 110.0], 100, 100.0], 3.333333], ['partial repair probe 1', ['strike-call', [102.88, 113.6, None], 105, 109.21], 0.0], ['partial repair probe 2', ['price-put', [83.4, 115.69, 97.25, None, 92.32, 111.92, None], 100, 103.18], 0.0], ['normal control 1', ['strike-call', [None, 100.74], 100, 80.87], 0.0], ['normal control 2', ['price-put', [None, 117.64, 104.34, 103.25, 96.88, None], 90, 117.22], 0.0], ['normal control 3', ['strike-call', [117.52, None, 102.65, 89.79, None, 113.85, 95.03], 100, 86.43], 0.0], ['normal control 4', ['price-put', [116.99, None, 112.3, 80.06, 83.34, 105.61, 104.54], 90, 119.98], 0.0]], [['regression averaging set 1', ['price-put', [None, 89.31, 115.64, None, 109.9, None], 110, 110.17], 5.05], ['regression averaging set 2', ['price-call', [92.38, 89.49, 108.11], 90, 88.72], 6.66], ['partial repair probe 1', ['price-call', [111.39, 81.66], 100, 81.74], 0.0], ['partial repair probe 2', ['strike-call', [None, 94.49, 102.83], 100, 95.06], 0.0], ['normal control 1', ['price-call', [None, 104.44, 84.71, 91.43, 87.51], 110, 116.96], 0.0], ['normal control 2', ['price-call', [82.28, 99.04, 80.7, 106.55, None, None], 110, 81.57], 0.0], ['normal control 3', ['price-call', [99.04, None, 87.34, None, 102.98, 83.37, 84.75], 110, 97.22], 0.0], ['normal control 4', ['strike-call', [108.54, 108.11, 96.0, 97.59, 80.67], 110, 95.07], 0.0]]]\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-averaging-set","generated_at":"2026-09-29T14:46:55.181582+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 average includes final as an extra observation.","sha256":"abc94b3027e0d186283537e64511f5d08460939ec3def6daa9fcdb6d372b8dad","title":"Arithmetic Asian payoff with disrupted fixings: the final price is added to the fixing average · 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":41.562,"exit_code":1,"observations":[{"actual":2.838333,"check":"regression averaging set 1","expected":3.917143,"passed":false},{"actual":3.591429,"check":"regression averaging set 2","expected":3.05625,"passed":false},{"actual":3.233333,"check":"partial repair probe 1","expected":0.0,"passed":false},{"actual":1.495,"check":"partial repair probe 2","expected":0.0,"passed":false},{"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},{"actual":0.0,"check":"normal control 4","expected":0.0,"passed":true}],"passed":false,"stderr":"","stdout":"{\"observations\": [{\"check\": \"regression averaging set 1\", \"actual\": 2.838333, \"expected\": 3.917143, \"passed\": false}, {\"check\": \"regression averaging set 2\", \"actual\": 3.591429, \"expected\": 3.05625, \"passed\": false}, {\"check\": \"partial repair probe 1\", \"actual\": 3.233333, \"expected\": 0.0, \"passed\": false}, {\"check\": \"partial repair probe 2\", \"actual\": 1.495, \"expected\": 0.0, \"passed\": false}, {\"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}, {\"check\": \"normal control 4\", \"actual\": 0.0, \"expected\": 0.0, \"passed\": true}], \"passed\": false}\n"},"broken":{"elapsed_ms":38.739,"exit_code":1,"observations":[{"actual":3.4275,"check":"regression averaging set 1","expected":3.917143,"passed":false},{"actual":2.461111,"check":"regression averaging set 2","expected":3.05625,"passed":false},{"actual":0.0,"check":"partial repair probe 1","expected":0.0,"passed":true},{"actual":0.0,"check":"partial repair probe 2","expected":0.0,"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},{"actual":0.0,"check":"normal control 4","expected":0.0,"passed":true}],"passed":false,"stderr":"","stdout":"{\"observations\": [{\"check\": \"regression averaging set 1\", \"actual\": 3.4275, \"expected\": 3.917143, \"passed\": false}, {\"check\": \"regression averaging set 2\", \"actual\": 2.461111, \"expected\": 3.05625, \"passed\": false}, {\"check\": \"partial repair probe 1\", \"actual\": 0.0, \"expected\": 0.0, \"passed\": true}, {\"check\": \"partial repair probe 2\", \"actual\": 0.0, \"expected\": 0.0, \"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}, {\"check\": \"normal control 4\", \"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."}}