{"abstract":"An org id sent as 5.0 by one client and 5 by another lands in different buckets.","category":"Feature flag rollout bucketing","checks":8,"contract":"The bucketing identity is user[bucket_by] when bucket_by is non-empty and present, else user[\"key\"]. Booleans, None and non-scalar values are unbucketable -> [None, 0]; integral floats use their integer form, other floats are unbucketable; ints and strings are used verbatim via str(). Return [identity, crc32(flag_key + \".\" + salt + \".\" + identity) % 100000].","evaluation_group":"w2-feature-flag-rollout-bucketing-bucket-by-attribute","failed_approach":"Stripping trailing zeros from the float text leaves \"5.\" as the identity.","family":"w2-feature-flag-rollout-bucketing-bucket-by-attribute-integral-float","id":"FA-73966","implementations":{"attempt":{"sha256":"7dff2d6463cff52c93d2acefb5e19307fbb1c6d4ef599edd2fe75daf71808a9f","source":"\"\"\"Failure Map reference implementation. Python standard library only.\"\"\"\nimport json\nimport zlib\nN = 1\nobservations = []\ndef solve(flag_key, salt, user, bucket_by):\n    if bucket_by and bucket_by in user:\n        value = user[bucket_by]\n    else:\n        value = user.get('key')\n    if isinstance(value, bool) or value is None:\n        return [None, 0]\n    if isinstance(value, float):\n        if value != int(value):\n            return [None, 0]\n        value = str(value).rstrip('0')\n    if not isinstance(value, (int, str)):\n        return [None, 0]\n    ident = str(value)\n    return [ident, zlib.crc32((flag_key + '.' + salt + '.' + ident).encode()) % 100000]\ndef check(label, actual, expected):\n    observations.append({\"check\": label, \"actual\": actual, \"expected\": expected, \"passed\": actual == expected})\nfixtures = [[('boolean attribute is unbucketable', ['new-nav', 'a', {'key': 'u1', 'org': True}, 'org'], [None, 0]),\n  ('integral float bucketed as integer', ['new-nav', 'a', {'key': 'u1', 'org': 5.0}, 'org'], ['5', 7520]),\n  ('integral float matches integer identity', ['new-nav', 'a', {'key': 'u1', 'org': 5}, 'org'], ['5', 7520]),\n  ('missing bucket attribute falls back to key', ['new-nav', 'a', {'key': 'u1'}, 'org'], ['u1', 4562]),\n  ('zero attribute is a real identity', ['bulk-edit', 'b', {'key': 'u2', 'org': 0}, 'org'], ['0', 47112]),\n  ('identity sample 1', ['new-nav', 'b', {'key': '05', 'org': '', 'team': 5.0}, 'team'], ['5', 56729]),\n  ('identity sample 2', ['new-nav', 'b', {'key': 'u1', 'org': '05', 'team': [1]}, 'org'], ['05', 58693]),\n  ('identity sample 3', ['new-nav', 'b', {'key': '007', 'org': 'acme'}, 'org'], ['acme', 9580])],\n [('integral float bucketed as integer', ['new-nav', 'a', {'key': 'u1', 'org': 5.0}, 'org'], ['5', 7520]),\n  ('integral float matches integer identity', ['new-nav', 'a', {'key': 'u1', 'org': 5}, 'org'], ['5', 7520]),\n  ('missing bucket attribute falls back to key', ['new-nav', 'a', {'key': 'u1'}, 'org'], ['u1', 4562]),\n  ('zero attribute is a real identity', ['bulk-edit', 'b', {'key': 'u2', 'org': 0}, 'org'], ['0', 47112]),\n  ('fractional float is unbucketable', ['new-nav', 'a', {'key': 'u1', 'org': 2.5}, 'org'], [None, 0]),\n  ('identity sample 1', ['new-nav', 'b', {'key': '05', 'org': '', 'team': 5.0}, 'team'], ['5', 56729]),\n  ('identity sample 6', ['new-nav', 'b', {'key': 'u1', 'org': -3.0, 'team': 2.5}, 'org'], ['-3', 33868]),\n  ('identity sample 7', ['new-nav', 'a', {'key': '007', 'team': 'acme'}, 'team'], ['acme', 37026])],\n [('integral float matches integer identity', ['new-nav', 'a', {'key': 'u1', 'org': 5}, 'org'], ['5', 7520]),\n  ('missing bucket attribute falls back to key', ['new-nav', 'a', {'key': 'u1'}, 'org'], ['u1', 4562]),\n  ('zero attribute is a real identity', ['bulk-edit', 'b', {'key': 'u2', 'org': 0}, 'org'], ['0', 47112]),\n  ('fractional float is unbucketable', ['new-nav', 'a', {'key': 'u1', 'org': 2.5}, 'org'], [None, 0]),\n  ('leading-zero string kept verbatim', ['new-nav', 'a', {'key': 'u1', 'org': '007'}, 'org'], ['007', 42108]),\n  ('identity sample 6', ['new-nav', 'b', {'key': 'u1', 'org': -3.0, 'team': 2.5}, 'org'], ['-3', 33868]),\n  ('identity sample 11', ['new-nav', 'a', {'key': 'u1', 'org': 12, 'team': 2.5}, None], ['u1', 4562]),\n  ('identity sample 12', ['new-nav', 'b', {'key': '007'}, None], ['007', 68652])],\n [('integral float bucketed as integer', ['new-nav', 'a', {'key': 'u1', 'org': 5.0}, 'org'], ['5', 7520]),\n  ('missing bucket attribute falls back to key', ['new-nav', 'a', {'key': 'u1'}, 'org'], ['u1', 4562]),\n  ('zero attribute is a real identity', ['bulk-edit', 'b', {'key': 'u2', 'org': 0}, 'org'], ['0', 47112]),\n  ('fractional float is unbucketable', ['new-nav', 'a', {'key': 'u1', 'org': 2.5}, 'org'], [None, 0]),\n  ('leading-zero string kept verbatim', ['new-nav', 'a', {'key': 'u1', 'org': '007'}, 'org'], ['007', 42108]),\n  ('leading-zero key kept verbatim', ['bulk-edit', 'b', {'key': '05'}, None], ['05', 9565]),\n  ('identity sample 16', ['new-nav', 'b', {'key': 'u1', 'org': '0012', 'team': ''}, None], ['u1', 96668]),\n  ('identity sample 17', ['new-nav', 'a', {'key': 'u1', 'org': 12, 'team': True}, 'org'], ['12', 46025])],\n [('zero attribute is a real identity', ['bulk-edit', 'b', {'key': 'u2', 'org': 0}, 'org'], ['0', 47112]),\n  ('fractional float is unbucketable', ['new-nav', 'a', {'key': 'u1', 'org': 2.5}, 'org'], [None, 0]),\n  ('leading-zero string kept verbatim', ['new-nav', 'a', {'key': 'u1', 'org': '007'}, 'org'], ['007', 42108]),\n  ('leading-zero key kept verbatim', ['bulk-edit', 'b', {'key': '05'}, None], ['05', 9565]),\n  ('false attribute is unbucketable', ['bulk-edit', 'b', {'key': 'u1', 'org': False}, 'org'], [None, 0]),\n  ('identity sample 1', ['new-nav', 'b', {'key': '05', 'org': '', 'team': 5.0}, 'team'], ['5', 56729]),\n  ('identity sample 21', ['new-nav', 'a', {'key': 'u42', 'org': 12, 'team': False}, 'team'], [None, 0]),\n  ('identity sample 22', ['bulk-edit', 'a', {'key': 'u1', 'org': ''}, None], ['u1', 93162])]]\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":"70f0e8315f3773dbce28dbc64948bbab307add539de6655b1bfbdf563de3e211","source":"\"\"\"Failure Map reference implementation. Python standard library only.\"\"\"\nimport json\nimport zlib\nN = 1\nobservations = []\ndef solve(flag_key, salt, user, bucket_by):\n    if bucket_by and bucket_by in user:\n        value = user[bucket_by]\n    else:\n        value = user.get('key')\n    if isinstance(value, bool) or value is None:\n        return [None, 0]\n    if isinstance(value, float):\n        if value != int(value):\n            return [None, 0]\n    if not isinstance(value, (int, str)):\n        return [None, 0]\n    ident = str(value)\n    return [ident, zlib.crc32((flag_key + '.' + salt + '.' + ident).encode()) % 100000]\ndef check(label, actual, expected):\n    observations.append({\"check\": label, \"actual\": actual, \"expected\": expected, \"passed\": actual == expected})\nfixtures = [[('boolean attribute is unbucketable', ['new-nav', 'a', {'key': 'u1', 'org': True}, 'org'], [None, 0]),\n  ('integral float bucketed as integer', ['new-nav', 'a', {'key': 'u1', 'org': 5.0}, 'org'], ['5', 7520]),\n  ('integral float matches integer identity', ['new-nav', 'a', {'key': 'u1', 'org': 5}, 'org'], ['5', 7520]),\n  ('missing bucket attribute falls back to key', ['new-nav', 'a', {'key': 'u1'}, 'org'], ['u1', 4562]),\n  ('zero attribute is a real identity', ['bulk-edit', 'b', {'key': 'u2', 'org': 0}, 'org'], ['0', 47112]),\n  ('identity sample 1', ['new-nav', 'b', {'key': '05', 'org': '', 'team': 5.0}, 'team'], ['5', 56729]),\n  ('identity sample 2', ['new-nav', 'b', {'key': 'u1', 'org': '05', 'team': [1]}, 'org'], ['05', 58693]),\n  ('identity sample 3', ['new-nav', 'b', {'key': '007', 'org': 'acme'}, 'org'], ['acme', 9580])],\n [('integral float bucketed as integer', ['new-nav', 'a', {'key': 'u1', 'org': 5.0}, 'org'], ['5', 7520]),\n  ('integral float matches integer identity', ['new-nav', 'a', {'key': 'u1', 'org': 5}, 'org'], ['5', 7520]),\n  ('missing bucket attribute falls back to key', ['new-nav', 'a', {'key': 'u1'}, 'org'], ['u1', 4562]),\n  ('zero attribute is a real identity', ['bulk-edit', 'b', {'key': 'u2', 'org': 0}, 'org'], ['0', 47112]),\n  ('fractional float is unbucketable', ['new-nav', 'a', {'key': 'u1', 'org': 2.5}, 'org'], [None, 0]),\n  ('identity sample 1', ['new-nav', 'b', {'key': '05', 'org': '', 'team': 5.0}, 'team'], ['5', 56729]),\n  ('identity sample 6', ['new-nav', 'b', {'key': 'u1', 'org': -3.0, 'team': 2.5}, 'org'], ['-3', 33868]),\n  ('identity sample 7', ['new-nav', 'a', {'key': '007', 'team': 'acme'}, 'team'], ['acme', 37026])],\n [('integral float matches integer identity', ['new-nav', 'a', {'key': 'u1', 'org': 5}, 'org'], ['5', 7520]),\n  ('missing bucket attribute falls back to key', ['new-nav', 'a', {'key': 'u1'}, 'org'], ['u1', 4562]),\n  ('zero attribute is a real identity', ['bulk-edit', 'b', {'key': 'u2', 'org': 0}, 'org'], ['0', 47112]),\n  ('fractional float is unbucketable', ['new-nav', 'a', {'key': 'u1', 'org': 2.5}, 'org'], [None, 0]),\n  ('leading-zero string kept verbatim', ['new-nav', 'a', {'key': 'u1', 'org': '007'}, 'org'], ['007', 42108]),\n  ('identity sample 6', ['new-nav', 'b', {'key': 'u1', 'org': -3.0, 'team': 2.5}, 'org'], ['-3', 33868]),\n  ('identity sample 11', ['new-nav', 'a', {'key': 'u1', 'org': 12, 'team': 2.5}, None], ['u1', 4562]),\n  ('identity sample 12', ['new-nav', 'b', {'key': '007'}, None], ['007', 68652])],\n [('integral float bucketed as integer', ['new-nav', 'a', {'key': 'u1', 'org': 5.0}, 'org'], ['5', 7520]),\n  ('missing bucket attribute falls back to key', ['new-nav', 'a', {'key': 'u1'}, 'org'], ['u1', 4562]),\n  ('zero attribute is a real identity', ['bulk-edit', 'b', {'key': 'u2', 'org': 0}, 'org'], ['0', 47112]),\n  ('fractional float is unbucketable', ['new-nav', 'a', {'key': 'u1', 'org': 2.5}, 'org'], [None, 0]),\n  ('leading-zero string kept verbatim', ['new-nav', 'a', {'key': 'u1', 'org': '007'}, 'org'], ['007', 42108]),\n  ('leading-zero key kept verbatim', ['bulk-edit', 'b', {'key': '05'}, None], ['05', 9565]),\n  ('identity sample 16', ['new-nav', 'b', {'key': 'u1', 'org': '0012', 'team': ''}, None], ['u1', 96668]),\n  ('identity sample 17', ['new-nav', 'a', {'key': 'u1', 'org': 12, 'team': True}, 'org'], ['12', 46025])],\n [('zero attribute is a real identity', ['bulk-edit', 'b', {'key': 'u2', 'org': 0}, 'org'], ['0', 47112]),\n  ('fractional float is unbucketable', ['new-nav', 'a', {'key': 'u1', 'org': 2.5}, 'org'], [None, 0]),\n  ('leading-zero string kept verbatim', ['new-nav', 'a', {'key': 'u1', 'org': '007'}, 'org'], ['007', 42108]),\n  ('leading-zero key kept verbatim', ['bulk-edit', 'b', {'key': '05'}, None], ['05', 9565]),\n  ('false attribute is unbucketable', ['bulk-edit', 'b', {'key': 'u1', 'org': False}, 'org'], [None, 0]),\n  ('identity sample 1', ['new-nav', 'b', {'key': '05', 'org': '', 'team': 5.0}, 'team'], ['5', 56729]),\n  ('identity sample 21', ['new-nav', 'a', {'key': 'u42', 'org': 12, 'team': False}, 'team'], [None, 0]),\n  ('identity sample 22', ['bulk-edit', 'a', {'key': 'u1', 'org': ''}, None], ['u1', 93162])]]\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":"921b3b9442c13a5f994056a895f48cf199f6de6a2e44da5f77d665190531352b","source":"\"\"\"Failure Map reference implementation. Python standard library only.\"\"\"\nimport json\nimport zlib\nN = 1\nobservations = []\ndef solve(flag_key, salt, user, bucket_by):\n    if bucket_by and bucket_by in user:\n        value = user[bucket_by]\n    else:\n        value = user.get('key')\n    if isinstance(value, bool) or value is None:\n        return [None, 0]\n    if isinstance(value, float):\n        if value != int(value):\n            return [None, 0]\n        value = int(value)\n    if not isinstance(value, (int, str)):\n        return [None, 0]\n    ident = str(value)\n    return [ident, zlib.crc32((flag_key + '.' + salt + '.' + ident).encode()) % 100000]\ndef check(label, actual, expected):\n    observations.append({\"check\": label, \"actual\": actual, \"expected\": expected, \"passed\": actual == expected})\nfixtures = [[('boolean attribute is unbucketable', ['new-nav', 'a', {'key': 'u1', 'org': True}, 'org'], [None, 0]),\n  ('integral float bucketed as integer', ['new-nav', 'a', {'key': 'u1', 'org': 5.0}, 'org'], ['5', 7520]),\n  ('integral float matches integer identity', ['new-nav', 'a', {'key': 'u1', 'org': 5}, 'org'], ['5', 7520]),\n  ('missing bucket attribute falls back to key', ['new-nav', 'a', {'key': 'u1'}, 'org'], ['u1', 4562]),\n  ('zero attribute is a real identity', ['bulk-edit', 'b', {'key': 'u2', 'org': 0}, 'org'], ['0', 47112]),\n  ('identity sample 1', ['new-nav', 'b', {'key': '05', 'org': '', 'team': 5.0}, 'team'], ['5', 56729]),\n  ('identity sample 2', ['new-nav', 'b', {'key': 'u1', 'org': '05', 'team': [1]}, 'org'], ['05', 58693]),\n  ('identity sample 3', ['new-nav', 'b', {'key': '007', 'org': 'acme'}, 'org'], ['acme', 9580])],\n [('integral float bucketed as integer', ['new-nav', 'a', {'key': 'u1', 'org': 5.0}, 'org'], ['5', 7520]),\n  ('integral float matches integer identity', ['new-nav', 'a', {'key': 'u1', 'org': 5}, 'org'], ['5', 7520]),\n  ('missing bucket attribute falls back to key', ['new-nav', 'a', {'key': 'u1'}, 'org'], ['u1', 4562]),\n  ('zero attribute is a real identity', ['bulk-edit', 'b', {'key': 'u2', 'org': 0}, 'org'], ['0', 47112]),\n  ('fractional float is unbucketable', ['new-nav', 'a', {'key': 'u1', 'org': 2.5}, 'org'], [None, 0]),\n  ('identity sample 1', ['new-nav', 'b', {'key': '05', 'org': '', 'team': 5.0}, 'team'], ['5', 56729]),\n  ('identity sample 6', ['new-nav', 'b', {'key': 'u1', 'org': -3.0, 'team': 2.5}, 'org'], ['-3', 33868]),\n  ('identity sample 7', ['new-nav', 'a', {'key': '007', 'team': 'acme'}, 'team'], ['acme', 37026])],\n [('integral float matches integer identity', ['new-nav', 'a', {'key': 'u1', 'org': 5}, 'org'], ['5', 7520]),\n  ('missing bucket attribute falls back to key', ['new-nav', 'a', {'key': 'u1'}, 'org'], ['u1', 4562]),\n  ('zero attribute is a real identity', ['bulk-edit', 'b', {'key': 'u2', 'org': 0}, 'org'], ['0', 47112]),\n  ('fractional float is unbucketable', ['new-nav', 'a', {'key': 'u1', 'org': 2.5}, 'org'], [None, 0]),\n  ('leading-zero string kept verbatim', ['new-nav', 'a', {'key': 'u1', 'org': '007'}, 'org'], ['007', 42108]),\n  ('identity sample 6', ['new-nav', 'b', {'key': 'u1', 'org': -3.0, 'team': 2.5}, 'org'], ['-3', 33868]),\n  ('identity sample 11', ['new-nav', 'a', {'key': 'u1', 'org': 12, 'team': 2.5}, None], ['u1', 4562]),\n  ('identity sample 12', ['new-nav', 'b', {'key': '007'}, None], ['007', 68652])],\n [('integral float bucketed as integer', ['new-nav', 'a', {'key': 'u1', 'org': 5.0}, 'org'], ['5', 7520]),\n  ('missing bucket attribute falls back to key', ['new-nav', 'a', {'key': 'u1'}, 'org'], ['u1', 4562]),\n  ('zero attribute is a real identity', ['bulk-edit', 'b', {'key': 'u2', 'org': 0}, 'org'], ['0', 47112]),\n  ('fractional float is unbucketable', ['new-nav', 'a', {'key': 'u1', 'org': 2.5}, 'org'], [None, 0]),\n  ('leading-zero string kept verbatim', ['new-nav', 'a', {'key': 'u1', 'org': '007'}, 'org'], ['007', 42108]),\n  ('leading-zero key kept verbatim', ['bulk-edit', 'b', {'key': '05'}, None], ['05', 9565]),\n  ('identity sample 16', ['new-nav', 'b', {'key': 'u1', 'org': '0012', 'team': ''}, None], ['u1', 96668]),\n  ('identity sample 17', ['new-nav', 'a', {'key': 'u1', 'org': 12, 'team': True}, 'org'], ['12', 46025])],\n [('zero attribute is a real identity', ['bulk-edit', 'b', {'key': 'u2', 'org': 0}, 'org'], ['0', 47112]),\n  ('fractional float is unbucketable', ['new-nav', 'a', {'key': 'u1', 'org': 2.5}, 'org'], [None, 0]),\n  ('leading-zero string kept verbatim', ['new-nav', 'a', {'key': 'u1', 'org': '007'}, 'org'], ['007', 42108]),\n  ('leading-zero key kept verbatim', ['bulk-edit', 'b', {'key': '05'}, None], ['05', 9565]),\n  ('false attribute is unbucketable', ['bulk-edit', 'b', {'key': 'u1', 'org': False}, 'org'], [None, 0]),\n  ('identity sample 1', ['new-nav', 'b', {'key': '05', 'org': '', 'team': 5.0}, 'team'], ['5', 56729]),\n  ('identity sample 21', ['new-nav', 'a', {'key': 'u42', 'org': 12, 'team': False}, 'team'], [None, 0]),\n  ('identity sample 22', ['bulk-edit', 'a', {'key': 'u1', 'org': ''}, None], ['u1', 93162])]]\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-bucket-by-attribute-integral-float","generated_at":"2026-09-29T14:48:52.379832+00:00","license":"CC0-1.0","python":"3.12.14","seed":1,"split":"open-access"},"relevance":"Bucketing by organisation or device keeps whole accounts in one variant; the identity must be stable.","repair":"Convert integral floats to int before stringifying.","root_cause":"The integral float is stringified directly, producing \"5.0\".","sha256":"dbfb85c43d7a1fb5db5f79eba22c4a73584bdef994442ad0b353c598b44ea482","title":"Bucketing attribute selection: Integral floats keep a decimal suffix · case 01","variant":1,"variant_policy":"Five numbered records share a model and may reuse boundary fixtures.","verification":{"attempt":{"elapsed_ms":40.572,"exit_code":1,"observations":[{"actual":[null,0],"check":"boolean attribute is unbucketable","expected":[null,0],"passed":true},{"actual":["5.",60130],"check":"integral float bucketed as integer","expected":["5",7520],"passed":false},{"actual":["5",7520],"check":"integral float matches integer identity","expected":["5",7520],"passed":true},{"actual":["u1",4562],"check":"missing bucket attribute falls back to key","expected":["u1",4562],"passed":true},{"actual":["0",47112],"check":"zero attribute is a real identity","expected":["0",47112],"passed":true},{"actual":["5.",8460],"check":"identity sample 1","expected":["5",56729],"passed":false},{"actual":["05",58693],"check":"identity sample 2","expected":["05",58693],"passed":true},{"actual":["acme",9580],"check":"identity sample 3","expected":["acme",9580],"passed":true}],"passed":false,"stderr":"","stdout":"{\"observations\": [{\"check\": \"boolean attribute is unbucketable\", \"actual\": [null, 0], \"expected\": [null, 0], \"passed\": true}, {\"check\": \"integral float bucketed as integer\", \"actual\": [\"5.\", 60130], \"expected\": [\"5\", 7520], \"passed\": false}, {\"check\": \"integral float matches integer identity\", \"actual\": [\"5\", 7520], \"expected\": [\"5\", 7520], \"passed\": true}, {\"check\": \"missing bucket attribute falls back to key\", \"actual\": [\"u1\", 4562], \"expected\": [\"u1\", 4562], \"passed\": true}, {\"check\": \"zero attribute is a real identity\", \"actual\": [\"0\", 47112], \"expected\": [\"0\", 47112], \"passed\": true}, {\"check\": \"identity sample 1\", \"actual\": [\"5.\", 8460], \"expected\": [\"5\", 56729], \"passed\": false}, {\"check\": \"identity sample 2\", \"actual\": [\"05\", 58693], \"expected\": [\"05\", 58693], \"passed\": true}, {\"check\": \"identity sample 3\", \"actual\": [\"acme\", 9580], \"expected\": [\"acme\", 9580], \"passed\": true}], \"passed\": false}\n"},"broken":{"elapsed_ms":37.106,"exit_code":1,"observations":[{"actual":[null,0],"check":"boolean attribute is unbucketable","expected":[null,0],"passed":true},{"actual":[null,0],"check":"integral float bucketed as integer","expected":["5",7520],"passed":false},{"actual":["5",7520],"check":"integral float matches integer identity","expected":["5",7520],"passed":true},{"actual":["u1",4562],"check":"missing bucket attribute falls back to key","expected":["u1",4562],"passed":true},{"actual":["0",47112],"check":"zero attribute is a real identity","expected":["0",47112],"passed":true},{"actual":[null,0],"check":"identity sample 1","expected":["5",56729],"passed":false},{"actual":["05",58693],"check":"identity sample 2","expected":["05",58693],"passed":true},{"actual":["acme",9580],"check":"identity sample 3","expected":["acme",9580],"passed":true}],"passed":false,"stderr":"","stdout":"{\"observations\": [{\"check\": \"boolean attribute is unbucketable\", \"actual\": [null, 0], \"expected\": [null, 0], \"passed\": true}, {\"check\": \"integral float bucketed as integer\", \"actual\": [null, 0], \"expected\": [\"5\", 7520], \"passed\": false}, {\"check\": \"integral float matches integer identity\", \"actual\": [\"5\", 7520], \"expected\": [\"5\", 7520], \"passed\": true}, {\"check\": \"missing bucket attribute falls back to key\", \"actual\": [\"u1\", 4562], \"expected\": [\"u1\", 4562], \"passed\": true}, {\"check\": \"zero attribute is a real identity\", \"actual\": [\"0\", 47112], \"expected\": [\"0\", 47112], \"passed\": true}, {\"check\": \"identity sample 1\", \"actual\": [null, 0], \"expected\": [\"5\", 56729], \"passed\": false}, {\"check\": \"identity sample 2\", \"actual\": [\"05\", 58693], \"expected\": [\"05\", 58693], \"passed\": true}, {\"check\": \"identity sample 3\", \"actual\": [\"acme\", 9580], \"expected\": [\"acme\", 9580], \"passed\": true}], \"passed\": false}\n"},"fixed":{"elapsed_ms":40.158,"exit_code":0,"observations":[{"actual":[null,0],"check":"boolean attribute is unbucketable","expected":[null,0],"passed":true},{"actual":["5",7520],"check":"integral float bucketed as integer","expected":["5",7520],"passed":true},{"actual":["5",7520],"check":"integral float matches integer identity","expected":["5",7520],"passed":true},{"actual":["u1",4562],"check":"missing bucket attribute falls back to key","expected":["u1",4562],"passed":true},{"actual":["0",47112],"check":"zero attribute is a real identity","expected":["0",47112],"passed":true},{"actual":["5",56729],"check":"identity sample 1","expected":["5",56729],"passed":true},{"actual":["05",58693],"check":"identity sample 2","expected":["05",58693],"passed":true},{"actual":["acme",9580],"check":"identity sample 3","expected":["acme",9580],"passed":true}],"passed":true,"stderr":"","stdout":"{\"observations\": [{\"check\": \"boolean attribute is unbucketable\", \"actual\": [null, 0], \"expected\": [null, 0], \"passed\": true}, {\"check\": \"integral float bucketed as integer\", \"actual\": [\"5\", 7520], \"expected\": [\"5\", 7520], \"passed\": true}, {\"check\": \"integral float matches integer identity\", \"actual\": [\"5\", 7520], \"expected\": [\"5\", 7520], \"passed\": true}, {\"check\": \"missing bucket attribute falls back to key\", \"actual\": [\"u1\", 4562], \"expected\": [\"u1\", 4562], \"passed\": true}, {\"check\": \"zero attribute is a real identity\", \"actual\": [\"0\", 47112], \"expected\": [\"0\", 47112], \"passed\": true}, {\"check\": \"identity sample 1\", \"actual\": [\"5\", 56729], \"expected\": [\"5\", 56729], \"passed\": true}, {\"check\": \"identity sample 2\", \"actual\": [\"05\", 58693], \"expected\": [\"05\", 58693], \"passed\": true}, {\"check\": \"identity sample 3\", \"actual\": [\"acme\", 9580], \"expected\": [\"acme\", 9580], \"passed\": true}], \"passed\": true}\n"}},"verified":true,"visibility":"public"}