{"abstract":"The lattice does not recombine on the stated log grid.","category":"Options payoff and settlement","checks":8,"contract":"Inputs kind, spot S, strike K, rate r, volatility sigma, maturity T in years and steps. dt=T/steps, u=exp(sigma*sqrt(dt)), d=1/u, p=(exp(r*dt)-d)/(u-d), disc=exp(-r*dt). Roll back from terminal payoffs; at each node take max(continuation, immediate exercise at that node's price). Return the root rounded to 6.","contract_signature":"kind, S, K, r, sigma, T, steps","evaluation_group":"w2-options_payoff_and_settlement-crr-american","failed_approach":"Dropping the square root of dt in u mis-scales volatility.","family":"w2-options_payoff_and_settlement-crr-american-lattice-factors","id":"FA-61531","implementations":{"attempt":{"sha256":"d6c9422cda6d24d7a75010b2a16c152cabb00b2ee13d95b00dd95b19b0f5d7c3","source":"\"\"\"Failure Map reference implementation. Python standard library only.\"\"\"\nimport json\nimport math\nN = 1\nobservations = []\ndef solve(kind, S, K, r, sigma, T, steps):\n    dt = T / steps\n    u = math.exp(sigma * dt)\n    d = 1 / u\n    p = (math.exp(r * dt) - d) / (u - d)\n    disc = math.exp(-r * dt)\n    def pay(s):\n        return max(s - K, 0.0) if kind == 'C' else max(K - s, 0.0)\n    vals = [pay(S * u ** j * d ** (steps - j)) for j in range(steps + 1)]\n    for i in range(steps - 1, -1, -1):\n        vals = [max(disc * (p * vals[j + 1] + (1 - p) * vals[j]), pay(S * u ** j * d ** (i - j))) for j in range(i + 1)]\n    return round(vals[0], 6)\ndef check(label, actual, expected):\n    observations.append({\"check\": label, \"actual\": actual, \"expected\": expected, \"passed\": actual == expected})\nfixtures = [[['regression lattice factors 1', ['P', 110.0, 90.0, 0.08, 0.4, 2.0, 12], 9.247277], ['regression lattice factors 2', ['P', 80.0, 100.0, 0.0, 0.15, 0.25, 12], 20.0008], ['partial repair probe 1', ['C', 95.0, 105.0, 0.05, 0.4, 0.25, 5], 4.05722], ['partial repair probe 2', ['C', 95.0, 105.0, 0.0, 0.25, 0.25, 12], 1.544677], ['normal control 1', ['P', 80.0, 105.0, 0.01, 0.15, 0.25, 25], 25.0], ['normal control 2', ['P', 80.0, 100.0, 0.08, 0.15, 1.0, 5], 20.0], ['normal control 3', ['P', 80.0, 105.0, 0.08, 0.25, 1.0, 12], 25.0], ['normal control 4', ['C', 80.0, 105.0, 0.01, 0.15, 0.25, 5], 0.0]], [['regression lattice factors 1', ['C', 100.0, 105.0, 0.05, 0.4, 1.0, 12], 15.997965], ['regression lattice factors 2', ['C', 110.0, 90.0, 0.05, 0.4, 0.25, 25], 22.508919], ['partial repair probe 1', ['P', 110.0, 105.0, 0.08, 0.4, 2.0, 5], 15.892366], ['partial repair probe 2', ['C', 80.0, 90.0, 0.08, 0.25, 0.5, 5], 3.211596], ['normal control 1', ['P', 80.0, 100.0, 0.08, 0.25, 1.0, 5], 20.0], ['normal control 2', ['P', 80.0, 105.0, 0.01, 0.15, 0.25, 25], 25.0], ['normal control 3', ['P', 80.0, 100.0, 0.01, 0.15, 0.5, 5], 20.0], ['normal control 4', ['P', 110.0, 90.0, 0.05, 0.15, 0.25, 3], 0.0]], [['regression lattice factors 1', ['P', 110.0, 105.0, 0.01, 0.4, 0.25, 3], 6.698169], ['regression lattice factors 2', ['P', 110.0, 90.0, 0.0, 0.25, 2.0, 3], 5.203766], ['partial repair probe 1', ['P', 110.0, 90.0, 0.0, 0.4, 0.5, 3], 3.573892], ['partial repair probe 2', ['P', 110.0, 100.0, 0.0, 0.25, 0.5, 5], 3.300661], ['normal control 1', ['P', 80.0, 105.0, 0.01, 0.15, 0.25, 12], 25.0], ['normal control 2', ['P', 110.0, 90.0, 0.08, 0.15, 0.25, 3], 0.0], ['normal control 3', ['P', 95.0, 105.0, 0.08, 0.15, 0.25, 25], 10.0], ['normal control 4', ['P', 80.0, 100.0, 0.05, 0.15, 2.0, 25], 20.0]], [['regression lattice factors 1', ['P', 80.0, 100.0, 0.0, 0.15, 1.0, 3], 20.408789], ['regression lattice factors 2', ['C', 110.0, 100.0, 0.08, 0.15, 0.25, 5], 12.162574], ['partial repair probe 1', ['P', 95.0, 90.0, 0.08, 0.15, 1.0, 3], 1.733738], ['partial repair probe 2', ['P', 100.0, 100.0, 0.01, 0.25, 0.5, 3], 7.419406], ['normal control 1', ['C', 80.0, 105.0, 0.05, 0.15, 0.5, 3], 0.0], ['normal control 2', ['P', 95.0, 105.0, 0.08, 0.15, 0.5, 5], 10.0], ['normal control 3', ['P', 80.0, 100.0, 0.08, 0.25, 0.25, 25], 20.0], ['normal control 4', ['P', 80.0, 105.0, 0.0, 0.15, 0.25, 5], 25.0]], [['regression lattice factors 1', ['C', 80.0, 105.0, 0.05, 0.4, 1.0, 5], 6.543033], ['regression lattice factors 2', ['P', 110.0, 100.0, 0.08, 0.25, 1.0, 12], 4.097253], ['partial repair probe 1', ['C', 80.0, 105.0, 0.05, 0.25, 1.0, 3], 2.482907], ['partial repair probe 2', ['P', 110.0, 100.0, 0.0, 0.4, 0.25, 12], 4.313904], ['normal control 1', ['P', 80.0, 105.0, 0.05, 0.25, 1.0, 12], 25.0], ['normal control 2', ['P', 80.0, 105.0, 0.05, 0.25, 0.25, 3], 25.0], ['normal control 3', ['P', 80.0, 100.0, 0.0, 0.15, 0.5, 3], 20.0], ['normal control 4', ['P', 95.0, 105.0, 0.08, 0.15, 0.5, 3], 10.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":"01995bab27f1533e6d218db8299edc1d60e24759526a6a6768ee470c40aa5786","source":"\"\"\"Failure Map reference implementation. Python standard library only.\"\"\"\nimport json\nimport math\nN = 1\nobservations = []\ndef solve(kind, S, K, r, sigma, T, steps):\n    dt = T / steps\n    u = math.exp(sigma * math.sqrt(dt))\n    d = 1 - (u - 1)\n    p = (math.exp(r * dt) - d) / (u - d)\n    disc = math.exp(-r * dt)\n    def pay(s):\n        return max(s - K, 0.0) if kind == 'C' else max(K - s, 0.0)\n    vals = [pay(S * u ** j * d ** (steps - j)) for j in range(steps + 1)]\n    for i in range(steps - 1, -1, -1):\n        vals = [max(disc * (p * vals[j + 1] + (1 - p) * vals[j]), pay(S * u ** j * d ** (i - j))) for j in range(i + 1)]\n    return round(vals[0], 6)\ndef check(label, actual, expected):\n    observations.append({\"check\": label, \"actual\": actual, \"expected\": expected, \"passed\": actual == expected})\nfixtures = [[['regression lattice factors 1', ['P', 110.0, 90.0, 0.08, 0.4, 2.0, 12], 9.247277], ['regression lattice factors 2', ['P', 80.0, 100.0, 0.0, 0.15, 0.25, 12], 20.0008], ['partial repair probe 1', ['C', 95.0, 105.0, 0.05, 0.4, 0.25, 5], 4.05722], ['partial repair probe 2', ['C', 95.0, 105.0, 0.0, 0.25, 0.25, 12], 1.544677], ['normal control 1', ['P', 80.0, 105.0, 0.01, 0.15, 0.25, 25], 25.0], ['normal control 2', ['P', 80.0, 100.0, 0.08, 0.15, 1.0, 5], 20.0], ['normal control 3', ['P', 80.0, 105.0, 0.08, 0.25, 1.0, 12], 25.0], ['normal control 4', ['C', 80.0, 105.0, 0.01, 0.15, 0.25, 5], 0.0]], [['regression lattice factors 1', ['C', 100.0, 105.0, 0.05, 0.4, 1.0, 12], 15.997965], ['regression lattice factors 2', ['C', 110.0, 90.0, 0.05, 0.4, 0.25, 25], 22.508919], ['partial repair probe 1', ['P', 110.0, 105.0, 0.08, 0.4, 2.0, 5], 15.892366], ['partial repair probe 2', ['C', 80.0, 90.0, 0.08, 0.25, 0.5, 5], 3.211596], ['normal control 1', ['P', 80.0, 100.0, 0.08, 0.25, 1.0, 5], 20.0], ['normal control 2', ['P', 80.0, 105.0, 0.01, 0.15, 0.25, 25], 25.0], ['normal control 3', ['P', 80.0, 100.0, 0.01, 0.15, 0.5, 5], 20.0], ['normal control 4', ['P', 110.0, 90.0, 0.05, 0.15, 0.25, 3], 0.0]], [['regression lattice factors 1', ['P', 110.0, 105.0, 0.01, 0.4, 0.25, 3], 6.698169], ['regression lattice factors 2', ['P', 110.0, 90.0, 0.0, 0.25, 2.0, 3], 5.203766], ['partial repair probe 1', ['P', 110.0, 90.0, 0.0, 0.4, 0.5, 3], 3.573892], ['partial repair probe 2', ['P', 110.0, 100.0, 0.0, 0.25, 0.5, 5], 3.300661], ['normal control 1', ['P', 80.0, 105.0, 0.01, 0.15, 0.25, 12], 25.0], ['normal control 2', ['P', 110.0, 90.0, 0.08, 0.15, 0.25, 3], 0.0], ['normal control 3', ['P', 95.0, 105.0, 0.08, 0.15, 0.25, 25], 10.0], ['normal control 4', ['P', 80.0, 100.0, 0.05, 0.15, 2.0, 25], 20.0]], [['regression lattice factors 1', ['P', 80.0, 100.0, 0.0, 0.15, 1.0, 3], 20.408789], ['regression lattice factors 2', ['C', 110.0, 100.0, 0.08, 0.15, 0.25, 5], 12.162574], ['partial repair probe 1', ['P', 95.0, 90.0, 0.08, 0.15, 1.0, 3], 1.733738], ['partial repair probe 2', ['P', 100.0, 100.0, 0.01, 0.25, 0.5, 3], 7.419406], ['normal control 1', ['C', 80.0, 105.0, 0.05, 0.15, 0.5, 3], 0.0], ['normal control 2', ['P', 95.0, 105.0, 0.08, 0.15, 0.5, 5], 10.0], ['normal control 3', ['P', 80.0, 100.0, 0.08, 0.25, 0.25, 25], 20.0], ['normal control 4', ['P', 80.0, 105.0, 0.0, 0.15, 0.25, 5], 25.0]], [['regression lattice factors 1', ['C', 80.0, 105.0, 0.05, 0.4, 1.0, 5], 6.543033], ['regression lattice factors 2', ['P', 110.0, 100.0, 0.08, 0.25, 1.0, 12], 4.097253], ['partial repair probe 1', ['C', 80.0, 105.0, 0.05, 0.25, 1.0, 3], 2.482907], ['partial repair probe 2', ['P', 110.0, 100.0, 0.0, 0.4, 0.25, 12], 4.313904], ['normal control 1', ['P', 80.0, 105.0, 0.05, 0.25, 1.0, 12], 25.0], ['normal control 2', ['P', 80.0, 105.0, 0.05, 0.25, 0.25, 3], 25.0], ['normal control 3', ['P', 80.0, 100.0, 0.0, 0.15, 0.5, 3], 20.0], ['normal control 4', ['P', 95.0, 105.0, 0.08, 0.15, 0.5, 3], 10.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-crr-american-lattice-factors","generated_at":"2026-09-29T14:46:56.132503+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":"d = 1 - (u - 1) rather than 1/u.","sha256":"6b5714dd517855d1d53b3d3a72b28604f909ed0567cd26e88296dafb969d02ad","title":"Cox-Ross-Rubinstein American option tree: the down factor is arithmetic instead of reciprocal · 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.185,"exit_code":1,"observations":[{"actual":0.700798,"check":"regression lattice factors 1","expected":9.247277,"passed":false},{"actual":20.0,"check":"regression lattice factors 2","expected":20.0008,"passed":false},{"actual":0.0,"check":"partial repair probe 1","expected":4.05722,"passed":false},{"actual":0.0,"check":"partial repair probe 2","expected":1.544677,"passed":false},{"actual":25.0,"check":"normal control 1","expected":25.0,"passed":true},{"actual":20.0,"check":"normal control 2","expected":20.0,"passed":true},{"actual":25.0,"check":"normal control 3","expected":25.0,"passed":true},{"actual":0.0,"check":"normal control 4","expected":0.0,"passed":true}],"passed":false,"stderr":"","stdout":"{\"observations\": [{\"check\": \"regression lattice factors 1\", \"actual\": 0.700798, \"expected\": 9.247277, \"passed\": false}, {\"check\": \"regression lattice factors 2\", \"actual\": 20.0, \"expected\": 20.0008, \"passed\": false}, {\"check\": \"partial repair probe 1\", \"actual\": 0.0, \"expected\": 4.05722, \"passed\": false}, {\"check\": \"partial repair probe 2\", \"actual\": 0.0, \"expected\": 1.544677, \"passed\": false}, {\"check\": \"normal control 1\", \"actual\": 25.0, \"expected\": 25.0, \"passed\": true}, {\"check\": \"normal control 2\", \"actual\": 20.0, \"expected\": 20.0, \"passed\": true}, {\"check\": \"normal control 3\", \"actual\": 25.0, \"expected\": 25.0, \"passed\": true}, {\"check\": \"normal control 4\", \"actual\": 0.0, \"expected\": 0.0, \"passed\": true}], \"passed\": false}\n"},"broken":{"elapsed_ms":40.422,"exit_code":1,"observations":[{"actual":10.457243,"check":"regression lattice factors 1","expected":9.247277,"passed":false},{"actual":20.000912,"check":"regression lattice factors 2","expected":20.0008,"passed":false},{"actual":4.564153,"check":"partial repair probe 1","expected":4.05722,"passed":false},{"actual":1.620253,"check":"partial repair probe 2","expected":1.544677,"passed":false},{"actual":25.0,"check":"normal control 1","expected":25.0,"passed":true},{"actual":20.0,"check":"normal control 2","expected":20.0,"passed":true},{"actual":25.0,"check":"normal control 3","expected":25.0,"passed":true},{"actual":0.0,"check":"normal control 4","expected":0.0,"passed":true}],"passed":false,"stderr":"","stdout":"{\"observations\": [{\"check\": \"regression lattice factors 1\", \"actual\": 10.457243, \"expected\": 9.247277, \"passed\": false}, {\"check\": \"regression lattice factors 2\", \"actual\": 20.000912, \"expected\": 20.0008, \"passed\": false}, {\"check\": \"partial repair probe 1\", \"actual\": 4.564153, \"expected\": 4.05722, \"passed\": false}, {\"check\": \"partial repair probe 2\", \"actual\": 1.620253, \"expected\": 1.544677, \"passed\": false}, {\"check\": \"normal control 1\", \"actual\": 25.0, \"expected\": 25.0, \"passed\": true}, {\"check\": \"normal control 2\", \"actual\": 20.0, \"expected\": 20.0, \"passed\": true}, {\"check\": \"normal control 3\", \"actual\": 25.0, \"expected\": 25.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."}}