{"abstract":"Knock-out rebates are never paid.","category":"Options payoff and settlement","checks":8,"contract":"Inputs kind (up/down, in/out, call/put), observed path including initial and final price, strike, barrier and rebate. The barrier is hit if any observation is >= barrier (up) or <= barrier (down). Knock-out: rebate if hit else vanilla on the final price. Knock-in: vanilla if hit else rebate. Round to 6.","contract_signature":"kind, path, strike, barrier, rebate","evaluation_group":"w2-options_payoff_and_settlement-discrete-barrier","failed_approach":"Paying the rebate only when the option was in the money at expiry is not the contract.","family":"w2-options_payoff_and_settlement-discrete-barrier-knock-out-rebate","id":"FA-61461","implementations":{"attempt":{"sha256":"31ac47f3d874aefd9623506cc13477def588d788aadafb27263e3c3a206a96c2","source":"\"\"\"Failure Map reference implementation. Python standard library only.\"\"\"\nimport json\n\nN = 1\nobservations = []\ndef solve(kind, path, strike, barrier, rebate):\n    up = kind.startswith('up')\n    hit = any(p >= barrier for p in path) if up else any(p <= barrier for p in path)\n    final = path[-1]\n    vanilla = max(final - strike, 0) if kind.endswith('call') else max(strike - final, 0)\n    if '-out-' in kind:\n        pay = (rebate if vanilla > 0 else 0.0) if hit else vanilla\n    else:\n        pay = vanilla if hit else rebate\n    return round(pay, 6)\ndef check(label, actual, expected):\n    observations.append({\"check\": label, \"actual\": actual, \"expected\": expected, \"passed\": actual == expected})\nfixtures = [[['regression knock-out rebate 1', ['up-out-call', [100.0, 105.0, 115.5, 103.95], 95, 115.0, 3.0], 3.0], ['regression knock-out rebate 2', ['up-out-call', [100.0, 105.0, 113.4, 107.73, 102.34, 92.11, 85.66, 92.51], 95, 113.4, 3.0], 3.0], ['partial repair probe 1', ['up-out-put', [100.0, 110.0, 104.5, 114.95, 109.2, 98.28, 106.14], 105, 110.0, 3.0], 3.0], ['partial repair probe 2', ['down-out-put', [100.0, 105.0, 113.4, 102.06, 112.27, 101.04, 106.09, 106.09], 100, 113.4, 3.0], 3.0], ['boundary control 1', ['down-in-put', [100.0, 95.0], 100, 90.0, 1.0], 1.0], ['normal control 1', ['down-out-put', [100.0, 110.0, 99.0, 94.05], 105, 80.0, 3.0], 10.95], ['normal control 2', ['down-in-call', [100.0, 95.0, 99.75, 94.76], 95, 85.0, 3.0], 3.0], ['normal control 3', ['down-out-put', [100.0, 93.0, 97.65, 92.77, 88.13], 105, 85.0, 0.0], 16.87]], [['regression knock-out rebate 1', ['up-out-call', [100.0, 93.0, 102.3, 97.18, 87.46, 87.46, 78.71], 105, 95.0, 3.0], 3.0], ['regression knock-out rebate 2', ['up-out-call', [100.0, 110.0, 104.5, 99.27, 109.2, 109.2], 95, 110.0, 3.0], 3.0], ['partial repair probe 1', ['up-out-call', [100.0, 110.0, 102.3, 95.14, 85.63, 77.07, 69.36], 100, 110.0, 3.0], 3.0], ['partial repair probe 2', ['up-out-put', [100.0, 108.0, 100.44, 110.48, 121.53, 133.68], 100, 133.68, 3.0], 3.0], ['boundary control 1', ['down-in-put', [100.0, 95.0], 100, 90.0, 1.0], 1.0], ['normal control 1', ['up-out-call', [100.0, 105.0, 99.75, 104.74], 105, 115.0, 0.0], 0], ['normal control 2', ['down-in-call', [100.0, 100.0, 90.0, 83.7, 75.33], 105, 90.0, 1.5], 0], ['normal control 3', ['up-out-put', [100.0, 93.0, 88.35], 95, 120.0, 1.5], 6.65]], [['regression knock-out rebate 1', ['down-out-put', [100.0, 93.0, 83.7, 75.33, 71.56, 75.14, 81.15], 100, 80.0, 3.0], 3.0], ['regression knock-out rebate 2', ['up-out-put', [100.0, 90.0, 81.0, 87.48, 87.48, 87.48], 100, 87.48, 1.5], 1.5], ['partial repair probe 1', ['down-out-put', [100.0, 90.0, 99.0, 103.95], 95, 90.0, 3.0], 3.0], ['partial repair probe 2', ['up-out-put', [100.0, 100.0, 110.0, 104.5], 95, 104.5, 3.0], 3.0], ['boundary control 1', ['down-in-put', [100.0, 95.0], 100, 90.0, 1.0], 1.0], ['normal control 1', ['down-in-put', [100.0, 105.0, 94.5, 87.89, 79.1, 73.56, 68.41], 100, 85.0, 0.0], 31.59], ['normal control 2', ['up-out-call', [100.0, 105.0, 97.65, 102.53, 102.53], 100, 115.0, 1.5], 2.53], ['normal control 3', ['down-in-call', [100.0, 90.0, 99.0, 92.07, 101.28, 94.19, 101.73], 100, 90.0, 1.5], 1.73]], [['regression knock-out rebate 1', ['up-out-put', [100.0, 90.0, 83.7, 83.7, 75.33, 79.1, 85.43, 85.43], 105, 83.7, 3.0], 3.0], ['regression knock-out rebate 2', ['down-out-put', [100.0, 90.0, 81.0, 76.95, 76.95], 105, 80.0, 1.5], 1.5], ['partial repair probe 1', ['up-out-call', [100.0, 90.0, 85.5, 94.05], 105, 90.0, 1.5], 1.5], ['partial repair probe 2', ['up-out-put', [100.0, 108.0, 118.8], 100, 110.0, 3.0], 3.0], ['boundary control 1', ['down-in-put', [100.0, 95.0], 100, 90.0, 1.0], 1.0], ['normal control 1', ['down-in-put', [100.0, 108.0, 97.2], 100, 97.2, 1.5], 2.8], ['normal control 2', ['down-in-put', [100.0, 93.0, 97.65], 100, 85.0, 3.0], 3.0], ['normal control 3', ['down-out-put', [100.0, 105.0, 110.25, 102.53], 100, 85.0, 3.0], 0]], [['regression knock-out rebate 1', ['up-out-put', [100.0, 105.0, 110.25, 115.76, 104.18, 114.6, 103.14], 95, 115.0, 3.0], 3.0], ['regression knock-out rebate 2', ['up-out-put', [100.0, 90.0, 85.5, 85.5, 94.05], 95, 95.0, 1.5], 1.5], ['partial repair probe 1', ['up-out-put', [100.0, 108.0, 113.4], 105, 95.0, 3.0], 3.0], ['partial repair probe 2', ['up-out-call', [100.0, 95.0, 90.25, 81.23, 89.35, 84.88, 91.67], 95, 95.0, 3.0], 3.0], ['boundary control 1', ['down-in-put', [100.0, 95.0], 100, 90.0, 1.0], 1.0], ['normal control 1', ['down-out-put', [100.0, 100.0, 105.0], 105, 85.0, 1.5], 0.0], ['normal control 2', ['down-in-call', [100.0, 108.0, 113.4], 100, 105.0, 1.5], 13.4], ['normal control 3', ['up-out-put', [100.0, 100.0, 93.0], 105, 115.0, 1.5], 12.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":"e5dc8c43a9df747efded157391ffd0e57cac6ec1e8bf34d30926b421b2950cb9","source":"\"\"\"Failure Map reference implementation. Python standard library only.\"\"\"\nimport json\n\nN = 1\nobservations = []\ndef solve(kind, path, strike, barrier, rebate):\n    up = kind.startswith('up')\n    hit = any(p >= barrier for p in path) if up else any(p <= barrier for p in path)\n    final = path[-1]\n    vanilla = max(final - strike, 0) if kind.endswith('call') else max(strike - final, 0)\n    if '-out-' in kind:\n        pay = 0.0 if hit else vanilla\n    else:\n        pay = vanilla if hit else rebate\n    return round(pay, 6)\ndef check(label, actual, expected):\n    observations.append({\"check\": label, \"actual\": actual, \"expected\": expected, \"passed\": actual == expected})\nfixtures = [[['regression knock-out rebate 1', ['up-out-call', [100.0, 105.0, 115.5, 103.95], 95, 115.0, 3.0], 3.0], ['regression knock-out rebate 2', ['up-out-call', [100.0, 105.0, 113.4, 107.73, 102.34, 92.11, 85.66, 92.51], 95, 113.4, 3.0], 3.0], ['partial repair probe 1', ['up-out-put', [100.0, 110.0, 104.5, 114.95, 109.2, 98.28, 106.14], 105, 110.0, 3.0], 3.0], ['partial repair probe 2', ['down-out-put', [100.0, 105.0, 113.4, 102.06, 112.27, 101.04, 106.09, 106.09], 100, 113.4, 3.0], 3.0], ['boundary control 1', ['down-in-put', [100.0, 95.0], 100, 90.0, 1.0], 1.0], ['normal control 1', ['down-out-put', [100.0, 110.0, 99.0, 94.05], 105, 80.0, 3.0], 10.95], ['normal control 2', ['down-in-call', [100.0, 95.0, 99.75, 94.76], 95, 85.0, 3.0], 3.0], ['normal control 3', ['down-out-put', [100.0, 93.0, 97.65, 92.77, 88.13], 105, 85.0, 0.0], 16.87]], [['regression knock-out rebate 1', ['up-out-call', [100.0, 93.0, 102.3, 97.18, 87.46, 87.46, 78.71], 105, 95.0, 3.0], 3.0], ['regression knock-out rebate 2', ['up-out-call', [100.0, 110.0, 104.5, 99.27, 109.2, 109.2], 95, 110.0, 3.0], 3.0], ['partial repair probe 1', ['up-out-call', [100.0, 110.0, 102.3, 95.14, 85.63, 77.07, 69.36], 100, 110.0, 3.0], 3.0], ['partial repair probe 2', ['up-out-put', [100.0, 108.0, 100.44, 110.48, 121.53, 133.68], 100, 133.68, 3.0], 3.0], ['boundary control 1', ['down-in-put', [100.0, 95.0], 100, 90.0, 1.0], 1.0], ['normal control 1', ['up-out-call', [100.0, 105.0, 99.75, 104.74], 105, 115.0, 0.0], 0], ['normal control 2', ['down-in-call', [100.0, 100.0, 90.0, 83.7, 75.33], 105, 90.0, 1.5], 0], ['normal control 3', ['up-out-put', [100.0, 93.0, 88.35], 95, 120.0, 1.5], 6.65]], [['regression knock-out rebate 1', ['down-out-put', [100.0, 93.0, 83.7, 75.33, 71.56, 75.14, 81.15], 100, 80.0, 3.0], 3.0], ['regression knock-out rebate 2', ['up-out-put', [100.0, 90.0, 81.0, 87.48, 87.48, 87.48], 100, 87.48, 1.5], 1.5], ['partial repair probe 1', ['down-out-put', [100.0, 90.0, 99.0, 103.95], 95, 90.0, 3.0], 3.0], ['partial repair probe 2', ['up-out-put', [100.0, 100.0, 110.0, 104.5], 95, 104.5, 3.0], 3.0], ['boundary control 1', ['down-in-put', [100.0, 95.0], 100, 90.0, 1.0], 1.0], ['normal control 1', ['down-in-put', [100.0, 105.0, 94.5, 87.89, 79.1, 73.56, 68.41], 100, 85.0, 0.0], 31.59], ['normal control 2', ['up-out-call', [100.0, 105.0, 97.65, 102.53, 102.53], 100, 115.0, 1.5], 2.53], ['normal control 3', ['down-in-call', [100.0, 90.0, 99.0, 92.07, 101.28, 94.19, 101.73], 100, 90.0, 1.5], 1.73]], [['regression knock-out rebate 1', ['up-out-put', [100.0, 90.0, 83.7, 83.7, 75.33, 79.1, 85.43, 85.43], 105, 83.7, 3.0], 3.0], ['regression knock-out rebate 2', ['down-out-put', [100.0, 90.0, 81.0, 76.95, 76.95], 105, 80.0, 1.5], 1.5], ['partial repair probe 1', ['up-out-call', [100.0, 90.0, 85.5, 94.05], 105, 90.0, 1.5], 1.5], ['partial repair probe 2', ['up-out-put', [100.0, 108.0, 118.8], 100, 110.0, 3.0], 3.0], ['boundary control 1', ['down-in-put', [100.0, 95.0], 100, 90.0, 1.0], 1.0], ['normal control 1', ['down-in-put', [100.0, 108.0, 97.2], 100, 97.2, 1.5], 2.8], ['normal control 2', ['down-in-put', [100.0, 93.0, 97.65], 100, 85.0, 3.0], 3.0], ['normal control 3', ['down-out-put', [100.0, 105.0, 110.25, 102.53], 100, 85.0, 3.0], 0]], [['regression knock-out rebate 1', ['up-out-put', [100.0, 105.0, 110.25, 115.76, 104.18, 114.6, 103.14], 95, 115.0, 3.0], 3.0], ['regression knock-out rebate 2', ['up-out-put', [100.0, 90.0, 85.5, 85.5, 94.05], 95, 95.0, 1.5], 1.5], ['partial repair probe 1', ['up-out-put', [100.0, 108.0, 113.4], 105, 95.0, 3.0], 3.0], ['partial repair probe 2', ['up-out-call', [100.0, 95.0, 90.25, 81.23, 89.35, 84.88, 91.67], 95, 95.0, 3.0], 3.0], ['boundary control 1', ['down-in-put', [100.0, 95.0], 100, 90.0, 1.0], 1.0], ['normal control 1', ['down-out-put', [100.0, 100.0, 105.0], 105, 85.0, 1.5], 0.0], ['normal control 2', ['down-in-call', [100.0, 108.0, 113.4], 100, 105.0, 1.5], 13.4], ['normal control 3', ['up-out-put', [100.0, 100.0, 93.0], 105, 115.0, 1.5], 12.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-discrete-barrier-knock-out-rebate","generated_at":"2026-09-29T14:46:55.493592+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 knock-out branch returns 0 when hit.","sha256":"adc2395c76f7eb23d1d7d1877329cda17738e5312c51fcf5842ffc01d37e4121","title":"Discretely monitored barrier option payoff: a knocked-out option pays nothing · 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":39.51,"exit_code":1,"observations":[{"actual":3.0,"check":"regression knock-out rebate 1","expected":3.0,"passed":true},{"actual":0.0,"check":"regression knock-out rebate 2","expected":3.0,"passed":false},{"actual":0.0,"check":"partial repair probe 1","expected":3.0,"passed":false},{"actual":0.0,"check":"partial repair probe 2","expected":3.0,"passed":false},{"actual":1.0,"check":"boundary control 1","expected":1.0,"passed":true},{"actual":10.95,"check":"normal control 1","expected":10.95,"passed":true},{"actual":3.0,"check":"normal control 2","expected":3.0,"passed":true},{"actual":16.87,"check":"normal control 3","expected":16.87,"passed":true}],"passed":false,"stderr":"","stdout":"{\"observations\": [{\"check\": \"regression knock-out rebate 1\", \"actual\": 3.0, \"expected\": 3.0, \"passed\": true}, {\"check\": \"regression knock-out rebate 2\", \"actual\": 0.0, \"expected\": 3.0, \"passed\": false}, {\"check\": \"partial repair probe 1\", \"actual\": 0.0, \"expected\": 3.0, \"passed\": false}, {\"check\": \"partial repair probe 2\", \"actual\": 0.0, \"expected\": 3.0, \"passed\": false}, {\"check\": \"boundary control 1\", \"actual\": 1.0, \"expected\": 1.0, \"passed\": true}, {\"check\": \"normal control 1\", \"actual\": 10.95, \"expected\": 10.95, \"passed\": true}, {\"check\": \"normal control 2\", \"actual\": 3.0, \"expected\": 3.0, \"passed\": true}, {\"check\": \"normal control 3\", \"actual\": 16.87, \"expected\": 16.87, \"passed\": true}], \"passed\": false}\n"},"broken":{"elapsed_ms":42.372,"exit_code":1,"observations":[{"actual":0.0,"check":"regression knock-out rebate 1","expected":3.0,"passed":false},{"actual":0.0,"check":"regression knock-out rebate 2","expected":3.0,"passed":false},{"actual":0.0,"check":"partial repair probe 1","expected":3.0,"passed":false},{"actual":0.0,"check":"partial repair probe 2","expected":3.0,"passed":false},{"actual":1.0,"check":"boundary control 1","expected":1.0,"passed":true},{"actual":10.95,"check":"normal control 1","expected":10.95,"passed":true},{"actual":3.0,"check":"normal control 2","expected":3.0,"passed":true},{"actual":16.87,"check":"normal control 3","expected":16.87,"passed":true}],"passed":false,"stderr":"","stdout":"{\"observations\": [{\"check\": \"regression knock-out rebate 1\", \"actual\": 0.0, \"expected\": 3.0, \"passed\": false}, {\"check\": \"regression knock-out rebate 2\", \"actual\": 0.0, \"expected\": 3.0, \"passed\": false}, {\"check\": \"partial repair probe 1\", \"actual\": 0.0, \"expected\": 3.0, \"passed\": false}, {\"check\": \"partial repair probe 2\", \"actual\": 0.0, \"expected\": 3.0, \"passed\": false}, {\"check\": \"boundary control 1\", \"actual\": 1.0, \"expected\": 1.0, \"passed\": true}, {\"check\": \"normal control 1\", \"actual\": 10.95, \"expected\": 10.95, \"passed\": true}, {\"check\": \"normal control 2\", \"actual\": 3.0, \"expected\": 3.0, \"passed\": true}, {\"check\": \"normal control 3\", \"actual\": 16.87, \"expected\": 16.87, \"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."}}