{"abstract":"Typing \"100\" produces a 100.00 decimal price instead of even money.","category":"Betting odds conversion","checks":10,"contract":"Normalise user-typed odds to a decimal price string with two decimals (half up). Detection order: text containing \"/\" is fractional a/b; text starting with \"+\" or \"-\" is American (magnitude >= 100); an unsigned integer >= 100 is a positive American line; anything else is a decimal price, where a comma is the decimal separator (\"2,50\"). Unparseable input, zero denominators, magnitudes below 100 and results not above 1 return \"invalid\".","evaluation_group":"w2-odds-conversion-odds-format-autodetect","failed_approach":"Lowering the threshold to 10 turns small decimal prices like \"50\" into American lines.","family":"w2-odds-conversion-odds-format-autodetect-unsigned-american-threshold","id":"FA-84676","implementations":{"attempt":{"sha256":"2b12e9ccf4e2c740ef3a662939daa34661c5a4a6b4cf7f4c6aac9429444b4143","source":"\"\"\"Failure Map reference implementation. Python standard library only.\"\"\"\nimport json\nfrom fractions import Fraction\nimport math\nN = 1\nobservations = []\ndef solve(text):\n    t = text.strip()\n    try:\n        if '/' in t:\n            a, b = t.split('/')\n            dec = 1 + Fraction(int(a), int(b))\n        elif t[:1] in ('+', '-'):\n            n = int(t[1:])\n            if n < 100:\n                return 'invalid'\n            dec = 1 + (Fraction(n, 100) if t[0] == '+' else Fraction(100, n))\n        elif t.isdigit() and int(t) >= 10:\n            dec = 1 + Fraction(int(t), 100)\n        else:\n            dec = Fraction(t.replace(',', '.'))\n    except (ValueError, ZeroDivisionError):\n        return 'invalid'\n    if dec <= 1:\n        return 'invalid'\n    c = math.floor(dec * 100 + Fraction(1, 2))\n    return '%d.%02d' % (c // 100, c % 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 fractional', ('5/2',), '3.50'),\n  ('control negative american', ('-110',), '1.91'),\n  ('boundary unsigned hundred', ('100',), '2.00'),\n  ('boundary small integer is decimal', ('3',), '3.00'),\n  ('boundary decimal comma', ('2,50',), '2.50'),\n  ('control empty input', ('',), 'invalid'),\n  ('regression: unsigned american threshold', ('100',), '2.00'),\n  ('regression: unsigned american threshold', ('50',), '50.00'),\n  ('variant scenario 1', ('5.92',), '5.92'),\n  ('variant scenario 2', ('7.95',), '7.95')],\n [('control fractional', ('5/2',), '3.50'),\n  ('control negative american', ('-110',), '1.91'),\n  ('boundary unsigned hundred', ('100',), '2.00'),\n  ('boundary small integer is decimal', ('3',), '3.00'),\n  ('boundary decimal comma', ('2,50',), '2.50'),\n  ('control empty input', ('',), 'invalid'),\n  ('regression: unsigned american threshold', ('100',), '2.00'),\n  ('regression: unsigned american threshold', ('50',), '50.00'),\n  ('variant scenario 1', ('1/5',), '1.20'),\n  ('variant scenario 2', ('-421',), '1.24')],\n [('control fractional', ('5/2',), '3.50'),\n  ('control negative american', ('-110',), '1.91'),\n  ('boundary unsigned hundred', ('100',), '2.00'),\n  ('boundary small integer is decimal', ('3',), '3.00'),\n  ('boundary decimal comma', ('2,50',), '2.50'),\n  ('control empty input', ('',), 'invalid'),\n  ('regression: unsigned american threshold', ('100',), '2.00'),\n  ('regression: unsigned american threshold', ('50',), '50.00'),\n  ('variant scenario 1', ('3.75',), '3.75'),\n  ('variant scenario 2', ('4.75',), '4.75')],\n [('control fractional', ('5/2',), '3.50'),\n  ('control negative american', ('-110',), '1.91'),\n  ('boundary unsigned hundred', ('100',), '2.00'),\n  ('boundary small integer is decimal', ('3',), '3.00'),\n  ('boundary decimal comma', ('2,50',), '2.50'),\n  ('control empty input', ('',), 'invalid'),\n  ('regression: unsigned american threshold', ('50',), '50.00'),\n  ('regression: unsigned american threshold', ('100',), '2.00'),\n  ('variant scenario 1', ('469',), '5.69'),\n  ('variant scenario 2', ('+481',), '5.81')],\n [('control fractional', ('5/2',), '3.50'),\n  ('control negative american', ('-110',), '1.91'),\n  ('boundary unsigned hundred', ('100',), '2.00'),\n  ('boundary small integer is decimal', ('3',), '3.00'),\n  ('boundary decimal comma', ('2,50',), '2.50'),\n  ('control empty input', ('',), 'invalid'),\n  ('regression: unsigned american threshold', ('50',), '50.00'),\n  ('regression: unsigned american threshold', ('100',), '2.00'),\n  ('variant scenario 1', ('20/4',), '6.00'),\n  ('variant scenario 2', ('5/0',), 'invalid')]]\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":"b3728437b3f76c5996e6a3b785ff861b0d88ad7cb708d9d7601ab2a9979e26b8","source":"\"\"\"Failure Map reference implementation. Python standard library only.\"\"\"\nimport json\nfrom fractions import Fraction\nimport math\nN = 1\nobservations = []\ndef solve(text):\n    t = text.strip()\n    try:\n        if '/' in t:\n            a, b = t.split('/')\n            dec = 1 + Fraction(int(a), int(b))\n        elif t[:1] in ('+', '-'):\n            n = int(t[1:])\n            if n < 100:\n                return 'invalid'\n            dec = 1 + (Fraction(n, 100) if t[0] == '+' else Fraction(100, n))\n        elif t.isdigit() and int(t) > 100:\n            dec = 1 + Fraction(int(t), 100)\n        else:\n            dec = Fraction(t.replace(',', '.'))\n    except (ValueError, ZeroDivisionError):\n        return 'invalid'\n    if dec <= 1:\n        return 'invalid'\n    c = math.floor(dec * 100 + Fraction(1, 2))\n    return '%d.%02d' % (c // 100, c % 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 fractional', ('5/2',), '3.50'),\n  ('control negative american', ('-110',), '1.91'),\n  ('boundary unsigned hundred', ('100',), '2.00'),\n  ('boundary small integer is decimal', ('3',), '3.00'),\n  ('boundary decimal comma', ('2,50',), '2.50'),\n  ('control empty input', ('',), 'invalid'),\n  ('regression: unsigned american threshold', ('100',), '2.00'),\n  ('regression: unsigned american threshold', ('50',), '50.00'),\n  ('variant scenario 1', ('5.92',), '5.92'),\n  ('variant scenario 2', ('7.95',), '7.95')],\n [('control fractional', ('5/2',), '3.50'),\n  ('control negative american', ('-110',), '1.91'),\n  ('boundary unsigned hundred', ('100',), '2.00'),\n  ('boundary small integer is decimal', ('3',), '3.00'),\n  ('boundary decimal comma', ('2,50',), '2.50'),\n  ('control empty input', ('',), 'invalid'),\n  ('regression: unsigned american threshold', ('100',), '2.00'),\n  ('regression: unsigned american threshold', ('50',), '50.00'),\n  ('variant scenario 1', ('1/5',), '1.20'),\n  ('variant scenario 2', ('-421',), '1.24')],\n [('control fractional', ('5/2',), '3.50'),\n  ('control negative american', ('-110',), '1.91'),\n  ('boundary unsigned hundred', ('100',), '2.00'),\n  ('boundary small integer is decimal', ('3',), '3.00'),\n  ('boundary decimal comma', ('2,50',), '2.50'),\n  ('control empty input', ('',), 'invalid'),\n  ('regression: unsigned american threshold', ('100',), '2.00'),\n  ('regression: unsigned american threshold', ('50',), '50.00'),\n  ('variant scenario 1', ('3.75',), '3.75'),\n  ('variant scenario 2', ('4.75',), '4.75')],\n [('control fractional', ('5/2',), '3.50'),\n  ('control negative american', ('-110',), '1.91'),\n  ('boundary unsigned hundred', ('100',), '2.00'),\n  ('boundary small integer is decimal', ('3',), '3.00'),\n  ('boundary decimal comma', ('2,50',), '2.50'),\n  ('control empty input', ('',), 'invalid'),\n  ('regression: unsigned american threshold', ('50',), '50.00'),\n  ('regression: unsigned american threshold', ('100',), '2.00'),\n  ('variant scenario 1', ('469',), '5.69'),\n  ('variant scenario 2', ('+481',), '5.81')],\n [('control fractional', ('5/2',), '3.50'),\n  ('control negative american', ('-110',), '1.91'),\n  ('boundary unsigned hundred', ('100',), '2.00'),\n  ('boundary small integer is decimal', ('3',), '3.00'),\n  ('boundary decimal comma', ('2,50',), '2.50'),\n  ('control empty input', ('',), 'invalid'),\n  ('regression: unsigned american threshold', ('50',), '50.00'),\n  ('regression: unsigned american threshold', ('100',), '2.00'),\n  ('variant scenario 1', ('20/4',), '6.00'),\n  ('variant scenario 2', ('5/0',), 'invalid')]]\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"},"fixed":{"sha256":"6dcb33d64fe94edd55fea993d23de117cc05a63ba096ca2ddfa7242bd9082d98","source":"\"\"\"Failure Map reference implementation. Python standard library only.\"\"\"\nimport json\nfrom fractions import Fraction\nimport math\nN = 1\nobservations = []\ndef solve(text):\n    t = text.strip()\n    try:\n        if '/' in t:\n            a, b = t.split('/')\n            dec = 1 + Fraction(int(a), int(b))\n        elif t[:1] in ('+', '-'):\n            n = int(t[1:])\n            if n < 100:\n                return 'invalid'\n            dec = 1 + (Fraction(n, 100) if t[0] == '+' else Fraction(100, n))\n        elif t.isdigit() and int(t) >= 100:\n            dec = 1 + Fraction(int(t), 100)\n        else:\n            dec = Fraction(t.replace(',', '.'))\n    except (ValueError, ZeroDivisionError):\n        return 'invalid'\n    if dec <= 1:\n        return 'invalid'\n    c = math.floor(dec * 100 + Fraction(1, 2))\n    return '%d.%02d' % (c // 100, c % 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 fractional', ('5/2',), '3.50'),\n  ('control negative american', ('-110',), '1.91'),\n  ('boundary unsigned hundred', ('100',), '2.00'),\n  ('boundary small integer is decimal', ('3',), '3.00'),\n  ('boundary decimal comma', ('2,50',), '2.50'),\n  ('control empty input', ('',), 'invalid'),\n  ('regression: unsigned american threshold', ('100',), '2.00'),\n  ('regression: unsigned american threshold', ('50',), '50.00'),\n  ('variant scenario 1', ('5.92',), '5.92'),\n  ('variant scenario 2', ('7.95',), '7.95')],\n [('control fractional', ('5/2',), '3.50'),\n  ('control negative american', ('-110',), '1.91'),\n  ('boundary unsigned hundred', ('100',), '2.00'),\n  ('boundary small integer is decimal', ('3',), '3.00'),\n  ('boundary decimal comma', ('2,50',), '2.50'),\n  ('control empty input', ('',), 'invalid'),\n  ('regression: unsigned american threshold', ('100',), '2.00'),\n  ('regression: unsigned american threshold', ('50',), '50.00'),\n  ('variant scenario 1', ('1/5',), '1.20'),\n  ('variant scenario 2', ('-421',), '1.24')],\n [('control fractional', ('5/2',), '3.50'),\n  ('control negative american', ('-110',), '1.91'),\n  ('boundary unsigned hundred', ('100',), '2.00'),\n  ('boundary small integer is decimal', ('3',), '3.00'),\n  ('boundary decimal comma', ('2,50',), '2.50'),\n  ('control empty input', ('',), 'invalid'),\n  ('regression: unsigned american threshold', ('100',), '2.00'),\n  ('regression: unsigned american threshold', ('50',), '50.00'),\n  ('variant scenario 1', ('3.75',), '3.75'),\n  ('variant scenario 2', ('4.75',), '4.75')],\n [('control fractional', ('5/2',), '3.50'),\n  ('control negative american', ('-110',), '1.91'),\n  ('boundary unsigned hundred', ('100',), '2.00'),\n  ('boundary small integer is decimal', ('3',), '3.00'),\n  ('boundary decimal comma', ('2,50',), '2.50'),\n  ('control empty input', ('',), 'invalid'),\n  ('regression: unsigned american threshold', ('50',), '50.00'),\n  ('regression: unsigned american threshold', ('100',), '2.00'),\n  ('variant scenario 1', ('469',), '5.69'),\n  ('variant scenario 2', ('+481',), '5.81')],\n [('control fractional', ('5/2',), '3.50'),\n  ('control negative american', ('-110',), '1.91'),\n  ('boundary unsigned hundred', ('100',), '2.00'),\n  ('boundary small integer is decimal', ('3',), '3.00'),\n  ('boundary decimal comma', ('2,50',), '2.50'),\n  ('control empty input', ('',), 'invalid'),\n  ('regression: unsigned american threshold', ('50',), '50.00'),\n  ('regression: unsigned american threshold', ('100',), '2.00'),\n  ('variant scenario 1', ('20/4',), '6.00'),\n  ('variant scenario 2', ('5/0',), 'invalid')]]\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-odds-format-autodetect-unsigned-american-threshold","generated_at":"2026-09-29T14:50:33.257765+00:00","license":"CC0-1.0","python":"3.12.14","seed":1,"split":"open-access"},"relevance":"Bet-slip inputs accept several odds formats and must not misclassify ambiguous text.","repair":"Treat unsigned integers of 100 or more as American lines.","root_cause":"The unsigned-American test requires the integer to exceed 100.","sha256":"699e91b4ceae2165ad1a3643001951e50340537afbd0f79bfc11e530f5834daf","title":"Unsigned 100 read as a decimal price · case 01","variant":1,"variant_policy":"Five numbered records share a model and may reuse boundary fixtures.","verification":{"attempt":{"elapsed_ms":44.26,"exit_code":1,"observations":[{"actual":"3.50","check":"control fractional","expected":"3.50","passed":true},{"actual":"1.91","check":"control negative american","expected":"1.91","passed":true},{"actual":"2.00","check":"boundary unsigned hundred","expected":"2.00","passed":true},{"actual":"3.00","check":"boundary small integer is decimal","expected":"3.00","passed":true},{"actual":"2.50","check":"boundary decimal comma","expected":"2.50","passed":true},{"actual":"invalid","check":"control empty input","expected":"invalid","passed":true},{"actual":"2.00","check":"regression: unsigned american threshold","expected":"2.00","passed":true},{"actual":"1.50","check":"regression: unsigned american threshold","expected":"50.00","passed":false},{"actual":"5.92","check":"variant scenario 1","expected":"5.92","passed":true},{"actual":"7.95","check":"variant scenario 2","expected":"7.95","passed":true}],"passed":false,"stderr":"","stdout":"{\"observations\": [{\"check\": \"control fractional\", \"actual\": \"3.50\", \"expected\": \"3.50\", \"passed\": true}, {\"check\": \"control negative american\", \"actual\": \"1.91\", \"expected\": \"1.91\", \"passed\": true}, {\"check\": \"boundary unsigned hundred\", \"actual\": \"2.00\", \"expected\": \"2.00\", \"passed\": true}, {\"check\": \"boundary small integer is decimal\", \"actual\": \"3.00\", \"expected\": \"3.00\", \"passed\": true}, {\"check\": \"boundary decimal comma\", \"actual\": \"2.50\", \"expected\": \"2.50\", \"passed\": true}, {\"check\": \"control empty input\", \"actual\": \"invalid\", \"expected\": \"invalid\", \"passed\": true}, {\"check\": \"regression: unsigned american threshold\", \"actual\": \"2.00\", \"expected\": \"2.00\", \"passed\": true}, {\"check\": \"regression: unsigned american threshold\", \"actual\": \"1.50\", \"expected\": \"50.00\", \"passed\": false}, {\"check\": \"variant scenario 1\", \"actual\": \"5.92\", \"expected\": \"5.92\", \"passed\": true}, {\"check\": \"variant scenario 2\", \"actual\": \"7.95\", \"expected\": \"7.95\", \"passed\": true}], \"passed\": false}\n"},"broken":{"elapsed_ms":49.584,"exit_code":1,"observations":[{"actual":"3.50","check":"control fractional","expected":"3.50","passed":true},{"actual":"1.91","check":"control negative american","expected":"1.91","passed":true},{"actual":"100.00","check":"boundary unsigned hundred","expected":"2.00","passed":false},{"actual":"3.00","check":"boundary small integer is decimal","expected":"3.00","passed":true},{"actual":"2.50","check":"boundary decimal comma","expected":"2.50","passed":true},{"actual":"invalid","check":"control empty input","expected":"invalid","passed":true},{"actual":"100.00","check":"regression: unsigned american threshold","expected":"2.00","passed":false},{"actual":"50.00","check":"regression: unsigned american threshold","expected":"50.00","passed":true},{"actual":"5.92","check":"variant scenario 1","expected":"5.92","passed":true},{"actual":"7.95","check":"variant scenario 2","expected":"7.95","passed":true}],"passed":false,"stderr":"","stdout":"{\"observations\": [{\"check\": \"control fractional\", \"actual\": \"3.50\", \"expected\": \"3.50\", \"passed\": true}, {\"check\": \"control negative american\", \"actual\": \"1.91\", \"expected\": \"1.91\", \"passed\": true}, {\"check\": \"boundary unsigned hundred\", \"actual\": \"100.00\", \"expected\": \"2.00\", \"passed\": false}, {\"check\": \"boundary small integer is decimal\", \"actual\": \"3.00\", \"expected\": \"3.00\", \"passed\": true}, {\"check\": \"boundary decimal comma\", \"actual\": \"2.50\", \"expected\": \"2.50\", \"passed\": true}, {\"check\": \"control empty input\", \"actual\": \"invalid\", \"expected\": \"invalid\", \"passed\": true}, {\"check\": \"regression: unsigned american threshold\", \"actual\": \"100.00\", \"expected\": \"2.00\", \"passed\": false}, {\"check\": \"regression: unsigned american threshold\", \"actual\": \"50.00\", \"expected\": \"50.00\", \"passed\": true}, {\"check\": \"variant scenario 1\", \"actual\": \"5.92\", \"expected\": \"5.92\", \"passed\": true}, {\"check\": \"variant scenario 2\", \"actual\": \"7.95\", \"expected\": \"7.95\", \"passed\": true}], \"passed\": false}\n"},"fixed":{"elapsed_ms":41.58,"exit_code":0,"observations":[{"actual":"3.50","check":"control fractional","expected":"3.50","passed":true},{"actual":"1.91","check":"control negative american","expected":"1.91","passed":true},{"actual":"2.00","check":"boundary unsigned hundred","expected":"2.00","passed":true},{"actual":"3.00","check":"boundary small integer is decimal","expected":"3.00","passed":true},{"actual":"2.50","check":"boundary decimal comma","expected":"2.50","passed":true},{"actual":"invalid","check":"control empty input","expected":"invalid","passed":true},{"actual":"2.00","check":"regression: unsigned american threshold","expected":"2.00","passed":true},{"actual":"50.00","check":"regression: unsigned american threshold","expected":"50.00","passed":true},{"actual":"5.92","check":"variant scenario 1","expected":"5.92","passed":true},{"actual":"7.95","check":"variant scenario 2","expected":"7.95","passed":true}],"passed":true,"stderr":"","stdout":"{\"observations\": [{\"check\": \"control fractional\", \"actual\": \"3.50\", \"expected\": \"3.50\", \"passed\": true}, {\"check\": \"control negative american\", \"actual\": \"1.91\", \"expected\": \"1.91\", \"passed\": true}, {\"check\": \"boundary unsigned hundred\", \"actual\": \"2.00\", \"expected\": \"2.00\", \"passed\": true}, {\"check\": \"boundary small integer is decimal\", \"actual\": \"3.00\", \"expected\": \"3.00\", \"passed\": true}, {\"check\": \"boundary decimal comma\", \"actual\": \"2.50\", \"expected\": \"2.50\", \"passed\": true}, {\"check\": \"control empty input\", \"actual\": \"invalid\", \"expected\": \"invalid\", \"passed\": true}, {\"check\": \"regression: unsigned american threshold\", \"actual\": \"2.00\", \"expected\": \"2.00\", \"passed\": true}, {\"check\": \"regression: unsigned american threshold\", \"actual\": \"50.00\", \"expected\": \"50.00\", \"passed\": true}, {\"check\": \"variant scenario 1\", \"actual\": \"5.92\", \"expected\": \"5.92\", \"passed\": true}, {\"check\": \"variant scenario 2\", \"actual\": \"7.95\", \"expected\": \"7.95\", \"passed\": true}], \"passed\": true}\n"}},"verified":true,"visibility":"public"}