fix: expire purge tombstones after a TTL so re-created notes survive (#127) - #136
Merged
Conversation
…127) .omi-tombstones was append-only and never expired, and _apply_tombstones unlinked any matching top-level note on every sync — so re-creating a note with a previously-purged filename got it deleted fleet-wide with no signal. New tombstones now carry an ISO timestamp and stop deleting after TOMBSTONE_TTL_DAYS (90); expiry is by the per-line timestamp so every node converges under the union merge, and expired lines are GC'd to bound the file. Legacy undated tombstones stay permanent (they can't be safely dated under merge=union). Closes #127. Co-Authored-By: Claude Fable 5 <[email protected]>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Closes #127.
.omi-tombstoneswas append-only and never expired;_apply_tombstonesunlinked any matching top-level note on every sync — so re-creating a note with a previously-purged filename (months later) got it deleted fleet-wide with no signal.New tombstones now carry an ISO-8601 timestamp and stop deleting after
TOMBSTONE_TTL_DAYS(90). Expiry is decided by the per-line timestamp, so every node converges on the same result under themerge=uniondriver (a locally-removed line would just be re-added by a lagging peer). Expired lines are GC'd to bound the file. Legacy undated tombstones stay permanent — they can't be safely dated under union-merge.Test plan
🤖 Generated with Claude Code
Proudly Made in Nebraska. Go Big Red! 🌽 https://xkcd.com/2347/