{"abstract":"An eight-fold loses its bonus entirely, or is capped at 20 percent.","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":"Capping at 6 pays 20 percent instead of 25.","family":"w2-odds-conversion-accumulator-bonus-bonus-table-cap","id":"FA-84801","implementations":{"attempt":{"sha256":"9f2c469b56f334fa3e56fa37acacfab4eebff990a74c7929bf5e3fcadfc002f7","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        if d >= Fraction(120, 100):\n            q += 1\n    pct = TABLE.get(min(q, 6), 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: bonus table cap',\n   (['1.20', '1.25', '1.20', '1.62', '1.25', '1.20', '1.25', '1.20', '1.25'], 100),\n   [9, 25, 1000]),\n  ('variant scenario 1', (['2.08', '1.20', '1.25', '1.39', '1.15'], 500), [4, 10, 2693]),\n  ('variant scenario 2', (['1.19', '1.58'], 1000), [1, 0, 1880])],\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: bonus table cap',\n   (['1.73', '1.20', '1.41', '1.25', '1.25', '1.25', '2.53'], 100),\n   [7, 25, 1783]),\n  ('regression: bonus table cap',\n   (['1.25', '2.16', '1.20', '1.20', '1.94', '1.25', '1.20', '1.15', '1.20'], 500),\n   [8, 25, 9633]),\n  ('variant scenario 1', (['1.20', '1.96', '1.25', '1.19', '2.22'], 100), [4, 10, 844]),\n  ('variant scenario 2', (['1.19', '2.00', '1.15', '1.15', '1.25'], 1000), [2, 0, 3934])],\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: bonus table cap',\n   (['2.20', '1.20', '2.17', '1.20', '1.15', '1.19', '1.20', '1.20', '1.20'], 100),\n   [7, 25, 2007]),\n  ('regression: bonus table cap',\n   (['2.45', '1.25', '2.20', '1.25', '2.53', '1.50', '1.19', '1.20', '1.20'], 100),\n   [8, 25, 6821]),\n  ('variant scenario 1', (['1.25', '1.25', '1.25'], 1000), [3, 5, 2000]),\n  ('variant scenario 2',\n   (['1.19', '1.19', '2.03', '2.44', '1.25', '1.25', '2.17'], 1000),\n   [5, 15, 27200])],\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: bonus table cap',\n   (['1.95', '1.19', '1.25', '2.22', '1.25', '1.92', '1.77', '1.20', '1.20'], 1000),\n   [8, 25, 48988]),\n  ('variant scenario 1',\n   (['1.20', '2.32', '1.19', '1.20', '1.25', '1.20', '1.67'], 500),\n   [6, 20, 5875]),\n  ('variant scenario 2', (['1.19', '1.15', '2.41', '1.25', '1.15'], 1000), [2, 0, 4740])],\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: bonus table cap',\n   (['1.15', '1.25', '1.54', '1.19', '2.47', '1.20', '1.81', '1.20', '1.25'], 500),\n   [7, 25, 13124]),\n  ('regression: bonus table cap',\n   (['1.20', '1.25', '1.25', '2.14', '1.92', '1.20', '1.25', '2.30', '1.25'], 500),\n   [9, 25, 20639]),\n  ('variant scenario 1',\n   (['1.25', '1.15', '1.25', '1.25', '1.25', '1.20', '1.19', '2.59', '1.15'], 500),\n   [6, 20, 7064]),\n  ('variant scenario 2',\n   (['1.78', '1.19', '1.25', '1.71', '1.25', '2.35', '1.25', '1.19'], 1000),\n   [6, 20, 23540])]]\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":"f7677897a4a352f470a707e6367eeefe5bc0af8fb4756315dd2364355a9455a8","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        if d >= Fraction(120, 100):\n            q += 1\n    pct = TABLE.get(q, 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: bonus table cap',\n   (['1.20', '1.25', '1.20', '1.62', '1.25', '1.20', '1.25', '1.20', '1.25'], 100),\n   [9, 25, 1000]),\n  ('variant scenario 1', (['2.08', '1.20', '1.25', '1.39', '1.15'], 500), [4, 10, 2693]),\n  ('variant scenario 2', (['1.19', '1.58'], 1000), [1, 0, 1880])],\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: bonus table cap',\n   (['1.73', '1.20', '1.41', '1.25', '1.25', '1.25', '2.53'], 100),\n   [7, 25, 1783]),\n  ('regression: bonus table cap',\n   (['1.25', '2.16', '1.20', '1.20', '1.94', '1.25', '1.20', '1.15', '1.20'], 500),\n   [8, 25, 9633]),\n  ('variant scenario 1', (['1.20', '1.96', '1.25', '1.19', '2.22'], 100), [4, 10, 844]),\n  ('variant scenario 2', (['1.19', '2.00', '1.15', '1.15', '1.25'], 1000), [2, 0, 3934])],\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: bonus table cap',\n   (['2.20', '1.20', '2.17', '1.20', '1.15', '1.19', '1.20', '1.20', '1.20'], 100),\n   [7, 25, 2007]),\n  ('regression: bonus table cap',\n   (['2.45', '1.25', '2.20', '1.25', '2.53', '1.50', '1.19', '1.20', '1.20'], 100),\n   [8, 25, 6821]),\n  ('variant scenario 1', (['1.25', '1.25', '1.25'], 1000), [3, 5, 2000]),\n  ('variant scenario 2',\n   (['1.19', '1.19', '2.03', '2.44', '1.25', '1.25', '2.17'], 1000),\n   [5, 15, 27200])],\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: bonus table cap',\n   (['1.95', '1.19', '1.25', '2.22', '1.25', '1.92', '1.77', '1.20', '1.20'], 1000),\n   [8, 25, 48988]),\n  ('variant scenario 1',\n   (['1.20', '2.32', '1.19', '1.20', '1.25', '1.20', '1.67'], 500),\n   [6, 20, 5875]),\n  ('variant scenario 2', (['1.19', '1.15', '2.41', '1.25', '1.15'], 1000), [2, 0, 4740])],\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: bonus table cap',\n   (['1.15', '1.25', '1.54', '1.19', '2.47', '1.20', '1.81', '1.20', '1.25'], 500),\n   [7, 25, 13124]),\n  ('regression: bonus table cap',\n   (['1.20', '1.25', '1.25', '2.14', '1.92', '1.20', '1.25', '2.30', '1.25'], 500),\n   [9, 25, 20639]),\n  ('variant scenario 1',\n   (['1.25', '1.15', '1.25', '1.25', '1.25', '1.20', '1.19', '2.59', '1.15'], 500),\n   [6, 20, 7064]),\n  ('variant scenario 2',\n   (['1.78', '1.19', '1.25', '1.71', '1.25', '2.35', '1.25', '1.19'], 1000),\n   [6, 20, 23540])]]\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-bonus-table-cap","generated_at":"2026-09-29T14:50:34.543983+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":"The table lookup uses the raw count, which has no entry above 7.","sha256":"772f20fa606c27c625ab5395b87bea590f0b74d31c689ab1142e178550e05938","title":"Accumulators beyond seven legs get no 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":44.819,"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,476],"check":"boundary short leg does not qualify","expected":[2,0,476],"passed":true},{"actual":[8,20,3055],"check":"boundary eight legs capped","expected":[8,25,3178],"passed":false},{"actual":[9,20,964],"check":"regression: bonus table cap","expected":[9,25,1000],"passed":false},{"actual":[4,10,2693],"check":"variant scenario 1","expected":[4,10,2693],"passed":true},{"actual":[1,0,1880],"check":"variant scenario 2","expected":[1,0,1880],"passed":true}],"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, 476], \"expected\": [2, 0, 476], \"passed\": true}, {\"check\": \"boundary eight legs capped\", \"actual\": [8, 20, 3055], \"expected\": [8, 25, 3178], \"passed\": false}, {\"check\": \"regression: bonus table cap\", \"actual\": [9, 20, 964], \"expected\": [9, 25, 1000], \"passed\": false}, {\"check\": \"variant scenario 1\", \"actual\": [4, 10, 2693], \"expected\": [4, 10, 2693], \"passed\": true}, {\"check\": \"variant scenario 2\", \"actual\": [1, 0, 1880], \"expected\": [1, 0, 1880], \"passed\": true}], \"passed\": false}\n"},"broken":{"elapsed_ms":43.003,"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,476],"check":"boundary short leg does not qualify","expected":[2,0,476],"passed":true},{"actual":[8,0,2562],"check":"boundary eight legs capped","expected":[8,25,3178],"passed":false},{"actual":[9,0,820],"check":"regression: bonus table cap","expected":[9,25,1000],"passed":false},{"actual":[4,10,2693],"check":"variant scenario 1","expected":[4,10,2693],"passed":true},{"actual":[1,0,1880],"check":"variant scenario 2","expected":[1,0,1880],"passed":true}],"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, 476], \"expected\": [2, 0, 476], \"passed\": true}, {\"check\": \"boundary eight legs capped\", \"actual\": [8, 0, 2562], \"expected\": [8, 25, 3178], \"passed\": false}, {\"check\": \"regression: bonus table cap\", \"actual\": [9, 0, 820], \"expected\": [9, 25, 1000], \"passed\": false}, {\"check\": \"variant scenario 1\", \"actual\": [4, 10, 2693], \"expected\": [4, 10, 2693], \"passed\": true}, {\"check\": \"variant scenario 2\", \"actual\": [1, 0, 1880], \"expected\": [1, 0, 1880], \"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."}}