{"abstract":"Hedges are systematically under-sized.","category":"Options payoff and settlement","checks":8,"contract":"Inputs positions [kind, signed contracts, absolute delta], multiplier, lot size and existing shares. Put delta is negative. Exposure = sum(sign*delta*contracts*multiplier); target shares = -exposure; the order is target - existing, rounded to whole lots with halves away from zero. Return the signed share quantity.","contract_signature":"positions, multiplier, lot, existing","evaluation_group":"w2-options_payoff_and_settlement-delta-hedge-lots","failed_approach":"Python round() sends exact halves to even lots.","family":"w2-options_payoff_and_settlement-delta-hedge-lots-lot-rounding","id":"FA-61761","implementations":{"attempt":{"sha256":"1830a956e09fa73f902d4d01947dccbaf28e5717e6a71bd0006398212974dee1","source":"\"\"\"Failure Map reference implementation. Python standard library only.\"\"\"\nimport json\nimport math\nfrom fractions import Fraction\nN = 1\nobservations = []\ndef solve(positions, multiplier, lot, existing):\n    exposure = Fraction(0)\n    for kind, c, d in positions:\n        sgn = -1 if kind == 'P' else 1\n        exposure += sgn * Fraction(str(d)) * c * multiplier\n    target = -exposure\n    trade = target - existing\n    lots = trade / lot\n    n = round(abs(lots))\n    return int((n if lots >= 0 else -n) * lot)\ndef check(label, actual, expected):\n    observations.append({\"check\": label, \"actual\": actual, \"expected\": expected, \"passed\": actual == expected})\nfixtures = [[['regression lot rounding 1', [[['P', 1, 0.6]], 10, 100, 100], -100], ['regression lot rounding 2', [[['C', -1, 0.75]], 100, 50, 100], -50], ['partial repair probe 1', [[['C', 5, 0.75], ['C', 10, 0.75]], 100, 50, 0], -1150], ['partial repair probe 2', [[['C', -1, 0.25]], 100, 50, 0], 50], ['normal control 1', [[['P', -3, 0.05], ['C', 10, 0.05]], 10, 100, 0], 0], ['normal control 2', [[['C', 1, 0.35]], 100, 100, 100], -100], ['normal control 3', [[['P', 10, 0.75], ['C', -1, 0.6]], 10, 25, 75], 0], ['normal control 4', [[['P', 10, 0.25], ['C', -3, 0.35], ['C', 2, 0.25]], 100, 50, -250], 550]], [['regression lot rounding 1', [[['P', -3, 0.05], ['P', -3, 0.6]], 100, 25, 50], -250], ['regression lot rounding 2', [[['C', 10, 0.75], ['C', 1, 0.05], ['C', -1, 0.6], ['P', 5, 0.5]], 10, 50, 0], -50], ['partial repair probe 1', [[['C', 5, 0.25]], 100, 50, 0], -150], ['partial repair probe 2', [[['C', 5, 0.35]], 100, 100, 75], -300], ['normal control 1', [[['P', -1, 0.35]], 10, 100, -250], 200], ['normal control 2', [[['P', 1, 0.5], ['C', -1, 0.6], ['C', 5, 0.25]], 100, 25, -250], 225], ['normal control 3', [[['C', -1, 0.75], ['P', 10, 0.75], ['P', 5, 0.5]], 100, 100, 50], 1000], ['normal control 4', [[['P', 2, 0.25]], 100, 50, 100], -50]], [['regression lot rounding 1', [[['P', 1, 0.25], ['C', 2, 0.25], ['C', 2, 0.6]], 10, 25, 0], -25], ['regression lot rounding 2', [[['C', 10, 0.35], ['C', 2, 0.05], ['C', 1, 0.6], ['C', 5, 0.25]], 10, 100, -250], 200], ['partial repair probe 1', [[['P', 2, 0.75], ['P', 10, 0.25]], 100, 50, 75], 350], ['partial repair probe 2', [[['P', 10, 0.6], ['P', -3, 0.05], ['C', 2, 0.75], ['C', 1, 0.6]], 100, 50, -250], 650], ['normal control 1', [[['P', 10, 0.05], ['P', -1, 0.5], ['C', 2, 0.05], ['C', 2, 0.5]], 100, 100, 0], -100], ['normal control 2', [[['C', 1, 0.75], ['P', -3, 0.6], ['C', 1, 0.35]], 10, 50, -250], 200], ['normal control 3', [[['P', 10, 0.6], ['C', -3, 0.25], ['P', 5, 0.05], ['P', 10, 0.5]], 100, 100, 100], 1100], ['normal control 4', [[['P', -1, 0.05], ['C', -1, 0.6]], 100, 100, -250], 300]], [['regression lot rounding 1', [[['C', 5, 0.35], ['C', 10, 0.35], ['P', 10, 0.05]], 100, 50, 0], -500], ['regression lot rounding 2', [[['C', 2, 0.75], ['P', 10, 0.05], ['P', 5, 0.75]], 100, 100, 100], 200], ['partial repair probe 1', [[['P', 5, 0.6]], 100, 100, 50], 300], ['partial repair probe 2', [[['C', 10, 0.05], ['P', 1, 0.5], ['P', 5, 0.25], ['P', 5, 0.6]], 100, 50, 0], 450], ['normal control 1', [[['P', -3, 0.35]], 10, 25, 0], 0], ['normal control 2', [[['P', -1, 0.25], ['C', 1, 0.6]], 10, 25, 0], 0], ['normal control 3', [[['P', 10, 0.35], ['C', 5, 0.35], ['C', 2, 0.5]], 100, 100, 75], 0], ['normal control 4', [[['P', 5, 0.75], ['C', -1, 0.05]], 100, 25, 75], 300]], [['regression lot rounding 1', [[['P', 5, 0.05], ['P', -1, 0.35], ['C', 2, 0.75]], 100, 100, -250], 100], ['regression lot rounding 2', [[['P', 1, 0.5], ['C', 5, 0.25]], 10, 100, 50], -100], ['partial repair probe 1', [[['C', 5, 0.25]], 100, 50, 100], -250], ['partial repair probe 2', [[['C', 5, 0.05], ['P', 5, 0.05], ['P', -3, 0.25], ['C', -3, 0.75]], 100, 100, 100], 100], ['normal control 1', [[['P', 5, 0.5], ['P', 1, 0.5], ['P', 1, 0.75], ['C', -3, 0.05]], 10, 100, 75], 0], ['normal control 2', [[['C', 10, 0.25]], 100, 50, 0], -250], ['normal control 3', [[['P', 5, 0.6]], 10, 100, 50], 0], ['normal control 4', [[['P', 1, 0.6]], 100, 100, 50], 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":"5631e4673575e2054a7c825bbf5655d3609c716451cd6f7f68a4b7d51bdc8b9d","source":"\"\"\"Failure Map reference implementation. Python standard library only.\"\"\"\nimport json\nimport math\nfrom fractions import Fraction\nN = 1\nobservations = []\ndef solve(positions, multiplier, lot, existing):\n    exposure = Fraction(0)\n    for kind, c, d in positions:\n        sgn = -1 if kind == 'P' else 1\n        exposure += sgn * Fraction(str(d)) * c * multiplier\n    target = -exposure\n    trade = target - existing\n    lots = trade / lot\n    n = math.floor(abs(lots))\n    return int((n if lots >= 0 else -n) * lot)\ndef check(label, actual, expected):\n    observations.append({\"check\": label, \"actual\": actual, \"expected\": expected, \"passed\": actual == expected})\nfixtures = [[['regression lot rounding 1', [[['P', 1, 0.6]], 10, 100, 100], -100], ['regression lot rounding 2', [[['C', -1, 0.75]], 100, 50, 100], -50], ['partial repair probe 1', [[['C', 5, 0.75], ['C', 10, 0.75]], 100, 50, 0], -1150], ['partial repair probe 2', [[['C', -1, 0.25]], 100, 50, 0], 50], ['normal control 1', [[['P', -3, 0.05], ['C', 10, 0.05]], 10, 100, 0], 0], ['normal control 2', [[['C', 1, 0.35]], 100, 100, 100], -100], ['normal control 3', [[['P', 10, 0.75], ['C', -1, 0.6]], 10, 25, 75], 0], ['normal control 4', [[['P', 10, 0.25], ['C', -3, 0.35], ['C', 2, 0.25]], 100, 50, -250], 550]], [['regression lot rounding 1', [[['P', -3, 0.05], ['P', -3, 0.6]], 100, 25, 50], -250], ['regression lot rounding 2', [[['C', 10, 0.75], ['C', 1, 0.05], ['C', -1, 0.6], ['P', 5, 0.5]], 10, 50, 0], -50], ['partial repair probe 1', [[['C', 5, 0.25]], 100, 50, 0], -150], ['partial repair probe 2', [[['C', 5, 0.35]], 100, 100, 75], -300], ['normal control 1', [[['P', -1, 0.35]], 10, 100, -250], 200], ['normal control 2', [[['P', 1, 0.5], ['C', -1, 0.6], ['C', 5, 0.25]], 100, 25, -250], 225], ['normal control 3', [[['C', -1, 0.75], ['P', 10, 0.75], ['P', 5, 0.5]], 100, 100, 50], 1000], ['normal control 4', [[['P', 2, 0.25]], 100, 50, 100], -50]], [['regression lot rounding 1', [[['P', 1, 0.25], ['C', 2, 0.25], ['C', 2, 0.6]], 10, 25, 0], -25], ['regression lot rounding 2', [[['C', 10, 0.35], ['C', 2, 0.05], ['C', 1, 0.6], ['C', 5, 0.25]], 10, 100, -250], 200], ['partial repair probe 1', [[['P', 2, 0.75], ['P', 10, 0.25]], 100, 50, 75], 350], ['partial repair probe 2', [[['P', 10, 0.6], ['P', -3, 0.05], ['C', 2, 0.75], ['C', 1, 0.6]], 100, 50, -250], 650], ['normal control 1', [[['P', 10, 0.05], ['P', -1, 0.5], ['C', 2, 0.05], ['C', 2, 0.5]], 100, 100, 0], -100], ['normal control 2', [[['C', 1, 0.75], ['P', -3, 0.6], ['C', 1, 0.35]], 10, 50, -250], 200], ['normal control 3', [[['P', 10, 0.6], ['C', -3, 0.25], ['P', 5, 0.05], ['P', 10, 0.5]], 100, 100, 100], 1100], ['normal control 4', [[['P', -1, 0.05], ['C', -1, 0.6]], 100, 100, -250], 300]], [['regression lot rounding 1', [[['C', 5, 0.35], ['C', 10, 0.35], ['P', 10, 0.05]], 100, 50, 0], -500], ['regression lot rounding 2', [[['C', 2, 0.75], ['P', 10, 0.05], ['P', 5, 0.75]], 100, 100, 100], 200], ['partial repair probe 1', [[['P', 5, 0.6]], 100, 100, 50], 300], ['partial repair probe 2', [[['C', 10, 0.05], ['P', 1, 0.5], ['P', 5, 0.25], ['P', 5, 0.6]], 100, 50, 0], 450], ['normal control 1', [[['P', -3, 0.35]], 10, 25, 0], 0], ['normal control 2', [[['P', -1, 0.25], ['C', 1, 0.6]], 10, 25, 0], 0], ['normal control 3', [[['P', 10, 0.35], ['C', 5, 0.35], ['C', 2, 0.5]], 100, 100, 75], 0], ['normal control 4', [[['P', 5, 0.75], ['C', -1, 0.05]], 100, 25, 75], 300]], [['regression lot rounding 1', [[['P', 5, 0.05], ['P', -1, 0.35], ['C', 2, 0.75]], 100, 100, -250], 100], ['regression lot rounding 2', [[['P', 1, 0.5], ['C', 5, 0.25]], 10, 100, 50], -100], ['partial repair probe 1', [[['C', 5, 0.25]], 100, 50, 100], -250], ['partial repair probe 2', [[['C', 5, 0.05], ['P', 5, 0.05], ['P', -3, 0.25], ['C', -3, 0.75]], 100, 100, 100], 100], ['normal control 1', [[['P', 5, 0.5], ['P', 1, 0.5], ['P', 1, 0.75], ['C', -3, 0.05]], 10, 100, 75], 0], ['normal control 2', [[['C', 10, 0.25]], 100, 50, 0], -250], ['normal control 3', [[['P', 5, 0.6]], 10, 100, 50], 0], ['normal control 4', [[['P', 1, 0.6]], 100, 100, 50], 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-delta-hedge-lots-lot-rounding","generated_at":"2026-09-29T14:46:58.204458+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 lot count is truncated instead of rounded half away from zero.","sha256":"a6041ebe4371efeb0581724412608663dea97e35f770b6684e5bf2f7aabf108c","title":"Delta hedge order sized in lots: lots are truncated toward zero · 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":44.201,"exit_code":1,"observations":[{"actual":-100,"check":"regression lot rounding 1","expected":-100,"passed":true},{"actual":0,"check":"regression lot rounding 2","expected":-50,"passed":false},{"actual":-1100,"check":"partial repair probe 1","expected":-1150,"passed":false},{"actual":0,"check":"partial repair probe 2","expected":50,"passed":false},{"actual":0,"check":"normal control 1","expected":0,"passed":true},{"actual":-100,"check":"normal control 2","expected":-100,"passed":true},{"actual":0,"check":"normal control 3","expected":0,"passed":true},{"actual":550,"check":"normal control 4","expected":550,"passed":true}],"passed":false,"stderr":"","stdout":"{\"observations\": [{\"check\": \"regression lot rounding 1\", \"actual\": -100, \"expected\": -100, \"passed\": true}, {\"check\": \"regression lot rounding 2\", \"actual\": 0, \"expected\": -50, \"passed\": false}, {\"check\": \"partial repair probe 1\", \"actual\": -1100, \"expected\": -1150, \"passed\": false}, {\"check\": \"partial repair probe 2\", \"actual\": 0, \"expected\": 50, \"passed\": false}, {\"check\": \"normal control 1\", \"actual\": 0, \"expected\": 0, \"passed\": true}, {\"check\": \"normal control 2\", \"actual\": -100, \"expected\": -100, \"passed\": true}, {\"check\": \"normal control 3\", \"actual\": 0, \"expected\": 0, \"passed\": true}, {\"check\": \"normal control 4\", \"actual\": 550, \"expected\": 550, \"passed\": true}], \"passed\": false}\n"},"broken":{"elapsed_ms":43.285,"exit_code":1,"observations":[{"actual":0,"check":"regression lot rounding 1","expected":-100,"passed":false},{"actual":0,"check":"regression lot rounding 2","expected":-50,"passed":false},{"actual":-1100,"check":"partial repair probe 1","expected":-1150,"passed":false},{"actual":0,"check":"partial repair probe 2","expected":50,"passed":false},{"actual":0,"check":"normal control 1","expected":0,"passed":true},{"actual":-100,"check":"normal control 2","expected":-100,"passed":true},{"actual":0,"check":"normal control 3","expected":0,"passed":true},{"actual":550,"check":"normal control 4","expected":550,"passed":true}],"passed":false,"stderr":"","stdout":"{\"observations\": [{\"check\": \"regression lot rounding 1\", \"actual\": 0, \"expected\": -100, \"passed\": false}, {\"check\": \"regression lot rounding 2\", \"actual\": 0, \"expected\": -50, \"passed\": false}, {\"check\": \"partial repair probe 1\", \"actual\": -1100, \"expected\": -1150, \"passed\": false}, {\"check\": \"partial repair probe 2\", \"actual\": 0, \"expected\": 50, \"passed\": false}, {\"check\": \"normal control 1\", \"actual\": 0, \"expected\": 0, \"passed\": true}, {\"check\": \"normal control 2\", \"actual\": -100, \"expected\": -100, \"passed\": true}, {\"check\": \"normal control 3\", \"actual\": 0, \"expected\": 0, \"passed\": true}, {\"check\": \"normal control 4\", \"actual\": 550, \"expected\": 550, \"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."}}