{"abstract":"\"74...\" does not match \"7[0-4]\".","category":"Phone number formatting","checks":9,"contract":"Input [number, rules] with rules [pattern, label] in priority order. Pattern characters: X any digit, [..] a class of single digits and inclusive ranges a-b, other characters literal. A pattern matches when each of its positions matches the corresponding number digit (the number may be longer). Score: literal digit 2, class 1, X 0; the highest score wins and ties keep the earlier rule. No match gives \"unknown\".","evaluation_group":"w2-phone-number-formatting-prefix-patterns","failed_approach":"Making the upper end inclusive but the lower end exclusive drops \"70...\".","family":"w2-phone-number-formatting-prefix-patterns-range-inclusive-end","id":"FA-96776","implementations":{"attempt":{"sha256":"e21cca0b1a471181b13a0594f5cc1acb964c3b6bd2758db3c9d7bdd25367226c","source":"\"\"\"Failure Map reference implementation. Python standard library only.\"\"\"\nimport json\n\nN = 1\nobservations = []\ndef solve(x):\n    num, rules = x\n    def match(p, s):\n        i = k = 0\n        while k < len(p):\n            if i >= len(s):\n                return False\n            if p[k] == 'X':\n                ok = s[i].isdigit()\n                k += 1\n            elif p[k] == '[':\n                end = p.index(']', k)\n                body, ok, j = p[k + 1:end], False, 0\n                while j < len(body):\n                    if j + 2 < len(body) and body[j + 1] == '-':\n                        ok = ok or body[j] < s[i] <= body[j + 2]\n                        j += 3\n                    else:\n                        ok = ok or s[i] == body[j]\n                        j += 1\n                k = end + 1\n            else:\n                ok = s[i] == p[k]\n                k += 1\n            if not ok:\n                return False\n            i += 1\n        return True\n    def score(p):\n        total, depth = 0, 0\n        for c in p:\n            if c == '[':\n                depth += 1\n            elif c == ']':\n                depth -= 1\n                total += 1\n            elif c.isdigit() and depth == 0:\n                total += 2\n        return total\n    best = None\n    for p, label in rules:\n        if match(p, num):\n            sc = score(p)\n            if best is None or sc > best[0]:\n                best = (sc, label)\n    return best[1] if best else 'unknown'\ndef check(label, actual, expected):\n    observations.append({\"check\": label, \"actual\": actual, \"expected\": expected, \"passed\": actual == expected})\nfixtures = [[['class beats wildcard', ['72555012', [['7X', 'generic'], ['7[0-4]', 'mobile']]], 'mobile'], ['literal beats class', ['72555012', [['7[0-4]', 'mobile'], ['72', 'special']]], 'special'], ['range upper end inclusive', ['74555012', [['7[0-4]', 'mobile'], ['7X', 'generic']]], 'mobile'], ['range lower end inclusive', ['70555012', [['7[0-4]', 'mobile'], ['7X', 'generic']]], 'mobile'], ['number shorter than the pattern', ['7', [['7X', 'generic']]], 'unknown'], ['tie keeps the first listed rule', ['88555012', [['X8', 'listed-first'], ['8X', 'listed-second']]], 'listed-first'], ['range then literal in one class', ['2555012', [['[0-35]X', 'class-range']]], 'class-range'], ['literal then range in one class', ['5555012', [['[50-3]X', 'class-literal']]], 'class-literal'], ['no rule matches', ['6555012', [['7X', 'generic']]], 'unknown']], [['class beats wildcard', ['72555023', [['7X', 'generic'], ['7[0-4]', 'mobile']]], 'mobile'], ['literal beats class', ['72555023', [['7[0-4]', 'mobile'], ['72', 'special']]], 'special'], ['range upper end inclusive', ['74555023', [['7[0-4]', 'mobile'], ['7X', 'generic']]], 'mobile'], ['range lower end inclusive', ['70555023', [['7[0-4]', 'mobile'], ['7X', 'generic']]], 'mobile'], ['number shorter than the pattern', ['7', [['7X', 'generic']]], 'unknown'], ['tie keeps the first listed rule', ['88555023', [['X8', 'listed-first'], ['8X', 'listed-second']]], 'listed-first'], ['range then literal in one class', ['2555023', [['[0-35]X', 'class-range']]], 'class-range'], ['literal then range in one class', ['5555023', [['[50-3]X', 'class-literal']]], 'class-literal'], ['no rule matches', ['6555023', [['7X', 'generic']]], 'unknown']], [['class beats wildcard', ['72555034', [['7X', 'generic'], ['7[0-4]', 'mobile']]], 'mobile'], ['literal beats class', ['72555034', [['7[0-4]', 'mobile'], ['72', 'special']]], 'special'], ['range upper end inclusive', ['74555034', [['7[0-4]', 'mobile'], ['7X', 'generic']]], 'mobile'], ['range lower end inclusive', ['70555034', [['7[0-4]', 'mobile'], ['7X', 'generic']]], 'mobile'], ['number shorter than the pattern', ['7', [['7X', 'generic']]], 'unknown'], ['tie keeps the first listed rule', ['88555034', [['X8', 'listed-first'], ['8X', 'listed-second']]], 'listed-first'], ['range then literal in one class', ['2555034', [['[0-35]X', 'class-range']]], 'class-range'], ['literal then range in one class', ['5555034', [['[50-3]X', 'class-literal']]], 'class-literal'], ['no rule matches', ['6555034', [['7X', 'generic']]], 'unknown']], [['class beats wildcard', ['72555045', [['7X', 'generic'], ['7[0-4]', 'mobile']]], 'mobile'], ['literal beats class', ['72555045', [['7[0-4]', 'mobile'], ['72', 'special']]], 'special'], ['range upper end inclusive', ['74555045', [['7[0-4]', 'mobile'], ['7X', 'generic']]], 'mobile'], ['range lower end inclusive', ['70555045', [['7[0-4]', 'mobile'], ['7X', 'generic']]], 'mobile'], ['number shorter than the pattern', ['7', [['7X', 'generic']]], 'unknown'], ['tie keeps the first listed rule', ['88555045', [['X8', 'listed-first'], ['8X', 'listed-second']]], 'listed-first'], ['range then literal in one class', ['2555045', [['[0-35]X', 'class-range']]], 'class-range'], ['literal then range in one class', ['5555045', [['[50-3]X', 'class-literal']]], 'class-literal'], ['no rule matches', ['6555045', [['7X', 'generic']]], 'unknown']], [['class beats wildcard', ['72555056', [['7X', 'generic'], ['7[0-4]', 'mobile']]], 'mobile'], ['literal beats class', ['72555056', [['7[0-4]', 'mobile'], ['72', 'special']]], 'special'], ['range upper end inclusive', ['74555056', [['7[0-4]', 'mobile'], ['7X', 'generic']]], 'mobile'], ['range lower end inclusive', ['70555056', [['7[0-4]', 'mobile'], ['7X', 'generic']]], 'mobile'], ['number shorter than the pattern', ['7', [['7X', 'generic']]], 'unknown'], ['tie keeps the first listed rule', ['88555056', [['X8', 'listed-first'], ['8X', 'listed-second']]], 'listed-first'], ['range then literal in one class', ['2555056', [['[0-35]X', 'class-range']]], 'class-range'], ['literal then range in one class', ['5555056', [['[50-3]X', 'class-literal']]], 'class-literal'], ['no rule matches', ['6555056', [['7X', 'generic']]], 'unknown']]]\nfor label, arg, expected in fixtures[N - 1]:\n    check(label, solve(arg), 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":"b206affacda7cac37ff6a2f3d464c7662085b264f46936c9f8313f76ffc3f470","source":"\"\"\"Failure Map reference implementation. Python standard library only.\"\"\"\nimport json\n\nN = 1\nobservations = []\ndef solve(x):\n    num, rules = x\n    def match(p, s):\n        i = k = 0\n        while k < len(p):\n            if i >= len(s):\n                return False\n            if p[k] == 'X':\n                ok = s[i].isdigit()\n                k += 1\n            elif p[k] == '[':\n                end = p.index(']', k)\n                body, ok, j = p[k + 1:end], False, 0\n                while j < len(body):\n                    if j + 2 < len(body) and body[j + 1] == '-':\n                        ok = ok or body[j] <= s[i] < body[j + 2]\n                        j += 3\n                    else:\n                        ok = ok or s[i] == body[j]\n                        j += 1\n                k = end + 1\n            else:\n                ok = s[i] == p[k]\n                k += 1\n            if not ok:\n                return False\n            i += 1\n        return True\n    def score(p):\n        total, depth = 0, 0\n        for c in p:\n            if c == '[':\n                depth += 1\n            elif c == ']':\n                depth -= 1\n                total += 1\n            elif c.isdigit() and depth == 0:\n                total += 2\n        return total\n    best = None\n    for p, label in rules:\n        if match(p, num):\n            sc = score(p)\n            if best is None or sc > best[0]:\n                best = (sc, label)\n    return best[1] if best else 'unknown'\ndef check(label, actual, expected):\n    observations.append({\"check\": label, \"actual\": actual, \"expected\": expected, \"passed\": actual == expected})\nfixtures = [[['class beats wildcard', ['72555012', [['7X', 'generic'], ['7[0-4]', 'mobile']]], 'mobile'], ['literal beats class', ['72555012', [['7[0-4]', 'mobile'], ['72', 'special']]], 'special'], ['range upper end inclusive', ['74555012', [['7[0-4]', 'mobile'], ['7X', 'generic']]], 'mobile'], ['range lower end inclusive', ['70555012', [['7[0-4]', 'mobile'], ['7X', 'generic']]], 'mobile'], ['number shorter than the pattern', ['7', [['7X', 'generic']]], 'unknown'], ['tie keeps the first listed rule', ['88555012', [['X8', 'listed-first'], ['8X', 'listed-second']]], 'listed-first'], ['range then literal in one class', ['2555012', [['[0-35]X', 'class-range']]], 'class-range'], ['literal then range in one class', ['5555012', [['[50-3]X', 'class-literal']]], 'class-literal'], ['no rule matches', ['6555012', [['7X', 'generic']]], 'unknown']], [['class beats wildcard', ['72555023', [['7X', 'generic'], ['7[0-4]', 'mobile']]], 'mobile'], ['literal beats class', ['72555023', [['7[0-4]', 'mobile'], ['72', 'special']]], 'special'], ['range upper end inclusive', ['74555023', [['7[0-4]', 'mobile'], ['7X', 'generic']]], 'mobile'], ['range lower end inclusive', ['70555023', [['7[0-4]', 'mobile'], ['7X', 'generic']]], 'mobile'], ['number shorter than the pattern', ['7', [['7X', 'generic']]], 'unknown'], ['tie keeps the first listed rule', ['88555023', [['X8', 'listed-first'], ['8X', 'listed-second']]], 'listed-first'], ['range then literal in one class', ['2555023', [['[0-35]X', 'class-range']]], 'class-range'], ['literal then range in one class', ['5555023', [['[50-3]X', 'class-literal']]], 'class-literal'], ['no rule matches', ['6555023', [['7X', 'generic']]], 'unknown']], [['class beats wildcard', ['72555034', [['7X', 'generic'], ['7[0-4]', 'mobile']]], 'mobile'], ['literal beats class', ['72555034', [['7[0-4]', 'mobile'], ['72', 'special']]], 'special'], ['range upper end inclusive', ['74555034', [['7[0-4]', 'mobile'], ['7X', 'generic']]], 'mobile'], ['range lower end inclusive', ['70555034', [['7[0-4]', 'mobile'], ['7X', 'generic']]], 'mobile'], ['number shorter than the pattern', ['7', [['7X', 'generic']]], 'unknown'], ['tie keeps the first listed rule', ['88555034', [['X8', 'listed-first'], ['8X', 'listed-second']]], 'listed-first'], ['range then literal in one class', ['2555034', [['[0-35]X', 'class-range']]], 'class-range'], ['literal then range in one class', ['5555034', [['[50-3]X', 'class-literal']]], 'class-literal'], ['no rule matches', ['6555034', [['7X', 'generic']]], 'unknown']], [['class beats wildcard', ['72555045', [['7X', 'generic'], ['7[0-4]', 'mobile']]], 'mobile'], ['literal beats class', ['72555045', [['7[0-4]', 'mobile'], ['72', 'special']]], 'special'], ['range upper end inclusive', ['74555045', [['7[0-4]', 'mobile'], ['7X', 'generic']]], 'mobile'], ['range lower end inclusive', ['70555045', [['7[0-4]', 'mobile'], ['7X', 'generic']]], 'mobile'], ['number shorter than the pattern', ['7', [['7X', 'generic']]], 'unknown'], ['tie keeps the first listed rule', ['88555045', [['X8', 'listed-first'], ['8X', 'listed-second']]], 'listed-first'], ['range then literal in one class', ['2555045', [['[0-35]X', 'class-range']]], 'class-range'], ['literal then range in one class', ['5555045', [['[50-3]X', 'class-literal']]], 'class-literal'], ['no rule matches', ['6555045', [['7X', 'generic']]], 'unknown']], [['class beats wildcard', ['72555056', [['7X', 'generic'], ['7[0-4]', 'mobile']]], 'mobile'], ['literal beats class', ['72555056', [['7[0-4]', 'mobile'], ['72', 'special']]], 'special'], ['range upper end inclusive', ['74555056', [['7[0-4]', 'mobile'], ['7X', 'generic']]], 'mobile'], ['range lower end inclusive', ['70555056', [['7[0-4]', 'mobile'], ['7X', 'generic']]], 'mobile'], ['number shorter than the pattern', ['7', [['7X', 'generic']]], 'unknown'], ['tie keeps the first listed rule', ['88555056', [['X8', 'listed-first'], ['8X', 'listed-second']]], 'listed-first'], ['range then literal in one class', ['2555056', [['[0-35]X', 'class-range']]], 'class-range'], ['literal then range in one class', ['5555056', [['[50-3]X', 'class-literal']]], 'class-literal'], ['no rule matches', ['6555056', [['7X', 'generic']]], 'unknown']]]\nfor label, arg, expected in fixtures[N - 1]:\n    check(label, solve(arg), 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":"1f76afe85952c4a5a0ee9ba5a5aff4620aa9559d96b258b26daa31e775cc3366","source":"\"\"\"Failure Map reference implementation. Python standard library only.\"\"\"\nimport json\n\nN = 1\nobservations = []\ndef solve(x):\n    num, rules = x\n    def match(p, s):\n        i = k = 0\n        while k < len(p):\n            if i >= len(s):\n                return False\n            if p[k] == 'X':\n                ok = s[i].isdigit()\n                k += 1\n            elif p[k] == '[':\n                end = p.index(']', k)\n                body, ok, j = p[k + 1:end], False, 0\n                while j < len(body):\n                    if j + 2 < len(body) and body[j + 1] == '-':\n                        ok = ok or body[j] <= s[i] <= body[j + 2]\n                        j += 3\n                    else:\n                        ok = ok or s[i] == body[j]\n                        j += 1\n                k = end + 1\n            else:\n                ok = s[i] == p[k]\n                k += 1\n            if not ok:\n                return False\n            i += 1\n        return True\n    def score(p):\n        total, depth = 0, 0\n        for c in p:\n            if c == '[':\n                depth += 1\n            elif c == ']':\n                depth -= 1\n                total += 1\n            elif c.isdigit() and depth == 0:\n                total += 2\n        return total\n    best = None\n    for p, label in rules:\n        if match(p, num):\n            sc = score(p)\n            if best is None or sc > best[0]:\n                best = (sc, label)\n    return best[1] if best else 'unknown'\ndef check(label, actual, expected):\n    observations.append({\"check\": label, \"actual\": actual, \"expected\": expected, \"passed\": actual == expected})\nfixtures = [[['class beats wildcard', ['72555012', [['7X', 'generic'], ['7[0-4]', 'mobile']]], 'mobile'], ['literal beats class', ['72555012', [['7[0-4]', 'mobile'], ['72', 'special']]], 'special'], ['range upper end inclusive', ['74555012', [['7[0-4]', 'mobile'], ['7X', 'generic']]], 'mobile'], ['range lower end inclusive', ['70555012', [['7[0-4]', 'mobile'], ['7X', 'generic']]], 'mobile'], ['number shorter than the pattern', ['7', [['7X', 'generic']]], 'unknown'], ['tie keeps the first listed rule', ['88555012', [['X8', 'listed-first'], ['8X', 'listed-second']]], 'listed-first'], ['range then literal in one class', ['2555012', [['[0-35]X', 'class-range']]], 'class-range'], ['literal then range in one class', ['5555012', [['[50-3]X', 'class-literal']]], 'class-literal'], ['no rule matches', ['6555012', [['7X', 'generic']]], 'unknown']], [['class beats wildcard', ['72555023', [['7X', 'generic'], ['7[0-4]', 'mobile']]], 'mobile'], ['literal beats class', ['72555023', [['7[0-4]', 'mobile'], ['72', 'special']]], 'special'], ['range upper end inclusive', ['74555023', [['7[0-4]', 'mobile'], ['7X', 'generic']]], 'mobile'], ['range lower end inclusive', ['70555023', [['7[0-4]', 'mobile'], ['7X', 'generic']]], 'mobile'], ['number shorter than the pattern', ['7', [['7X', 'generic']]], 'unknown'], ['tie keeps the first listed rule', ['88555023', [['X8', 'listed-first'], ['8X', 'listed-second']]], 'listed-first'], ['range then literal in one class', ['2555023', [['[0-35]X', 'class-range']]], 'class-range'], ['literal then range in one class', ['5555023', [['[50-3]X', 'class-literal']]], 'class-literal'], ['no rule matches', ['6555023', [['7X', 'generic']]], 'unknown']], [['class beats wildcard', ['72555034', [['7X', 'generic'], ['7[0-4]', 'mobile']]], 'mobile'], ['literal beats class', ['72555034', [['7[0-4]', 'mobile'], ['72', 'special']]], 'special'], ['range upper end inclusive', ['74555034', [['7[0-4]', 'mobile'], ['7X', 'generic']]], 'mobile'], ['range lower end inclusive', ['70555034', [['7[0-4]', 'mobile'], ['7X', 'generic']]], 'mobile'], ['number shorter than the pattern', ['7', [['7X', 'generic']]], 'unknown'], ['tie keeps the first listed rule', ['88555034', [['X8', 'listed-first'], ['8X', 'listed-second']]], 'listed-first'], ['range then literal in one class', ['2555034', [['[0-35]X', 'class-range']]], 'class-range'], ['literal then range in one class', ['5555034', [['[50-3]X', 'class-literal']]], 'class-literal'], ['no rule matches', ['6555034', [['7X', 'generic']]], 'unknown']], [['class beats wildcard', ['72555045', [['7X', 'generic'], ['7[0-4]', 'mobile']]], 'mobile'], ['literal beats class', ['72555045', [['7[0-4]', 'mobile'], ['72', 'special']]], 'special'], ['range upper end inclusive', ['74555045', [['7[0-4]', 'mobile'], ['7X', 'generic']]], 'mobile'], ['range lower end inclusive', ['70555045', [['7[0-4]', 'mobile'], ['7X', 'generic']]], 'mobile'], ['number shorter than the pattern', ['7', [['7X', 'generic']]], 'unknown'], ['tie keeps the first listed rule', ['88555045', [['X8', 'listed-first'], ['8X', 'listed-second']]], 'listed-first'], ['range then literal in one class', ['2555045', [['[0-35]X', 'class-range']]], 'class-range'], ['literal then range in one class', ['5555045', [['[50-3]X', 'class-literal']]], 'class-literal'], ['no rule matches', ['6555045', [['7X', 'generic']]], 'unknown']], [['class beats wildcard', ['72555056', [['7X', 'generic'], ['7[0-4]', 'mobile']]], 'mobile'], ['literal beats class', ['72555056', [['7[0-4]', 'mobile'], ['72', 'special']]], 'special'], ['range upper end inclusive', ['74555056', [['7[0-4]', 'mobile'], ['7X', 'generic']]], 'mobile'], ['range lower end inclusive', ['70555056', [['7[0-4]', 'mobile'], ['7X', 'generic']]], 'mobile'], ['number shorter than the pattern', ['7', [['7X', 'generic']]], 'unknown'], ['tie keeps the first listed rule', ['88555056', [['X8', 'listed-first'], ['8X', 'listed-second']]], 'listed-first'], ['range then literal in one class', ['2555056', [['[0-35]X', 'class-range']]], 'class-range'], ['literal then range in one class', ['5555056', [['[50-3]X', 'class-literal']]], 'class-literal'], ['no rule matches', ['6555056', [['7X', 'generic']]], 'unknown']]]\nfor label, arg, expected in fixtures[N - 1]:\n    check(label, solve(arg), 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 over synthetic, obviously fictitious telephone numbers and toy country tables. The rules are stipulated for this model only and make no claim of conformance with any numbering plan or telecommunications standard. 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-phone-number-formatting-prefix-patterns-range-inclusive-end","generated_at":"2026-09-29T14:52:25.771414+00:00","license":"CC0-1.0","python":"3.12.14","seed":1,"split":"open-access"},"relevance":"Numbering-plan tables decide routing, rating and number type from prefixes; specificity and range errors misroute whole blocks of numbers.","repair":"Treat ranges as inclusive at both ends.","root_cause":"The range test uses < for the upper end.","sha256":"f4cd234bf9a7872fb07a70caaba8bdd1ec87077b86fe79eb2a3e496a0ba0d4dc","title":"Numbering prefix pattern classifier: class ranges exclude their upper end · case 01","variant":1,"variant_policy":"Five numbered records share a model and may reuse boundary fixtures.","verification":{"attempt":{"elapsed_ms":37.212,"exit_code":1,"observations":[{"actual":"mobile","check":"class beats wildcard","expected":"mobile","passed":true},{"actual":"special","check":"literal beats class","expected":"special","passed":true},{"actual":"mobile","check":"range upper end inclusive","expected":"mobile","passed":true},{"actual":"generic","check":"range lower end inclusive","expected":"mobile","passed":false},{"actual":"unknown","check":"number shorter than the pattern","expected":"unknown","passed":true},{"actual":"listed-first","check":"tie keeps the first listed rule","expected":"listed-first","passed":true},{"actual":"class-range","check":"range then literal in one class","expected":"class-range","passed":true},{"actual":"class-literal","check":"literal then range in one class","expected":"class-literal","passed":true},{"actual":"unknown","check":"no rule matches","expected":"unknown","passed":true}],"passed":false,"stderr":"","stdout":"{\"observations\": [{\"check\": \"class beats wildcard\", \"actual\": \"mobile\", \"expected\": \"mobile\", \"passed\": true}, {\"check\": \"literal beats class\", \"actual\": \"special\", \"expected\": \"special\", \"passed\": true}, {\"check\": \"range upper end inclusive\", \"actual\": \"mobile\", \"expected\": \"mobile\", \"passed\": true}, {\"check\": \"range lower end inclusive\", \"actual\": \"generic\", \"expected\": \"mobile\", \"passed\": false}, {\"check\": \"number shorter than the pattern\", \"actual\": \"unknown\", \"expected\": \"unknown\", \"passed\": true}, {\"check\": \"tie keeps the first listed rule\", \"actual\": \"listed-first\", \"expected\": \"listed-first\", \"passed\": true}, {\"check\": \"range then literal in one class\", \"actual\": \"class-range\", \"expected\": \"class-range\", \"passed\": true}, {\"check\": \"literal then range in one class\", \"actual\": \"class-literal\", \"expected\": \"class-literal\", \"passed\": true}, {\"check\": \"no rule matches\", \"actual\": \"unknown\", \"expected\": \"unknown\", \"passed\": true}], \"passed\": false}\n"},"broken":{"elapsed_ms":38.761,"exit_code":1,"observations":[{"actual":"mobile","check":"class beats wildcard","expected":"mobile","passed":true},{"actual":"special","check":"literal beats class","expected":"special","passed":true},{"actual":"generic","check":"range upper end inclusive","expected":"mobile","passed":false},{"actual":"mobile","check":"range lower end inclusive","expected":"mobile","passed":true},{"actual":"unknown","check":"number shorter than the pattern","expected":"unknown","passed":true},{"actual":"listed-first","check":"tie keeps the first listed rule","expected":"listed-first","passed":true},{"actual":"class-range","check":"range then literal in one class","expected":"class-range","passed":true},{"actual":"class-literal","check":"literal then range in one class","expected":"class-literal","passed":true},{"actual":"unknown","check":"no rule matches","expected":"unknown","passed":true}],"passed":false,"stderr":"","stdout":"{\"observations\": [{\"check\": \"class beats wildcard\", \"actual\": \"mobile\", \"expected\": \"mobile\", \"passed\": true}, {\"check\": \"literal beats class\", \"actual\": \"special\", \"expected\": \"special\", \"passed\": true}, {\"check\": \"range upper end inclusive\", \"actual\": \"generic\", \"expected\": \"mobile\", \"passed\": false}, {\"check\": \"range lower end inclusive\", \"actual\": \"mobile\", \"expected\": \"mobile\", \"passed\": true}, {\"check\": \"number shorter than the pattern\", \"actual\": \"unknown\", \"expected\": \"unknown\", \"passed\": true}, {\"check\": \"tie keeps the first listed rule\", \"actual\": \"listed-first\", \"expected\": \"listed-first\", \"passed\": true}, {\"check\": \"range then literal in one class\", \"actual\": \"class-range\", \"expected\": \"class-range\", \"passed\": true}, {\"check\": \"literal then range in one class\", \"actual\": \"class-literal\", \"expected\": \"class-literal\", \"passed\": true}, {\"check\": \"no rule matches\", \"actual\": \"unknown\", \"expected\": \"unknown\", \"passed\": true}], \"passed\": false}\n"},"fixed":{"elapsed_ms":38.995,"exit_code":0,"observations":[{"actual":"mobile","check":"class beats wildcard","expected":"mobile","passed":true},{"actual":"special","check":"literal beats class","expected":"special","passed":true},{"actual":"mobile","check":"range upper end inclusive","expected":"mobile","passed":true},{"actual":"mobile","check":"range lower end inclusive","expected":"mobile","passed":true},{"actual":"unknown","check":"number shorter than the pattern","expected":"unknown","passed":true},{"actual":"listed-first","check":"tie keeps the first listed rule","expected":"listed-first","passed":true},{"actual":"class-range","check":"range then literal in one class","expected":"class-range","passed":true},{"actual":"class-literal","check":"literal then range in one class","expected":"class-literal","passed":true},{"actual":"unknown","check":"no rule matches","expected":"unknown","passed":true}],"passed":true,"stderr":"","stdout":"{\"observations\": [{\"check\": \"class beats wildcard\", \"actual\": \"mobile\", \"expected\": \"mobile\", \"passed\": true}, {\"check\": \"literal beats class\", \"actual\": \"special\", \"expected\": \"special\", \"passed\": true}, {\"check\": \"range upper end inclusive\", \"actual\": \"mobile\", \"expected\": \"mobile\", \"passed\": true}, {\"check\": \"range lower end inclusive\", \"actual\": \"mobile\", \"expected\": \"mobile\", \"passed\": true}, {\"check\": \"number shorter than the pattern\", \"actual\": \"unknown\", \"expected\": \"unknown\", \"passed\": true}, {\"check\": \"tie keeps the first listed rule\", \"actual\": \"listed-first\", \"expected\": \"listed-first\", \"passed\": true}, {\"check\": \"range then literal in one class\", \"actual\": \"class-range\", \"expected\": \"class-range\", \"passed\": true}, {\"check\": \"literal then range in one class\", \"actual\": \"class-literal\", \"expected\": \"class-literal\", \"passed\": true}, {\"check\": \"no rule matches\", \"actual\": \"unknown\", \"expected\": \"unknown\", \"passed\": true}], \"passed\": true}\n"}},"verified":true,"visibility":"public"}