S3 Lifecycle Rules on a Content-Addressed Store: Time as a First-Class Dimension

Lifecycle rules are the first feature that makes momo delete data on a schedule rather than on request β€” which turns age, storage class, and delete markers into correctness problems. This post walks through the expiration and transition engine, why a background worker is the only safe place to run it, and how expiration composes with versioning’s delete markers.

πŸ› ARCHITECTUREβ€’STORAGEβ€’October 21, 2026β€’5 min

S3 Versioning on a Content-Addressed Store: Two Kinds of Identity

Why S3 versioning and content-addressed storage seem to conflict β€” mutation identity vs content identity β€” and how momo keeps both: UUIDv4 version records pointing at deduplicated blobs, delete markers that shadow without deleting, and pagination that can only be computed after sorting. Teaches: the real semantics backup tools depend on, and where the version chain deliberately stops being distributed.

πŸ› ARCHITECTUREβ€’STORAGEβ€’October 11, 2026β€’6 min

Packing Small Objects into Superblocks: O(1) Reads Without Per-Blob Inodes

Why millions of small files per directory collapse a filesystem, and how a SeaweedFS-style volume layout fixes it: append-only superblocks, 8-byte-aligned needles with CRC32C frames, hole-punching deletion, and crash recovery by truncation. Teaches: the real cost of per-blob files, why alignment beats variable-length framing, and how to make crash recovery O(1).

πŸ› ARCHITECTUREβ€’STORAGEβ€’October 6, 2026β€’5 min

Reducing Read-Verify Hashing: Trust Earned by Real Verification

Verify-on-read re-hashes the full object on every local read (~8x slower than write). A ReadVerifier seam skips re-verification for blobs verified this process, while scrub still catches bitrot.

🐞 ISSUE FIXβ€’PERFORMANCEβ€’August 26, 2026β€’7 min

Rotating Secrets Without a Secret Server: Deriving, Versioning, and Hot-Reloading Keys

How momo manages encryption keys without a central secret server: a pluggable provider chain (env, then config file), a per-node versioned key registry in local storage, and rotation that promotes a new key without any downtime. Teaches: why a provider chain beats a single source, how key versioning enables online rotation, and when rotation is and is not worth the complexity.

πŸ› ARCHITECTUREβ€’ENCRYPTIONβ€’August 25, 2026β€’5 min

Tenant Isolation: Deriving Per-Tenant Keys, Enforcing ACLs, and Proving What Happened

How momo isolates tenants without a central secret server: HKDF-derived per-tenant keys, default-deny ACLs evaluated per request, and a SHA-256 hash-chained audit log that makes tampering detectable. Teaches: key derivation vs. key storage, why ACL evaluation order matters, and how hash chaining turns a log into evidence.

πŸ› ARCHITECTUREβ€’ENCRYPTIONβ€’August 25, 2026β€’6 min

At-Rest Integrity: Verify-on-Read, Checksums, and GC

CAS keys make verify-on-read free: central verification, x-amz-checksum echo, tombstone GC, and corruption surfacing.

πŸ› ARCHITECTUREβ€’STORAGEβ€’August 24, 2026β€’3 min

Centralized Integrity Verification: Checksums Move to the Storage Core

S3 integrity checksums moved from a surface-level adapter into the storage/ingest core via a protocol-agnostic ChecksumProvider seam β€” every write path verified, replicas re-verify on receive.

πŸ› ARCHITECTUREβ€’STORAGEβ€’August 24, 2026β€’5 min

Pluggable Storage Backends: local, nfs, s3, raw

The [storage] backend seam swaps blob storage (local, nfs, s3, raw) behind one Store interface, keeping CAS metadata local.

πŸ› ARCHITECTUREβ€’STORAGEβ€’July 26, 2026β€’2 min

CRUSH-lite: Deterministic Weighted Placement

Weighted rendezvous hashing picks replicas deterministically and peer-equally without a central allocator β€” later hardened for failure domains. Teaches: content-hash-based placement, weighted rendezvous hashing, deterministic stable sort, failure domain filtering.

πŸ› ARCHITECTUREβ€’STORAGEβ€’June 30, 2026β€’5 min