{"abstract":"The hash observed before a move differs from the one observed after it.","category":"Garbage collector invariants","checks":6,"contract":"objs maps id -> [address, size]. The identity hash of an object is (address >> 3) & 0xFFFF of the address at which it was first hashed. Objects start unhashed; hash marks them hashed and returns the hash computed from the current address while they have not moved. The first move of a hashed object stores that hash in a new 8-byte trailing slot (size grows by 8) and later moves keep it; moving an unhashed object stores nothing. Return all hashes and the final [address, size] layout.","contract_signature":"objs, events","evaluation_group":"w2-garbage-collector-invariants-identity-hash-relocation","failed_approach":"Storing the raw address skips the shift and mask.","family":"w2-garbage-collector-invariants-identity-hash-relocation-stored-hash-address","id":"FA-90716","implementations":{"attempt":{"sha256":"933ed9b93c4a5d2caf91d2709ce005251734331efdaa26774eba2b9aa0925dd8","source":"\"\"\"Failure Map reference implementation. Python standard library only.\"\"\"\nimport json\n\nN = 1\nobservations = []\ndef solve(objs, events):\n    objs = {k: list(v) for k, v in objs.items()}\n    state = {o: 'unhashed' for o in objs}\n    stored = {}\n    out = []\n    for ev in events:\n        o = ev[1]\n        if ev[0] == 'hash':\n            if state[o] == 'unhashed':\n                state[o] = 'hashed'\n            if state[o] == 'hashed':\n                out.append(objs[o][0] >> 3 & 0xFFFF)\n            else:\n                out.append(stored[o])\n        else:\n            if state[o] == 'hashed':\n                stored[o] = objs[o][0]\n                state[o] = 'moved'\n                objs[o][1] += 8\n            objs[o][0] = ev[2]\n    return {'hashes': out, 'layout': {str(k): v for k, v in sorted(objs.items())}}\ndef check(label, actual, expected):\n    observations.append({\"check\": label, \"actual\": actual, \"expected\": expected, \"passed\": actual == expected})\ncases = [[('regression: hash survives a move',\n   ({1: [65608, 24], 2: [8192, 16], 3: [201272, 32]}, [['hash', 1], ['move', 1, 32768], ['hash', 1]]),\n   {'hashes': [8201, 8201], 'layout': {'1': [32768, 32], '2': [8192, 16], '3': [201272, 32]}}),\n  ('object moved twice after hashing',\n   ({1: [65608, 24], 2: [8192, 16], 3: [201272, 32]},\n    [['hash', 2], ['move', 2, 36872], ['move', 2, 40960], ['hash', 2]]),\n   {'hashes': [1024, 1024], 'layout': {'1': [65608, 24], '2': [40960, 24], '3': [201272, 32]}}),\n  ('unhashed object moves freely',\n   ({1: [65608, 24], 2: [8192, 16], 3: [201272, 32]}, [['move', 3, 16400], ['hash', 3], ['hash', 3]]),\n   {'hashes': [2050, 2050], 'layout': {'1': [65608, 24], '2': [8192, 16], '3': [16400, 32]}}),\n  ('high address bits masked after shifting',\n   ({1: [65608, 24], 2: [8192, 16], 3: [201272, 32]}, [['hash', 3], ['hash', 1]]),\n   {'hashes': [25159, 8201], 'layout': {'1': [65608, 24], '2': [8192, 16], '3': [201272, 32]}}),\n  ('hash requested again before any move',\n   ({1: [65608, 24], 2: [8192, 16], 3: [201272, 32]}, [['hash', 2], ['hash', 2], ['move', 1, 20488]]),\n   {'hashes': [1024, 1024], 'layout': {'1': [20488, 24], '2': [8192, 16], '3': [201272, 32]}}),\n  ('control: no hashing',\n   ({1: [65608, 24], 2: [8192, 16], 3: [201272, 32]}, [['move', 2, 24576], ['move', 2, 28680]]),\n   {'hashes': [], 'layout': {'1': [65608, 24], '2': [28680, 16], '3': [201272, 32]}})],\n [('regression: hash survives a move',\n   ({1: [65616, 24], 2: [8192, 16], 3: [201272, 32]}, [['hash', 1], ['move', 1, 32768], ['hash', 1]]),\n   {'hashes': [8202, 8202], 'layout': {'1': [32768, 32], '2': [8192, 16], '3': [201272, 32]}}),\n  ('object moved twice after hashing',\n   ({1: [65616, 24], 2: [8192, 16], 3: [201272, 32]},\n    [['hash', 2], ['move', 2, 36880], ['move', 2, 40960], ['hash', 2]]),\n   {'hashes': [1024, 1024], 'layout': {'1': [65616, 24], '2': [40960, 24], '3': [201272, 32]}}),\n  ('unhashed object moves freely',\n   ({1: [65616, 24], 2: [8192, 16], 3: [201272, 32]}, [['move', 3, 16416], ['hash', 3], ['hash', 3]]),\n   {'hashes': [2052, 2052], 'layout': {'1': [65616, 24], '2': [8192, 16], '3': [16416, 32]}}),\n  ('high address bits masked after shifting',\n   ({1: [65616, 24], 2: [8192, 16], 3: [201272, 32]}, [['hash', 3], ['hash', 1]]),\n   {'hashes': [25159, 8202], 'layout': {'1': [65616, 24], '2': [8192, 16], '3': [201272, 32]}}),\n  ('hash requested again before any move',\n   ({1: [65616, 24], 2: [8192, 16], 3: [201272, 32]}, [['hash', 2], ['hash', 2], ['move', 1, 20496]]),\n   {'hashes': [1024, 1024], 'layout': {'1': [20496, 24], '2': [8192, 16], '3': [201272, 32]}}),\n  ('control: no hashing',\n   ({1: [65616, 24], 2: [8192, 16], 3: [201272, 32]}, [['move', 2, 24576], ['move', 2, 28688]]),\n   {'hashes': [], 'layout': {'1': [65616, 24], '2': [28688, 16], '3': [201272, 32]}})],\n [('regression: hash survives a move',\n   ({1: [65624, 24], 2: [8192, 16], 3: [201272, 32]}, [['hash', 1], ['move', 1, 32768], ['hash', 1]]),\n   {'hashes': [8203, 8203], 'layout': {'1': [32768, 32], '2': [8192, 16], '3': [201272, 32]}}),\n  ('object moved twice after hashing',\n   ({1: [65624, 24], 2: [8192, 16], 3: [201272, 32]},\n    [['hash', 2], ['move', 2, 36888], ['move', 2, 40960], ['hash', 2]]),\n   {'hashes': [1024, 1024], 'layout': {'1': [65624, 24], '2': [40960, 24], '3': [201272, 32]}}),\n  ('unhashed object moves freely',\n   ({1: [65624, 24], 2: [8192, 16], 3: [201272, 32]}, [['move', 3, 16432], ['hash', 3], ['hash', 3]]),\n   {'hashes': [2054, 2054], 'layout': {'1': [65624, 24], '2': [8192, 16], '3': [16432, 32]}}),\n  ('high address bits masked after shifting',\n   ({1: [65624, 24], 2: [8192, 16], 3: [201272, 32]}, [['hash', 3], ['hash', 1]]),\n   {'hashes': [25159, 8203], 'layout': {'1': [65624, 24], '2': [8192, 16], '3': [201272, 32]}}),\n  ('hash requested again before any move',\n   ({1: [65624, 24], 2: [8192, 16], 3: [201272, 32]}, [['hash', 2], ['hash', 2], ['move', 1, 20504]]),\n   {'hashes': [1024, 1024], 'layout': {'1': [20504, 24], '2': [8192, 16], '3': [201272, 32]}}),\n  ('control: no hashing',\n   ({1: [65624, 24], 2: [8192, 16], 3: [201272, 32]}, [['move', 2, 24576], ['move', 2, 28696]]),\n   {'hashes': [], 'layout': {'1': [65624, 24], '2': [28696, 16], '3': [201272, 32]}})],\n [('regression: hash survives a move',\n   ({1: [65632, 24], 2: [8192, 16], 3: [201272, 32]}, [['hash', 1], ['move', 1, 32768], ['hash', 1]]),\n   {'hashes': [8204, 8204], 'layout': {'1': [32768, 32], '2': [8192, 16], '3': [201272, 32]}}),\n  ('object moved twice after hashing',\n   ({1: [65632, 24], 2: [8192, 16], 3: [201272, 32]},\n    [['hash', 2], ['move', 2, 36896], ['move', 2, 40960], ['hash', 2]]),\n   {'hashes': [1024, 1024], 'layout': {'1': [65632, 24], '2': [40960, 24], '3': [201272, 32]}}),\n  ('unhashed object moves freely',\n   ({1: [65632, 24], 2: [8192, 16], 3: [201272, 32]}, [['move', 3, 16448], ['hash', 3], ['hash', 3]]),\n   {'hashes': [2056, 2056], 'layout': {'1': [65632, 24], '2': [8192, 16], '3': [16448, 32]}}),\n  ('high address bits masked after shifting',\n   ({1: [65632, 24], 2: [8192, 16], 3: [201272, 32]}, [['hash', 3], ['hash', 1]]),\n   {'hashes': [25159, 8204], 'layout': {'1': [65632, 24], '2': [8192, 16], '3': [201272, 32]}}),\n  ('hash requested again before any move',\n   ({1: [65632, 24], 2: [8192, 16], 3: [201272, 32]}, [['hash', 2], ['hash', 2], ['move', 1, 20512]]),\n   {'hashes': [1024, 1024], 'layout': {'1': [20512, 24], '2': [8192, 16], '3': [201272, 32]}}),\n  ('control: no hashing',\n   ({1: [65632, 24], 2: [8192, 16], 3: [201272, 32]}, [['move', 2, 24576], ['move', 2, 28704]]),\n   {'hashes': [], 'layout': {'1': [65632, 24], '2': [28704, 16], '3': [201272, 32]}})],\n [('regression: hash survives a move',\n   ({1: [65640, 24], 2: [8192, 16], 3: [201272, 32]}, [['hash', 1], ['move', 1, 32768], ['hash', 1]]),\n   {'hashes': [8205, 8205], 'layout': {'1': [32768, 32], '2': [8192, 16], '3': [201272, 32]}}),\n  ('object moved twice after hashing',\n   ({1: [65640, 24], 2: [8192, 16], 3: [201272, 32]},\n    [['hash', 2], ['move', 2, 36904], ['move', 2, 40960], ['hash', 2]]),\n   {'hashes': [1024, 1024], 'layout': {'1': [65640, 24], '2': [40960, 24], '3': [201272, 32]}}),\n  ('unhashed object moves freely',\n   ({1: [65640, 24], 2: [8192, 16], 3: [201272, 32]}, [['move', 3, 16464], ['hash', 3], ['hash', 3]]),\n   {'hashes': [2058, 2058], 'layout': {'1': [65640, 24], '2': [8192, 16], '3': [16464, 32]}}),\n  ('high address bits masked after shifting',\n   ({1: [65640, 24], 2: [8192, 16], 3: [201272, 32]}, [['hash', 3], ['hash', 1]]),\n   {'hashes': [25159, 8205], 'layout': {'1': [65640, 24], '2': [8192, 16], '3': [201272, 32]}}),\n  ('hash requested again before any move',\n   ({1: [65640, 24], 2: [8192, 16], 3: [201272, 32]}, [['hash', 2], ['hash', 2], ['move', 1, 20520]]),\n   {'hashes': [1024, 1024], 'layout': {'1': [20520, 24], '2': [8192, 16], '3': [201272, 32]}}),\n  ('control: no hashing',\n   ({1: [65640, 24], 2: [8192, 16], 3: [201272, 32]}, [['move', 2, 24576], ['move', 2, 28712]]),\n   {'hashes': [], 'layout': {'1': [65640, 24], '2': [28712, 16], '3': [201272, 32]}})]]\nfor label, args, expected in cases[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":"9e24ae873105fe765267e357b0cf25360320362054e9e815324cbf1461965844","source":"\"\"\"Failure Map reference implementation. Python standard library only.\"\"\"\nimport json\n\nN = 1\nobservations = []\ndef solve(objs, events):\n    objs = {k: list(v) for k, v in objs.items()}\n    state = {o: 'unhashed' for o in objs}\n    stored = {}\n    out = []\n    for ev in events:\n        o = ev[1]\n        if ev[0] == 'hash':\n            if state[o] == 'unhashed':\n                state[o] = 'hashed'\n            if state[o] == 'hashed':\n                out.append(objs[o][0] >> 3 & 0xFFFF)\n            else:\n                out.append(stored[o])\n        else:\n            if state[o] == 'hashed':\n                stored[o] = ev[2] >> 3 & 0xFFFF\n                state[o] = 'moved'\n                objs[o][1] += 8\n            objs[o][0] = ev[2]\n    return {'hashes': out, 'layout': {str(k): v for k, v in sorted(objs.items())}}\ndef check(label, actual, expected):\n    observations.append({\"check\": label, \"actual\": actual, \"expected\": expected, \"passed\": actual == expected})\ncases = [[('regression: hash survives a move',\n   ({1: [65608, 24], 2: [8192, 16], 3: [201272, 32]}, [['hash', 1], ['move', 1, 32768], ['hash', 1]]),\n   {'hashes': [8201, 8201], 'layout': {'1': [32768, 32], '2': [8192, 16], '3': [201272, 32]}}),\n  ('object moved twice after hashing',\n   ({1: [65608, 24], 2: [8192, 16], 3: [201272, 32]},\n    [['hash', 2], ['move', 2, 36872], ['move', 2, 40960], ['hash', 2]]),\n   {'hashes': [1024, 1024], 'layout': {'1': [65608, 24], '2': [40960, 24], '3': [201272, 32]}}),\n  ('unhashed object moves freely',\n   ({1: [65608, 24], 2: [8192, 16], 3: [201272, 32]}, [['move', 3, 16400], ['hash', 3], ['hash', 3]]),\n   {'hashes': [2050, 2050], 'layout': {'1': [65608, 24], '2': [8192, 16], '3': [16400, 32]}}),\n  ('high address bits masked after shifting',\n   ({1: [65608, 24], 2: [8192, 16], 3: [201272, 32]}, [['hash', 3], ['hash', 1]]),\n   {'hashes': [25159, 8201], 'layout': {'1': [65608, 24], '2': [8192, 16], '3': [201272, 32]}}),\n  ('hash requested again before any move',\n   ({1: [65608, 24], 2: [8192, 16], 3: [201272, 32]}, [['hash', 2], ['hash', 2], ['move', 1, 20488]]),\n   {'hashes': [1024, 1024], 'layout': {'1': [20488, 24], '2': [8192, 16], '3': [201272, 32]}}),\n  ('control: no hashing',\n   ({1: [65608, 24], 2: [8192, 16], 3: [201272, 32]}, [['move', 2, 24576], ['move', 2, 28680]]),\n   {'hashes': [], 'layout': {'1': [65608, 24], '2': [28680, 16], '3': [201272, 32]}})],\n [('regression: hash survives a move',\n   ({1: [65616, 24], 2: [8192, 16], 3: [201272, 32]}, [['hash', 1], ['move', 1, 32768], ['hash', 1]]),\n   {'hashes': [8202, 8202], 'layout': {'1': [32768, 32], '2': [8192, 16], '3': [201272, 32]}}),\n  ('object moved twice after hashing',\n   ({1: [65616, 24], 2: [8192, 16], 3: [201272, 32]},\n    [['hash', 2], ['move', 2, 36880], ['move', 2, 40960], ['hash', 2]]),\n   {'hashes': [1024, 1024], 'layout': {'1': [65616, 24], '2': [40960, 24], '3': [201272, 32]}}),\n  ('unhashed object moves freely',\n   ({1: [65616, 24], 2: [8192, 16], 3: [201272, 32]}, [['move', 3, 16416], ['hash', 3], ['hash', 3]]),\n   {'hashes': [2052, 2052], 'layout': {'1': [65616, 24], '2': [8192, 16], '3': [16416, 32]}}),\n  ('high address bits masked after shifting',\n   ({1: [65616, 24], 2: [8192, 16], 3: [201272, 32]}, [['hash', 3], ['hash', 1]]),\n   {'hashes': [25159, 8202], 'layout': {'1': [65616, 24], '2': [8192, 16], '3': [201272, 32]}}),\n  ('hash requested again before any move',\n   ({1: [65616, 24], 2: [8192, 16], 3: [201272, 32]}, [['hash', 2], ['hash', 2], ['move', 1, 20496]]),\n   {'hashes': [1024, 1024], 'layout': {'1': [20496, 24], '2': [8192, 16], '3': [201272, 32]}}),\n  ('control: no hashing',\n   ({1: [65616, 24], 2: [8192, 16], 3: [201272, 32]}, [['move', 2, 24576], ['move', 2, 28688]]),\n   {'hashes': [], 'layout': {'1': [65616, 24], '2': [28688, 16], '3': [201272, 32]}})],\n [('regression: hash survives a move',\n   ({1: [65624, 24], 2: [8192, 16], 3: [201272, 32]}, [['hash', 1], ['move', 1, 32768], ['hash', 1]]),\n   {'hashes': [8203, 8203], 'layout': {'1': [32768, 32], '2': [8192, 16], '3': [201272, 32]}}),\n  ('object moved twice after hashing',\n   ({1: [65624, 24], 2: [8192, 16], 3: [201272, 32]},\n    [['hash', 2], ['move', 2, 36888], ['move', 2, 40960], ['hash', 2]]),\n   {'hashes': [1024, 1024], 'layout': {'1': [65624, 24], '2': [40960, 24], '3': [201272, 32]}}),\n  ('unhashed object moves freely',\n   ({1: [65624, 24], 2: [8192, 16], 3: [201272, 32]}, [['move', 3, 16432], ['hash', 3], ['hash', 3]]),\n   {'hashes': [2054, 2054], 'layout': {'1': [65624, 24], '2': [8192, 16], '3': [16432, 32]}}),\n  ('high address bits masked after shifting',\n   ({1: [65624, 24], 2: [8192, 16], 3: [201272, 32]}, [['hash', 3], ['hash', 1]]),\n   {'hashes': [25159, 8203], 'layout': {'1': [65624, 24], '2': [8192, 16], '3': [201272, 32]}}),\n  ('hash requested again before any move',\n   ({1: [65624, 24], 2: [8192, 16], 3: [201272, 32]}, [['hash', 2], ['hash', 2], ['move', 1, 20504]]),\n   {'hashes': [1024, 1024], 'layout': {'1': [20504, 24], '2': [8192, 16], '3': [201272, 32]}}),\n  ('control: no hashing',\n   ({1: [65624, 24], 2: [8192, 16], 3: [201272, 32]}, [['move', 2, 24576], ['move', 2, 28696]]),\n   {'hashes': [], 'layout': {'1': [65624, 24], '2': [28696, 16], '3': [201272, 32]}})],\n [('regression: hash survives a move',\n   ({1: [65632, 24], 2: [8192, 16], 3: [201272, 32]}, [['hash', 1], ['move', 1, 32768], ['hash', 1]]),\n   {'hashes': [8204, 8204], 'layout': {'1': [32768, 32], '2': [8192, 16], '3': [201272, 32]}}),\n  ('object moved twice after hashing',\n   ({1: [65632, 24], 2: [8192, 16], 3: [201272, 32]},\n    [['hash', 2], ['move', 2, 36896], ['move', 2, 40960], ['hash', 2]]),\n   {'hashes': [1024, 1024], 'layout': {'1': [65632, 24], '2': [40960, 24], '3': [201272, 32]}}),\n  ('unhashed object moves freely',\n   ({1: [65632, 24], 2: [8192, 16], 3: [201272, 32]}, [['move', 3, 16448], ['hash', 3], ['hash', 3]]),\n   {'hashes': [2056, 2056], 'layout': {'1': [65632, 24], '2': [8192, 16], '3': [16448, 32]}}),\n  ('high address bits masked after shifting',\n   ({1: [65632, 24], 2: [8192, 16], 3: [201272, 32]}, [['hash', 3], ['hash', 1]]),\n   {'hashes': [25159, 8204], 'layout': {'1': [65632, 24], '2': [8192, 16], '3': [201272, 32]}}),\n  ('hash requested again before any move',\n   ({1: [65632, 24], 2: [8192, 16], 3: [201272, 32]}, [['hash', 2], ['hash', 2], ['move', 1, 20512]]),\n   {'hashes': [1024, 1024], 'layout': {'1': [20512, 24], '2': [8192, 16], '3': [201272, 32]}}),\n  ('control: no hashing',\n   ({1: [65632, 24], 2: [8192, 16], 3: [201272, 32]}, [['move', 2, 24576], ['move', 2, 28704]]),\n   {'hashes': [], 'layout': {'1': [65632, 24], '2': [28704, 16], '3': [201272, 32]}})],\n [('regression: hash survives a move',\n   ({1: [65640, 24], 2: [8192, 16], 3: [201272, 32]}, [['hash', 1], ['move', 1, 32768], ['hash', 1]]),\n   {'hashes': [8205, 8205], 'layout': {'1': [32768, 32], '2': [8192, 16], '3': [201272, 32]}}),\n  ('object moved twice after hashing',\n   ({1: [65640, 24], 2: [8192, 16], 3: [201272, 32]},\n    [['hash', 2], ['move', 2, 36904], ['move', 2, 40960], ['hash', 2]]),\n   {'hashes': [1024, 1024], 'layout': {'1': [65640, 24], '2': [40960, 24], '3': [201272, 32]}}),\n  ('unhashed object moves freely',\n   ({1: [65640, 24], 2: [8192, 16], 3: [201272, 32]}, [['move', 3, 16464], ['hash', 3], ['hash', 3]]),\n   {'hashes': [2058, 2058], 'layout': {'1': [65640, 24], '2': [8192, 16], '3': [16464, 32]}}),\n  ('high address bits masked after shifting',\n   ({1: [65640, 24], 2: [8192, 16], 3: [201272, 32]}, [['hash', 3], ['hash', 1]]),\n   {'hashes': [25159, 8205], 'layout': {'1': [65640, 24], '2': [8192, 16], '3': [201272, 32]}}),\n  ('hash requested again before any move',\n   ({1: [65640, 24], 2: [8192, 16], 3: [201272, 32]}, [['hash', 2], ['hash', 2], ['move', 1, 20520]]),\n   {'hashes': [1024, 1024], 'layout': {'1': [20520, 24], '2': [8192, 16], '3': [201272, 32]}}),\n  ('control: no hashing',\n   ({1: [65640, 24], 2: [8192, 16], 3: [201272, 32]}, [['move', 2, 24576], ['move', 2, 28712]]),\n   {'hashes': [], 'layout': {'1': [65640, 24], '2': [28712, 16], '3': [201272, 32]}})]]\nfor label, args, expected in cases[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, bounded teaching model of one garbage-collector mechanism with stipulated rules; it is not a production collector and claims no conformance to any particular runtime. 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-garbage-collector-invariants-identity-hash-relocation-stored-hash-address","generated_at":"2026-09-29T14:51:29.282595+00:00","license":"CC0-1.0","python":"3.12.14","seed":1,"split":"open-access"},"relevance":"Moving collectors must keep identity hashes stable even though they are derived from addresses.","root_cause":"The hash slot is filled using the new address instead of the address at which the hash was handed out.","sha256":"884df628eb6c3987150ef2ec7c3dc04970e3aab36206f50c9eda5091da931a3f","title":"Identity hash: stored hash computed from the destination address · case 01","variant":1,"variant_policy":"Five numbered records share a model and may reuse boundary fixtures.","verified":true,"visibility":"public","verification":{"attempt":{"elapsed_ms":40.417,"exit_code":1,"observations":[{"actual":{"hashes":[8201,65608],"layout":{"1":[32768,32],"2":[8192,16],"3":[201272,32]}},"check":"regression: hash survives a move","expected":{"hashes":[8201,8201],"layout":{"1":[32768,32],"2":[8192,16],"3":[201272,32]}},"passed":false},{"actual":{"hashes":[1024,8192],"layout":{"1":[65608,24],"2":[40960,24],"3":[201272,32]}},"check":"object moved twice after hashing","expected":{"hashes":[1024,1024],"layout":{"1":[65608,24],"2":[40960,24],"3":[201272,32]}},"passed":false},{"actual":{"hashes":[2050,2050],"layout":{"1":[65608,24],"2":[8192,16],"3":[16400,32]}},"check":"unhashed object moves freely","expected":{"hashes":[2050,2050],"layout":{"1":[65608,24],"2":[8192,16],"3":[16400,32]}},"passed":true},{"actual":{"hashes":[25159,8201],"layout":{"1":[65608,24],"2":[8192,16],"3":[201272,32]}},"check":"high address bits masked after shifting","expected":{"hashes":[25159,8201],"layout":{"1":[65608,24],"2":[8192,16],"3":[201272,32]}},"passed":true},{"actual":{"hashes":[1024,1024],"layout":{"1":[20488,24],"2":[8192,16],"3":[201272,32]}},"check":"hash requested again before any move","expected":{"hashes":[1024,1024],"layout":{"1":[20488,24],"2":[8192,16],"3":[201272,32]}},"passed":true},{"actual":{"hashes":[],"layout":{"1":[65608,24],"2":[28680,16],"3":[201272,32]}},"check":"control: no hashing","expected":{"hashes":[],"layout":{"1":[65608,24],"2":[28680,16],"3":[201272,32]}},"passed":true}],"passed":false,"stderr":"","stdout":"{\"observations\": [{\"check\": \"regression: hash survives a move\", \"actual\": {\"hashes\": [8201, 65608], \"layout\": {\"1\": [32768, 32], \"2\": [8192, 16], \"3\": [201272, 32]}}, \"expected\": {\"hashes\": [8201, 8201], \"layout\": {\"1\": [32768, 32], \"2\": [8192, 16], \"3\": [201272, 32]}}, \"passed\": false}, {\"check\": \"object moved twice after hashing\", \"actual\": {\"hashes\": [1024, 8192], \"layout\": {\"1\": [65608, 24], \"2\": [40960, 24], \"3\": [201272, 32]}}, \"expected\": {\"hashes\": [1024, 1024], \"layout\": {\"1\": [65608, 24], \"2\": [40960, 24], \"3\": [201272, 32]}}, \"passed\": false}, {\"check\": \"unhashed object moves freely\", \"actual\": {\"hashes\": [2050, 2050], \"layout\": {\"1\": [65608, 24], \"2\": [8192, 16], \"3\": [16400, 32]}}, \"expected\": {\"hashes\": [2050, 2050], \"layout\": {\"1\": [65608, 24], \"2\": [8192, 16], \"3\": [16400, 32]}}, \"passed\": true}, {\"check\": \"high address bits masked after shifting\", \"actual\": {\"hashes\": [25159, 8201], \"layout\": {\"1\": [65608, 24], \"2\": [8192, 16], \"3\": [201272, 32]}}, \"expected\": {\"hashes\": [25159, 8201], \"layout\": {\"1\": [65608, 24], \"2\": [8192, 16], \"3\": [201272, 32]}}, \"passed\": true}, {\"check\": \"hash requested again before any move\", \"actual\": {\"hashes\": [1024, 1024], \"layout\": {\"1\": [20488, 24], \"2\": [8192, 16], \"3\": [201272, 32]}}, \"expected\": {\"hashes\": [1024, 1024], \"layout\": {\"1\": [20488, 24], \"2\": [8192, 16], \"3\": [201272, 32]}}, \"passed\": true}, {\"check\": \"control: no hashing\", \"actual\": {\"hashes\": [], \"layout\": {\"1\": [65608, 24], \"2\": [28680, 16], \"3\": [201272, 32]}}, \"expected\": {\"hashes\": [], \"layout\": {\"1\": [65608, 24], \"2\": [28680, 16], \"3\": [201272, 32]}}, \"passed\": true}], \"passed\": false}\n"},"broken":{"elapsed_ms":41.452,"exit_code":1,"observations":[{"actual":{"hashes":[8201,4096],"layout":{"1":[32768,32],"2":[8192,16],"3":[201272,32]}},"check":"regression: hash survives a move","expected":{"hashes":[8201,8201],"layout":{"1":[32768,32],"2":[8192,16],"3":[201272,32]}},"passed":false},{"actual":{"hashes":[1024,4609],"layout":{"1":[65608,24],"2":[40960,24],"3":[201272,32]}},"check":"object moved twice after hashing","expected":{"hashes":[1024,1024],"layout":{"1":[65608,24],"2":[40960,24],"3":[201272,32]}},"passed":false},{"actual":{"hashes":[2050,2050],"layout":{"1":[65608,24],"2":[8192,16],"3":[16400,32]}},"check":"unhashed object moves freely","expected":{"hashes":[2050,2050],"layout":{"1":[65608,24],"2":[8192,16],"3":[16400,32]}},"passed":true},{"actual":{"hashes":[25159,8201],"layout":{"1":[65608,24],"2":[8192,16],"3":[201272,32]}},"check":"high address bits masked after shifting","expected":{"hashes":[25159,8201],"layout":{"1":[65608,24],"2":[8192,16],"3":[201272,32]}},"passed":true},{"actual":{"hashes":[1024,1024],"layout":{"1":[20488,24],"2":[8192,16],"3":[201272,32]}},"check":"hash requested again before any move","expected":{"hashes":[1024,1024],"layout":{"1":[20488,24],"2":[8192,16],"3":[201272,32]}},"passed":true},{"actual":{"hashes":[],"layout":{"1":[65608,24],"2":[28680,16],"3":[201272,32]}},"check":"control: no hashing","expected":{"hashes":[],"layout":{"1":[65608,24],"2":[28680,16],"3":[201272,32]}},"passed":true}],"passed":false,"stderr":"","stdout":"{\"observations\": [{\"check\": \"regression: hash survives a move\", \"actual\": {\"hashes\": [8201, 4096], \"layout\": {\"1\": [32768, 32], \"2\": [8192, 16], \"3\": [201272, 32]}}, \"expected\": {\"hashes\": [8201, 8201], \"layout\": {\"1\": [32768, 32], \"2\": [8192, 16], \"3\": [201272, 32]}}, \"passed\": false}, {\"check\": \"object moved twice after hashing\", \"actual\": {\"hashes\": [1024, 4609], \"layout\": {\"1\": [65608, 24], \"2\": [40960, 24], \"3\": [201272, 32]}}, \"expected\": {\"hashes\": [1024, 1024], \"layout\": {\"1\": [65608, 24], \"2\": [40960, 24], \"3\": [201272, 32]}}, \"passed\": false}, {\"check\": \"unhashed object moves freely\", \"actual\": {\"hashes\": [2050, 2050], \"layout\": {\"1\": [65608, 24], \"2\": [8192, 16], \"3\": [16400, 32]}}, \"expected\": {\"hashes\": [2050, 2050], \"layout\": {\"1\": [65608, 24], \"2\": [8192, 16], \"3\": [16400, 32]}}, \"passed\": true}, {\"check\": \"high address bits masked after shifting\", \"actual\": {\"hashes\": [25159, 8201], \"layout\": {\"1\": [65608, 24], \"2\": [8192, 16], \"3\": [201272, 32]}}, \"expected\": {\"hashes\": [25159, 8201], \"layout\": {\"1\": [65608, 24], \"2\": [8192, 16], \"3\": [201272, 32]}}, \"passed\": true}, {\"check\": \"hash requested again before any move\", \"actual\": {\"hashes\": [1024, 1024], \"layout\": {\"1\": [20488, 24], \"2\": [8192, 16], \"3\": [201272, 32]}}, \"expected\": {\"hashes\": [1024, 1024], \"layout\": {\"1\": [20488, 24], \"2\": [8192, 16], \"3\": [201272, 32]}}, \"passed\": true}, {\"check\": \"control: no hashing\", \"actual\": {\"hashes\": [], \"layout\": {\"1\": [65608, 24], \"2\": [28680, 16], \"3\": [201272, 32]}}, \"expected\": {\"hashes\": [], \"layout\": {\"1\": [65608, 24], \"2\": [28680, 16], \"3\": [201272, 32]}}, \"passed\": true}], \"passed\": false}\n"}},"member_only":{"stages":["fixed"],"fields":["implementations.fixed","verification.fixed","harness","repair"],"note":"The verified repair, its recorded checks, the repair description, and the scoring harness are available to members."}}