CRITICAL: Never modify files in content-addressable storage systems where the filename IS the content hash (SHA256, IPFS CID, etc.). Use when: (1) Working with Blossom protocol, IPFS, or any CAS system, (2) Considering "optimizing" stored files (faststart, compression), (3) Implementing transcoding or processing pipelines for hash-identified content, (4) Building on top of ProofMode or any cryptographic verification system. Modifying files in place breaks hash verification and content integrity.
Scanned 9/3/2026
Install to Claude Code
npx -y skills add divinevideo/divine-mobile --skill content-addressable-storage-immutability --agent claude-codeInstalls into .claude/skills of the current project.
Are you the author of Content Addressable Storage Immutability?
Add the live security badge to your README — it updates automatically with every re-scan.
[](https://www.skillsdirectory.com/skills/divinevideo-content-addressable-storage-immutability-divine-mobile)More formats (shields.io, HTML) on the badges page.
---
name: content-addressable-storage-immutability
description: |
CRITICAL: Never modify files in content-addressable storage systems where the filename
IS the content hash (SHA256, IPFS CID, etc.). Use when: (1) Working with Blossom protocol,
IPFS, or any CAS system, (2) Considering "optimizing" stored files (faststart, compression),
(3) Implementing transcoding or processing pipelines for hash-identified content,
(4) Building on top of ProofMode or any cryptographic verification system. Modifying
files in place breaks hash verification and content integrity.
author: Claude Code
version: 1.0.0
date: 2026-01-31
---
# Content-Addressable Storage Immutability
## Problem
In content-addressable storage (CAS) systems, files are identified by their content hash.
If you modify a file in place (even "harmless" optimizations), the content no longer
matches its identifier, breaking the entire system's integrity guarantees.
## Context / Trigger Conditions
- Working with Blossom protocol (files at `/{sha256}`)
- Working with IPFS (files at `/ipfs/{CID}`)
- Any system where filename = hash of content
- Considering file optimizations like:
- MP4 faststart (moving moov atom)
- Image optimization/compression
- Metadata stripping
- Format conversion
- Systems using ProofMode or cryptographic verification
## The Fundamental Rule
**NEVER modify a file stored at its content hash.**
The hash IS the identity. Change the content → change the hash → file is now at wrong address.
## What Goes Wrong
```
Original file: abc123... (hash) → contains bytes X
After "optimization": abc123... (hash) → contains bytes Y
Result:
- Hash abc123 no longer verifies
- ProofMode signatures invalid
- Content-addressable lookups return wrong data
- Cryptographic proofs broken
- Data integrity compromised
```
## Solution: Store Derivatives Separately
If you need optimized/processed versions, store them at separate paths:
```
/{hash} ← Original file (NEVER MODIFY)
/{hash}/hls/master.m3u8 ← HLS transcoded version
/{hash}/faststart.mp4 ← Faststart optimized version
/{hash}/thumb.jpg ← Thumbnail
/{hash}/720p.mp4 ← Resolution variant
```
The original stays byte-for-byte identical. Derivatives live in subdirectories.
## Implementation Pattern
```rust
// WRONG - modifies original
async fn process_video(hash: &str) {
let path = format!("/{}", hash);
let video = download(&path);
let optimized = apply_faststart(video);
upload(&path, optimized); // ❌ BREAKS HASH!
}
// RIGHT - creates derivative
async fn process_video(hash: &str) {
let original_path = format!("/{}", hash);
let derivative_path = format!("/{}/faststart.mp4", hash);
let video = download(&original_path);
let optimized = apply_faststart(video);
upload(&derivative_path, optimized); // ✓ Original untouched
}
```
## Verification
- Original file hash still verifies: `sha256sum file == filename`
- ProofMode signatures still valid
- Content lookups return expected data
## Common Mistakes
1. **"It's just moving metadata"** - Still changes bytes, still breaks hash
2. **"We'll update the hash reference"** - Now you have dangling references everywhere
3. **"No one will notice"** - Verification systems WILL notice
4. **"It's an optimization"** - Optimize derivatives, not originals
## Notes
- This applies to ANY content-addressable system, not just Blossom
- IPFS, Git objects, Docker layers all follow this principle
- If you need the optimized version as primary, the client should upload it that way
- Transcoding to new formats (HLS, DASH) is fine because they're clearly separate files
## References
- [Content-addressable storage (Wikipedia)](https://en.wikipedia.org/wiki/Content-addressable_storage)
- [Blossom Protocol (BUD-01)](https://github.com/hzrd149/blossom)
- [IPFS Content Addressing](https://docs.ipfs.tech/concepts/content-addressing/)
Is this your skill, or is something wrong with this listing? Request removal or report an issue. Author removals are honored within 72 hours.
No comments yet. Be the first to comment!