CIP-001–013: read/write distributed storage program - #20
Merged
Conversation
Introduce the CIP (c0mpute Improvement Protocol) process in docs/prds/ and
plan the full storage program: durable distributed object storage, provider
payouts, and a read/write POSIX mount.
CIPs are PRDs for shippable phases — scope, API surface, acceptance criteria,
estimate. DIPs stay the record of *why*; a CIP implements a DIP and cites it.
Phases:
001 durability model, tiers, economics 008 write path + crash consistency
002 storage HTTP API 009 `c0mpute storage` CLI + FUSE mount
003 shard placement + transport 010 single-writer leases
004 metadata durability 011 client-side encryption
005 auto-repair daemon 012 S3-compatible gateway
006 challenges, metering, payouts 013 databases: support matrix
007 c0mputefs filesystem layer
Key decisions:
- RS 10/14 stays the default over 3-copy replication. Expansion factor is
cost of goods: 1.4x vs 3.0x, and 1.97x cheaper than Storj's RS 29/80 at the
same provider payout. Replication becomes the `hot` tier, where its 1x
repair amplification is the right trade.
- Retail $0.0035/GB-month, undercutting Storj. We cannot beat Filecoin or Sia
and should not claim to — they are cold or commitment-bound. The defensible
claim is "cheapest p2p storage you can actually mount".
- Repair egress is an unpaid provider obligation. Paying it at 5% churn costs
$0.0014/GB-month against a $0.0014 gross margin, which is the whole margin.
- RS 10/14 gives ~3.4 nines on 95%-available nodes, not 11. Placement is
reputation-gated and repair is fast, because our cost advantage is bought by
spending Storj's durability margin. scripts/storage-durability-sim.py
reproduces every figure.
- All mutability is confined to one signed 32-byte root pointer per volume.
Blocks, manifests and snapshot nodes stay immutable and content-addressed,
so the filesystem is a naming layer rather than a change to storage.
- v1 is one writer, many readers, enforced by an epoch-fenced lease. Divergent
writers are exported, never auto-merged.
Also resolves two doc bugs found while planning:
- dips/ contained two DIP-0012 files, both `Accepted`, both dated 2026-05-03,
asserting opposite things ("compute-only, no storage network" vs "c0mpute
hosts files"). Marks the withdrawn v1 draft Superseded and fixes the index.
- The storage-plugin DIP listed "filesystem-style mutable objects" as out of
scope. Amended, since v1 ships a read/write mount.
Estimate: 35–49 engineer-weeks, 21–29 on the critical path, ~5–7 months
calendar with parallel tracks.
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01LsQAuvXkmyHTgnvquLHrRx
ThreatCrush Security Scan8 finding(s) HIGH/CRITICAL: 5 | MEDIUM: 3
Snippets are redacted; ThreatCrush never prints matched credential material. |
This was referenced Aug 29, 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.
Introduces the CIP (c0mpute Improvement Protocol) process in
docs/prds/and plans the whole storage program end to end: durable distributed object storage, provider payouts, and a read/write POSIX mount.CIPs are PRDs for shippable phases — scope, API surface, acceptance criteria, estimate. DIPs stay the record of why; a CIP implements a DIP and cites it. Numbering is independent.
Phases
c0mpute storageCLI + FUSE mount35–49 engineer-weeks total; 21–29 on the critical path; ~5–7 months calendar with parallel tracks.
Key decisions
RS 10/14 stays default over 3-copy replication. The expansion factor is cost of goods: 1.4x vs 3.0x, and 1.97x cheaper than Storj's RS 29/80 at the same provider payout. Replication becomes the
hottier, where its 1x repair amplification is exactly the right trade for small, hot, frequently-rewritten data (filesystem metadata, inline small files).Retail $0.0035/GB-month, undercutting Storj's $0.004. We cannot beat Filecoin ($0.0001) or Sia ($0.001) and CIP-001 says so plainly — they are cold or commitment-bound, and a POSIX mount over them is not a product. The defensible claim is "the cheapest p2p storage you can actually mount".
Repair egress is an unpaid provider obligation. Paying it at 5% churn costs $0.0014/GB-month against a $0.0014/GB-month gross margin — the entire margin. Storj handles it the same way, but it must be explicit in provider terms because it makes metered residential uplinks a bad fit.
RS 10/14 gives ~3.4 nines on 95%-available nodes, not 11. The "11 nines" in
storage-pricing.csvneeds ~99.9% per-node availability. So placement is reputation-gated (≥0.9 reputation, ≥99% uptime) and CIP-005's repair is load-bearing rather than a follow-up: our cost advantage is bought by spending the durability margin Storj keeps.scripts/storage-durability-sim.pyreproduces every figure and is re-runnable with different(k, n, p).All mutability is confined to one signed 32-byte root pointer per volume. Blocks, manifests and snapshot nodes stay immutable and content-addressed. The filesystem is a naming layer above that, not a change to the storage layer — which is what makes atomic
renameand consistent reader snapshots nearly free.v1 is one writer, many readers, enforced by an epoch-fenced lease rather than documented and hoped for. A fenced writer goes read-only and its divergent work is exported for a human, never auto-merged.
Two doc bugs fixed along the way
dips/contained two DIP-0012 files, bothAccepted, both dated 2026-05-03, asserting opposite things — "compute-only, no storage network" vs "c0mpute hosts files". Neither declared supersession. The withdrawn v1 draft is now markedSupersededwith a banner, and the index is fixed.Notes for review
scripts/storage-durability-sim.py(stdlib only), which backs CIP-001's tables.standardshould be RS 10/14 or RS 16/24 if measured node availability lands under 99%.🤖 Generated with Claude Code
https://claude.ai/code/session_01LsQAuvXkmyHTgnvquLHrRx