Compaction is when Claude Code shortens a long conversation by replacing older messages with a summary, leaving a marker called a compact boundary. When a saved conversation is loaded, a boundary that lists its preserved messages (compactMetadata.preservedMessages, with an anchorUuid and a list of message ids) now restores exactly those messages. It also keeps the boundary, everything after it, and any older messages those later ones point back to.
If the list cannot be used, loading reads every message instead and logs one reason: no_list, boundary_unindexed, uuid_missing, anchor_before_boundary or duplicate_uuid.
Loading now also detects messages whose chain of parents loops back on itself. Reports about a message whose parent cannot be found now give a reason: non_string_parent, unknown_parent or parent_cycle.
A resumed conversation comes back with the messages compaction chose to keep, and a damaged list leads to a full read rather than a broken load.