{"abstract":"Short-priced legs push the accumulator into a higher bonus band.","category":"Betting odds conversion","checks":7,"contract":"Winning accumulator bonus. Every leg price multiplies the accumulator. Legs priced at 1.20 or more qualify; the bonus percentage by qualifying count is {3: 5, 4: 10, 5: 15, 6: 20, 7: 25} with 7 or more paying 25 and fewer than 3 paying 0. The bonus is applied to the profit only: return = stake + profit * (100 + pct) / 100, rounded down. Return [qualifying legs, bonus pct, return cents].","contract_signature":"prices, stake_cents","evaluation_group":"w2-odds-conversion-accumulator-bonus","failed_approach":"Excluding the short legs from the price as well as the count underpays the accumulator.","family":"w2-odds-conversion-accumulator-bonus-qualification-count","id":"FA-84806","implementations":{"attempt":{"sha256":"6235f91479ee6a860d4cbfd7633b1dfd069bb28e2235dc330cceea80d5d7f515","source":"\"\"\"Failure Map reference implementation. Python standard library only.\"\"\"\nimport json\nfrom fractions import Fraction\nimport math\nN = 1\nobservations = []\ndef solve(prices, stake_cents):\n    TABLE = {3: 5, 4: 10, 5: 15, 6: 20, 7: 25}\n    factor = Fraction(1)\n    q = 0\n    for p in prices:\n        d = Fraction(p)\n        if d >= Fraction(120, 100):\n            factor *= d\n            q += 1\n    pct = TABLE.get(min(q, 7), 0)\n    profit = stake_cents * (factor - 1)\n    return [q, pct, math.floor(stake_cents + profit * (100 + pct) / 100)]\ndef check(label, actual, expected):\n    observations.append({\"check\": label, \"actual\": actual, \"expected\": expected, \"passed\": actual == expected})\ndef run(args):\n    try:\n        return solve(*args)\n    except Exception as exc:\n        return 'raised ' + type(exc).__name__\ncases = [[('control treble', (['2.00', '2.00', '2.00'], 100), [3, 5, 835]),\n  ('boundary minimum odds leg', (['1.20', '2.00', '2.00'], 100), [3, 5, 499]),\n  ('boundary short leg does not qualify', (['1.19', '2.00', '2.00'], 100), [2, 0, 476]),\n  ('boundary eight legs capped',\n   (['1.50', '1.50', '1.50', '1.50', '1.50', '1.50', '1.50', '1.50'], 100),\n   [8, 25, 3178]),\n  ('regression: qualification count', (['1.45', '1.25', '1.19'], 500), [2, 0, 1078]),\n  ('variant scenario 1',\n   (['1.74', '1.15', '1.20', '1.34', '1.25', '1.39', '1.20'], 100),\n   [6, 20, 785]),\n  ('variant scenario 2', (['1.19', '1.20'], 1000), [1, 0, 1428])],\n [('control treble', (['2.00', '2.00', '2.00'], 100), [3, 5, 835]),\n  ('boundary minimum odds leg', (['1.20', '2.00', '2.00'], 100), [3, 5, 499]),\n  ('boundary short leg does not qualify', (['1.19', '2.00', '2.00'], 100), [2, 0, 476]),\n  ('boundary eight legs capped',\n   (['1.50', '1.50', '1.50', '1.50', '1.50', '1.50', '1.50', '1.50'], 100),\n   [8, 25, 3178]),\n  ('regression: qualification count',\n   (['1.15', '1.33', '1.25', '1.19', '1.84', '1.50', '2.96', '1.25'], 500),\n   [6, 20, 13840]),\n  ('variant scenario 1', (['1.19', '1.44', '1.20', '1.20', '1.19'], 500), [3, 5, 1516]),\n  ('variant scenario 2', (['2.11', '1.19', '2.26', '1.15'], 1000), [2, 0, 6525])],\n [('control treble', (['2.00', '2.00', '2.00'], 100), [3, 5, 835]),\n  ('boundary minimum odds leg', (['1.20', '2.00', '2.00'], 100), [3, 5, 499]),\n  ('boundary short leg does not qualify', (['1.19', '2.00', '2.00'], 100), [2, 0, 476]),\n  ('boundary eight legs capped',\n   (['1.50', '1.50', '1.50', '1.50', '1.50', '1.50', '1.50', '1.50'], 100),\n   [8, 25, 3178]),\n  ('regression: qualification count',\n   (['1.20', '1.30', '1.19', '1.25', '1.74', '1.15'], 500),\n   [4, 10, 2503]),\n  ('variant scenario 1', (['2.94', '2.63', '1.25', '1.54', '1.20'], 1000), [5, 15, 20390]),\n  ('variant scenario 2', (['1.49', '1.25', '1.15', '1.25', '1.20'], 500), [4, 10, 1717])],\n [('control treble', (['2.00', '2.00', '2.00'], 100), [3, 5, 835]),\n  ('boundary minimum odds leg', (['1.20', '2.00', '2.00'], 100), [3, 5, 499]),\n  ('boundary short leg does not qualify', (['1.19', '2.00', '2.00'], 100), [2, 0, 476]),\n  ('boundary eight legs capped',\n   (['1.50', '1.50', '1.50', '1.50', '1.50', '1.50', '1.50', '1.50'], 100),\n   [8, 25, 3178]),\n  ('regression: qualification count', (['1.20', '1.19'], 500), [1, 0, 714]),\n  ('variant scenario 1',\n   (['1.72', '1.25', '1.20', '1.25', '1.19', '1.19', '1.15', '1.15'], 1000),\n   [4, 10, 6543]),\n  ('variant scenario 2',\n   (['2.88', '1.32', '1.15', '1.38', '1.62', '2.77', '1.19'], 100),\n   [5, 15, 3689])],\n [('control treble', (['2.00', '2.00', '2.00'], 100), [3, 5, 835]),\n  ('boundary minimum odds leg', (['1.20', '2.00', '2.00'], 100), [3, 5, 499]),\n  ('boundary short leg does not qualify', (['1.19', '2.00', '2.00'], 100), [2, 0, 476]),\n  ('boundary eight legs capped',\n   (['1.50', '1.50', '1.50', '1.50', '1.50', '1.50', '1.50', '1.50'], 100),\n   [8, 25, 3178]),\n  ('regression: qualification count',\n   (['1.19', '1.87', '1.25', '1.20', '1.20', '1.25'], 1000),\n   [5, 15, 5607]),\n  ('variant scenario 1', (['1.25', '1.15', '1.20', '1.25', '1.25'], 100), [4, 10, 286]),\n  ('variant scenario 2',\n   (['1.20', '1.15', '1.20', '1.42', '2.58', '1.15', '1.25'], 100),\n   [5, 15, 987])]]\nfor label, args, expected in cases[N - 1]:\n    check(label, run(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":"ec50c5016da37a3b3de2b28c2a592ca017f7e5f5a79a5db89e39e4063082dfaf","source":"\"\"\"Failure Map reference implementation. Python standard library only.\"\"\"\nimport json\nfrom fractions import Fraction\nimport math\nN = 1\nobservations = []\ndef solve(prices, stake_cents):\n    TABLE = {3: 5, 4: 10, 5: 15, 6: 20, 7: 25}\n    factor = Fraction(1)\n    q = 0\n    for p in prices:\n        d = Fraction(p)\n        factor *= d\n        q += 1\n    pct = TABLE.get(min(q, 7), 0)\n    profit = stake_cents * (factor - 1)\n    return [q, pct, math.floor(stake_cents + profit * (100 + pct) / 100)]\ndef check(label, actual, expected):\n    observations.append({\"check\": label, \"actual\": actual, \"expected\": expected, \"passed\": actual == expected})\ndef run(args):\n    try:\n        return solve(*args)\n    except Exception as exc:\n        return 'raised ' + type(exc).__name__\ncases = [[('control treble', (['2.00', '2.00', '2.00'], 100), [3, 5, 835]),\n  ('boundary minimum odds leg', (['1.20', '2.00', '2.00'], 100), [3, 5, 499]),\n  ('boundary short leg does not qualify', (['1.19', '2.00', '2.00'], 100), [2, 0, 476]),\n  ('boundary eight legs capped',\n   (['1.50', '1.50', '1.50', '1.50', '1.50', '1.50', '1.50', '1.50'], 100),\n   [8, 25, 3178]),\n  ('regression: qualification count', (['1.45', '1.25', '1.19'], 500), [2, 0, 1078]),\n  ('variant scenario 1',\n   (['1.74', '1.15', '1.20', '1.34', '1.25', '1.39', '1.20'], 100),\n   [6, 20, 785]),\n  ('variant scenario 2', (['1.19', '1.20'], 1000), [1, 0, 1428])],\n [('control treble', (['2.00', '2.00', '2.00'], 100), [3, 5, 835]),\n  ('boundary minimum odds leg', (['1.20', '2.00', '2.00'], 100), [3, 5, 499]),\n  ('boundary short leg does not qualify', (['1.19', '2.00', '2.00'], 100), [2, 0, 476]),\n  ('boundary eight legs capped',\n   (['1.50', '1.50', '1.50', '1.50', '1.50', '1.50', '1.50', '1.50'], 100),\n   [8, 25, 3178]),\n  ('regression: qualification count',\n   (['1.15', '1.33', '1.25', '1.19', '1.84', '1.50', '2.96', '1.25'], 500),\n   [6, 20, 13840]),\n  ('variant scenario 1', (['1.19', '1.44', '1.20', '1.20', '1.19'], 500), [3, 5, 1516]),\n  ('variant scenario 2', (['2.11', '1.19', '2.26', '1.15'], 1000), [2, 0, 6525])],\n [('control treble', (['2.00', '2.00', '2.00'], 100), [3, 5, 835]),\n  ('boundary minimum odds leg', (['1.20', '2.00', '2.00'], 100), [3, 5, 499]),\n  ('boundary short leg does not qualify', (['1.19', '2.00', '2.00'], 100), [2, 0, 476]),\n  ('boundary eight legs capped',\n   (['1.50', '1.50', '1.50', '1.50', '1.50', '1.50', '1.50', '1.50'], 100),\n   [8, 25, 3178]),\n  ('regression: qualification count',\n   (['1.20', '1.30', '1.19', '1.25', '1.74', '1.15'], 500),\n   [4, 10, 2503]),\n  ('variant scenario 1', (['2.94', '2.63', '1.25', '1.54', '1.20'], 1000), [5, 15, 20390]),\n  ('variant scenario 2', (['1.49', '1.25', '1.15', '1.25', '1.20'], 500), [4, 10, 1717])],\n [('control treble', (['2.00', '2.00', '2.00'], 100), [3, 5, 835]),\n  ('boundary minimum odds leg', (['1.20', '2.00', '2.00'], 100), [3, 5, 499]),\n  ('boundary short leg does not qualify', (['1.19', '2.00', '2.00'], 100), [2, 0, 476]),\n  ('boundary eight legs capped',\n   (['1.50', '1.50', '1.50', '1.50', '1.50', '1.50', '1.50', '1.50'], 100),\n   [8, 25, 3178]),\n  ('regression: qualification count', (['1.20', '1.19'], 500), [1, 0, 714]),\n  ('variant scenario 1',\n   (['1.72', '1.25', '1.20', '1.25', '1.19', '1.19', '1.15', '1.15'], 1000),\n   [4, 10, 6543]),\n  ('variant scenario 2',\n   (['2.88', '1.32', '1.15', '1.38', '1.62', '2.77', '1.19'], 100),\n   [5, 15, 3689])],\n [('control treble', (['2.00', '2.00', '2.00'], 100), [3, 5, 835]),\n  ('boundary minimum odds leg', (['1.20', '2.00', '2.00'], 100), [3, 5, 499]),\n  ('boundary short leg does not qualify', (['1.19', '2.00', '2.00'], 100), [2, 0, 476]),\n  ('boundary eight legs capped',\n   (['1.50', '1.50', '1.50', '1.50', '1.50', '1.50', '1.50', '1.50'], 100),\n   [8, 25, 3178]),\n  ('regression: qualification count',\n   (['1.19', '1.87', '1.25', '1.20', '1.20', '1.25'], 1000),\n   [5, 15, 5607]),\n  ('variant scenario 1', (['1.25', '1.15', '1.20', '1.25', '1.25'], 100), [4, 10, 286]),\n  ('variant scenario 2',\n   (['1.20', '1.15', '1.20', '1.42', '2.58', '1.15', '1.25'], 100),\n   [5, 15, 987])]]\nfor label, args, expected in cases[N - 1]:\n    check(label, run(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":"Stipulated, bounded toy contract stated in the contract field; not a claim of conformance with any operator, exchange or regulator rule set. 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-odds-conversion-accumulator-bonus-qualification-count","generated_at":"2026-09-29T14:50:34.547618+00:00","license":"CC0-1.0","python":"3.12.14","seed":1,"split":"open-access"},"relevance":"Acca promotions depend on minimum-odds qualification and apply the bonus to winnings.","root_cause":"Every leg increments the qualifying count.","sha256":"022021cdb5f66e6ea227b5f447cf05e6c6811c1725c18f37ba9fcd2f2bc41471","title":"Non-qualifying legs counted towards the bonus · 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":42.727,"exit_code":1,"observations":[{"actual":[3,5,835],"check":"control treble","expected":[3,5,835],"passed":true},{"actual":[3,5,499],"check":"boundary minimum odds leg","expected":[3,5,499],"passed":true},{"actual":[2,0,400],"check":"boundary short leg does not qualify","expected":[2,0,476],"passed":false},{"actual":[8,25,3178],"check":"boundary eight legs capped","expected":[8,25,3178],"passed":true},{"actual":[2,0,906],"check":"regression: qualification count","expected":[2,0,1078],"passed":false},{"actual":[6,20,680],"check":"variant scenario 1","expected":[6,20,785],"passed":false},{"actual":[1,0,1200],"check":"variant scenario 2","expected":[1,0,1428],"passed":false}],"passed":false,"stderr":"","stdout":"{\"observations\": [{\"check\": \"control treble\", \"actual\": [3, 5, 835], \"expected\": [3, 5, 835], \"passed\": true}, {\"check\": \"boundary minimum odds leg\", \"actual\": [3, 5, 499], \"expected\": [3, 5, 499], \"passed\": true}, {\"check\": \"boundary short leg does not qualify\", \"actual\": [2, 0, 400], \"expected\": [2, 0, 476], \"passed\": false}, {\"check\": \"boundary eight legs capped\", \"actual\": [8, 25, 3178], \"expected\": [8, 25, 3178], \"passed\": true}, {\"check\": \"regression: qualification count\", \"actual\": [2, 0, 906], \"expected\": [2, 0, 1078], \"passed\": false}, {\"check\": \"variant scenario 1\", \"actual\": [6, 20, 680], \"expected\": [6, 20, 785], \"passed\": false}, {\"check\": \"variant scenario 2\", \"actual\": [1, 0, 1200], \"expected\": [1, 0, 1428], \"passed\": false}], \"passed\": false}\n"},"broken":{"elapsed_ms":43.913,"exit_code":1,"observations":[{"actual":[3,5,835],"check":"control treble","expected":[3,5,835],"passed":true},{"actual":[3,5,499],"check":"boundary minimum odds leg","expected":[3,5,499],"passed":true},{"actual":[3,5,494],"check":"boundary short leg does not qualify","expected":[2,0,476],"passed":false},{"actual":[8,25,3178],"check":"boundary eight legs capped","expected":[8,25,3178],"passed":true},{"actual":[3,5,1107],"check":"regression: qualification count","expected":[2,0,1078],"passed":false},{"actual":[7,25,813],"check":"variant scenario 1","expected":[6,20,785],"passed":false},{"actual":[2,0,1428],"check":"variant scenario 2","expected":[1,0,1428],"passed":false}],"passed":false,"stderr":"","stdout":"{\"observations\": [{\"check\": \"control treble\", \"actual\": [3, 5, 835], \"expected\": [3, 5, 835], \"passed\": true}, {\"check\": \"boundary minimum odds leg\", \"actual\": [3, 5, 499], \"expected\": [3, 5, 499], \"passed\": true}, {\"check\": \"boundary short leg does not qualify\", \"actual\": [3, 5, 494], \"expected\": [2, 0, 476], \"passed\": false}, {\"check\": \"boundary eight legs capped\", \"actual\": [8, 25, 3178], \"expected\": [8, 25, 3178], \"passed\": true}, {\"check\": \"regression: qualification count\", \"actual\": [3, 5, 1107], \"expected\": [2, 0, 1078], \"passed\": false}, {\"check\": \"variant scenario 1\", \"actual\": [7, 25, 813], \"expected\": [6, 20, 785], \"passed\": false}, {\"check\": \"variant scenario 2\", \"actual\": [2, 0, 1428], \"expected\": [1, 0, 1428], \"passed\": false}], \"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."}}