compactOpCount
How many RgaOp.Compact ops this log retains.
Public for the same storage-partitioning reason as compactedIds, but answering the converse question. A Compact is the only carrier of this class's "once compacted, always compacted" guarantee for the ids it names, and nothing ever prunes one — purgeBelow keeps it unconditionally and piece unions the positions it carries — so a consumer that drops the storage holding one silently revokes that guarantee, and a peer that never received the compaction can re-admit the purged element on the next piece. A segment holding a Compact therefore may never be dropped, however superseded its other ops are.
Deliberately not compactedIds.isNotEmpty(): that projection is blind to a Compact carrying an empty positions map, and "may I delete this?" must not be decided by a predicate with a false-negative case.