{"abstract":"Pointers into the middle of objects are redirected to the object headers.","category":"Garbage collector invariants","checks":6,"contract":"Mark-compact with sliding. objs are [start, size, fields] in arbitrary order; pointers (fields and roots) may point anywhere inside an object and belong to the object whose [start, start+size) contains them; a pointer outside every object is [\"dangling-pointer\", p]. Mark from the roots, assign new addresses to live objects in address order starting at base with no gaps, and relocate every pointer to new start + original offset. Return the new layout [new, old, fields], new roots and the new top.","contract_signature":"objs, roots, base","evaluation_group":"w2-garbage-collector-invariants-sliding-compaction","failed_approach":"Relocating only exact starts leaves interior pointers at their old addresses.","family":"w2-garbage-collector-invariants-sliding-compaction-interior-offset-preservation","id":"FA-90446","implementations":{"attempt":{"sha256":"cbbfd7564ff426655d5af81579c1a42b8379291016353d7ca0a98d1f29a5b520","source":"\"\"\"Failure Map reference implementation. Python standard library only.\"\"\"\nimport json\nimport bisect\nN = 1\nobservations = []\ndef solve(objs, roots, base):\n    starts = sorted(o[0] for o in objs)\n    info = {o[0]: o for o in objs}\n    def owner(p):\n        i = bisect.bisect_right(starts, p) - 1\n        if i < 0:\n            raise KeyError(p)\n        s = starts[i]\n        if p >= s + info[s][1]:\n            raise KeyError(p)\n        return s\n    try:\n        live = set()\n        stack = [r for r in roots if r is not None]\n        while stack:\n            s = owner(stack.pop())\n            if s in live:\n                continue\n            live.add(s)\n            stack.extend(f for f in info[s][2] if f is not None)\n        fwd = {}\n        top = base\n        for s in starts:\n            if s in live:\n                fwd[s] = top\n                top += info[s][1]\n        def reloc(p):\n            if p is None:\n                return None\n            s = owner(p)\n            return fwd.get(p, p)\n        layout = [[fwd[s], s, [reloc(f) for f in info[s][2]]] for s in starts if s in live]\n        new_roots = [reloc(r) for r in roots]\n    except KeyError as e:\n        return ['dangling-pointer', e.args[0]]\n    except IndexError:\n        return ['heap-walk-error']\n    return {'layout': layout, 'roots': new_roots, 'top': top}\ndef check(label, actual, expected):\n    observations.append({\"check\": label, \"actual\": actual, \"expected\": expected, \"passed\": actual == expected})\ncases = [[('regression: interior pointers relocate with their object',\n   ([[160, 16, []], [100, 16, [133, None]], [116, 8, []], [124, 24, [104]], [148, 12, [160]]], [100], 100),\n   {'layout': [[100, 100, [125, None]], [116, 124, [104]]], 'roots': [100], 'top': 140}),\n  ('dead objects do not advance the compaction pointer',\n   ([[160, 16, []], [100, 16, [133, None]], [116, 8, []], [124, 24, [104]], [148, 12, [160]]], [124], 100),\n   {'layout': [[100, 100, [125, None]], [116, 124, [104]]], 'roots': [116], 'top': 140}),\n  ('pointer to an object start',\n   ([[160, 16, []], [100, 16, [133, None]], [116, 8, []], [124, 24, [104]], [148, 12, [160]]],\n    [148, 160],\n    100),\n   {'layout': [[100, 148, [112]], [112, 160, []]], 'roots': [100, 112], 'top': 128}),\n  ('interior root',\n   ([[160, 16, []], [100, 16, [133, None]], [116, 8, []], [124, 24, [104]], [148, 12, [160]]], [151], 100),\n   {'layout': [[100, 148, [112]], [112, 160, []]], 'roots': [103], 'top': 128}),\n  ('compaction into a lower base',\n   ([[160, 16, []], [100, 16, [133, None]], [116, 8, []], [124, 24, [104]], [148, 12, [160]]],\n    [100, 148],\n    41),\n   {'layout': [[41, 100, [66, None]], [57, 124, [45]], [81, 148, [93]], [93, 160, []]],\n    'roots': [41, 81],\n    'top': 109}),\n  ('control: no roots',\n   ([[160, 16, []], [100, 16, [133, None]], [116, 8, []], [124, 24, [104]], [148, 12, [160]]], [None], 100),\n   {'layout': [], 'roots': [None], 'top': 100})],\n [('regression: interior pointers relocate with their object',\n   ([[160, 16, []], [100, 16, [134, None]], [116, 8, []], [124, 24, [104]], [148, 12, [160]]], [100], 100),\n   {'layout': [[100, 100, [126, None]], [116, 124, [104]]], 'roots': [100], 'top': 140}),\n  ('dead objects do not advance the compaction pointer',\n   ([[160, 16, []], [100, 16, [134, None]], [116, 8, []], [124, 24, [104]], [148, 12, [160]]], [124], 100),\n   {'layout': [[100, 100, [126, None]], [116, 124, [104]]], 'roots': [116], 'top': 140}),\n  ('pointer to an object start',\n   ([[160, 16, []], [100, 16, [134, None]], [116, 8, []], [124, 24, [104]], [148, 12, [160]]],\n    [148, 160],\n    100),\n   {'layout': [[100, 148, [112]], [112, 160, []]], 'roots': [100, 112], 'top': 128}),\n  ('interior root',\n   ([[160, 16, []], [100, 16, [134, None]], [116, 8, []], [124, 24, [104]], [148, 12, [160]]], [152], 100),\n   {'layout': [[100, 148, [112]], [112, 160, []]], 'roots': [104], 'top': 128}),\n  ('compaction into a lower base',\n   ([[160, 16, []], [100, 16, [134, None]], [116, 8, []], [124, 24, [104]], [148, 12, [160]]],\n    [100, 148],\n    42),\n   {'layout': [[42, 100, [68, None]], [58, 124, [46]], [82, 148, [94]], [94, 160, []]],\n    'roots': [42, 82],\n    'top': 110}),\n  ('control: no roots',\n   ([[160, 16, []], [100, 16, [134, None]], [116, 8, []], [124, 24, [104]], [148, 12, [160]]], [None], 100),\n   {'layout': [], 'roots': [None], 'top': 100})],\n [('regression: interior pointers relocate with their object',\n   ([[160, 16, []], [100, 16, [135, None]], [116, 8, []], [124, 24, [104]], [148, 12, [160]]], [100], 100),\n   {'layout': [[100, 100, [127, None]], [116, 124, [104]]], 'roots': [100], 'top': 140}),\n  ('dead objects do not advance the compaction pointer',\n   ([[160, 16, []], [100, 16, [135, None]], [116, 8, []], [124, 24, [104]], [148, 12, [160]]], [124], 100),\n   {'layout': [[100, 100, [127, None]], [116, 124, [104]]], 'roots': [116], 'top': 140}),\n  ('pointer to an object start',\n   ([[160, 16, []], [100, 16, [135, None]], [116, 8, []], [124, 24, [104]], [148, 12, [160]]],\n    [148, 160],\n    100),\n   {'layout': [[100, 148, [112]], [112, 160, []]], 'roots': [100, 112], 'top': 128}),\n  ('interior root',\n   ([[160, 16, []], [100, 16, [135, None]], [116, 8, []], [124, 24, [104]], [148, 12, [160]]], [153], 100),\n   {'layout': [[100, 148, [112]], [112, 160, []]], 'roots': [105], 'top': 128}),\n  ('compaction into a lower base',\n   ([[160, 16, []], [100, 16, [135, None]], [116, 8, []], [124, 24, [104]], [148, 12, [160]]],\n    [100, 148],\n    43),\n   {'layout': [[43, 100, [70, None]], [59, 124, [47]], [83, 148, [95]], [95, 160, []]],\n    'roots': [43, 83],\n    'top': 111}),\n  ('control: no roots',\n   ([[160, 16, []], [100, 16, [135, None]], [116, 8, []], [124, 24, [104]], [148, 12, [160]]], [None], 100),\n   {'layout': [], 'roots': [None], 'top': 100})],\n [('regression: interior pointers relocate with their object',\n   ([[160, 16, []], [100, 16, [136, None]], [116, 8, []], [124, 24, [104]], [148, 12, [160]]], [100], 100),\n   {'layout': [[100, 100, [128, None]], [116, 124, [104]]], 'roots': [100], 'top': 140}),\n  ('dead objects do not advance the compaction pointer',\n   ([[160, 16, []], [100, 16, [136, None]], [116, 8, []], [124, 24, [104]], [148, 12, [160]]], [124], 100),\n   {'layout': [[100, 100, [128, None]], [116, 124, [104]]], 'roots': [116], 'top': 140}),\n  ('pointer to an object start',\n   ([[160, 16, []], [100, 16, [136, None]], [116, 8, []], [124, 24, [104]], [148, 12, [160]]],\n    [148, 160],\n    100),\n   {'layout': [[100, 148, [112]], [112, 160, []]], 'roots': [100, 112], 'top': 128}),\n  ('interior root',\n   ([[160, 16, []], [100, 16, [136, None]], [116, 8, []], [124, 24, [104]], [148, 12, [160]]], [150], 100),\n   {'layout': [[100, 148, [112]], [112, 160, []]], 'roots': [102], 'top': 128}),\n  ('compaction into a lower base',\n   ([[160, 16, []], [100, 16, [136, None]], [116, 8, []], [124, 24, [104]], [148, 12, [160]]],\n    [100, 148],\n    44),\n   {'layout': [[44, 100, [72, None]], [60, 124, [48]], [84, 148, [96]], [96, 160, []]],\n    'roots': [44, 84],\n    'top': 112}),\n  ('control: no roots',\n   ([[160, 16, []], [100, 16, [136, None]], [116, 8, []], [124, 24, [104]], [148, 12, [160]]], [None], 100),\n   {'layout': [], 'roots': [None], 'top': 100})],\n [('regression: interior pointers relocate with their object',\n   ([[160, 16, []], [100, 16, [137, None]], [116, 8, []], [124, 24, [104]], [148, 12, [160]]], [100], 100),\n   {'layout': [[100, 100, [129, None]], [116, 124, [104]]], 'roots': [100], 'top': 140}),\n  ('dead objects do not advance the compaction pointer',\n   ([[160, 16, []], [100, 16, [137, None]], [116, 8, []], [124, 24, [104]], [148, 12, [160]]], [124], 100),\n   {'layout': [[100, 100, [129, None]], [116, 124, [104]]], 'roots': [116], 'top': 140}),\n  ('pointer to an object start',\n   ([[160, 16, []], [100, 16, [137, None]], [116, 8, []], [124, 24, [104]], [148, 12, [160]]],\n    [148, 160],\n    100),\n   {'layout': [[100, 148, [112]], [112, 160, []]], 'roots': [100, 112], 'top': 128}),\n  ('interior root',\n   ([[160, 16, []], [100, 16, [137, None]], [116, 8, []], [124, 24, [104]], [148, 12, [160]]], [151], 100),\n   {'layout': [[100, 148, [112]], [112, 160, []]], 'roots': [103], 'top': 128}),\n  ('compaction into a lower base',\n   ([[160, 16, []], [100, 16, [137, None]], [116, 8, []], [124, 24, [104]], [148, 12, [160]]],\n    [100, 148],\n    45),\n   {'layout': [[45, 100, [74, None]], [61, 124, [49]], [85, 148, [97]], [97, 160, []]],\n    'roots': [45, 85],\n    'top': 113}),\n  ('control: no roots',\n   ([[160, 16, []], [100, 16, [137, None]], [116, 8, []], [124, 24, [104]], [148, 12, [160]]], [None], 100),\n   {'layout': [], 'roots': [None], 'top': 100})]]\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":"2190ee3106401ebadd9b36a23a847d83f348ea27e0ca2b0dabdbaa5109ac5ee3","source":"\"\"\"Failure Map reference implementation. Python standard library only.\"\"\"\nimport json\nimport bisect\nN = 1\nobservations = []\ndef solve(objs, roots, base):\n    starts = sorted(o[0] for o in objs)\n    info = {o[0]: o for o in objs}\n    def owner(p):\n        i = bisect.bisect_right(starts, p) - 1\n        if i < 0:\n            raise KeyError(p)\n        s = starts[i]\n        if p >= s + info[s][1]:\n            raise KeyError(p)\n        return s\n    try:\n        live = set()\n        stack = [r for r in roots if r is not None]\n        while stack:\n            s = owner(stack.pop())\n            if s in live:\n                continue\n            live.add(s)\n            stack.extend(f for f in info[s][2] if f is not None)\n        fwd = {}\n        top = base\n        for s in starts:\n            if s in live:\n                fwd[s] = top\n                top += info[s][1]\n        def reloc(p):\n            if p is None:\n                return None\n            s = owner(p)\n            return fwd[s]\n        layout = [[fwd[s], s, [reloc(f) for f in info[s][2]]] for s in starts if s in live]\n        new_roots = [reloc(r) for r in roots]\n    except KeyError as e:\n        return ['dangling-pointer', e.args[0]]\n    except IndexError:\n        return ['heap-walk-error']\n    return {'layout': layout, 'roots': new_roots, 'top': top}\ndef check(label, actual, expected):\n    observations.append({\"check\": label, \"actual\": actual, \"expected\": expected, \"passed\": actual == expected})\ncases = [[('regression: interior pointers relocate with their object',\n   ([[160, 16, []], [100, 16, [133, None]], [116, 8, []], [124, 24, [104]], [148, 12, [160]]], [100], 100),\n   {'layout': [[100, 100, [125, None]], [116, 124, [104]]], 'roots': [100], 'top': 140}),\n  ('dead objects do not advance the compaction pointer',\n   ([[160, 16, []], [100, 16, [133, None]], [116, 8, []], [124, 24, [104]], [148, 12, [160]]], [124], 100),\n   {'layout': [[100, 100, [125, None]], [116, 124, [104]]], 'roots': [116], 'top': 140}),\n  ('pointer to an object start',\n   ([[160, 16, []], [100, 16, [133, None]], [116, 8, []], [124, 24, [104]], [148, 12, [160]]],\n    [148, 160],\n    100),\n   {'layout': [[100, 148, [112]], [112, 160, []]], 'roots': [100, 112], 'top': 128}),\n  ('interior root',\n   ([[160, 16, []], [100, 16, [133, None]], [116, 8, []], [124, 24, [104]], [148, 12, [160]]], [151], 100),\n   {'layout': [[100, 148, [112]], [112, 160, []]], 'roots': [103], 'top': 128}),\n  ('compaction into a lower base',\n   ([[160, 16, []], [100, 16, [133, None]], [116, 8, []], [124, 24, [104]], [148, 12, [160]]],\n    [100, 148],\n    41),\n   {'layout': [[41, 100, [66, None]], [57, 124, [45]], [81, 148, [93]], [93, 160, []]],\n    'roots': [41, 81],\n    'top': 109}),\n  ('control: no roots',\n   ([[160, 16, []], [100, 16, [133, None]], [116, 8, []], [124, 24, [104]], [148, 12, [160]]], [None], 100),\n   {'layout': [], 'roots': [None], 'top': 100})],\n [('regression: interior pointers relocate with their object',\n   ([[160, 16, []], [100, 16, [134, None]], [116, 8, []], [124, 24, [104]], [148, 12, [160]]], [100], 100),\n   {'layout': [[100, 100, [126, None]], [116, 124, [104]]], 'roots': [100], 'top': 140}),\n  ('dead objects do not advance the compaction pointer',\n   ([[160, 16, []], [100, 16, [134, None]], [116, 8, []], [124, 24, [104]], [148, 12, [160]]], [124], 100),\n   {'layout': [[100, 100, [126, None]], [116, 124, [104]]], 'roots': [116], 'top': 140}),\n  ('pointer to an object start',\n   ([[160, 16, []], [100, 16, [134, None]], [116, 8, []], [124, 24, [104]], [148, 12, [160]]],\n    [148, 160],\n    100),\n   {'layout': [[100, 148, [112]], [112, 160, []]], 'roots': [100, 112], 'top': 128}),\n  ('interior root',\n   ([[160, 16, []], [100, 16, [134, None]], [116, 8, []], [124, 24, [104]], [148, 12, [160]]], [152], 100),\n   {'layout': [[100, 148, [112]], [112, 160, []]], 'roots': [104], 'top': 128}),\n  ('compaction into a lower base',\n   ([[160, 16, []], [100, 16, [134, None]], [116, 8, []], [124, 24, [104]], [148, 12, [160]]],\n    [100, 148],\n    42),\n   {'layout': [[42, 100, [68, None]], [58, 124, [46]], [82, 148, [94]], [94, 160, []]],\n    'roots': [42, 82],\n    'top': 110}),\n  ('control: no roots',\n   ([[160, 16, []], [100, 16, [134, None]], [116, 8, []], [124, 24, [104]], [148, 12, [160]]], [None], 100),\n   {'layout': [], 'roots': [None], 'top': 100})],\n [('regression: interior pointers relocate with their object',\n   ([[160, 16, []], [100, 16, [135, None]], [116, 8, []], [124, 24, [104]], [148, 12, [160]]], [100], 100),\n   {'layout': [[100, 100, [127, None]], [116, 124, [104]]], 'roots': [100], 'top': 140}),\n  ('dead objects do not advance the compaction pointer',\n   ([[160, 16, []], [100, 16, [135, None]], [116, 8, []], [124, 24, [104]], [148, 12, [160]]], [124], 100),\n   {'layout': [[100, 100, [127, None]], [116, 124, [104]]], 'roots': [116], 'top': 140}),\n  ('pointer to an object start',\n   ([[160, 16, []], [100, 16, [135, None]], [116, 8, []], [124, 24, [104]], [148, 12, [160]]],\n    [148, 160],\n    100),\n   {'layout': [[100, 148, [112]], [112, 160, []]], 'roots': [100, 112], 'top': 128}),\n  ('interior root',\n   ([[160, 16, []], [100, 16, [135, None]], [116, 8, []], [124, 24, [104]], [148, 12, [160]]], [153], 100),\n   {'layout': [[100, 148, [112]], [112, 160, []]], 'roots': [105], 'top': 128}),\n  ('compaction into a lower base',\n   ([[160, 16, []], [100, 16, [135, None]], [116, 8, []], [124, 24, [104]], [148, 12, [160]]],\n    [100, 148],\n    43),\n   {'layout': [[43, 100, [70, None]], [59, 124, [47]], [83, 148, [95]], [95, 160, []]],\n    'roots': [43, 83],\n    'top': 111}),\n  ('control: no roots',\n   ([[160, 16, []], [100, 16, [135, None]], [116, 8, []], [124, 24, [104]], [148, 12, [160]]], [None], 100),\n   {'layout': [], 'roots': [None], 'top': 100})],\n [('regression: interior pointers relocate with their object',\n   ([[160, 16, []], [100, 16, [136, None]], [116, 8, []], [124, 24, [104]], [148, 12, [160]]], [100], 100),\n   {'layout': [[100, 100, [128, None]], [116, 124, [104]]], 'roots': [100], 'top': 140}),\n  ('dead objects do not advance the compaction pointer',\n   ([[160, 16, []], [100, 16, [136, None]], [116, 8, []], [124, 24, [104]], [148, 12, [160]]], [124], 100),\n   {'layout': [[100, 100, [128, None]], [116, 124, [104]]], 'roots': [116], 'top': 140}),\n  ('pointer to an object start',\n   ([[160, 16, []], [100, 16, [136, None]], [116, 8, []], [124, 24, [104]], [148, 12, [160]]],\n    [148, 160],\n    100),\n   {'layout': [[100, 148, [112]], [112, 160, []]], 'roots': [100, 112], 'top': 128}),\n  ('interior root',\n   ([[160, 16, []], [100, 16, [136, None]], [116, 8, []], [124, 24, [104]], [148, 12, [160]]], [150], 100),\n   {'layout': [[100, 148, [112]], [112, 160, []]], 'roots': [102], 'top': 128}),\n  ('compaction into a lower base',\n   ([[160, 16, []], [100, 16, [136, None]], [116, 8, []], [124, 24, [104]], [148, 12, [160]]],\n    [100, 148],\n    44),\n   {'layout': [[44, 100, [72, None]], [60, 124, [48]], [84, 148, [96]], [96, 160, []]],\n    'roots': [44, 84],\n    'top': 112}),\n  ('control: no roots',\n   ([[160, 16, []], [100, 16, [136, None]], [116, 8, []], [124, 24, [104]], [148, 12, [160]]], [None], 100),\n   {'layout': [], 'roots': [None], 'top': 100})],\n [('regression: interior pointers relocate with their object',\n   ([[160, 16, []], [100, 16, [137, None]], [116, 8, []], [124, 24, [104]], [148, 12, [160]]], [100], 100),\n   {'layout': [[100, 100, [129, None]], [116, 124, [104]]], 'roots': [100], 'top': 140}),\n  ('dead objects do not advance the compaction pointer',\n   ([[160, 16, []], [100, 16, [137, None]], [116, 8, []], [124, 24, [104]], [148, 12, [160]]], [124], 100),\n   {'layout': [[100, 100, [129, None]], [116, 124, [104]]], 'roots': [116], 'top': 140}),\n  ('pointer to an object start',\n   ([[160, 16, []], [100, 16, [137, None]], [116, 8, []], [124, 24, [104]], [148, 12, [160]]],\n    [148, 160],\n    100),\n   {'layout': [[100, 148, [112]], [112, 160, []]], 'roots': [100, 112], 'top': 128}),\n  ('interior root',\n   ([[160, 16, []], [100, 16, [137, None]], [116, 8, []], [124, 24, [104]], [148, 12, [160]]], [151], 100),\n   {'layout': [[100, 148, [112]], [112, 160, []]], 'roots': [103], 'top': 128}),\n  ('compaction into a lower base',\n   ([[160, 16, []], [100, 16, [137, None]], [116, 8, []], [124, 24, [104]], [148, 12, [160]]],\n    [100, 148],\n    45),\n   {'layout': [[45, 100, [74, None]], [61, 124, [49]], [85, 148, [97]], [97, 160, []]],\n    'roots': [45, 85],\n    'top': 113}),\n  ('control: no roots',\n   ([[160, 16, []], [100, 16, [137, None]], [116, 8, []], [124, 24, [104]], [148, 12, [160]]], [None], 100),\n   {'layout': [], 'roots': [None], 'top': 100})]]\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-sliding-compaction-interior-offset-preservation","generated_at":"2026-09-29T14:51:26.820107+00:00","license":"CC0-1.0","python":"3.12.14","seed":1,"split":"open-access"},"relevance":"Sliding compaction must preserve address order and interior offsets while squeezing out dead space.","root_cause":"Relocation maps the owning object but drops the pointer's offset.","sha256":"c14a7c851a3060a19c5b2e3126df8b9a9e196f42156d9f8a9a752eaa18b02775","title":"Sliding compaction: interior pointers snapped to object starts · 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.595,"exit_code":1,"observations":[{"actual":{"layout":[[100,100,[133,null]],[116,124,[104]]],"roots":[100],"top":140},"check":"regression: interior pointers relocate with their object","expected":{"layout":[[100,100,[125,null]],[116,124,[104]]],"roots":[100],"top":140},"passed":false},{"actual":{"layout":[[100,100,[133,null]],[116,124,[104]]],"roots":[116],"top":140},"check":"dead objects do not advance the compaction pointer","expected":{"layout":[[100,100,[125,null]],[116,124,[104]]],"roots":[116],"top":140},"passed":false},{"actual":{"layout":[[100,148,[112]],[112,160,[]]],"roots":[100,112],"top":128},"check":"pointer to an object start","expected":{"layout":[[100,148,[112]],[112,160,[]]],"roots":[100,112],"top":128},"passed":true},{"actual":{"layout":[[100,148,[112]],[112,160,[]]],"roots":[151],"top":128},"check":"interior root","expected":{"layout":[[100,148,[112]],[112,160,[]]],"roots":[103],"top":128},"passed":false},{"actual":{"layout":[[41,100,[133,null]],[57,124,[104]],[81,148,[93]],[93,160,[]]],"roots":[41,81],"top":109},"check":"compaction into a lower base","expected":{"layout":[[41,100,[66,null]],[57,124,[45]],[81,148,[93]],[93,160,[]]],"roots":[41,81],"top":109},"passed":false},{"actual":{"layout":[],"roots":[null],"top":100},"check":"control: no roots","expected":{"layout":[],"roots":[null],"top":100},"passed":true}],"passed":false,"stderr":"","stdout":"{\"observations\": [{\"check\": \"regression: interior pointers relocate with their object\", \"actual\": {\"layout\": [[100, 100, [133, null]], [116, 124, [104]]], \"roots\": [100], \"top\": 140}, \"expected\": {\"layout\": [[100, 100, [125, null]], [116, 124, [104]]], \"roots\": [100], \"top\": 140}, \"passed\": false}, {\"check\": \"dead objects do not advance the compaction pointer\", \"actual\": {\"layout\": [[100, 100, [133, null]], [116, 124, [104]]], \"roots\": [116], \"top\": 140}, \"expected\": {\"layout\": [[100, 100, [125, null]], [116, 124, [104]]], \"roots\": [116], \"top\": 140}, \"passed\": false}, {\"check\": \"pointer to an object start\", \"actual\": {\"layout\": [[100, 148, [112]], [112, 160, []]], \"roots\": [100, 112], \"top\": 128}, \"expected\": {\"layout\": [[100, 148, [112]], [112, 160, []]], \"roots\": [100, 112], \"top\": 128}, \"passed\": true}, {\"check\": \"interior root\", \"actual\": {\"layout\": [[100, 148, [112]], [112, 160, []]], \"roots\": [151], \"top\": 128}, \"expected\": {\"layout\": [[100, 148, [112]], [112, 160, []]], \"roots\": [103], \"top\": 128}, \"passed\": false}, {\"check\": \"compaction into a lower base\", \"actual\": {\"layout\": [[41, 100, [133, null]], [57, 124, [104]], [81, 148, [93]], [93, 160, []]], \"roots\": [41, 81], \"top\": 109}, \"expected\": {\"layout\": [[41, 100, [66, null]], [57, 124, [45]], [81, 148, [93]], [93, 160, []]], \"roots\": [41, 81], \"top\": 109}, \"passed\": false}, {\"check\": \"control: no roots\", \"actual\": {\"layout\": [], \"roots\": [null], \"top\": 100}, \"expected\": {\"layout\": [], \"roots\": [null], \"top\": 100}, \"passed\": true}], \"passed\": false}\n"},"broken":{"elapsed_ms":40.482,"exit_code":1,"observations":[{"actual":{"layout":[[100,100,[116,null]],[116,124,[100]]],"roots":[100],"top":140},"check":"regression: interior pointers relocate with their object","expected":{"layout":[[100,100,[125,null]],[116,124,[104]]],"roots":[100],"top":140},"passed":false},{"actual":{"layout":[[100,100,[116,null]],[116,124,[100]]],"roots":[116],"top":140},"check":"dead objects do not advance the compaction pointer","expected":{"layout":[[100,100,[125,null]],[116,124,[104]]],"roots":[116],"top":140},"passed":false},{"actual":{"layout":[[100,148,[112]],[112,160,[]]],"roots":[100,112],"top":128},"check":"pointer to an object start","expected":{"layout":[[100,148,[112]],[112,160,[]]],"roots":[100,112],"top":128},"passed":true},{"actual":{"layout":[[100,148,[112]],[112,160,[]]],"roots":[100],"top":128},"check":"interior root","expected":{"layout":[[100,148,[112]],[112,160,[]]],"roots":[103],"top":128},"passed":false},{"actual":{"layout":[[41,100,[57,null]],[57,124,[41]],[81,148,[93]],[93,160,[]]],"roots":[41,81],"top":109},"check":"compaction into a lower base","expected":{"layout":[[41,100,[66,null]],[57,124,[45]],[81,148,[93]],[93,160,[]]],"roots":[41,81],"top":109},"passed":false},{"actual":{"layout":[],"roots":[null],"top":100},"check":"control: no roots","expected":{"layout":[],"roots":[null],"top":100},"passed":true}],"passed":false,"stderr":"","stdout":"{\"observations\": [{\"check\": \"regression: interior pointers relocate with their object\", \"actual\": {\"layout\": [[100, 100, [116, null]], [116, 124, [100]]], \"roots\": [100], \"top\": 140}, \"expected\": {\"layout\": [[100, 100, [125, null]], [116, 124, [104]]], \"roots\": [100], \"top\": 140}, \"passed\": false}, {\"check\": \"dead objects do not advance the compaction pointer\", \"actual\": {\"layout\": [[100, 100, [116, null]], [116, 124, [100]]], \"roots\": [116], \"top\": 140}, \"expected\": {\"layout\": [[100, 100, [125, null]], [116, 124, [104]]], \"roots\": [116], \"top\": 140}, \"passed\": false}, {\"check\": \"pointer to an object start\", \"actual\": {\"layout\": [[100, 148, [112]], [112, 160, []]], \"roots\": [100, 112], \"top\": 128}, \"expected\": {\"layout\": [[100, 148, [112]], [112, 160, []]], \"roots\": [100, 112], \"top\": 128}, \"passed\": true}, {\"check\": \"interior root\", \"actual\": {\"layout\": [[100, 148, [112]], [112, 160, []]], \"roots\": [100], \"top\": 128}, \"expected\": {\"layout\": [[100, 148, [112]], [112, 160, []]], \"roots\": [103], \"top\": 128}, \"passed\": false}, {\"check\": \"compaction into a lower base\", \"actual\": {\"layout\": [[41, 100, [57, null]], [57, 124, [41]], [81, 148, [93]], [93, 160, []]], \"roots\": [41, 81], \"top\": 109}, \"expected\": {\"layout\": [[41, 100, [66, null]], [57, 124, [45]], [81, 148, [93]], [93, 160, []]], \"roots\": [41, 81], \"top\": 109}, \"passed\": false}, {\"check\": \"control: no roots\", \"actual\": {\"layout\": [], \"roots\": [null], \"top\": 100}, \"expected\": {\"layout\": [], \"roots\": [null], \"top\": 100}, \"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."}}