Skip to content

feat(blog): add soft delete deep dive post - #425

Merged
Xe merged 5 commits into
mainfrom
Xe/soft-delete-deep-dive
Aug 11, 2026
Merged

feat(blog): add soft delete deep dive post#425
Xe merged 5 commits into
mainfrom
Xe/soft-delete-deep-dive

Conversation

@Xe

@Xe Xe commented Aug 10, 2026

Copy link
Copy Markdown
Contributor

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 /storagesdk in the four-slot featuredPosts list.

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 InlineCta to the docs.

Six new inline ASCII diagram components (DeleteMarker, ForkPoint, RecycleBin, TwoWriters, LastWriteWins, TombstoneGuard) are embedded via existing mermaid-frame wrappers. Site CSS gains .mermaid-frame layout 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.

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>
@Xe Xe self-assigned this Aug 10, 2026
@vercel

vercel Bot commented Aug 10, 2026

Copy link
Copy Markdown

The latest updates on your projects. Learn more about Vercel for GitHub.

Project Deployment Actions Updated (UTC)
blog Ready Ready Preview Aug 11, 2026 6:33pm
blog-redirect Ready Ready Preview Aug 11, 2026 6:33pm

Request Review

Signed-off-by: Xe Iaso <xe@tigrisdata.com>
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>
@Xe
Xe merged commit 0124a92 into main Aug 11, 2026
8 checks passed
@Xe
Xe deleted the Xe/soft-delete-deep-dive branch August 11, 2026 18:36
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants