{"abstract":"1.0.0-alpha and 1.0.0-alpha.1 are treated as the same version.","category":"Feature flag rollout bucketing","checks":8,"contract":"Versions are MAJOR[.MINOR[.PATCH]][-prerelease][+build]; missing components are 0, build metadata is ignored, anything else is invalid (return None). A release outranks its prereleases; prerelease identifiers compare numerically when all digits, lexically otherwise, numeric below alphanumeric, and a shorter identifier list ranks lower when it is a prefix. op is semVerLessThan, semVerEqual or semVerGreaterThan; unknown ops return None.","evaluation_group":"w2-feature-flag-rollout-bucketing-semver-clause","failed_approach":"Reversing the length comparison ranks the shorter list higher.","family":"w2-feature-flag-rollout-bucketing-semver-clause-prerelease-length","id":"FA-74126","implementations":{"attempt":{"sha256":"9abc2b05c2127d35312f1439793609750d99351bac819a7bf946beee507d336b","source":"\"\"\"Failure Map reference implementation. Python standard library only.\"\"\"\nimport json\n\nN = 1\nobservations = []\ndef solve(version, op, target):\n    def parse(s):\n        s = s.split('+', 1)[0]\n        core, _, pre = s.partition('-')\n        parts = core.split('.')\n        if not 1 <= len(parts) <= 3 or not all(p.isdigit() for p in parts):\n            return None\n        nums = [int(p) for p in parts] + [0] * (3 - len(parts))\n        ids = pre.split('.') if pre else []\n        return nums, ids\n    def key_id(i):\n        return (0, int(i), '') if i.isdigit() else (1, 0, i)\n    def cmp(a, b):\n        if a[0] != b[0]:\n            return -1 if a[0] < b[0] else 1\n        x, y = a[1], b[1]\n        if not x or not y:\n            return (len(x) == 0) - (len(y) == 0) if (x or y) else 0\n        for p, q in zip(x, y):\n            kp, kq = key_id(p), key_id(q)\n            if kp != kq:\n                return -1 if kp < kq else 1\n        return (len(x) < len(y)) - (len(x) > len(y))\n    a, b = parse(version), parse(target)\n    if a is None or b is None:\n        return None\n    c = cmp(a, b)\n    return {'semVerLessThan': c < 0, 'semVerEqual': c == 0, 'semVerGreaterThan': c > 0}.get(op)\ndef check(label, actual, expected):\n    observations.append({\"check\": label, \"actual\": actual, \"expected\": expected, \"passed\": actual == expected})\nfixtures = [[('numeric prerelease identifiers compare as numbers',\n   ['1.0.0-beta.11', 'semVerGreaterThan', '1.0.0-beta.2'],\n   True),\n  ('numeric identifier ranks below alphanumeric', ['1.0.0-1', 'semVerLessThan', '1.0.0-alpha'], True),\n  ('release outranks its prerelease', ['1.0.0', 'semVerGreaterThan', '1.0.0-rc.1'], True),\n  ('two-component version pads patch', ['2.1', 'semVerEqual', '2.1.0'], True),\n  ('build metadata is ignored', ['1.0.0+build.5', 'semVerEqual', '1.0.0'], True),\n  ('longer prerelease list ranks higher', ['1.0.0-alpha.1', 'semVerGreaterThan', '1.0.0-alpha'], True),\n  ('version pair sample 1', ['1.0.0-beta.11', 'semVerEqual', '1.0.0-alpha'], False),\n  ('version pair sample 2', ['1.0.0-alpha', 'semVerEqual', '1.0.0'], False)],\n [('numeric identifier ranks below alphanumeric', ['1.0.0-1', 'semVerLessThan', '1.0.0-alpha'], True),\n  ('release outranks its prerelease', ['1.0.0', 'semVerGreaterThan', '1.0.0-rc.1'], True),\n  ('two-component version pads patch', ['2.1', 'semVerEqual', '2.1.0'], True),\n  ('build metadata is ignored', ['1.0.0+build.5', 'semVerEqual', '1.0.0'], True),\n  ('build metadata after prerelease is ignored', ['1.0.0-rc.1+b7', 'semVerEqual', '1.0.0-rc.1'], True),\n  ('longer prerelease list ranks higher', ['1.0.0-alpha.1', 'semVerGreaterThan', '1.0.0-alpha'], True),\n  ('version pair sample 6', ['1.0.0.0', 'semVerEqual', '2.1'], None),\n  ('version pair sample 7', ['2.10.0', 'semVerEqual', '1.0.0-alpha.10'], False)],\n [('release outranks its prerelease', ['1.0.0', 'semVerGreaterThan', '1.0.0-rc.1'], True),\n  ('two-component version pads patch', ['2.1', 'semVerEqual', '2.1.0'], True),\n  ('build metadata is ignored', ['1.0.0+build.5', 'semVerEqual', '1.0.0'], True),\n  ('build metadata after prerelease is ignored', ['1.0.0-rc.1+b7', 'semVerEqual', '1.0.0-rc.1'], True),\n  ('longer prerelease list ranks higher', ['1.0.0-alpha.1', 'semVerGreaterThan', '1.0.0-alpha'], True),\n  ('version pair sample 11', ['1.0.0+build.5', 'semVerLessThan', '1.0.0.0'], None),\n  ('version pair sample 12', ['1.0.0-rc.1', 'semVerEqual', '1.0.0+build.5'], False),\n  ('version pair sample 13', ['1.0.0-alpha.10', 'semVerLessThan', '2.10.0'], True)],\n [('two-component version pads patch', ['2.1', 'semVerEqual', '2.1.0'], True),\n  ('build metadata is ignored', ['1.0.0+build.5', 'semVerEqual', '1.0.0'], True),\n  ('build metadata after prerelease is ignored', ['1.0.0-rc.1+b7', 'semVerEqual', '1.0.0-rc.1'], True),\n  ('longer prerelease list ranks higher', ['1.0.0-alpha.1', 'semVerGreaterThan', '1.0.0-alpha'], True),\n  ('minor ten beats minor nine', ['2.10.0', 'semVerGreaterThan', '2.9.0'], True),\n  ('version pair sample 16', ['1.0.0-alpha.10', 'semVerEqual', '1.0.0'], False),\n  ('version pair sample 17', ['2.9.0', 'semVerEqual', '1.0.0-alpha.10'], False),\n  ('version pair sample 18', ['1.0.0-alpha.1', 'semVerLessThan', '2.1'], True)],\n [('build metadata is ignored', ['1.0.0+build.5', 'semVerEqual', '1.0.0'], True),\n  ('build metadata after prerelease is ignored', ['1.0.0-rc.1+b7', 'semVerEqual', '1.0.0-rc.1'], True),\n  ('longer prerelease list ranks higher', ['1.0.0-alpha.1', 'semVerGreaterThan', '1.0.0-alpha'], True),\n  ('minor ten beats minor nine', ['2.10.0', 'semVerGreaterThan', '2.9.0'], True),\n  ('four components are invalid', ['1.0.0.0', 'semVerEqual', '1.0.0'], None),\n  ('version pair sample 21', ['2.1.0', 'semVerGreaterThan', '2.1'], False),\n  ('version pair sample 22', ['1.0.0-2', 'semVerEqual', '1.0.0+build.5'], False),\n  ('version pair sample 23', ['1.0.0-alpha.10', 'semVerGreaterThan', '2.10.0'], False)]]\nfor label, args, expected in fixtures[N - 1]:\n    check(label, solve(*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":"97c95460aa34d894326abe5e8a99e4645d1941ef2616731b2d8b8efe8a433b95","source":"\"\"\"Failure Map reference implementation. Python standard library only.\"\"\"\nimport json\n\nN = 1\nobservations = []\ndef solve(version, op, target):\n    def parse(s):\n        s = s.split('+', 1)[0]\n        core, _, pre = s.partition('-')\n        parts = core.split('.')\n        if not 1 <= len(parts) <= 3 or not all(p.isdigit() for p in parts):\n            return None\n        nums = [int(p) for p in parts] + [0] * (3 - len(parts))\n        ids = pre.split('.') if pre else []\n        return nums, ids\n    def key_id(i):\n        return (0, int(i), '') if i.isdigit() else (1, 0, i)\n    def cmp(a, b):\n        if a[0] != b[0]:\n            return -1 if a[0] < b[0] else 1\n        x, y = a[1], b[1]\n        if not x or not y:\n            return (len(x) == 0) - (len(y) == 0) if (x or y) else 0\n        for p, q in zip(x, y):\n            kp, kq = key_id(p), key_id(q)\n            if kp != kq:\n                return -1 if kp < kq else 1\n        return 0\n    a, b = parse(version), parse(target)\n    if a is None or b is None:\n        return None\n    c = cmp(a, b)\n    return {'semVerLessThan': c < 0, 'semVerEqual': c == 0, 'semVerGreaterThan': c > 0}.get(op)\ndef check(label, actual, expected):\n    observations.append({\"check\": label, \"actual\": actual, \"expected\": expected, \"passed\": actual == expected})\nfixtures = [[('numeric prerelease identifiers compare as numbers',\n   ['1.0.0-beta.11', 'semVerGreaterThan', '1.0.0-beta.2'],\n   True),\n  ('numeric identifier ranks below alphanumeric', ['1.0.0-1', 'semVerLessThan', '1.0.0-alpha'], True),\n  ('release outranks its prerelease', ['1.0.0', 'semVerGreaterThan', '1.0.0-rc.1'], True),\n  ('two-component version pads patch', ['2.1', 'semVerEqual', '2.1.0'], True),\n  ('build metadata is ignored', ['1.0.0+build.5', 'semVerEqual', '1.0.0'], True),\n  ('longer prerelease list ranks higher', ['1.0.0-alpha.1', 'semVerGreaterThan', '1.0.0-alpha'], True),\n  ('version pair sample 1', ['1.0.0-beta.11', 'semVerEqual', '1.0.0-alpha'], False),\n  ('version pair sample 2', ['1.0.0-alpha', 'semVerEqual', '1.0.0'], False)],\n [('numeric identifier ranks below alphanumeric', ['1.0.0-1', 'semVerLessThan', '1.0.0-alpha'], True),\n  ('release outranks its prerelease', ['1.0.0', 'semVerGreaterThan', '1.0.0-rc.1'], True),\n  ('two-component version pads patch', ['2.1', 'semVerEqual', '2.1.0'], True),\n  ('build metadata is ignored', ['1.0.0+build.5', 'semVerEqual', '1.0.0'], True),\n  ('build metadata after prerelease is ignored', ['1.0.0-rc.1+b7', 'semVerEqual', '1.0.0-rc.1'], True),\n  ('longer prerelease list ranks higher', ['1.0.0-alpha.1', 'semVerGreaterThan', '1.0.0-alpha'], True),\n  ('version pair sample 6', ['1.0.0.0', 'semVerEqual', '2.1'], None),\n  ('version pair sample 7', ['2.10.0', 'semVerEqual', '1.0.0-alpha.10'], False)],\n [('release outranks its prerelease', ['1.0.0', 'semVerGreaterThan', '1.0.0-rc.1'], True),\n  ('two-component version pads patch', ['2.1', 'semVerEqual', '2.1.0'], True),\n  ('build metadata is ignored', ['1.0.0+build.5', 'semVerEqual', '1.0.0'], True),\n  ('build metadata after prerelease is ignored', ['1.0.0-rc.1+b7', 'semVerEqual', '1.0.0-rc.1'], True),\n  ('longer prerelease list ranks higher', ['1.0.0-alpha.1', 'semVerGreaterThan', '1.0.0-alpha'], True),\n  ('version pair sample 11', ['1.0.0+build.5', 'semVerLessThan', '1.0.0.0'], None),\n  ('version pair sample 12', ['1.0.0-rc.1', 'semVerEqual', '1.0.0+build.5'], False),\n  ('version pair sample 13', ['1.0.0-alpha.10', 'semVerLessThan', '2.10.0'], True)],\n [('two-component version pads patch', ['2.1', 'semVerEqual', '2.1.0'], True),\n  ('build metadata is ignored', ['1.0.0+build.5', 'semVerEqual', '1.0.0'], True),\n  ('build metadata after prerelease is ignored', ['1.0.0-rc.1+b7', 'semVerEqual', '1.0.0-rc.1'], True),\n  ('longer prerelease list ranks higher', ['1.0.0-alpha.1', 'semVerGreaterThan', '1.0.0-alpha'], True),\n  ('minor ten beats minor nine', ['2.10.0', 'semVerGreaterThan', '2.9.0'], True),\n  ('version pair sample 16', ['1.0.0-alpha.10', 'semVerEqual', '1.0.0'], False),\n  ('version pair sample 17', ['2.9.0', 'semVerEqual', '1.0.0-alpha.10'], False),\n  ('version pair sample 18', ['1.0.0-alpha.1', 'semVerLessThan', '2.1'], True)],\n [('build metadata is ignored', ['1.0.0+build.5', 'semVerEqual', '1.0.0'], True),\n  ('build metadata after prerelease is ignored', ['1.0.0-rc.1+b7', 'semVerEqual', '1.0.0-rc.1'], True),\n  ('longer prerelease list ranks higher', ['1.0.0-alpha.1', 'semVerGreaterThan', '1.0.0-alpha'], True),\n  ('minor ten beats minor nine', ['2.10.0', 'semVerGreaterThan', '2.9.0'], True),\n  ('four components are invalid', ['1.0.0.0', 'semVerEqual', '1.0.0'], None),\n  ('version pair sample 21', ['2.1.0', 'semVerGreaterThan', '2.1'], False),\n  ('version pair sample 22', ['1.0.0-2', 'semVerEqual', '1.0.0+build.5'], False),\n  ('version pair sample 23', ['1.0.0-alpha.10', 'semVerGreaterThan', '2.10.0'], False)]]\nfor label, args, expected in fixtures[N - 1]:\n    check(label, solve(*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":"ee989bd6db22a5a75d3837ddaa4690c6d2184711186493b83e0410cc89002d3b","source":"\"\"\"Failure Map reference implementation. Python standard library only.\"\"\"\nimport json\n\nN = 1\nobservations = []\ndef solve(version, op, target):\n    def parse(s):\n        s = s.split('+', 1)[0]\n        core, _, pre = s.partition('-')\n        parts = core.split('.')\n        if not 1 <= len(parts) <= 3 or not all(p.isdigit() for p in parts):\n            return None\n        nums = [int(p) for p in parts] + [0] * (3 - len(parts))\n        ids = pre.split('.') if pre else []\n        return nums, ids\n    def key_id(i):\n        return (0, int(i), '') if i.isdigit() else (1, 0, i)\n    def cmp(a, b):\n        if a[0] != b[0]:\n            return -1 if a[0] < b[0] else 1\n        x, y = a[1], b[1]\n        if not x or not y:\n            return (len(x) == 0) - (len(y) == 0) if (x or y) else 0\n        for p, q in zip(x, y):\n            kp, kq = key_id(p), key_id(q)\n            if kp != kq:\n                return -1 if kp < kq else 1\n        return (len(x) > len(y)) - (len(x) < len(y))\n    a, b = parse(version), parse(target)\n    if a is None or b is None:\n        return None\n    c = cmp(a, b)\n    return {'semVerLessThan': c < 0, 'semVerEqual': c == 0, 'semVerGreaterThan': c > 0}.get(op)\ndef check(label, actual, expected):\n    observations.append({\"check\": label, \"actual\": actual, \"expected\": expected, \"passed\": actual == expected})\nfixtures = [[('numeric prerelease identifiers compare as numbers',\n   ['1.0.0-beta.11', 'semVerGreaterThan', '1.0.0-beta.2'],\n   True),\n  ('numeric identifier ranks below alphanumeric', ['1.0.0-1', 'semVerLessThan', '1.0.0-alpha'], True),\n  ('release outranks its prerelease', ['1.0.0', 'semVerGreaterThan', '1.0.0-rc.1'], True),\n  ('two-component version pads patch', ['2.1', 'semVerEqual', '2.1.0'], True),\n  ('build metadata is ignored', ['1.0.0+build.5', 'semVerEqual', '1.0.0'], True),\n  ('longer prerelease list ranks higher', ['1.0.0-alpha.1', 'semVerGreaterThan', '1.0.0-alpha'], True),\n  ('version pair sample 1', ['1.0.0-beta.11', 'semVerEqual', '1.0.0-alpha'], False),\n  ('version pair sample 2', ['1.0.0-alpha', 'semVerEqual', '1.0.0'], False)],\n [('numeric identifier ranks below alphanumeric', ['1.0.0-1', 'semVerLessThan', '1.0.0-alpha'], True),\n  ('release outranks its prerelease', ['1.0.0', 'semVerGreaterThan', '1.0.0-rc.1'], True),\n  ('two-component version pads patch', ['2.1', 'semVerEqual', '2.1.0'], True),\n  ('build metadata is ignored', ['1.0.0+build.5', 'semVerEqual', '1.0.0'], True),\n  ('build metadata after prerelease is ignored', ['1.0.0-rc.1+b7', 'semVerEqual', '1.0.0-rc.1'], True),\n  ('longer prerelease list ranks higher', ['1.0.0-alpha.1', 'semVerGreaterThan', '1.0.0-alpha'], True),\n  ('version pair sample 6', ['1.0.0.0', 'semVerEqual', '2.1'], None),\n  ('version pair sample 7', ['2.10.0', 'semVerEqual', '1.0.0-alpha.10'], False)],\n [('release outranks its prerelease', ['1.0.0', 'semVerGreaterThan', '1.0.0-rc.1'], True),\n  ('two-component version pads patch', ['2.1', 'semVerEqual', '2.1.0'], True),\n  ('build metadata is ignored', ['1.0.0+build.5', 'semVerEqual', '1.0.0'], True),\n  ('build metadata after prerelease is ignored', ['1.0.0-rc.1+b7', 'semVerEqual', '1.0.0-rc.1'], True),\n  ('longer prerelease list ranks higher', ['1.0.0-alpha.1', 'semVerGreaterThan', '1.0.0-alpha'], True),\n  ('version pair sample 11', ['1.0.0+build.5', 'semVerLessThan', '1.0.0.0'], None),\n  ('version pair sample 12', ['1.0.0-rc.1', 'semVerEqual', '1.0.0+build.5'], False),\n  ('version pair sample 13', ['1.0.0-alpha.10', 'semVerLessThan', '2.10.0'], True)],\n [('two-component version pads patch', ['2.1', 'semVerEqual', '2.1.0'], True),\n  ('build metadata is ignored', ['1.0.0+build.5', 'semVerEqual', '1.0.0'], True),\n  ('build metadata after prerelease is ignored', ['1.0.0-rc.1+b7', 'semVerEqual', '1.0.0-rc.1'], True),\n  ('longer prerelease list ranks higher', ['1.0.0-alpha.1', 'semVerGreaterThan', '1.0.0-alpha'], True),\n  ('minor ten beats minor nine', ['2.10.0', 'semVerGreaterThan', '2.9.0'], True),\n  ('version pair sample 16', ['1.0.0-alpha.10', 'semVerEqual', '1.0.0'], False),\n  ('version pair sample 17', ['2.9.0', 'semVerEqual', '1.0.0-alpha.10'], False),\n  ('version pair sample 18', ['1.0.0-alpha.1', 'semVerLessThan', '2.1'], True)],\n [('build metadata is ignored', ['1.0.0+build.5', 'semVerEqual', '1.0.0'], True),\n  ('build metadata after prerelease is ignored', ['1.0.0-rc.1+b7', 'semVerEqual', '1.0.0-rc.1'], True),\n  ('longer prerelease list ranks higher', ['1.0.0-alpha.1', 'semVerGreaterThan', '1.0.0-alpha'], True),\n  ('minor ten beats minor nine', ['2.10.0', 'semVerGreaterThan', '2.9.0'], True),\n  ('four components are invalid', ['1.0.0.0', 'semVerEqual', '1.0.0'], None),\n  ('version pair sample 21', ['2.1.0', 'semVerGreaterThan', '2.1'], False),\n  ('version pair sample 22', ['1.0.0-2', 'semVerEqual', '1.0.0+build.5'], False),\n  ('version pair sample 23', ['1.0.0-alpha.10', 'semVerGreaterThan', '2.10.0'], False)]]\nfor label, args, expected in fixtures[N - 1]:\n    check(label, solve(*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":"A deterministic toy flag-evaluation model with a stipulated contract; it does not reproduce any vendor SDK byte for byte. 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-feature-flag-rollout-bucketing-semver-clause-prerelease-length","generated_at":"2026-09-29T14:48:53.829611+00:00","license":"CC0-1.0","python":"3.12.14","seed":1,"split":"open-access"},"relevance":"Targeting by app version gates features to clients that can render them.","repair":"When all shared identifiers match, the version with more identifiers is greater.","root_cause":"After equal shared identifiers, the comparison returns 0 instead of ranking the longer list higher.","sha256":"318321e6227872cdced25eafa548c0b886858bc11525dab186ce5ba53953fb9f","title":"Semantic version clause: Prerelease prefixes compare equal · case 01","variant":1,"variant_policy":"Five numbered records share a model and may reuse boundary fixtures.","verification":{"attempt":{"elapsed_ms":39.962,"exit_code":1,"observations":[{"actual":true,"check":"numeric prerelease identifiers compare as numbers","expected":true,"passed":true},{"actual":true,"check":"numeric identifier ranks below alphanumeric","expected":true,"passed":true},{"actual":true,"check":"release outranks its prerelease","expected":true,"passed":true},{"actual":true,"check":"two-component version pads patch","expected":true,"passed":true},{"actual":true,"check":"build metadata is ignored","expected":true,"passed":true},{"actual":false,"check":"longer prerelease list ranks higher","expected":true,"passed":false},{"actual":false,"check":"version pair sample 1","expected":false,"passed":true},{"actual":false,"check":"version pair sample 2","expected":false,"passed":true}],"passed":false,"stderr":"","stdout":"{\"observations\": [{\"check\": \"numeric prerelease identifiers compare as numbers\", \"actual\": true, \"expected\": true, \"passed\": true}, {\"check\": \"numeric identifier ranks below alphanumeric\", \"actual\": true, \"expected\": true, \"passed\": true}, {\"check\": \"release outranks its prerelease\", \"actual\": true, \"expected\": true, \"passed\": true}, {\"check\": \"two-component version pads patch\", \"actual\": true, \"expected\": true, \"passed\": true}, {\"check\": \"build metadata is ignored\", \"actual\": true, \"expected\": true, \"passed\": true}, {\"check\": \"longer prerelease list ranks higher\", \"actual\": false, \"expected\": true, \"passed\": false}, {\"check\": \"version pair sample 1\", \"actual\": false, \"expected\": false, \"passed\": true}, {\"check\": \"version pair sample 2\", \"actual\": false, \"expected\": false, \"passed\": true}], \"passed\": false}\n"},"broken":{"elapsed_ms":41.231,"exit_code":1,"observations":[{"actual":true,"check":"numeric prerelease identifiers compare as numbers","expected":true,"passed":true},{"actual":true,"check":"numeric identifier ranks below alphanumeric","expected":true,"passed":true},{"actual":true,"check":"release outranks its prerelease","expected":true,"passed":true},{"actual":true,"check":"two-component version pads patch","expected":true,"passed":true},{"actual":true,"check":"build metadata is ignored","expected":true,"passed":true},{"actual":false,"check":"longer prerelease list ranks higher","expected":true,"passed":false},{"actual":false,"check":"version pair sample 1","expected":false,"passed":true},{"actual":false,"check":"version pair sample 2","expected":false,"passed":true}],"passed":false,"stderr":"","stdout":"{\"observations\": [{\"check\": \"numeric prerelease identifiers compare as numbers\", \"actual\": true, \"expected\": true, \"passed\": true}, {\"check\": \"numeric identifier ranks below alphanumeric\", \"actual\": true, \"expected\": true, \"passed\": true}, {\"check\": \"release outranks its prerelease\", \"actual\": true, \"expected\": true, \"passed\": true}, {\"check\": \"two-component version pads patch\", \"actual\": true, \"expected\": true, \"passed\": true}, {\"check\": \"build metadata is ignored\", \"actual\": true, \"expected\": true, \"passed\": true}, {\"check\": \"longer prerelease list ranks higher\", \"actual\": false, \"expected\": true, \"passed\": false}, {\"check\": \"version pair sample 1\", \"actual\": false, \"expected\": false, \"passed\": true}, {\"check\": \"version pair sample 2\", \"actual\": false, \"expected\": false, \"passed\": true}], \"passed\": false}\n"},"fixed":{"elapsed_ms":40.492,"exit_code":0,"observations":[{"actual":true,"check":"numeric prerelease identifiers compare as numbers","expected":true,"passed":true},{"actual":true,"check":"numeric identifier ranks below alphanumeric","expected":true,"passed":true},{"actual":true,"check":"release outranks its prerelease","expected":true,"passed":true},{"actual":true,"check":"two-component version pads patch","expected":true,"passed":true},{"actual":true,"check":"build metadata is ignored","expected":true,"passed":true},{"actual":true,"check":"longer prerelease list ranks higher","expected":true,"passed":true},{"actual":false,"check":"version pair sample 1","expected":false,"passed":true},{"actual":false,"check":"version pair sample 2","expected":false,"passed":true}],"passed":true,"stderr":"","stdout":"{\"observations\": [{\"check\": \"numeric prerelease identifiers compare as numbers\", \"actual\": true, \"expected\": true, \"passed\": true}, {\"check\": \"numeric identifier ranks below alphanumeric\", \"actual\": true, \"expected\": true, \"passed\": true}, {\"check\": \"release outranks its prerelease\", \"actual\": true, \"expected\": true, \"passed\": true}, {\"check\": \"two-component version pads patch\", \"actual\": true, \"expected\": true, \"passed\": true}, {\"check\": \"build metadata is ignored\", \"actual\": true, \"expected\": true, \"passed\": true}, {\"check\": \"longer prerelease list ranks higher\", \"actual\": true, \"expected\": true, \"passed\": true}, {\"check\": \"version pair sample 1\", \"actual\": false, \"expected\": false, \"passed\": true}, {\"check\": \"version pair sample 2\", \"actual\": false, \"expected\": false, \"passed\": true}], \"passed\": true}\n"}},"verified":true,"visibility":"public"}