feat(blog): add soft delete deep dive post - #425
Merged
Conversation
Walk through why deletion is hard in a geo-replicated active-active database. S3 exposes delete markers, which leaks an internal detail of its eventually consistent database into the public API. Tigris models soft deletes as external references in a separate keyspace instead, so undo is a metadata move rather than deleting a delete marker. Covers garbage collection roots, why forking could not solve this (it has to be enabled at bucket creation time), and the anti-resurrection guard that stops a stale write from undoing a newer delete. Includes six inline ASCII figures as standalone React components, plus the shared .mermaid-frame styles and Virgil font they render inside. Assisted-by: Claude Opus 5 via Claude Code Signed-off-by: Xe Iaso <xe@tigrisdata.com>
|
The latest updates on your projects. Learn more about Vercel for GitHub.
|
Signed-off-by: Xe Iaso <xe@tigrisdata.com>
Xe
marked this pull request as ready for review
August 11, 2026 14:29
The post shipped with only the required Engineering category tag, so it was invisible on every topic tag page. Add four tags already in use elsewhere in the blog rather than inventing new ones: Object Storage, Soft Delete, distributed systems, and foundationdb. Soft Delete is the load-bearing one — it was previously unique to the June announcement post, so tagging both clusters them on one tag page and gives readers a path between the announcement and the deep dive. Assisted-by: Claude Opus 5 via Claude Code Signed-off-by: Xe Iaso <xe@tigrisdata.com>
Promote the soft delete deep dive to the hero slot and shift the other cards down, following the same rotation as the sigv4 and objgit posts. Drop "/storagesdk" rather than "/t3-migrate-command". The lookup in BlogPostItems matches featured slugs against the homepage's items array, which postsPerPage caps at 12. The storage SDK announcement is now the 13th newest post, so it had already aged onto page 2 and silently resolved to nothing — the homepage was rendering three cards where the config asks for four. Verified against a production build that all four now render. Assisted-by: Claude Opus 5 via Claude Code Signed-off-by: Xe Iaso <xe@tigrisdata.com>
The post directory was dated 2026-08-13, two days out. Docusaurus builds and publishes future-dated posts rather than holding them, so it was already live on the homepage under a date that hadn't happened yet. The directory name is the only source of the date — the frontmatter has no date field — so this is a pure rename. The URL is unchanged because slug is set explicitly. Assisted-by: Claude Opus 5 via Claude Code Signed-off-by: Xe Iaso <xe@tigrisdata.com>
katieschilling
approved these changes
Aug 11, 2026
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.
Walk through why deletion is hard in a geo-replicated active-active database. S3 exposes delete markers, which leaks an internal detail of its eventually consistent database into the public API. Tigris models soft deletes as external references in a separate keyspace instead, so undo is a metadata move rather than deleting a delete marker.
Covers garbage collection roots, why forking could not solve this (it has to be enabled at bucket creation time), and the anti-resurrection guard that stops a stale write from undoing a newer delete.
Includes six inline ASCII figures as standalone React components, plus the shared .mermaid-frame styles and Virgil font they render inside.
Assisted-by: Claude Opus 5 via Claude Code
Note
Low Risk
Blog, static diagram components, and cosmetic CSS/config only; no runtime product or auth changes.
Overview
Adds the “Extending immutability: deletion without losing data” engineering post (
soft-delete-deep-dive) and makes it the main featured item on the blog home, replacing/storagesdkin the four-slotfeaturedPostslist.The article walks through Tigris soft delete vs S3 delete markers, recycle-bin metadata moves, replication ordering, and anti-resurrection tombstones, with Go examples for create/list/restore/force-delete APIs and an
InlineCtato the docs.Six new inline ASCII diagram components (
DeleteMarker,ForkPoint,RecycleBin,TwoWriters,LastWriteWins,TombstoneGuard) are embedded via existingmermaid-framewrappers. Site CSS gains.mermaid-framelayout rules, a shared Virgil@font-face, and a selector so the font isn’t stripped at build time.Reviewed by Cursor Bugbot for commit 589befe. Bugbot is set up for automated code reviews on this repo. Configure here.