{"abstract":"\"EVS\" and \"2/1 ON\" are rejected or mispriced.","category":"Betting odds conversion","checks":11,"contract":"Parse traditional fractional odds text, case-insensitively: \"a/b\" or \"a-b\" with positive integers, \"evens\"/\"evs\"/\"even\" for 1/1, and an optional trailing \" on\" meaning odds-on (the fraction is inverted, \"2/1 on\" = 1/2). Zero parts or anything else return \"invalid\". Return [decimal price rounded half up to two decimals, reduced profit fraction \"a/b\"].","evaluation_group":"w2-odds-conversion-fractional-odds-parser","failed_approach":"Lower-casing after the suffix check still misses an upper-case \" ON\".","family":"w2-odds-conversion-fractional-odds-parser-case-normalization","id":"FA-84396","implementations":{"attempt":{"sha256":"fab7f37c3d4a9ac73adce8d63d56cd2c946bae1ac519add8f6a1c7526ecbd9a0","source":"\"\"\"Failure Map reference implementation. Python standard library only.\"\"\"\nimport json\nfrom fractions import Fraction\nimport math\nN = 1\nobservations = []\ndef solve(text):\n    on = text.strip().endswith(' on')\n    t = text.strip().lower()\n    if on:\n        t = t[:-3].strip()\n    if t in ('evens', 'evs', 'even'):\n        frac = Fraction(1)\n    else:\n        for sep in ('/', '-'):\n            if sep in t:\n                a, _, b = t.partition(sep)\n                break\n        else:\n            return 'invalid'\n        if not a.isdigit() or not b.isdigit() or int(b) == 0 or int(a) == 0:\n            return 'invalid'\n        frac = Fraction(int(a), int(b))\n    if on:\n        frac = 1 / frac\n    dec = 1 + frac\n    cents = math.floor(dec * 100 + Fraction(1, 2))\n    return ['%d.%02d' % (cents // 100, cents % 100), '%d/%d' % (frac.numerator, frac.denominator)]\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 five to two', ('5/2',), ['3.50', '5/2']),\n  ('control hyphen separator', ('11-4',), ['3.75', '11/4']),\n  ('boundary evens alias', ('EVS',), ['2.00', '1/1']),\n  ('boundary odds-on suffix', ('2/1 on',), ['1.50', '1/2']),\n  ('boundary unreduced input', ('4/6',), ['1.67', '2/3']),\n  ('boundary zero denominator', ('5/0',), 'invalid'),\n  ('control half-up rounding', ('1/8',), ['1.13', '1/8']),\n  ('regression: case normalization', ('EVS',), ['2.00', '1/1']),\n  ('regression: case normalization', ('12/11 ON',), ['1.92', '11/12']),\n  ('variant scenario 1', ('11/13',), ['1.85', '11/13']),\n  ('variant scenario 2', ('18/1',), ['19.00', '18/1'])],\n [('control five to two', ('5/2',), ['3.50', '5/2']),\n  ('control hyphen separator', ('11-4',), ['3.75', '11/4']),\n  ('boundary evens alias', ('EVS',), ['2.00', '1/1']),\n  ('boundary odds-on suffix', ('2/1 on',), ['1.50', '1/2']),\n  ('boundary unreduced input', ('4/6',), ['1.67', '2/3']),\n  ('boundary zero denominator', ('5/0',), 'invalid'),\n  ('control half-up rounding', ('1/8',), ['1.13', '1/8']),\n  ('regression: case normalization', ('Evens',), ['2.00', '1/1']),\n  ('regression: case normalization', ('9/1 ON',), ['1.11', '1/9']),\n  ('variant scenario 1', ('5/10',), ['1.50', '1/2']),\n  ('variant scenario 2', ('16-5',), ['4.20', '16/5'])],\n [('control five to two', ('5/2',), ['3.50', '5/2']),\n  ('control hyphen separator', ('11-4',), ['3.75', '11/4']),\n  ('boundary evens alias', ('EVS',), ['2.00', '1/1']),\n  ('boundary odds-on suffix', ('2/1 on',), ['1.50', '1/2']),\n  ('boundary unreduced input', ('4/6',), ['1.67', '2/3']),\n  ('boundary zero denominator', ('5/0',), 'invalid'),\n  ('control half-up rounding', ('1/8',), ['1.13', '1/8']),\n  ('regression: case normalization', ('Evens',), ['2.00', '1/1']),\n  ('regression: case normalization', ('2/13 ON',), ['7.50', '13/2']),\n  ('variant scenario 1', ('5/13 on',), ['3.60', '13/5']),\n  ('variant scenario 2', ('13/4',), ['4.25', '13/4'])],\n [('control five to two', ('5/2',), ['3.50', '5/2']),\n  ('control hyphen separator', ('11-4',), ['3.75', '11/4']),\n  ('boundary evens alias', ('EVS',), ['2.00', '1/1']),\n  ('boundary odds-on suffix', ('2/1 on',), ['1.50', '1/2']),\n  ('boundary unreduced input', ('4/6',), ['1.67', '2/3']),\n  ('boundary zero denominator', ('5/0',), 'invalid'),\n  ('control half-up rounding', ('1/8',), ['1.13', '1/8']),\n  ('regression: case normalization', ('16/10 ON',), ['1.63', '5/8']),\n  ('variant scenario 1', ('2-1',), ['3.00', '2/1']),\n  ('variant scenario 2', ('2/3',), ['1.67', '2/3'])],\n [('control five to two', ('5/2',), ['3.50', '5/2']),\n  ('control hyphen separator', ('11-4',), ['3.75', '11/4']),\n  ('boundary evens alias', ('EVS',), ['2.00', '1/1']),\n  ('boundary odds-on suffix', ('2/1 on',), ['1.50', '1/2']),\n  ('boundary unreduced input', ('4/6',), ['1.67', '2/3']),\n  ('boundary zero denominator', ('5/0',), 'invalid'),\n  ('control half-up rounding', ('1/8',), ['1.13', '1/8']),\n  ('regression: case normalization', ('Evens',), ['2.00', '1/1']),\n  ('regression: case normalization', ('7-2 ON',), ['1.29', '2/7']),\n  ('variant scenario 1', ('13/2 on',), ['1.15', '2/13']),\n  ('variant scenario 2', ('11/3',), ['4.67', '11/3'])]]\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":"0c40df4cfac76f81633cf6d53a2b784d89a065bc72097b72414882e1d731a878","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    on = t.endswith(' on')\n    if on:\n        t = t[:-3].strip()\n    if t in ('evens', 'evs', 'even'):\n        frac = Fraction(1)\n    else:\n        for sep in ('/', '-'):\n            if sep in t:\n                a, _, b = t.partition(sep)\n                break\n        else:\n            return 'invalid'\n        if not a.isdigit() or not b.isdigit() or int(b) == 0 or int(a) == 0:\n            return 'invalid'\n        frac = Fraction(int(a), int(b))\n    if on:\n        frac = 1 / frac\n    dec = 1 + frac\n    cents = math.floor(dec * 100 + Fraction(1, 2))\n    return ['%d.%02d' % (cents // 100, cents % 100), '%d/%d' % (frac.numerator, frac.denominator)]\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 five to two', ('5/2',), ['3.50', '5/2']),\n  ('control hyphen separator', ('11-4',), ['3.75', '11/4']),\n  ('boundary evens alias', ('EVS',), ['2.00', '1/1']),\n  ('boundary odds-on suffix', ('2/1 on',), ['1.50', '1/2']),\n  ('boundary unreduced input', ('4/6',), ['1.67', '2/3']),\n  ('boundary zero denominator', ('5/0',), 'invalid'),\n  ('control half-up rounding', ('1/8',), ['1.13', '1/8']),\n  ('regression: case normalization', ('EVS',), ['2.00', '1/1']),\n  ('regression: case normalization', ('12/11 ON',), ['1.92', '11/12']),\n  ('variant scenario 1', ('11/13',), ['1.85', '11/13']),\n  ('variant scenario 2', ('18/1',), ['19.00', '18/1'])],\n [('control five to two', ('5/2',), ['3.50', '5/2']),\n  ('control hyphen separator', ('11-4',), ['3.75', '11/4']),\n  ('boundary evens alias', ('EVS',), ['2.00', '1/1']),\n  ('boundary odds-on suffix', ('2/1 on',), ['1.50', '1/2']),\n  ('boundary unreduced input', ('4/6',), ['1.67', '2/3']),\n  ('boundary zero denominator', ('5/0',), 'invalid'),\n  ('control half-up rounding', ('1/8',), ['1.13', '1/8']),\n  ('regression: case normalization', ('Evens',), ['2.00', '1/1']),\n  ('regression: case normalization', ('9/1 ON',), ['1.11', '1/9']),\n  ('variant scenario 1', ('5/10',), ['1.50', '1/2']),\n  ('variant scenario 2', ('16-5',), ['4.20', '16/5'])],\n [('control five to two', ('5/2',), ['3.50', '5/2']),\n  ('control hyphen separator', ('11-4',), ['3.75', '11/4']),\n  ('boundary evens alias', ('EVS',), ['2.00', '1/1']),\n  ('boundary odds-on suffix', ('2/1 on',), ['1.50', '1/2']),\n  ('boundary unreduced input', ('4/6',), ['1.67', '2/3']),\n  ('boundary zero denominator', ('5/0',), 'invalid'),\n  ('control half-up rounding', ('1/8',), ['1.13', '1/8']),\n  ('regression: case normalization', ('Evens',), ['2.00', '1/1']),\n  ('regression: case normalization', ('2/13 ON',), ['7.50', '13/2']),\n  ('variant scenario 1', ('5/13 on',), ['3.60', '13/5']),\n  ('variant scenario 2', ('13/4',), ['4.25', '13/4'])],\n [('control five to two', ('5/2',), ['3.50', '5/2']),\n  ('control hyphen separator', ('11-4',), ['3.75', '11/4']),\n  ('boundary evens alias', ('EVS',), ['2.00', '1/1']),\n  ('boundary odds-on suffix', ('2/1 on',), ['1.50', '1/2']),\n  ('boundary unreduced input', ('4/6',), ['1.67', '2/3']),\n  ('boundary zero denominator', ('5/0',), 'invalid'),\n  ('control half-up rounding', ('1/8',), ['1.13', '1/8']),\n  ('regression: case normalization', ('16/10 ON',), ['1.63', '5/8']),\n  ('variant scenario 1', ('2-1',), ['3.00', '2/1']),\n  ('variant scenario 2', ('2/3',), ['1.67', '2/3'])],\n [('control five to two', ('5/2',), ['3.50', '5/2']),\n  ('control hyphen separator', ('11-4',), ['3.75', '11/4']),\n  ('boundary evens alias', ('EVS',), ['2.00', '1/1']),\n  ('boundary odds-on suffix', ('2/1 on',), ['1.50', '1/2']),\n  ('boundary unreduced input', ('4/6',), ['1.67', '2/3']),\n  ('boundary zero denominator', ('5/0',), 'invalid'),\n  ('control half-up rounding', ('1/8',), ['1.13', '1/8']),\n  ('regression: case normalization', ('Evens',), ['2.00', '1/1']),\n  ('regression: case normalization', ('7-2 ON',), ['1.29', '2/7']),\n  ('variant scenario 1', ('13/2 on',), ['1.15', '2/13']),\n  ('variant scenario 2', ('11/3',), ['4.67', '11/3'])]]\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":"2664aa351b96c645ce361d64a5b1b53aca563bdedfa554e909b50f222595976e","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().lower()\n    on = t.endswith(' on')\n    if on:\n        t = t[:-3].strip()\n    if t in ('evens', 'evs', 'even'):\n        frac = Fraction(1)\n    else:\n        for sep in ('/', '-'):\n            if sep in t:\n                a, _, b = t.partition(sep)\n                break\n        else:\n            return 'invalid'\n        if not a.isdigit() or not b.isdigit() or int(b) == 0 or int(a) == 0:\n            return 'invalid'\n        frac = Fraction(int(a), int(b))\n    if on:\n        frac = 1 / frac\n    dec = 1 + frac\n    cents = math.floor(dec * 100 + Fraction(1, 2))\n    return ['%d.%02d' % (cents // 100, cents % 100), '%d/%d' % (frac.numerator, frac.denominator)]\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 five to two', ('5/2',), ['3.50', '5/2']),\n  ('control hyphen separator', ('11-4',), ['3.75', '11/4']),\n  ('boundary evens alias', ('EVS',), ['2.00', '1/1']),\n  ('boundary odds-on suffix', ('2/1 on',), ['1.50', '1/2']),\n  ('boundary unreduced input', ('4/6',), ['1.67', '2/3']),\n  ('boundary zero denominator', ('5/0',), 'invalid'),\n  ('control half-up rounding', ('1/8',), ['1.13', '1/8']),\n  ('regression: case normalization', ('EVS',), ['2.00', '1/1']),\n  ('regression: case normalization', ('12/11 ON',), ['1.92', '11/12']),\n  ('variant scenario 1', ('11/13',), ['1.85', '11/13']),\n  ('variant scenario 2', ('18/1',), ['19.00', '18/1'])],\n [('control five to two', ('5/2',), ['3.50', '5/2']),\n  ('control hyphen separator', ('11-4',), ['3.75', '11/4']),\n  ('boundary evens alias', ('EVS',), ['2.00', '1/1']),\n  ('boundary odds-on suffix', ('2/1 on',), ['1.50', '1/2']),\n  ('boundary unreduced input', ('4/6',), ['1.67', '2/3']),\n  ('boundary zero denominator', ('5/0',), 'invalid'),\n  ('control half-up rounding', ('1/8',), ['1.13', '1/8']),\n  ('regression: case normalization', ('Evens',), ['2.00', '1/1']),\n  ('regression: case normalization', ('9/1 ON',), ['1.11', '1/9']),\n  ('variant scenario 1', ('5/10',), ['1.50', '1/2']),\n  ('variant scenario 2', ('16-5',), ['4.20', '16/5'])],\n [('control five to two', ('5/2',), ['3.50', '5/2']),\n  ('control hyphen separator', ('11-4',), ['3.75', '11/4']),\n  ('boundary evens alias', ('EVS',), ['2.00', '1/1']),\n  ('boundary odds-on suffix', ('2/1 on',), ['1.50', '1/2']),\n  ('boundary unreduced input', ('4/6',), ['1.67', '2/3']),\n  ('boundary zero denominator', ('5/0',), 'invalid'),\n  ('control half-up rounding', ('1/8',), ['1.13', '1/8']),\n  ('regression: case normalization', ('Evens',), ['2.00', '1/1']),\n  ('regression: case normalization', ('2/13 ON',), ['7.50', '13/2']),\n  ('variant scenario 1', ('5/13 on',), ['3.60', '13/5']),\n  ('variant scenario 2', ('13/4',), ['4.25', '13/4'])],\n [('control five to two', ('5/2',), ['3.50', '5/2']),\n  ('control hyphen separator', ('11-4',), ['3.75', '11/4']),\n  ('boundary evens alias', ('EVS',), ['2.00', '1/1']),\n  ('boundary odds-on suffix', ('2/1 on',), ['1.50', '1/2']),\n  ('boundary unreduced input', ('4/6',), ['1.67', '2/3']),\n  ('boundary zero denominator', ('5/0',), 'invalid'),\n  ('control half-up rounding', ('1/8',), ['1.13', '1/8']),\n  ('regression: case normalization', ('16/10 ON',), ['1.63', '5/8']),\n  ('variant scenario 1', ('2-1',), ['3.00', '2/1']),\n  ('variant scenario 2', ('2/3',), ['1.67', '2/3'])],\n [('control five to two', ('5/2',), ['3.50', '5/2']),\n  ('control hyphen separator', ('11-4',), ['3.75', '11/4']),\n  ('boundary evens alias', ('EVS',), ['2.00', '1/1']),\n  ('boundary odds-on suffix', ('2/1 on',), ['1.50', '1/2']),\n  ('boundary unreduced input', ('4/6',), ['1.67', '2/3']),\n  ('boundary zero denominator', ('5/0',), 'invalid'),\n  ('control half-up rounding', ('1/8',), ['1.13', '1/8']),\n  ('regression: case normalization', ('Evens',), ['2.00', '1/1']),\n  ('regression: case normalization', ('7-2 ON',), ['1.29', '2/7']),\n  ('variant scenario 1', ('13/2 on',), ['1.15', '2/13']),\n  ('variant scenario 2', ('11/3',), ['4.67', '11/3'])]]\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-fractional-odds-parser-case-normalization","generated_at":"2026-09-29T14:50:30.508592+00:00","license":"CC0-1.0","python":"3.12.14","seed":1,"split":"open-access"},"relevance":"Racing feeds and manual price entry use traditional fractional notation with odds-on suffixes.","repair":"Lower-case before detecting the suffix and aliases.","root_cause":"The text is not lower-cased before matching aliases and the suffix.","sha256":"38c6252f1a4e6ce23fdef3295080072dd7dc9e5670ea77e67024cff1e2ea3171","title":"Upper-case odds text rejected · case 01","variant":1,"variant_policy":"Five numbered records share a model and may reuse boundary fixtures.","verification":{"attempt":{"elapsed_ms":44.234,"exit_code":1,"observations":[{"actual":["3.50","5/2"],"check":"control five to two","expected":["3.50","5/2"],"passed":true},{"actual":["3.75","11/4"],"check":"control hyphen separator","expected":["3.75","11/4"],"passed":true},{"actual":["2.00","1/1"],"check":"boundary evens alias","expected":["2.00","1/1"],"passed":true},{"actual":["1.50","1/2"],"check":"boundary odds-on suffix","expected":["1.50","1/2"],"passed":true},{"actual":["1.67","2/3"],"check":"boundary unreduced input","expected":["1.67","2/3"],"passed":true},{"actual":"invalid","check":"boundary zero denominator","expected":"invalid","passed":true},{"actual":["1.13","1/8"],"check":"control half-up rounding","expected":["1.13","1/8"],"passed":true},{"actual":["2.00","1/1"],"check":"regression: case normalization","expected":["2.00","1/1"],"passed":true},{"actual":"invalid","check":"regression: case normalization","expected":["1.92","11/12"],"passed":false},{"actual":["1.85","11/13"],"check":"variant scenario 1","expected":["1.85","11/13"],"passed":true},{"actual":["19.00","18/1"],"check":"variant scenario 2","expected":["19.00","18/1"],"passed":true}],"passed":false,"stderr":"","stdout":"{\"observations\": [{\"check\": \"control five to two\", \"actual\": [\"3.50\", \"5/2\"], \"expected\": [\"3.50\", \"5/2\"], \"passed\": true}, {\"check\": \"control hyphen separator\", \"actual\": [\"3.75\", \"11/4\"], \"expected\": [\"3.75\", \"11/4\"], \"passed\": true}, {\"check\": \"boundary evens alias\", \"actual\": [\"2.00\", \"1/1\"], \"expected\": [\"2.00\", \"1/1\"], \"passed\": true}, {\"check\": \"boundary odds-on suffix\", \"actual\": [\"1.50\", \"1/2\"], \"expected\": [\"1.50\", \"1/2\"], \"passed\": true}, {\"check\": \"boundary unreduced input\", \"actual\": [\"1.67\", \"2/3\"], \"expected\": [\"1.67\", \"2/3\"], \"passed\": true}, {\"check\": \"boundary zero denominator\", \"actual\": \"invalid\", \"expected\": \"invalid\", \"passed\": true}, {\"check\": \"control half-up rounding\", \"actual\": [\"1.13\", \"1/8\"], \"expected\": [\"1.13\", \"1/8\"], \"passed\": true}, {\"check\": \"regression: case normalization\", \"actual\": [\"2.00\", \"1/1\"], \"expected\": [\"2.00\", \"1/1\"], \"passed\": true}, {\"check\": \"regression: case normalization\", \"actual\": \"invalid\", \"expected\": [\"1.92\", \"11/12\"], \"passed\": false}, {\"check\": \"variant scenario 1\", \"actual\": [\"1.85\", \"11/13\"], \"expected\": [\"1.85\", \"11/13\"], \"passed\": true}, {\"check\": \"variant scenario 2\", \"actual\": [\"19.00\", \"18/1\"], \"expected\": [\"19.00\", \"18/1\"], \"passed\": true}], \"passed\": false}\n"},"broken":{"elapsed_ms":42.745,"exit_code":1,"observations":[{"actual":["3.50","5/2"],"check":"control five to two","expected":["3.50","5/2"],"passed":true},{"actual":["3.75","11/4"],"check":"control hyphen separator","expected":["3.75","11/4"],"passed":true},{"actual":"invalid","check":"boundary evens alias","expected":["2.00","1/1"],"passed":false},{"actual":["1.50","1/2"],"check":"boundary odds-on suffix","expected":["1.50","1/2"],"passed":true},{"actual":["1.67","2/3"],"check":"boundary unreduced input","expected":["1.67","2/3"],"passed":true},{"actual":"invalid","check":"boundary zero denominator","expected":"invalid","passed":true},{"actual":["1.13","1/8"],"check":"control half-up rounding","expected":["1.13","1/8"],"passed":true},{"actual":"invalid","check":"regression: case normalization","expected":["2.00","1/1"],"passed":false},{"actual":"invalid","check":"regression: case normalization","expected":["1.92","11/12"],"passed":false},{"actual":["1.85","11/13"],"check":"variant scenario 1","expected":["1.85","11/13"],"passed":true},{"actual":["19.00","18/1"],"check":"variant scenario 2","expected":["19.00","18/1"],"passed":true}],"passed":false,"stderr":"","stdout":"{\"observations\": [{\"check\": \"control five to two\", \"actual\": [\"3.50\", \"5/2\"], \"expected\": [\"3.50\", \"5/2\"], \"passed\": true}, {\"check\": \"control hyphen separator\", \"actual\": [\"3.75\", \"11/4\"], \"expected\": [\"3.75\", \"11/4\"], \"passed\": true}, {\"check\": \"boundary evens alias\", \"actual\": \"invalid\", \"expected\": [\"2.00\", \"1/1\"], \"passed\": false}, {\"check\": \"boundary odds-on suffix\", \"actual\": [\"1.50\", \"1/2\"], \"expected\": [\"1.50\", \"1/2\"], \"passed\": true}, {\"check\": \"boundary unreduced input\", \"actual\": [\"1.67\", \"2/3\"], \"expected\": [\"1.67\", \"2/3\"], \"passed\": true}, {\"check\": \"boundary zero denominator\", \"actual\": \"invalid\", \"expected\": \"invalid\", \"passed\": true}, {\"check\": \"control half-up rounding\", \"actual\": [\"1.13\", \"1/8\"], \"expected\": [\"1.13\", \"1/8\"], \"passed\": true}, {\"check\": \"regression: case normalization\", \"actual\": \"invalid\", \"expected\": [\"2.00\", \"1/1\"], \"passed\": false}, {\"check\": \"regression: case normalization\", \"actual\": \"invalid\", \"expected\": [\"1.92\", \"11/12\"], \"passed\": false}, {\"check\": \"variant scenario 1\", \"actual\": [\"1.85\", \"11/13\"], \"expected\": [\"1.85\", \"11/13\"], \"passed\": true}, {\"check\": \"variant scenario 2\", \"actual\": [\"19.00\", \"18/1\"], \"expected\": [\"19.00\", \"18/1\"], \"passed\": true}], \"passed\": false}\n"},"fixed":{"elapsed_ms":43.307,"exit_code":0,"observations":[{"actual":["3.50","5/2"],"check":"control five to two","expected":["3.50","5/2"],"passed":true},{"actual":["3.75","11/4"],"check":"control hyphen separator","expected":["3.75","11/4"],"passed":true},{"actual":["2.00","1/1"],"check":"boundary evens alias","expected":["2.00","1/1"],"passed":true},{"actual":["1.50","1/2"],"check":"boundary odds-on suffix","expected":["1.50","1/2"],"passed":true},{"actual":["1.67","2/3"],"check":"boundary unreduced input","expected":["1.67","2/3"],"passed":true},{"actual":"invalid","check":"boundary zero denominator","expected":"invalid","passed":true},{"actual":["1.13","1/8"],"check":"control half-up rounding","expected":["1.13","1/8"],"passed":true},{"actual":["2.00","1/1"],"check":"regression: case normalization","expected":["2.00","1/1"],"passed":true},{"actual":["1.92","11/12"],"check":"regression: case normalization","expected":["1.92","11/12"],"passed":true},{"actual":["1.85","11/13"],"check":"variant scenario 1","expected":["1.85","11/13"],"passed":true},{"actual":["19.00","18/1"],"check":"variant scenario 2","expected":["19.00","18/1"],"passed":true}],"passed":true,"stderr":"","stdout":"{\"observations\": [{\"check\": \"control five to two\", \"actual\": [\"3.50\", \"5/2\"], \"expected\": [\"3.50\", \"5/2\"], \"passed\": true}, {\"check\": \"control hyphen separator\", \"actual\": [\"3.75\", \"11/4\"], \"expected\": [\"3.75\", \"11/4\"], \"passed\": true}, {\"check\": \"boundary evens alias\", \"actual\": [\"2.00\", \"1/1\"], \"expected\": [\"2.00\", \"1/1\"], \"passed\": true}, {\"check\": \"boundary odds-on suffix\", \"actual\": [\"1.50\", \"1/2\"], \"expected\": [\"1.50\", \"1/2\"], \"passed\": true}, {\"check\": \"boundary unreduced input\", \"actual\": [\"1.67\", \"2/3\"], \"expected\": [\"1.67\", \"2/3\"], \"passed\": true}, {\"check\": \"boundary zero denominator\", \"actual\": \"invalid\", \"expected\": \"invalid\", \"passed\": true}, {\"check\": \"control half-up rounding\", \"actual\": [\"1.13\", \"1/8\"], \"expected\": [\"1.13\", \"1/8\"], \"passed\": true}, {\"check\": \"regression: case normalization\", \"actual\": [\"2.00\", \"1/1\"], \"expected\": [\"2.00\", \"1/1\"], \"passed\": true}, {\"check\": \"regression: case normalization\", \"actual\": [\"1.92\", \"11/12\"], \"expected\": [\"1.92\", \"11/12\"], \"passed\": true}, {\"check\": \"variant scenario 1\", \"actual\": [\"1.85\", \"11/13\"], \"expected\": [\"1.85\", \"11/13\"], \"passed\": true}, {\"check\": \"variant scenario 2\", \"actual\": [\"19.00\", \"18/1\"], \"expected\": [\"19.00\", \"18/1\"], \"passed\": true}], \"passed\": true}\n"}},"verified":true,"visibility":"public"}