{"abstract":"Options on dividend payers are priced as if dividends increased the forward.","category":"Options payoff and settlement","checks":8,"contract":"Inputs kind, spot S, strike K, rate r, dividend yield q, volatility sigma and calendar days to expiry. T = days/365. At days == 0 return intrinsic value. Otherwise d1 = (ln(S/K) + (r - q + sigma^2/2)T)/(sigma sqrt T), d2 = d1 - sigma sqrt T, call = S e^{-qT} N(d1) - K e^{-rT} N(d2), put = K e^{-rT} N(-d2) - S e^{-qT} N(-d1). Round to 6.","contract_signature":"kind, S, K, r, q, sigma, days","evaluation_group":"w2-options_payoff_and_settlement-black-scholes-dividend-yield","failed_approach":"Dropping q from d1 while keeping the e^{-qT} factor is internally inconsistent.","family":"w2-options_payoff_and_settlement-black-scholes-dividend-yield-dividend-drift","id":"FA-61541","implementations":{"attempt":{"sha256":"ff347af977efa352312b2ba5f20ea6f31a88213e2fb35335e7c022e42c02cf6f","source":"\"\"\"Failure Map reference implementation. Python standard library only.\"\"\"\nimport json\nimport math\nN = 1\nobservations = []\ndef solve(kind, S, K, r, q, sigma, days):\n    def N(x):\n        return 0.5 * (1 + math.erf(x / math.sqrt(2)))\n    T = days / 365\n    if days == 0:\n        return round(max(S - K, 0.0) if kind == 'C' else max(K - S, 0.0), 6)\n    d1 = (math.log(S / K) + (r + 0.5 * sigma ** 2) * T) / (sigma * math.sqrt(T))\n    d2 = d1 - sigma * math.sqrt(T)\n    if kind == 'C':\n        v = S * math.exp(-q * T) * N(d1) - K * math.exp(-r * T) * N(d2)\n    else:\n        v = K * math.exp(-r * T) * N(-d2) - S * math.exp(-q * T) * N(-d1)\n    return round(v, 6)\ndef check(label, actual, expected):\n    observations.append({\"check\": label, \"actual\": actual, \"expected\": expected, \"passed\": actual == expected})\nfixtures = [[['regression dividend drift 1', ['P', 110.0, 105.0, 0.0, 0.03, 0.35, 30], 2.338617], ['regression dividend drift 2', ['C', 110.0, 105.0, 0.0, 0.015, 0.35, 91], 9.987818], ['partial repair probe 1', ['C', 100.0, 105.0, 0.05, 0.015, 0.35, 30], 2.164477], ['partial repair probe 2', ['P', 90.0, 105.0, 0.02, 0.03, 0.1, 730], 16.810523], ['boundary control 1', ['C', 110.0, 100.0, 0.05, 0.0, 0.2, 0], 10.0], ['boundary control 2', ['P', 90.0, 100.0, 0.05, 0.0, 0.2, 0], 10.0], ['normal control 1', ['C', 100.0, 105.0, 0.05, 0.015, 0.2, 1], 0.0], ['normal control 2', ['P', 100.0, 105.0, 0.05, 0.0, 0.35, 0], 5.0]], [['regression dividend drift 1', ['C', 100.0, 100.0, 0.02, 0.015, 0.1, 182], 2.917342], ['regression dividend drift 2', ['P', 90.0, 100.0, 0.0, 0.015, 0.35, 730], 25.3049], ['partial repair probe 1', ['P', 100.0, 95.0, 0.02, 0.015, 0.2, 30], 0.558539], ['partial repair probe 2', ['P', 100.0, 105.0, 0.05, 0.03, 0.1, 730], 5.758366], ['boundary control 1', ['C', 110.0, 100.0, 0.05, 0.0, 0.2, 0], 10.0], ['boundary control 2', ['P', 90.0, 100.0, 0.05, 0.0, 0.2, 0], 10.0], ['normal control 1', ['P', 100.0, 105.0, 0.02, 0.0, 0.2, 30], 5.505807], ['normal control 2', ['C', 110.0, 100.0, 0.0, 0.0, 0.2, 730], 17.46773]], [['regression dividend drift 1', ['C', 110.0, 100.0, 0.0, 0.015, 0.35, 365], 19.029274], ['regression dividend drift 2', ['P', 100.0, 95.0, 0.0, 0.03, 0.35, 7], 0.359876], ['partial repair probe 1', ['P', 90.0, 105.0, 0.05, 0.015, 0.1, 182], 13.153147], ['partial repair probe 2', ['P', 100.0, 105.0, 0.0, 0.015, 0.35, 91], 10.129304], ['boundary control 1', ['P', 90.0, 100.0, 0.05, 0.0, 0.2, 0], 10.0], ['boundary control 2', ['C', 110.0, 100.0, 0.05, 0.0, 0.2, 0], 10.0], ['normal control 1', ['P', 110.0, 100.0, 0.02, 0.0, 0.2, 730], 5.917793], ['normal control 2', ['C', 100.0, 105.0, 0.0, 0.0, 0.2, 365], 5.905593]], [['regression dividend drift 1', ['P', 100.0, 100.0, 0.02, 0.03, 0.1, 182], 3.034769], ['regression dividend drift 2', ['C', 110.0, 95.0, 0.0, 0.015, 0.35, 91], 16.662902], ['partial repair probe 1', ['P', 110.0, 105.0, 0.05, 0.03, 0.35, 91], 4.98959], ['partial repair probe 2', ['C', 110.0, 100.0, 0.02, 0.03, 0.35, 30], 10.869205], ['boundary control 1', ['P', 90.0, 100.0, 0.05, 0.0, 0.2, 0], 10.0], ['boundary control 2', ['C', 110.0, 100.0, 0.05, 0.0, 0.2, 0], 10.0], ['normal control 1', ['C', 100.0, 95.0, 0.05, 0.03, 0.35, 0], 5.0], ['normal control 2', ['C', 110.0, 95.0, 0.02, 0.0, 0.1, 30], 15.156036]], [['regression dividend drift 1', ['C', 90.0, 100.0, 0.05, 0.015, 0.1, 365], 1.303213], ['regression dividend drift 2', ['C', 110.0, 100.0, 0.05, 0.03, 0.1, 365], 12.247458], ['partial repair probe 1', ['C', 100.0, 105.0, 0.02, 0.03, 0.1, 91], 0.402157], ['partial repair probe 2', ['P', 90.0, 105.0, 0.02, 0.03, 0.35, 7], 15.012424], ['boundary control 1', ['C', 110.0, 100.0, 0.05, 0.0, 0.2, 0], 10.0], ['boundary control 2', ['P', 90.0, 100.0, 0.05, 0.0, 0.2, 0], 10.0], ['normal control 1', ['P', 90.0, 95.0, 0.0, 0.0, 0.35, 7], 5.298184], ['normal control 2', ['P', 100.0, 105.0, 0.05, 0.0, 0.35, 365], 13.823265]]]\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":"e9cf4fcc2b17aa052aa35dfd603f29419444aa0b4facd3b287208af77d6f6a05","source":"\"\"\"Failure Map reference implementation. Python standard library only.\"\"\"\nimport json\nimport math\nN = 1\nobservations = []\ndef solve(kind, S, K, r, q, sigma, days):\n    def N(x):\n        return 0.5 * (1 + math.erf(x / math.sqrt(2)))\n    T = days / 365\n    if days == 0:\n        return round(max(S - K, 0.0) if kind == 'C' else max(K - S, 0.0), 6)\n    d1 = (math.log(S / K) + (r + q + 0.5 * sigma ** 2) * T) / (sigma * math.sqrt(T))\n    d2 = d1 - sigma * math.sqrt(T)\n    if kind == 'C':\n        v = S * math.exp(-q * T) * N(d1) - K * math.exp(-r * T) * N(d2)\n    else:\n        v = K * math.exp(-r * T) * N(-d2) - S * math.exp(-q * T) * N(-d1)\n    return round(v, 6)\ndef check(label, actual, expected):\n    observations.append({\"check\": label, \"actual\": actual, \"expected\": expected, \"passed\": actual == expected})\nfixtures = [[['regression dividend drift 1', ['P', 110.0, 105.0, 0.0, 0.03, 0.35, 30], 2.338617], ['regression dividend drift 2', ['C', 110.0, 105.0, 0.0, 0.015, 0.35, 91], 9.987818], ['partial repair probe 1', ['C', 100.0, 105.0, 0.05, 0.015, 0.35, 30], 2.164477], ['partial repair probe 2', ['P', 90.0, 105.0, 0.02, 0.03, 0.1, 730], 16.810523], ['boundary control 1', ['C', 110.0, 100.0, 0.05, 0.0, 0.2, 0], 10.0], ['boundary control 2', ['P', 90.0, 100.0, 0.05, 0.0, 0.2, 0], 10.0], ['normal control 1', ['C', 100.0, 105.0, 0.05, 0.015, 0.2, 1], 0.0], ['normal control 2', ['P', 100.0, 105.0, 0.05, 0.0, 0.35, 0], 5.0]], [['regression dividend drift 1', ['C', 100.0, 100.0, 0.02, 0.015, 0.1, 182], 2.917342], ['regression dividend drift 2', ['P', 90.0, 100.0, 0.0, 0.015, 0.35, 730], 25.3049], ['partial repair probe 1', ['P', 100.0, 95.0, 0.02, 0.015, 0.2, 30], 0.558539], ['partial repair probe 2', ['P', 100.0, 105.0, 0.05, 0.03, 0.1, 730], 5.758366], ['boundary control 1', ['C', 110.0, 100.0, 0.05, 0.0, 0.2, 0], 10.0], ['boundary control 2', ['P', 90.0, 100.0, 0.05, 0.0, 0.2, 0], 10.0], ['normal control 1', ['P', 100.0, 105.0, 0.02, 0.0, 0.2, 30], 5.505807], ['normal control 2', ['C', 110.0, 100.0, 0.0, 0.0, 0.2, 730], 17.46773]], [['regression dividend drift 1', ['C', 110.0, 100.0, 0.0, 0.015, 0.35, 365], 19.029274], ['regression dividend drift 2', ['P', 100.0, 95.0, 0.0, 0.03, 0.35, 7], 0.359876], ['partial repair probe 1', ['P', 90.0, 105.0, 0.05, 0.015, 0.1, 182], 13.153147], ['partial repair probe 2', ['P', 100.0, 105.0, 0.0, 0.015, 0.35, 91], 10.129304], ['boundary control 1', ['P', 90.0, 100.0, 0.05, 0.0, 0.2, 0], 10.0], ['boundary control 2', ['C', 110.0, 100.0, 0.05, 0.0, 0.2, 0], 10.0], ['normal control 1', ['P', 110.0, 100.0, 0.02, 0.0, 0.2, 730], 5.917793], ['normal control 2', ['C', 100.0, 105.0, 0.0, 0.0, 0.2, 365], 5.905593]], [['regression dividend drift 1', ['P', 100.0, 100.0, 0.02, 0.03, 0.1, 182], 3.034769], ['regression dividend drift 2', ['C', 110.0, 95.0, 0.0, 0.015, 0.35, 91], 16.662902], ['partial repair probe 1', ['P', 110.0, 105.0, 0.05, 0.03, 0.35, 91], 4.98959], ['partial repair probe 2', ['C', 110.0, 100.0, 0.02, 0.03, 0.35, 30], 10.869205], ['boundary control 1', ['P', 90.0, 100.0, 0.05, 0.0, 0.2, 0], 10.0], ['boundary control 2', ['C', 110.0, 100.0, 0.05, 0.0, 0.2, 0], 10.0], ['normal control 1', ['C', 100.0, 95.0, 0.05, 0.03, 0.35, 0], 5.0], ['normal control 2', ['C', 110.0, 95.0, 0.02, 0.0, 0.1, 30], 15.156036]], [['regression dividend drift 1', ['C', 90.0, 100.0, 0.05, 0.015, 0.1, 365], 1.303213], ['regression dividend drift 2', ['C', 110.0, 100.0, 0.05, 0.03, 0.1, 365], 12.247458], ['partial repair probe 1', ['C', 100.0, 105.0, 0.02, 0.03, 0.1, 91], 0.402157], ['partial repair probe 2', ['P', 90.0, 105.0, 0.02, 0.03, 0.35, 7], 15.012424], ['boundary control 1', ['C', 110.0, 100.0, 0.05, 0.0, 0.2, 0], 10.0], ['boundary control 2', ['P', 90.0, 100.0, 0.05, 0.0, 0.2, 0], 10.0], ['normal control 1', ['P', 90.0, 95.0, 0.0, 0.0, 0.35, 7], 5.298184], ['normal control 2', ['P', 100.0, 105.0, 0.05, 0.0, 0.35, 365], 13.823265]]]\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-black-scholes-dividend-yield-dividend-drift","generated_at":"2026-09-29T14:46:56.130363+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":"d1 uses r + q instead of r - q.","sha256":"c7d320b1f2b4e138eab29196d265feda2358f99c3a18ded24ed64a6958e1e05d","title":"European option value with continuous dividend yield: the dividend yield is added to the drift · 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":38.487,"exit_code":1,"observations":[{"actual":2.337449,"check":"regression dividend drift 1","expected":2.338617,"passed":false},{"actual":9.986169,"check":"regression dividend drift 2","expected":9.987818,"passed":false},{"actual":2.164199,"check":"partial repair probe 1","expected":2.164477,"passed":false},{"actual":16.511929,"check":"partial repair probe 2","expected":16.810523,"passed":false},{"actual":10.0,"check":"boundary control 1","expected":10.0,"passed":true},{"actual":10.0,"check":"boundary control 2","expected":10.0,"passed":true},{"actual":0.0,"check":"normal control 1","expected":0.0,"passed":true},{"actual":5.0,"check":"normal control 2","expected":5.0,"passed":true}],"passed":false,"stderr":"","stdout":"{\"observations\": [{\"check\": \"regression dividend drift 1\", \"actual\": 2.337449, \"expected\": 2.338617, \"passed\": false}, {\"check\": \"regression dividend drift 2\", \"actual\": 9.986169, \"expected\": 9.987818, \"passed\": false}, {\"check\": \"partial repair probe 1\", \"actual\": 2.164199, \"expected\": 2.164477, \"passed\": false}, {\"check\": \"partial repair probe 2\", \"actual\": 16.511929, \"expected\": 16.810523, \"passed\": false}, {\"check\": \"boundary control 1\", \"actual\": 10.0, \"expected\": 10.0, \"passed\": true}, {\"check\": \"boundary control 2\", \"actual\": 10.0, \"expected\": 10.0, \"passed\": true}, {\"check\": \"normal control 1\", \"actual\": 0.0, \"expected\": 0.0, \"passed\": true}, {\"check\": \"normal control 2\", \"actual\": 5.0, \"expected\": 5.0, \"passed\": true}], \"passed\": false}\n"},"broken":{"elapsed_ms":39.213,"exit_code":1,"observations":[{"actual":2.333981,"check":"regression dividend drift 1","expected":2.338617,"passed":false},{"actual":9.981245,"check":"regression dividend drift 2","expected":9.987818,"passed":false},{"actual":2.163358,"check":"partial repair probe 1","expected":2.164477,"passed":false},{"actual":15.323725,"check":"partial repair probe 2","expected":16.810523,"passed":false},{"actual":10.0,"check":"boundary control 1","expected":10.0,"passed":true},{"actual":10.0,"check":"boundary control 2","expected":10.0,"passed":true},{"actual":0.0,"check":"normal control 1","expected":0.0,"passed":true},{"actual":5.0,"check":"normal control 2","expected":5.0,"passed":true}],"passed":false,"stderr":"","stdout":"{\"observations\": [{\"check\": \"regression dividend drift 1\", \"actual\": 2.333981, \"expected\": 2.338617, \"passed\": false}, {\"check\": \"regression dividend drift 2\", \"actual\": 9.981245, \"expected\": 9.987818, \"passed\": false}, {\"check\": \"partial repair probe 1\", \"actual\": 2.163358, \"expected\": 2.164477, \"passed\": false}, {\"check\": \"partial repair probe 2\", \"actual\": 15.323725, \"expected\": 16.810523, \"passed\": false}, {\"check\": \"boundary control 1\", \"actual\": 10.0, \"expected\": 10.0, \"passed\": true}, {\"check\": \"boundary control 2\", \"actual\": 10.0, \"expected\": 10.0, \"passed\": true}, {\"check\": \"normal control 1\", \"actual\": 0.0, \"expected\": 0.0, \"passed\": true}, {\"check\": \"normal control 2\", \"actual\": 5.0, \"expected\": 5.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."}}