{"abstract":"Assigned short puts deliver shares they should receive.","category":"Options payoff and settlement","checks":8,"contract":"Inputs kind C/P, strike, signed contracts (+long exercised, -short assigned), deliverable shares per contract and whether exercise happened. Long calls and short puts receive shares and pay strike*shares; long puts and short calls deliver shares and receive strike*shares. Return [share delta, cash delta] (cash in currency, computed in cents); unexercised returns [0, 0.0].","evaluation_group":"w2-options_payoff_and_settlement-physical-delivery","failed_approach":"Guarding the inversion by puts instead moves the error to short calls.","family":"w2-options_payoff_and_settlement-physical-delivery-assignment-inversion","id":"FA-61371","implementations":{"attempt":{"sha256":"a99cbbfd98ac3d7525af52d7d87ed5a9c15a1d98824e2daa891313e97f28fce0","source":"\"\"\"Failure Map reference implementation. Python standard library only.\"\"\"\nimport json\n\nN = 1\nobservations = []\ndef solve(kind, strike, contracts, deliverable, exercised):\n    if not exercised:\n        return [0, 0.0]\n    n = abs(contracts) * deliverable\n    k = round(strike * 100)\n    direction = 1 if kind == 'C' else -1\n    if contracts < 0 and kind == 'P':\n        direction = -direction\n    shares = direction * n\n    cash = -direction * n * k\n    return [shares, cash / 100]\ndef check(label, actual, expected):\n    observations.append({\"check\": label, \"actual\": actual, \"expected\": expected, \"passed\": actual == expected})\nfixtures = [[['regression assignment inversion 1', ['P', 101.25, -3, 100, True], [300, -30375.0]], ['regression assignment inversion 2', ['P', 42.5, -3, 100, True], [300, -12750.0]], ['partial repair probe 1', ['C', 42.5, -3, 150, True], [-450, 19125.0]], ['partial repair probe 2', ['C', 250, -3, 133, True], [-399, 99750.0]], ['boundary control 1', ['C', 50, 1, 100, False], [0, 0.0]], ['boundary control 2', ['C', 50, 1, 100, True], [100, -5000.0]], ['normal control 1', ['C', 250, 1, 100, True], [100, -25000.0]], ['normal control 2', ['P', 42.5, 1, 50, True], [-50, 2125.0]]], [['regression assignment inversion 1', ['P', 250, -1, 133, True], [133, -33250.0]], ['regression assignment inversion 2', ['P', 101.25, -1, 100, True], [100, -10125.0]], ['partial repair probe 1', ['C', 101.25, -3, 150, True], [-450, 45562.5]], ['partial repair probe 2', ['C', 250, -1, 100, True], [-100, 25000.0]], ['boundary control 1', ['C', 50, 1, 100, False], [0, 0.0]], ['boundary control 2', ['C', 50, 1, 100, True], [100, -5000.0]], ['normal control 1', ['C', 10, 5, 100, True], [500, -5000.0]], ['normal control 2', ['C', 101.25, -3, 100, False], [0, 0.0]]], [['regression assignment inversion 1', ['P', 10, -1, 50, True], [50, -500.0]], ['regression assignment inversion 2', ['P', 42.5, -1, 150, True], [150, -6375.0]], ['partial repair probe 1', ['C', 101.25, -1, 150, True], [-150, 15187.5]], ['partial repair probe 2', ['C', 101.25, -1, 50, True], [-50, 5062.5]], ['boundary control 1', ['C', 50, 1, 100, True], [100, -5000.0]], ['boundary control 2', ['C', 50, 1, 100, False], [0, 0.0]], ['normal control 1', ['P', 10, 2, 150, True], [-300, 3000.0]], ['normal control 2', ['C', 101.25, 2, 50, False], [0, 0.0]]], [['regression assignment inversion 1', ['P', 42.5, -3, 50, True], [150, -6375.0]], ['regression assignment inversion 2', ['P', 10, -1, 50, True], [50, -500.0]], ['partial repair probe 1', ['C', 42.5, -3, 100, True], [-300, 12750.0]], ['partial repair probe 2', ['C', 250, -1, 150, True], [-150, 37500.0]], ['boundary control 1', ['C', 50, 1, 100, True], [100, -5000.0]], ['boundary control 2', ['C', 50, 1, 100, False], [0, 0.0]], ['normal control 1', ['C', 250, 5, 100, True], [500, -125000.0]], ['normal control 2', ['P', 10, 5, 100, True], [-500, 5000.0]]], [['regression assignment inversion 1', ['P', 42.5, -1, 50, True], [50, -2125.0]], ['regression assignment inversion 2', ['P', 10, -1, 150, True], [150, -1500.0]], ['partial repair probe 1', ['C', 101.25, -1, 50, True], [-50, 5062.5]], ['partial repair probe 2', ['C', 42.5, -1, 100, True], [-100, 4250.0]], ['boundary control 1', ['C', 50, 1, 100, True], [100, -5000.0]], ['boundary control 2', ['C', 50, 1, 100, False], [0, 0.0]], ['normal control 1', ['C', 250, 2, 133, True], [266, -66500.0]], ['normal control 2', ['C', 10, 5, 100, True], [500, -5000.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":"f29a1e2218dee9b43a8f7928a29e0caa46f16b2b8db3584418ee060853a99d19","source":"\"\"\"Failure Map reference implementation. Python standard library only.\"\"\"\nimport json\n\nN = 1\nobservations = []\ndef solve(kind, strike, contracts, deliverable, exercised):\n    if not exercised:\n        return [0, 0.0]\n    n = abs(contracts) * deliverable\n    k = round(strike * 100)\n    direction = 1 if kind == 'C' else -1\n    if contracts < 0 and kind == 'C':\n        direction = -direction\n    shares = direction * n\n    cash = -direction * n * k\n    return [shares, cash / 100]\ndef check(label, actual, expected):\n    observations.append({\"check\": label, \"actual\": actual, \"expected\": expected, \"passed\": actual == expected})\nfixtures = [[['regression assignment inversion 1', ['P', 101.25, -3, 100, True], [300, -30375.0]], ['regression assignment inversion 2', ['P', 42.5, -3, 100, True], [300, -12750.0]], ['partial repair probe 1', ['C', 42.5, -3, 150, True], [-450, 19125.0]], ['partial repair probe 2', ['C', 250, -3, 133, True], [-399, 99750.0]], ['boundary control 1', ['C', 50, 1, 100, False], [0, 0.0]], ['boundary control 2', ['C', 50, 1, 100, True], [100, -5000.0]], ['normal control 1', ['C', 250, 1, 100, True], [100, -25000.0]], ['normal control 2', ['P', 42.5, 1, 50, True], [-50, 2125.0]]], [['regression assignment inversion 1', ['P', 250, -1, 133, True], [133, -33250.0]], ['regression assignment inversion 2', ['P', 101.25, -1, 100, True], [100, -10125.0]], ['partial repair probe 1', ['C', 101.25, -3, 150, True], [-450, 45562.5]], ['partial repair probe 2', ['C', 250, -1, 100, True], [-100, 25000.0]], ['boundary control 1', ['C', 50, 1, 100, False], [0, 0.0]], ['boundary control 2', ['C', 50, 1, 100, True], [100, -5000.0]], ['normal control 1', ['C', 10, 5, 100, True], [500, -5000.0]], ['normal control 2', ['C', 101.25, -3, 100, False], [0, 0.0]]], [['regression assignment inversion 1', ['P', 10, -1, 50, True], [50, -500.0]], ['regression assignment inversion 2', ['P', 42.5, -1, 150, True], [150, -6375.0]], ['partial repair probe 1', ['C', 101.25, -1, 150, True], [-150, 15187.5]], ['partial repair probe 2', ['C', 101.25, -1, 50, True], [-50, 5062.5]], ['boundary control 1', ['C', 50, 1, 100, True], [100, -5000.0]], ['boundary control 2', ['C', 50, 1, 100, False], [0, 0.0]], ['normal control 1', ['P', 10, 2, 150, True], [-300, 3000.0]], ['normal control 2', ['C', 101.25, 2, 50, False], [0, 0.0]]], [['regression assignment inversion 1', ['P', 42.5, -3, 50, True], [150, -6375.0]], ['regression assignment inversion 2', ['P', 10, -1, 50, True], [50, -500.0]], ['partial repair probe 1', ['C', 42.5, -3, 100, True], [-300, 12750.0]], ['partial repair probe 2', ['C', 250, -1, 150, True], [-150, 37500.0]], ['boundary control 1', ['C', 50, 1, 100, True], [100, -5000.0]], ['boundary control 2', ['C', 50, 1, 100, False], [0, 0.0]], ['normal control 1', ['C', 250, 5, 100, True], [500, -125000.0]], ['normal control 2', ['P', 10, 5, 100, True], [-500, 5000.0]]], [['regression assignment inversion 1', ['P', 42.5, -1, 50, True], [50, -2125.0]], ['regression assignment inversion 2', ['P', 10, -1, 150, True], [150, -1500.0]], ['partial repair probe 1', ['C', 101.25, -1, 50, True], [-50, 5062.5]], ['partial repair probe 2', ['C', 42.5, -1, 100, True], [-100, 4250.0]], ['boundary control 1', ['C', 50, 1, 100, True], [100, -5000.0]], ['boundary control 2', ['C', 50, 1, 100, False], [0, 0.0]], ['normal control 1', ['C', 250, 2, 133, True], [266, -66500.0]], ['normal control 2', ['C', 10, 5, 100, True], [500, -5000.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":"a92d2c99cb1d3a3511acb3a8761c8d17c722905379f937573e5e91b99381bd8c","source":"\"\"\"Failure Map reference implementation. Python standard library only.\"\"\"\nimport json\n\nN = 1\nobservations = []\ndef solve(kind, strike, contracts, deliverable, exercised):\n    if not exercised:\n        return [0, 0.0]\n    n = abs(contracts) * deliverable\n    k = round(strike * 100)\n    direction = 1 if kind == 'C' else -1\n    if contracts < 0:\n        direction = -direction\n    shares = direction * n\n    cash = -direction * n * k\n    return [shares, cash / 100]\ndef check(label, actual, expected):\n    observations.append({\"check\": label, \"actual\": actual, \"expected\": expected, \"passed\": actual == expected})\nfixtures = [[['regression assignment inversion 1', ['P', 101.25, -3, 100, True], [300, -30375.0]], ['regression assignment inversion 2', ['P', 42.5, -3, 100, True], [300, -12750.0]], ['partial repair probe 1', ['C', 42.5, -3, 150, True], [-450, 19125.0]], ['partial repair probe 2', ['C', 250, -3, 133, True], [-399, 99750.0]], ['boundary control 1', ['C', 50, 1, 100, False], [0, 0.0]], ['boundary control 2', ['C', 50, 1, 100, True], [100, -5000.0]], ['normal control 1', ['C', 250, 1, 100, True], [100, -25000.0]], ['normal control 2', ['P', 42.5, 1, 50, True], [-50, 2125.0]]], [['regression assignment inversion 1', ['P', 250, -1, 133, True], [133, -33250.0]], ['regression assignment inversion 2', ['P', 101.25, -1, 100, True], [100, -10125.0]], ['partial repair probe 1', ['C', 101.25, -3, 150, True], [-450, 45562.5]], ['partial repair probe 2', ['C', 250, -1, 100, True], [-100, 25000.0]], ['boundary control 1', ['C', 50, 1, 100, False], [0, 0.0]], ['boundary control 2', ['C', 50, 1, 100, True], [100, -5000.0]], ['normal control 1', ['C', 10, 5, 100, True], [500, -5000.0]], ['normal control 2', ['C', 101.25, -3, 100, False], [0, 0.0]]], [['regression assignment inversion 1', ['P', 10, -1, 50, True], [50, -500.0]], ['regression assignment inversion 2', ['P', 42.5, -1, 150, True], [150, -6375.0]], ['partial repair probe 1', ['C', 101.25, -1, 150, True], [-150, 15187.5]], ['partial repair probe 2', ['C', 101.25, -1, 50, True], [-50, 5062.5]], ['boundary control 1', ['C', 50, 1, 100, True], [100, -5000.0]], ['boundary control 2', ['C', 50, 1, 100, False], [0, 0.0]], ['normal control 1', ['P', 10, 2, 150, True], [-300, 3000.0]], ['normal control 2', ['C', 101.25, 2, 50, False], [0, 0.0]]], [['regression assignment inversion 1', ['P', 42.5, -3, 50, True], [150, -6375.0]], ['regression assignment inversion 2', ['P', 10, -1, 50, True], [50, -500.0]], ['partial repair probe 1', ['C', 42.5, -3, 100, True], [-300, 12750.0]], ['partial repair probe 2', ['C', 250, -1, 150, True], [-150, 37500.0]], ['boundary control 1', ['C', 50, 1, 100, True], [100, -5000.0]], ['boundary control 2', ['C', 50, 1, 100, False], [0, 0.0]], ['normal control 1', ['C', 250, 5, 100, True], [500, -125000.0]], ['normal control 2', ['P', 10, 5, 100, True], [-500, 5000.0]]], [['regression assignment inversion 1', ['P', 42.5, -1, 50, True], [50, -2125.0]], ['regression assignment inversion 2', ['P', 10, -1, 150, True], [150, -1500.0]], ['partial repair probe 1', ['C', 101.25, -1, 50, True], [-50, 5062.5]], ['partial repair probe 2', ['C', 42.5, -1, 100, True], [-100, 4250.0]], ['boundary control 1', ['C', 50, 1, 100, True], [100, -5000.0]], ['boundary control 2', ['C', 50, 1, 100, False], [0, 0.0]], ['normal control 1', ['C', 250, 2, 133, True], [266, -66500.0]], ['normal control 2', ['C', 10, 5, 100, True], [500, -5000.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-physical-delivery-assignment-inversion","generated_at":"2026-09-29T14:46:54.601639+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":"Invert the direction for every assigned short position.","root_cause":"The inversion for assigned shorts is guarded by kind == C.","sha256":"cc4ce92f3d4573ea05636a8a9936dc4851b50c59301a57b0871d2195d6dfddec","title":"Physical delivery on exercise and assignment: the short-side inversion is applied only to calls · case 01","variant":1,"variant_policy":"Five numbered records share a model and may reuse boundary fixtures.","verification":{"attempt":{"elapsed_ms":38.07,"exit_code":1,"observations":[{"actual":[300,-30375.0],"check":"regression assignment inversion 1","expected":[300,-30375.0],"passed":true},{"actual":[300,-12750.0],"check":"regression assignment inversion 2","expected":[300,-12750.0],"passed":true},{"actual":[450,-19125.0],"check":"partial repair probe 1","expected":[-450,19125.0],"passed":false},{"actual":[399,-99750.0],"check":"partial repair probe 2","expected":[-399,99750.0],"passed":false},{"actual":[0,0.0],"check":"boundary control 1","expected":[0,0.0],"passed":true},{"actual":[100,-5000.0],"check":"boundary control 2","expected":[100,-5000.0],"passed":true},{"actual":[100,-25000.0],"check":"normal control 1","expected":[100,-25000.0],"passed":true},{"actual":[-50,2125.0],"check":"normal control 2","expected":[-50,2125.0],"passed":true}],"passed":false,"stderr":"","stdout":"{\"observations\": [{\"check\": \"regression assignment inversion 1\", \"actual\": [300, -30375.0], \"expected\": [300, -30375.0], \"passed\": true}, {\"check\": \"regression assignment inversion 2\", \"actual\": [300, -12750.0], \"expected\": [300, -12750.0], \"passed\": true}, {\"check\": \"partial repair probe 1\", \"actual\": [450, -19125.0], \"expected\": [-450, 19125.0], \"passed\": false}, {\"check\": \"partial repair probe 2\", \"actual\": [399, -99750.0], \"expected\": [-399, 99750.0], \"passed\": false}, {\"check\": \"boundary control 1\", \"actual\": [0, 0.0], \"expected\": [0, 0.0], \"passed\": true}, {\"check\": \"boundary control 2\", \"actual\": [100, -5000.0], \"expected\": [100, -5000.0], \"passed\": true}, {\"check\": \"normal control 1\", \"actual\": [100, -25000.0], \"expected\": [100, -25000.0], \"passed\": true}, {\"check\": \"normal control 2\", \"actual\": [-50, 2125.0], \"expected\": [-50, 2125.0], \"passed\": true}], \"passed\": false}\n"},"broken":{"elapsed_ms":42.199,"exit_code":1,"observations":[{"actual":[-300,30375.0],"check":"regression assignment inversion 1","expected":[300,-30375.0],"passed":false},{"actual":[-300,12750.0],"check":"regression assignment inversion 2","expected":[300,-12750.0],"passed":false},{"actual":[-450,19125.0],"check":"partial repair probe 1","expected":[-450,19125.0],"passed":true},{"actual":[-399,99750.0],"check":"partial repair probe 2","expected":[-399,99750.0],"passed":true},{"actual":[0,0.0],"check":"boundary control 1","expected":[0,0.0],"passed":true},{"actual":[100,-5000.0],"check":"boundary control 2","expected":[100,-5000.0],"passed":true},{"actual":[100,-25000.0],"check":"normal control 1","expected":[100,-25000.0],"passed":true},{"actual":[-50,2125.0],"check":"normal control 2","expected":[-50,2125.0],"passed":true}],"passed":false,"stderr":"","stdout":"{\"observations\": [{\"check\": \"regression assignment inversion 1\", \"actual\": [-300, 30375.0], \"expected\": [300, -30375.0], \"passed\": false}, {\"check\": \"regression assignment inversion 2\", \"actual\": [-300, 12750.0], \"expected\": [300, -12750.0], \"passed\": false}, {\"check\": \"partial repair probe 1\", \"actual\": [-450, 19125.0], \"expected\": [-450, 19125.0], \"passed\": true}, {\"check\": \"partial repair probe 2\", \"actual\": [-399, 99750.0], \"expected\": [-399, 99750.0], \"passed\": true}, {\"check\": \"boundary control 1\", \"actual\": [0, 0.0], \"expected\": [0, 0.0], \"passed\": true}, {\"check\": \"boundary control 2\", \"actual\": [100, -5000.0], \"expected\": [100, -5000.0], \"passed\": true}, {\"check\": \"normal control 1\", \"actual\": [100, -25000.0], \"expected\": [100, -25000.0], \"passed\": true}, {\"check\": \"normal control 2\", \"actual\": [-50, 2125.0], \"expected\": [-50, 2125.0], \"passed\": true}], \"passed\": false}\n"},"fixed":{"elapsed_ms":38.925,"exit_code":0,"observations":[{"actual":[300,-30375.0],"check":"regression assignment inversion 1","expected":[300,-30375.0],"passed":true},{"actual":[300,-12750.0],"check":"regression assignment inversion 2","expected":[300,-12750.0],"passed":true},{"actual":[-450,19125.0],"check":"partial repair probe 1","expected":[-450,19125.0],"passed":true},{"actual":[-399,99750.0],"check":"partial repair probe 2","expected":[-399,99750.0],"passed":true},{"actual":[0,0.0],"check":"boundary control 1","expected":[0,0.0],"passed":true},{"actual":[100,-5000.0],"check":"boundary control 2","expected":[100,-5000.0],"passed":true},{"actual":[100,-25000.0],"check":"normal control 1","expected":[100,-25000.0],"passed":true},{"actual":[-50,2125.0],"check":"normal control 2","expected":[-50,2125.0],"passed":true}],"passed":true,"stderr":"","stdout":"{\"observations\": [{\"check\": \"regression assignment inversion 1\", \"actual\": [300, -30375.0], \"expected\": [300, -30375.0], \"passed\": true}, {\"check\": \"regression assignment inversion 2\", \"actual\": [300, -12750.0], \"expected\": [300, -12750.0], \"passed\": true}, {\"check\": \"partial repair probe 1\", \"actual\": [-450, 19125.0], \"expected\": [-450, 19125.0], \"passed\": true}, {\"check\": \"partial repair probe 2\", \"actual\": [-399, 99750.0], \"expected\": [-399, 99750.0], \"passed\": true}, {\"check\": \"boundary control 1\", \"actual\": [0, 0.0], \"expected\": [0, 0.0], \"passed\": true}, {\"check\": \"boundary control 2\", \"actual\": [100, -5000.0], \"expected\": [100, -5000.0], \"passed\": true}, {\"check\": \"normal control 1\", \"actual\": [100, -25000.0], \"expected\": [100, -25000.0], \"passed\": true}, {\"check\": \"normal control 2\", \"actual\": [-50, 2125.0], \"expected\": [-50, 2125.0], \"passed\": true}], \"passed\": true}\n"}},"verified":true,"visibility":"public"}