{"abstract":"Orders become more aggressive than the trader's limit.","category":"Options payoff and settlement","checks":8,"contract":"Inputs a limit price (up to 3 decimals), side and penny-program flag. Work in mills. Below 3.000 the tick is 0.01 for penny classes and 0.05 otherwise; at or above 3.000 it is 0.05 for penny classes and 0.10 otherwise. Buy orders round down to a tick, sell orders round up; prices already on a tick are unchanged. Return the price as a float.","evaluation_group":"w2-options_payoff_and_settlement-premium-tick-rounding","failed_approach":"Rounding both sides to the nearest tick can still cross the limit.","family":"w2-options_payoff_and_settlement-premium-tick-rounding-side-rounding-direction","id":"FA-61826","implementations":{"attempt":{"sha256":"cba15f2af4231d985f8855c7317dd0086ecfbb44ac26866392a5959fda96b213","source":"\"\"\"Failure Map reference implementation. Python standard library only.\"\"\"\nimport json\n\nN = 1\nobservations = []\ndef solve(price, side, penny):\n    m = round(price * 1000)\n    small = m < 3000\n    tick = (10 if penny else 50) if small else (50 if penny else 100)\n    out = (m + tick // 2) // tick * tick\n    return out / 1000\ndef check(label, actual, expected):\n    observations.append({\"check\": label, \"actual\": actual, \"expected\": expected, \"passed\": actual == expected})\nfixtures = [[['regression side rounding direction 1', [12.344, 'sell', True], 12.35], ['regression side rounding direction 2', [4.105, 'buy', True], 4.1], ['partial repair probe 1', [0.53, 'buy', False], 0.5], ['partial repair probe 2', [0.512, 'sell', True], 0.52], ['boundary control 1', [3.0, 'buy', False], 3.0], ['boundary control 2', [2.95, 'sell', False], 2.95], ['normal control 1', [0.55, 'buy', False], 0.55], ['normal control 2', [3.1, 'sell', False], 3.1]], [['regression side rounding direction 1', [3.06, 'buy', False], 3.0], ['regression side rounding direction 2', [12.345, 'buy', False], 12.3], ['partial repair probe 1', [2.975, 'buy', False], 2.95], ['partial repair probe 2', [2.951, 'sell', False], 3.0], ['boundary control 1', [3.0, 'buy', False], 3.0], ['boundary control 2', [2.95, 'sell', False], 2.95], ['normal control 1', [3.1, 'sell', False], 3.1], ['normal control 2', [4.1, 'sell', True], 4.1]], [['regression side rounding direction 1', [3.015, 'buy', True], 3.0], ['regression side rounding direction 2', [3.095, 'buy', True], 3.05], ['partial repair probe 1', [4.112, 'sell', True], 4.15], ['partial repair probe 2', [2.999, 'buy', True], 2.99], ['boundary control 1', [2.95, 'sell', False], 2.95], ['boundary control 2', [3.0, 'buy', False], 3.0], ['normal control 1', [0.5, 'buy', True], 0.5], ['normal control 2', [1.26, 'buy', True], 1.26]], [['regression side rounding direction 1', [3.074, 'sell', False], 3.1], ['regression side rounding direction 2', [3.012, 'sell', True], 3.05], ['partial repair probe 1', [12.341, 'sell', False], 12.4], ['partial repair probe 2', [0.501, 'sell', False], 0.55], ['boundary control 1', [3.0, 'buy', False], 3.0], ['boundary control 2', [2.95, 'sell', False], 2.95], ['normal control 1', [2.95, 'sell', True], 2.95], ['normal control 2', [3.1, 'buy', True], 3.1]], [['regression side rounding direction 1', [3.04, 'sell', False], 3.1], ['regression side rounding direction 2', [3.015, 'buy', False], 3.0], ['partial repair probe 1', [3.075, 'buy', True], 3.05], ['partial repair probe 2', [3.14, 'sell', False], 3.2], ['boundary control 1', [2.95, 'sell', False], 2.95], ['boundary control 2', [3.0, 'buy', False], 3.0], ['normal control 1', [3.1, 'sell', False], 3.1], ['normal control 2', [0.5, 'buy', True], 0.5]]]\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":"d5d7d993b6c8997da60bc9b6a233cd7894ac3ab9b51d7b68bf287194d32242d0","source":"\"\"\"Failure Map reference implementation. Python standard library only.\"\"\"\nimport json\n\nN = 1\nobservations = []\ndef solve(price, side, penny):\n    m = round(price * 1000)\n    small = m < 3000\n    tick = (10 if penny else 50) if small else (50 if penny else 100)\n    if side == 'buy':\n        out = -(-m // tick) * tick\n    else:\n        out = m // tick * tick\n    return out / 1000\ndef check(label, actual, expected):\n    observations.append({\"check\": label, \"actual\": actual, \"expected\": expected, \"passed\": actual == expected})\nfixtures = [[['regression side rounding direction 1', [12.344, 'sell', True], 12.35], ['regression side rounding direction 2', [4.105, 'buy', True], 4.1], ['partial repair probe 1', [0.53, 'buy', False], 0.5], ['partial repair probe 2', [0.512, 'sell', True], 0.52], ['boundary control 1', [3.0, 'buy', False], 3.0], ['boundary control 2', [2.95, 'sell', False], 2.95], ['normal control 1', [0.55, 'buy', False], 0.55], ['normal control 2', [3.1, 'sell', False], 3.1]], [['regression side rounding direction 1', [3.06, 'buy', False], 3.0], ['regression side rounding direction 2', [12.345, 'buy', False], 12.3], ['partial repair probe 1', [2.975, 'buy', False], 2.95], ['partial repair probe 2', [2.951, 'sell', False], 3.0], ['boundary control 1', [3.0, 'buy', False], 3.0], ['boundary control 2', [2.95, 'sell', False], 2.95], ['normal control 1', [3.1, 'sell', False], 3.1], ['normal control 2', [4.1, 'sell', True], 4.1]], [['regression side rounding direction 1', [3.015, 'buy', True], 3.0], ['regression side rounding direction 2', [3.095, 'buy', True], 3.05], ['partial repair probe 1', [4.112, 'sell', True], 4.15], ['partial repair probe 2', [2.999, 'buy', True], 2.99], ['boundary control 1', [2.95, 'sell', False], 2.95], ['boundary control 2', [3.0, 'buy', False], 3.0], ['normal control 1', [0.5, 'buy', True], 0.5], ['normal control 2', [1.26, 'buy', True], 1.26]], [['regression side rounding direction 1', [3.074, 'sell', False], 3.1], ['regression side rounding direction 2', [3.012, 'sell', True], 3.05], ['partial repair probe 1', [12.341, 'sell', False], 12.4], ['partial repair probe 2', [0.501, 'sell', False], 0.55], ['boundary control 1', [3.0, 'buy', False], 3.0], ['boundary control 2', [2.95, 'sell', False], 2.95], ['normal control 1', [2.95, 'sell', True], 2.95], ['normal control 2', [3.1, 'buy', True], 3.1]], [['regression side rounding direction 1', [3.04, 'sell', False], 3.1], ['regression side rounding direction 2', [3.015, 'buy', False], 3.0], ['partial repair probe 1', [3.075, 'buy', True], 3.05], ['partial repair probe 2', [3.14, 'sell', False], 3.2], ['boundary control 1', [2.95, 'sell', False], 2.95], ['boundary control 2', [3.0, 'buy', False], 3.0], ['normal control 1', [3.1, 'sell', False], 3.1], ['normal control 2', [0.5, 'buy', True], 0.5]]]\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":"f1babc67ac52cccf78a415638d501af2d234aaf997950682e1847f13f9671c9f","source":"\"\"\"Failure Map reference implementation. Python standard library only.\"\"\"\nimport json\n\nN = 1\nobservations = []\ndef solve(price, side, penny):\n    m = round(price * 1000)\n    small = m < 3000\n    tick = (10 if penny else 50) if small else (50 if penny else 100)\n    if side == 'buy':\n        out = m // tick * tick\n    else:\n        out = -(-m // tick) * tick\n    return out / 1000\ndef check(label, actual, expected):\n    observations.append({\"check\": label, \"actual\": actual, \"expected\": expected, \"passed\": actual == expected})\nfixtures = [[['regression side rounding direction 1', [12.344, 'sell', True], 12.35], ['regression side rounding direction 2', [4.105, 'buy', True], 4.1], ['partial repair probe 1', [0.53, 'buy', False], 0.5], ['partial repair probe 2', [0.512, 'sell', True], 0.52], ['boundary control 1', [3.0, 'buy', False], 3.0], ['boundary control 2', [2.95, 'sell', False], 2.95], ['normal control 1', [0.55, 'buy', False], 0.55], ['normal control 2', [3.1, 'sell', False], 3.1]], [['regression side rounding direction 1', [3.06, 'buy', False], 3.0], ['regression side rounding direction 2', [12.345, 'buy', False], 12.3], ['partial repair probe 1', [2.975, 'buy', False], 2.95], ['partial repair probe 2', [2.951, 'sell', False], 3.0], ['boundary control 1', [3.0, 'buy', False], 3.0], ['boundary control 2', [2.95, 'sell', False], 2.95], ['normal control 1', [3.1, 'sell', False], 3.1], ['normal control 2', [4.1, 'sell', True], 4.1]], [['regression side rounding direction 1', [3.015, 'buy', True], 3.0], ['regression side rounding direction 2', [3.095, 'buy', True], 3.05], ['partial repair probe 1', [4.112, 'sell', True], 4.15], ['partial repair probe 2', [2.999, 'buy', True], 2.99], ['boundary control 1', [2.95, 'sell', False], 2.95], ['boundary control 2', [3.0, 'buy', False], 3.0], ['normal control 1', [0.5, 'buy', True], 0.5], ['normal control 2', [1.26, 'buy', True], 1.26]], [['regression side rounding direction 1', [3.074, 'sell', False], 3.1], ['regression side rounding direction 2', [3.012, 'sell', True], 3.05], ['partial repair probe 1', [12.341, 'sell', False], 12.4], ['partial repair probe 2', [0.501, 'sell', False], 0.55], ['boundary control 1', [3.0, 'buy', False], 3.0], ['boundary control 2', [2.95, 'sell', False], 2.95], ['normal control 1', [2.95, 'sell', True], 2.95], ['normal control 2', [3.1, 'buy', True], 3.1]], [['regression side rounding direction 1', [3.04, 'sell', False], 3.1], ['regression side rounding direction 2', [3.015, 'buy', False], 3.0], ['partial repair probe 1', [3.075, 'buy', True], 3.05], ['partial repair probe 2', [3.14, 'sell', False], 3.2], ['boundary control 1', [2.95, 'sell', False], 2.95], ['boundary control 2', [3.0, 'buy', False], 3.0], ['normal control 1', [3.1, 'sell', False], 3.1], ['normal control 2', [0.5, 'buy', True], 0.5]]]\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-premium-tick-rounding-side-rounding-direction","generated_at":"2026-09-29T14:46:58.826847+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":"Buys round down and sells round up.","root_cause":"The floor and ceiling branches are swapped.","sha256":"729e7c5720add0be12dbd4264268bdc08eee28fe364773122897b5fe7a51bb47","title":"Option order price tick rounding: buy orders round up and sell orders round down · case 01","variant":1,"variant_policy":"Five numbered records share a model and may reuse boundary fixtures.","verification":{"attempt":{"elapsed_ms":37.93,"exit_code":1,"observations":[{"actual":12.35,"check":"regression side rounding direction 1","expected":12.35,"passed":true},{"actual":4.1,"check":"regression side rounding direction 2","expected":4.1,"passed":true},{"actual":0.55,"check":"partial repair probe 1","expected":0.5,"passed":false},{"actual":0.51,"check":"partial repair probe 2","expected":0.52,"passed":false},{"actual":3.0,"check":"boundary control 1","expected":3.0,"passed":true},{"actual":2.95,"check":"boundary control 2","expected":2.95,"passed":true},{"actual":0.55,"check":"normal control 1","expected":0.55,"passed":true},{"actual":3.1,"check":"normal control 2","expected":3.1,"passed":true}],"passed":false,"stderr":"","stdout":"{\"observations\": [{\"check\": \"regression side rounding direction 1\", \"actual\": 12.35, \"expected\": 12.35, \"passed\": true}, {\"check\": \"regression side rounding direction 2\", \"actual\": 4.1, \"expected\": 4.1, \"passed\": true}, {\"check\": \"partial repair probe 1\", \"actual\": 0.55, \"expected\": 0.5, \"passed\": false}, {\"check\": \"partial repair probe 2\", \"actual\": 0.51, \"expected\": 0.52, \"passed\": false}, {\"check\": \"boundary control 1\", \"actual\": 3.0, \"expected\": 3.0, \"passed\": true}, {\"check\": \"boundary control 2\", \"actual\": 2.95, \"expected\": 2.95, \"passed\": true}, {\"check\": \"normal control 1\", \"actual\": 0.55, \"expected\": 0.55, \"passed\": true}, {\"check\": \"normal control 2\", \"actual\": 3.1, \"expected\": 3.1, \"passed\": true}], \"passed\": false}\n"},"broken":{"elapsed_ms":39.766,"exit_code":1,"observations":[{"actual":12.3,"check":"regression side rounding direction 1","expected":12.35,"passed":false},{"actual":4.15,"check":"regression side rounding direction 2","expected":4.1,"passed":false},{"actual":0.55,"check":"partial repair probe 1","expected":0.5,"passed":false},{"actual":0.51,"check":"partial repair probe 2","expected":0.52,"passed":false},{"actual":3.0,"check":"boundary control 1","expected":3.0,"passed":true},{"actual":2.95,"check":"boundary control 2","expected":2.95,"passed":true},{"actual":0.55,"check":"normal control 1","expected":0.55,"passed":true},{"actual":3.1,"check":"normal control 2","expected":3.1,"passed":true}],"passed":false,"stderr":"","stdout":"{\"observations\": [{\"check\": \"regression side rounding direction 1\", \"actual\": 12.3, \"expected\": 12.35, \"passed\": false}, {\"check\": \"regression side rounding direction 2\", \"actual\": 4.15, \"expected\": 4.1, \"passed\": false}, {\"check\": \"partial repair probe 1\", \"actual\": 0.55, \"expected\": 0.5, \"passed\": false}, {\"check\": \"partial repair probe 2\", \"actual\": 0.51, \"expected\": 0.52, \"passed\": false}, {\"check\": \"boundary control 1\", \"actual\": 3.0, \"expected\": 3.0, \"passed\": true}, {\"check\": \"boundary control 2\", \"actual\": 2.95, \"expected\": 2.95, \"passed\": true}, {\"check\": \"normal control 1\", \"actual\": 0.55, \"expected\": 0.55, \"passed\": true}, {\"check\": \"normal control 2\", \"actual\": 3.1, \"expected\": 3.1, \"passed\": true}], \"passed\": false}\n"},"fixed":{"elapsed_ms":38.614,"exit_code":0,"observations":[{"actual":12.35,"check":"regression side rounding direction 1","expected":12.35,"passed":true},{"actual":4.1,"check":"regression side rounding direction 2","expected":4.1,"passed":true},{"actual":0.5,"check":"partial repair probe 1","expected":0.5,"passed":true},{"actual":0.52,"check":"partial repair probe 2","expected":0.52,"passed":true},{"actual":3.0,"check":"boundary control 1","expected":3.0,"passed":true},{"actual":2.95,"check":"boundary control 2","expected":2.95,"passed":true},{"actual":0.55,"check":"normal control 1","expected":0.55,"passed":true},{"actual":3.1,"check":"normal control 2","expected":3.1,"passed":true}],"passed":true,"stderr":"","stdout":"{\"observations\": [{\"check\": \"regression side rounding direction 1\", \"actual\": 12.35, \"expected\": 12.35, \"passed\": true}, {\"check\": \"regression side rounding direction 2\", \"actual\": 4.1, \"expected\": 4.1, \"passed\": true}, {\"check\": \"partial repair probe 1\", \"actual\": 0.5, \"expected\": 0.5, \"passed\": true}, {\"check\": \"partial repair probe 2\", \"actual\": 0.52, \"expected\": 0.52, \"passed\": true}, {\"check\": \"boundary control 1\", \"actual\": 3.0, \"expected\": 3.0, \"passed\": true}, {\"check\": \"boundary control 2\", \"actual\": 2.95, \"expected\": 2.95, \"passed\": true}, {\"check\": \"normal control 1\", \"actual\": 0.55, \"expected\": 0.55, \"passed\": true}, {\"check\": \"normal control 2\", \"actual\": 3.1, \"expected\": 3.1, \"passed\": true}], \"passed\": true}\n"}},"verified":true,"visibility":"public"}