{"abstract":"hashCode changes after every collection that moves the object.","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":"Re-deriving from the stored value shifts and masks it a second time.","family":"w2-garbage-collector-invariants-identity-hash-relocation-moved-object-lookup","id":"FA-90721","implementations":{"attempt":{"sha256":"300b377c1798b734ddbe1f859a5ff2d44d0a3f0def5956d6ba79497de416b086","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.get(o, objs[o][0]) >> 3 & 0xFFFF)\n        else:\n            if state[o] == 'hashed':\n                stored[o] = objs[o][0] >> 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"},"broken":{"sha256":"d3d56bd78378d8eb53a7653317ce53cdcd75a394ed7ac59f8556ed99c0432293","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(objs[o][0] >> 3 & 0xFFFF)\n        else:\n            if state[o] == 'hashed':\n                stored[o] = objs[o][0] >> 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-moved-object-lookup","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 lookup for moved objects ignores the stored slot.","sha256":"b2060683e3e450d4ec38bb55238abefc41ee77bb614a919eb9db6e4d1a6db26b","title":"Identity hash: moved objects hash their current 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":42.923,"exit_code":1,"observations":[{"actual":{"hashes":[8201,1025],"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,128],"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, 1025], \"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, 128], \"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":42.08,"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,5120],"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, 5120], \"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."}}