{"abstract":"Live objects keep the gaps left by dead objects and the heap never shrinks.","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":"Deriving the pointer from the old end address stops sliding altogether.","family":"w2-garbage-collector-invariants-sliding-compaction-dead-space-skipped","id":"FA-90436","implementations":{"attempt":{"sha256":"a64149beabd4fba7bb93651d7bfc2e4b332556d93ff5a248384ea6b117ea1df8","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 = s + info[s][1]\n        def reloc(p):\n            if p is None:\n                return None\n            s = owner(p)\n            return fwd[s] + (p - 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"},"broken":{"sha256":"3d5b7db3b17f6f22c51fa87de8e8472204c2fadae956f12ed8986a6fa87e0067","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] + (p - 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-dead-space-skipped","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":"The size of every object, dead or alive, is added to the compaction pointer.","sha256":"55c775834cf144cbd3ae900c2a515fa9bf1b164e388d94decf89985b907c8270","title":"Sliding compaction: dead objects still advance the compaction pointer · 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":41.635,"exit_code":1,"observations":[{"actual":{"layout":[[100,100,[125,null]],[116,124,[104]]],"roots":[100],"top":148},"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,[125,null]],[116,124,[104]]],"roots":[116],"top":148},"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,[160]],[160,160,[]]],"roots":[100,160],"top":176},"check":"pointer to an object start","expected":{"layout":[[100,148,[112]],[112,160,[]]],"roots":[100,112],"top":128},"passed":false},{"actual":{"layout":[[100,148,[160]],[160,160,[]]],"roots":[103],"top":176},"check":"interior root","expected":{"layout":[[100,148,[112]],[112,160,[]]],"roots":[103],"top":128},"passed":false},{"actual":{"layout":[[41,100,[125,null]],[116,124,[45]],[148,148,[160]],[160,160,[]]],"roots":[41,148],"top":176},"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, [125, null]], [116, 124, [104]]], \"roots\": [100], \"top\": 148}, \"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, [125, null]], [116, 124, [104]]], \"roots\": [116], \"top\": 148}, \"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, [160]], [160, 160, []]], \"roots\": [100, 160], \"top\": 176}, \"expected\": {\"layout\": [[100, 148, [112]], [112, 160, []]], \"roots\": [100, 112], \"top\": 128}, \"passed\": false}, {\"check\": \"interior root\", \"actual\": {\"layout\": [[100, 148, [160]], [160, 160, []]], \"roots\": [103], \"top\": 176}, \"expected\": {\"layout\": [[100, 148, [112]], [112, 160, []]], \"roots\": [103], \"top\": 128}, \"passed\": false}, {\"check\": \"compaction into a lower base\", \"actual\": {\"layout\": [[41, 100, [125, null]], [116, 124, [45]], [148, 148, [160]], [160, 160, []]], \"roots\": [41, 148], \"top\": 176}, \"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":41.68,"exit_code":1,"observations":[{"actual":{"layout":[[100,100,[133,null]],[124,124,[104]]],"roots":[100],"top":176},"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]],[124,124,[104]]],"roots":[124],"top":176},"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":[[148,148,[160]],[160,160,[]]],"roots":[148,160],"top":176},"check":"pointer to an object start","expected":{"layout":[[100,148,[112]],[112,160,[]]],"roots":[100,112],"top":128},"passed":false},{"actual":{"layout":[[148,148,[160]],[160,160,[]]],"roots":[151],"top":176},"check":"interior root","expected":{"layout":[[100,148,[112]],[112,160,[]]],"roots":[103],"top":128},"passed":false},{"actual":{"layout":[[41,100,[74,null]],[65,124,[45]],[89,148,[101]],[101,160,[]]],"roots":[41,89],"top":117},"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":176},"check":"control: no roots","expected":{"layout":[],"roots":[null],"top":100},"passed":false}],"passed":false,"stderr":"","stdout":"{\"observations\": [{\"check\": \"regression: interior pointers relocate with their object\", \"actual\": {\"layout\": [[100, 100, [133, null]], [124, 124, [104]]], \"roots\": [100], \"top\": 176}, \"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]], [124, 124, [104]]], \"roots\": [124], \"top\": 176}, \"expected\": {\"layout\": [[100, 100, [125, null]], [116, 124, [104]]], \"roots\": [116], \"top\": 140}, \"passed\": false}, {\"check\": \"pointer to an object start\", \"actual\": {\"layout\": [[148, 148, [160]], [160, 160, []]], \"roots\": [148, 160], \"top\": 176}, \"expected\": {\"layout\": [[100, 148, [112]], [112, 160, []]], \"roots\": [100, 112], \"top\": 128}, \"passed\": false}, {\"check\": \"interior root\", \"actual\": {\"layout\": [[148, 148, [160]], [160, 160, []]], \"roots\": [151], \"top\": 176}, \"expected\": {\"layout\": [[100, 148, [112]], [112, 160, []]], \"roots\": [103], \"top\": 128}, \"passed\": false}, {\"check\": \"compaction into a lower base\", \"actual\": {\"layout\": [[41, 100, [74, null]], [65, 124, [45]], [89, 148, [101]], [101, 160, []]], \"roots\": [41, 89], \"top\": 117}, \"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\": 176}, \"expected\": {\"layout\": [], \"roots\": [null], \"top\": 100}, \"passed\": false}], \"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."}}