mirror of
https://github.com/vitorpamplona/amethyst.git
synced 2026-08-10 16:33:27 +00:00
The two-pass deletion convergence is protocol logic, not CLI assembly, and the geode mirror is a near-term second consumer — so move it out of SyncCommand into a reusable accessory alongside the rest of the negentropy family. quartz: negentropySettleDeletions(relay, filter, store, sendUp, applyDown, …) — re-reconciles after a content settle and resolves only the residual: publishes our covering deletions up (sendUp) and/or ingests the relay's kind-5 down (applyDown, vanish never auto-applied), looping until a round resolves nothing. Returns DeletionSettleResult(sentUp, appliedDown, rounds). Everything it needs is already quartz (negentropyReconcileIds, fetchAll, deletionsCovering, publishAndConfirm, Event.verify, IEventStore), so it carries no CLI dependency. SyncCommand's pass 2 collapses to a single call; pass 1 (content) is unchanged. Catalogued in the accessories README. Tests: DeletionSyncTest drives the accessory end-to-end both ways (sendUp → relay converges to gone; applyDown → local converges to gone), on top of the existing deletionsCovering unit + manual-wiring cases. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01JgL1WTV4Hkp2uuXcUHCHGt