R10 Phase 4: S3 Object Lock β€” WORM That Actually Refuses Deletes

Object Lock is the S3 feature regulated workloads ask for first: write-once-read-many retention that the storage server itself enforces, not a policy the client promises to honor. This phase gives momo bucket-level lock enablement at creation, per-version retention and legal holds, and a delete path that answers 403 instead of quietly removing bytes. Teaches: how COMPLIANCE and GOVERNANCE differ in who can override them, why lock state must live beside the version record rather than inside object metadata, and which parts of AWS’s surface momo deliberately does not pretend to implement.

πŸ› ARCHITECTUREβ€’S3β€’October 28, 2026β€’5 min

R10 Phase 3: S3 Notification β€” Event-Driven Webhooks on CAS

Implemented S3 bucket notification configurations with real webhook delivery, prefix/suffix filtering, exponential-backoff retries, and all six S3 event types β€” so backup tools and pipelines can react to object changes instead of polling. Teaches: why a notification dispatcher that returns nil without sending is the trap to watch for, and how events stay honest across plain PUT, multipart, and delete paths.

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

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

⚑ Bolt: Zero-Allocation Parsing of ETag Lists

How we removed the heap allocation from ETag list parsing on the S3 conditional-request path by replacing strings.Split with a strings.IndexByte scan. Teaches: what If-Match/If-None-Match actually carry, why Split allocates per request, and how a microbenchmark proves the win.

🐞 ISSUE FIXβ€’S3β€’October 6, 2026β€’5 min

⚑ Bolt: Zero-Allocation Parsing of AWS Chunked Headers

How we removed the last heap allocation from the aws-chunked ingest path by replacing strings.Split and strings.TrimPrefix with a strings.IndexByte scan. Teaches: what a streaming S3 upload body looks like, why Split allocates per chunk, and how a microbenchmark proves the win.

🐞 ISSUE FIXβ€’S3β€’October 1, 2026β€’5 min

⚑ Bolt: Eliminating the Last Remaining S3 XML Time Allocation

How we eliminated the final per-response heap allocation in S3 XML rendering by swapping time.Format for time.AppendFormat in the ListParts handler. Teaches: the stack-buffer time formatting pattern, why Format allocates, and how microbenchmarks prove the win.

🐞 ISSUE FIXβ€’S3β€’September 8, 2026β€’3 min

⚑ Bolt: Eliminating Time Formatting Allocations in S3 HTTP Responses

How we optimized S3 XML responses by replacing time.Format with time.AppendFormat to eliminate heap allocations. Teaches: stack-buffer time formatting pattern, hot path identification via pprof.

🐞 ISSUE FIXβ€’S3β€’August 30, 2026β€’4 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

S3 501 Discipline: Remaining Ops β€” SelectObjectContent, UploadPartCopy, Analytics, Inventory, Metrics, Intelligent-Tiering

Final 501 sweep: SelectObjectContent, UploadPartCopy, analytics, inventory, metrics, intelligent-tiering now return honest 501 NotImplemented.

🐞 ISSUE FIXβ€’S3β€’August 24, 2026β€’3 min