{"abstract":"Objects are permuted instead of slid, so live objects can overtake each other.","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":"Ordering by size moves large objects first and still breaks address order.","family":"w2-garbage-collector-invariants-sliding-compaction-address-ordered-sliding","id":"FA-90441","implementations":{"attempt":{"sha256":"89f24d580a683752730cf63d1e8aef27ef7e6dc770cb225cb77c1e9f0c41f737","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 sorted(starts, key=lambda s: -info[s][1]):\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"},"broken":{"sha256":"4872ae47afae84b7bca2668a51a8dd34912f048c869f3dc84f21fef31141f47f","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 [o[0] for o in objs]:\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-address-ordered-sliding","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":"Forwarding addresses follow the order the objects were listed in, not their addresses.","sha256":"e533e84320a5c90dc9daec221c53f2d92cfb61bd4361dbcff7f45b7b9967fe44","title":"Sliding compaction: new addresses assigned in input order · 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.598,"exit_code":1,"observations":[{"actual":{"layout":[[124,100,[109,null]],[100,124,[128]]],"roots":[124],"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":[[124,100,[109,null]],[100,124,[128]]],"roots":[100],"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":[[116,148,[100]],[100,160,[]]],"roots":[116,100],"top":128},"check":"pointer to an object start","expected":{"layout":[[100,148,[112]],[112,160,[]]],"roots":[100,112],"top":128},"passed":false},{"actual":{"layout":[[116,148,[100]],[100,160,[]]],"roots":[119],"top":128},"check":"interior root","expected":{"layout":[[100,148,[112]],[112,160,[]]],"roots":[103],"top":128},"passed":false},{"actual":{"layout":[[65,100,[50,null]],[41,124,[69]],[97,148,[81]],[81,160,[]]],"roots":[65,97],"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\": [[124, 100, [109, null]], [100, 124, [128]]], \"roots\": [124], \"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\": [[124, 100, [109, null]], [100, 124, [128]]], \"roots\": [100], \"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\": [[116, 148, [100]], [100, 160, []]], \"roots\": [116, 100], \"top\": 128}, \"expected\": {\"layout\": [[100, 148, [112]], [112, 160, []]], \"roots\": [100, 112], \"top\": 128}, \"passed\": false}, {\"check\": \"interior root\", \"actual\": {\"layout\": [[116, 148, [100]], [100, 160, []]], \"roots\": [119], \"top\": 128}, \"expected\": {\"layout\": [[100, 148, [112]], [112, 160, []]], \"roots\": [103], \"top\": 128}, \"passed\": false}, {\"check\": \"compaction into a lower base\", \"actual\": {\"layout\": [[65, 100, [50, null]], [41, 124, [69]], [97, 148, [81]], [81, 160, []]], \"roots\": [65, 97], \"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":46.404,"exit_code":1,"observations":[{"actual":{"layout":[[100,100,[125,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":true},{"actual":{"layout":[[100,100,[125,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":true},{"actual":{"layout":[[116,148,[100]],[100,160,[]]],"roots":[116,100],"top":128},"check":"pointer to an object start","expected":{"layout":[[100,148,[112]],[112,160,[]]],"roots":[100,112],"top":128},"passed":false},{"actual":{"layout":[[116,148,[100]],[100,160,[]]],"roots":[119],"top":128},"check":"interior root","expected":{"layout":[[100,148,[112]],[112,160,[]]],"roots":[103],"top":128},"passed":false},{"actual":{"layout":[[57,100,[82,null]],[73,124,[61]],[97,148,[41]],[41,160,[]]],"roots":[57,97],"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, [125, null]], [116, 124, [104]]], \"roots\": [100], \"top\": 140}, \"expected\": {\"layout\": [[100, 100, [125, null]], [116, 124, [104]]], \"roots\": [100], \"top\": 140}, \"passed\": true}, {\"check\": \"dead objects do not advance the compaction pointer\", \"actual\": {\"layout\": [[100, 100, [125, null]], [116, 124, [104]]], \"roots\": [116], \"top\": 140}, \"expected\": {\"layout\": [[100, 100, [125, null]], [116, 124, [104]]], \"roots\": [116], \"top\": 140}, \"passed\": true}, {\"check\": \"pointer to an object start\", \"actual\": {\"layout\": [[116, 148, [100]], [100, 160, []]], \"roots\": [116, 100], \"top\": 128}, \"expected\": {\"layout\": [[100, 148, [112]], [112, 160, []]], \"roots\": [100, 112], \"top\": 128}, \"passed\": false}, {\"check\": \"interior root\", \"actual\": {\"layout\": [[116, 148, [100]], [100, 160, []]], \"roots\": [119], \"top\": 128}, \"expected\": {\"layout\": [[100, 148, [112]], [112, 160, []]], \"roots\": [103], \"top\": 128}, \"passed\": false}, {\"check\": \"compaction into a lower base\", \"actual\": {\"layout\": [[57, 100, [82, null]], [73, 124, [61]], [97, 148, [41]], [41, 160, []]], \"roots\": [57, 97], \"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."}}