{"abstract":"Digital puts pay when the underlying rises.","category":"Options payoff and settlement","checks":8,"contract":"Inputs kind (cash-call, cash-put, asset-call, asset-put), strike, final price and cash amount. Calls are in the money when final > strike, puts when final < strike; at final == strike both pay half. Cash-or-nothing pays the cash amount, asset-or-nothing pays the final price, times the state (1, 0.5 or 0). Round to 6.","evaluation_group":"w2-options_payoff_and_settlement-digital-options","failed_approach":"Flipping the comparison but dropping the half-payment case still fails at the strike.","family":"w2-options_payoff_and_settlement-digital-options-put-moneyness","id":"FA-61471","implementations":{"attempt":{"sha256":"0c87146c9ef2540d0f685447b7024045bb96ce0f7a7969b5a7df23b5830d6042","source":"\"\"\"Failure Map reference implementation. Python standard library only.\"\"\"\nimport json\n\nN = 1\nobservations = []\ndef solve(kind, strike, final, cash_amount):\n    if kind.split('-')[1] == 'call':\n        state = 1 if final > strike else (0.5 if final == strike else 0)\n    else:\n        state = 1 if final < strike else 0\n    unit = cash_amount if kind.startswith('cash') else final\n    return round(unit * state, 6)\ndef check(label, actual, expected):\n    observations.append({\"check\": label, \"actual\": actual, \"expected\": expected, \"passed\": actual == expected})\nfixtures = [[['regression put moneyness 1', ['cash-put', 105, 104.5, 10], 10], ['regression put moneyness 2', ['cash-put', 100, 100.5, 100], 0], ['partial repair probe 1', ['cash-put', 95, 95, 1000], 500.0], ['partial repair probe 2', ['cash-put', 95, 95, 10], 5.0], ['boundary control 1', ['cash-call', 100, 100, 10], 5.0], ['normal control 1', ['asset-call', 100, 100.5, 10], 100.5], ['normal control 2', ['asset-call', 100, 99.5, 1000], 0.0], ['normal control 3', ['cash-call', 105, 105, 1000], 500.0]], [['regression put moneyness 1', ['asset-put', 95, 95.5, 10], 0.0], ['regression put moneyness 2', ['asset-put', 105, 104.5, 10], 104.5], ['partial repair probe 1', ['asset-put', 100, 100, 1000], 50.0], ['partial repair probe 2', ['asset-put', 100, 100, 100], 50.0], ['boundary control 1', ['cash-call', 100, 100, 10], 5.0], ['normal control 1', ['cash-call', 95, 95.5, 1000], 1000], ['normal control 2', ['cash-call', 100, 88, 1000], 0], ['normal control 3', ['asset-call', 105, 105.5, 10], 105.5]], [['regression put moneyness 1', ['asset-put', 100, 100.5, 1000], 0.0], ['regression put moneyness 2', ['asset-put', 95, 94.5, 100], 94.5], ['partial repair probe 1', ['cash-put', 100, 100, 1000], 500.0], ['partial repair probe 2', ['cash-put', 95, 95, 100], 50.0], ['boundary control 1', ['cash-call', 100, 100, 10], 5.0], ['normal control 1', ['asset-call', 100, 100.5, 1000], 100.5], ['normal control 2', ['asset-call', 105, 104.5, 100], 0.0], ['normal control 3', ['asset-call', 100, 100, 10], 50.0]], [['regression put moneyness 1', ['asset-put', 100, 107, 1000], 0], ['regression put moneyness 2', ['asset-put', 95, 102, 10], 0], ['partial repair probe 1', ['cash-put', 105, 105, 1000], 500.0], ['partial repair probe 2', ['asset-put', 95, 95, 100], 47.5], ['boundary control 1', ['cash-call', 100, 100, 10], 5.0], ['normal control 1', ['cash-call', 105, 93, 100], 0], ['normal control 2', ['cash-call', 100, 88, 10], 0], ['normal control 3', ['cash-call', 100, 107, 1000], 1000]], [['regression put moneyness 1', ['asset-put', 100, 100.5, 100], 0.0], ['regression put moneyness 2', ['cash-put', 105, 112, 100], 0], ['partial repair probe 1', ['asset-put', 100, 100, 10], 50.0], ['partial repair probe 2', ['cash-put', 105, 105, 10], 5.0], ['boundary control 1', ['cash-call', 100, 100, 10], 5.0], ['normal control 1', ['cash-call', 105, 105, 1000], 500.0], ['normal control 2', ['cash-call', 100, 99.5, 10], 0], ['normal control 3', ['asset-call', 105, 93, 1000], 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":"8068db6c351668f33d9a9d07a50a3ffb035f0a2b6ad668e8e912f23a1b4412ea","source":"\"\"\"Failure Map reference implementation. Python standard library only.\"\"\"\nimport json\n\nN = 1\nobservations = []\ndef solve(kind, strike, final, cash_amount):\n    if kind.split('-')[1] == 'call':\n        state = 1 if final > strike else (0.5 if final == strike else 0)\n    else:\n        state = 1 if final > strike else (0.5 if final == strike else 0)\n    unit = cash_amount if kind.startswith('cash') else final\n    return round(unit * state, 6)\ndef check(label, actual, expected):\n    observations.append({\"check\": label, \"actual\": actual, \"expected\": expected, \"passed\": actual == expected})\nfixtures = [[['regression put moneyness 1', ['cash-put', 105, 104.5, 10], 10], ['regression put moneyness 2', ['cash-put', 100, 100.5, 100], 0], ['partial repair probe 1', ['cash-put', 95, 95, 1000], 500.0], ['partial repair probe 2', ['cash-put', 95, 95, 10], 5.0], ['boundary control 1', ['cash-call', 100, 100, 10], 5.0], ['normal control 1', ['asset-call', 100, 100.5, 10], 100.5], ['normal control 2', ['asset-call', 100, 99.5, 1000], 0.0], ['normal control 3', ['cash-call', 105, 105, 1000], 500.0]], [['regression put moneyness 1', ['asset-put', 95, 95.5, 10], 0.0], ['regression put moneyness 2', ['asset-put', 105, 104.5, 10], 104.5], ['partial repair probe 1', ['asset-put', 100, 100, 1000], 50.0], ['partial repair probe 2', ['asset-put', 100, 100, 100], 50.0], ['boundary control 1', ['cash-call', 100, 100, 10], 5.0], ['normal control 1', ['cash-call', 95, 95.5, 1000], 1000], ['normal control 2', ['cash-call', 100, 88, 1000], 0], ['normal control 3', ['asset-call', 105, 105.5, 10], 105.5]], [['regression put moneyness 1', ['asset-put', 100, 100.5, 1000], 0.0], ['regression put moneyness 2', ['asset-put', 95, 94.5, 100], 94.5], ['partial repair probe 1', ['cash-put', 100, 100, 1000], 500.0], ['partial repair probe 2', ['cash-put', 95, 95, 100], 50.0], ['boundary control 1', ['cash-call', 100, 100, 10], 5.0], ['normal control 1', ['asset-call', 100, 100.5, 1000], 100.5], ['normal control 2', ['asset-call', 105, 104.5, 100], 0.0], ['normal control 3', ['asset-call', 100, 100, 10], 50.0]], [['regression put moneyness 1', ['asset-put', 100, 107, 1000], 0], ['regression put moneyness 2', ['asset-put', 95, 102, 10], 0], ['partial repair probe 1', ['cash-put', 105, 105, 1000], 500.0], ['partial repair probe 2', ['asset-put', 95, 95, 100], 47.5], ['boundary control 1', ['cash-call', 100, 100, 10], 5.0], ['normal control 1', ['cash-call', 105, 93, 100], 0], ['normal control 2', ['cash-call', 100, 88, 10], 0], ['normal control 3', ['cash-call', 100, 107, 1000], 1000]], [['regression put moneyness 1', ['asset-put', 100, 100.5, 100], 0.0], ['regression put moneyness 2', ['cash-put', 105, 112, 100], 0], ['partial repair probe 1', ['asset-put', 100, 100, 10], 50.0], ['partial repair probe 2', ['cash-put', 105, 105, 10], 5.0], ['boundary control 1', ['cash-call', 100, 100, 10], 5.0], ['normal control 1', ['cash-call', 105, 105, 1000], 500.0], ['normal control 2', ['cash-call', 100, 99.5, 10], 0], ['normal control 3', ['asset-call', 105, 93, 1000], 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"},"fixed":{"sha256":"dbcc59b69990c007ac41162bbe7bc693d2edc1d5ddabc9bedd2d3dc48fcd2de2","source":"\"\"\"Failure Map reference implementation. Python standard library only.\"\"\"\nimport json\n\nN = 1\nobservations = []\ndef solve(kind, strike, final, cash_amount):\n    if kind.split('-')[1] == 'call':\n        state = 1 if final > strike else (0.5 if final == strike else 0)\n    else:\n        state = 1 if final < strike else (0.5 if final == strike else 0)\n    unit = cash_amount if kind.startswith('cash') else final\n    return round(unit * state, 6)\ndef check(label, actual, expected):\n    observations.append({\"check\": label, \"actual\": actual, \"expected\": expected, \"passed\": actual == expected})\nfixtures = [[['regression put moneyness 1', ['cash-put', 105, 104.5, 10], 10], ['regression put moneyness 2', ['cash-put', 100, 100.5, 100], 0], ['partial repair probe 1', ['cash-put', 95, 95, 1000], 500.0], ['partial repair probe 2', ['cash-put', 95, 95, 10], 5.0], ['boundary control 1', ['cash-call', 100, 100, 10], 5.0], ['normal control 1', ['asset-call', 100, 100.5, 10], 100.5], ['normal control 2', ['asset-call', 100, 99.5, 1000], 0.0], ['normal control 3', ['cash-call', 105, 105, 1000], 500.0]], [['regression put moneyness 1', ['asset-put', 95, 95.5, 10], 0.0], ['regression put moneyness 2', ['asset-put', 105, 104.5, 10], 104.5], ['partial repair probe 1', ['asset-put', 100, 100, 1000], 50.0], ['partial repair probe 2', ['asset-put', 100, 100, 100], 50.0], ['boundary control 1', ['cash-call', 100, 100, 10], 5.0], ['normal control 1', ['cash-call', 95, 95.5, 1000], 1000], ['normal control 2', ['cash-call', 100, 88, 1000], 0], ['normal control 3', ['asset-call', 105, 105.5, 10], 105.5]], [['regression put moneyness 1', ['asset-put', 100, 100.5, 1000], 0.0], ['regression put moneyness 2', ['asset-put', 95, 94.5, 100], 94.5], ['partial repair probe 1', ['cash-put', 100, 100, 1000], 500.0], ['partial repair probe 2', ['cash-put', 95, 95, 100], 50.0], ['boundary control 1', ['cash-call', 100, 100, 10], 5.0], ['normal control 1', ['asset-call', 100, 100.5, 1000], 100.5], ['normal control 2', ['asset-call', 105, 104.5, 100], 0.0], ['normal control 3', ['asset-call', 100, 100, 10], 50.0]], [['regression put moneyness 1', ['asset-put', 100, 107, 1000], 0], ['regression put moneyness 2', ['asset-put', 95, 102, 10], 0], ['partial repair probe 1', ['cash-put', 105, 105, 1000], 500.0], ['partial repair probe 2', ['asset-put', 95, 95, 100], 47.5], ['boundary control 1', ['cash-call', 100, 100, 10], 5.0], ['normal control 1', ['cash-call', 105, 93, 100], 0], ['normal control 2', ['cash-call', 100, 88, 10], 0], ['normal control 3', ['cash-call', 100, 107, 1000], 1000]], [['regression put moneyness 1', ['asset-put', 100, 100.5, 100], 0.0], ['regression put moneyness 2', ['cash-put', 105, 112, 100], 0], ['partial repair probe 1', ['asset-put', 100, 100, 10], 50.0], ['partial repair probe 2', ['cash-put', 105, 105, 10], 5.0], ['boundary control 1', ['cash-call', 100, 100, 10], 5.0], ['normal control 1', ['cash-call', 105, 105, 1000], 500.0], ['normal control 2', ['cash-call', 100, 99.5, 10], 0], ['normal control 3', ['asset-call', 105, 93, 1000], 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-digital-options-put-moneyness","generated_at":"2026-09-29T14:46:55.493581+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.","repair":"Puts are in the money when final < strike.","root_cause":"The put branch reuses the call comparison.","sha256":"b4bc40ea1745571d4a7a230ef07c955a0ca077e6f7efcc09044a6f6d1e50e510","title":"Binary option settlement with an at-strike rule: puts are in the money above the strike · case 01","variant":1,"variant_policy":"Five numbered records share a model and may reuse boundary fixtures.","verification":{"attempt":{"elapsed_ms":38.784,"exit_code":1,"observations":[{"actual":10,"check":"regression put moneyness 1","expected":10,"passed":true},{"actual":0,"check":"regression put moneyness 2","expected":0,"passed":true},{"actual":0,"check":"partial repair probe 1","expected":500.0,"passed":false},{"actual":0,"check":"partial repair probe 2","expected":5.0,"passed":false},{"actual":5.0,"check":"boundary control 1","expected":5.0,"passed":true},{"actual":100.5,"check":"normal control 1","expected":100.5,"passed":true},{"actual":0.0,"check":"normal control 2","expected":0.0,"passed":true},{"actual":500.0,"check":"normal control 3","expected":500.0,"passed":true}],"passed":false,"stderr":"","stdout":"{\"observations\": [{\"check\": \"regression put moneyness 1\", \"actual\": 10, \"expected\": 10, \"passed\": true}, {\"check\": \"regression put moneyness 2\", \"actual\": 0, \"expected\": 0, \"passed\": true}, {\"check\": \"partial repair probe 1\", \"actual\": 0, \"expected\": 500.0, \"passed\": false}, {\"check\": \"partial repair probe 2\", \"actual\": 0, \"expected\": 5.0, \"passed\": false}, {\"check\": \"boundary control 1\", \"actual\": 5.0, \"expected\": 5.0, \"passed\": true}, {\"check\": \"normal control 1\", \"actual\": 100.5, \"expected\": 100.5, \"passed\": true}, {\"check\": \"normal control 2\", \"actual\": 0.0, \"expected\": 0.0, \"passed\": true}, {\"check\": \"normal control 3\", \"actual\": 500.0, \"expected\": 500.0, \"passed\": true}], \"passed\": false}\n"},"broken":{"elapsed_ms":39.677,"exit_code":1,"observations":[{"actual":0,"check":"regression put moneyness 1","expected":10,"passed":false},{"actual":100,"check":"regression put moneyness 2","expected":0,"passed":false},{"actual":500.0,"check":"partial repair probe 1","expected":500.0,"passed":true},{"actual":5.0,"check":"partial repair probe 2","expected":5.0,"passed":true},{"actual":5.0,"check":"boundary control 1","expected":5.0,"passed":true},{"actual":100.5,"check":"normal control 1","expected":100.5,"passed":true},{"actual":0.0,"check":"normal control 2","expected":0.0,"passed":true},{"actual":500.0,"check":"normal control 3","expected":500.0,"passed":true}],"passed":false,"stderr":"","stdout":"{\"observations\": [{\"check\": \"regression put moneyness 1\", \"actual\": 0, \"expected\": 10, \"passed\": false}, {\"check\": \"regression put moneyness 2\", \"actual\": 100, \"expected\": 0, \"passed\": false}, {\"check\": \"partial repair probe 1\", \"actual\": 500.0, \"expected\": 500.0, \"passed\": true}, {\"check\": \"partial repair probe 2\", \"actual\": 5.0, \"expected\": 5.0, \"passed\": true}, {\"check\": \"boundary control 1\", \"actual\": 5.0, \"expected\": 5.0, \"passed\": true}, {\"check\": \"normal control 1\", \"actual\": 100.5, \"expected\": 100.5, \"passed\": true}, {\"check\": \"normal control 2\", \"actual\": 0.0, \"expected\": 0.0, \"passed\": true}, {\"check\": \"normal control 3\", \"actual\": 500.0, \"expected\": 500.0, \"passed\": true}], \"passed\": false}\n"},"fixed":{"elapsed_ms":40.167,"exit_code":0,"observations":[{"actual":10,"check":"regression put moneyness 1","expected":10,"passed":true},{"actual":0,"check":"regression put moneyness 2","expected":0,"passed":true},{"actual":500.0,"check":"partial repair probe 1","expected":500.0,"passed":true},{"actual":5.0,"check":"partial repair probe 2","expected":5.0,"passed":true},{"actual":5.0,"check":"boundary control 1","expected":5.0,"passed":true},{"actual":100.5,"check":"normal control 1","expected":100.5,"passed":true},{"actual":0.0,"check":"normal control 2","expected":0.0,"passed":true},{"actual":500.0,"check":"normal control 3","expected":500.0,"passed":true}],"passed":true,"stderr":"","stdout":"{\"observations\": [{\"check\": \"regression put moneyness 1\", \"actual\": 10, \"expected\": 10, \"passed\": true}, {\"check\": \"regression put moneyness 2\", \"actual\": 0, \"expected\": 0, \"passed\": true}, {\"check\": \"partial repair probe 1\", \"actual\": 500.0, \"expected\": 500.0, \"passed\": true}, {\"check\": \"partial repair probe 2\", \"actual\": 5.0, \"expected\": 5.0, \"passed\": true}, {\"check\": \"boundary control 1\", \"actual\": 5.0, \"expected\": 5.0, \"passed\": true}, {\"check\": \"normal control 1\", \"actual\": 100.5, \"expected\": 100.5, \"passed\": true}, {\"check\": \"normal control 2\", \"actual\": 0.0, \"expected\": 0.0, \"passed\": true}, {\"check\": \"normal control 3\", \"actual\": 500.0, \"expected\": 500.0, \"passed\": true}], \"passed\": true}\n"}},"verified":true,"visibility":"public"}