Keyboard shortcuts

Press or to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

Architecture Decision Records

All architectural decisions are recorded as ADRs in specs/architecture/adr/.


ADR index

ADRTitleStatus
ADR-001Pure Rust, No Mochi DependencyAccepted
ADR-002Two-Layer Encryption Model (C)Accepted
ADR-003System DEK Derivation (Not Storage)Accepted
ADR-004Schema Versioning and Rolling UpgradesAccepted
ADR-005Erasure Coding and Chunk DurabilityAccepted
ADR-006Inline Data ThresholdAccepted
ADR-007System Key Manager HA via RaftAccepted
ADR-008Native Client Fabric DiscoveryAccepted
ADR-009Audit Log Sharding and GCAccepted
ADR-010Retention Hold Enforcement Before Crypto-ShredAccepted
ADR-011Crypto-Shred Cache Invalidation and TTLAccepted
ADR-012Stream Processor Tenant IsolationAccepted
ADR-013POSIX Semantics ScopeAccepted
ADR-014S3 API Compatibility ScopeAccepted
ADR-015Observability ContractAccepted
ADR-016Backup and Disaster RecoveryAccepted
ADR-017Dedup Refcount Metadata Access ControlAccepted
ADR-018Runtime Integrity MonitorAccepted
ADR-019Gateway Deployment ModelAccepted
ADR-020Workflow Advisory & Client TelemetryAccepted
ADR-021Workflow Advisory ArchitectureAccepted
ADR-022Storage Backend – redb (Pure Rust)Accepted
ADR-023Protocol RFC Compliance ScopeAccepted
ADR-024Device Management, Storage Tiers, and Capacity ThresholdsAccepted
ADR-025Storage Administration APIAccepted
ADR-026Raft Topology – Per-Shard on Fabric (Strategy A)Accepted
ADR-027Single-Language Implementation – Rust OnlyAccepted
ADR-028External Tenant KMS ProvidersAccepted
ADR-029Raw Block Device AllocatorAccepted
ADR-030Dynamic Small-File Placement and Metadata Capacity ManagementAccepted
ADR-031Client-Side CacheAccepted

ADR template

New ADRs follow this structure:

# ADR-NNN: Title

**Status**: Proposed | Accepted | Superseded by ADR-XXX
**Date**: YYYY-MM-DD
**Context**: Why this decision is needed.

## Decision

What was decided and why.

## Consequences

What changes as a result. Trade-offs accepted.

## Alternatives considered

What else was evaluated and why it was rejected.

Key decisions by topic

Language and architecture

  • ADR-001: Pure Rust (no Mochi dependency)
  • ADR-027: Single-language Rust (Go control plane replaced)
  • ADR-022: redb as storage backend (pure Rust, no RocksDB)

Encryption

  • ADR-002: Two-layer encryption model (system DEK + tenant KEK)
  • ADR-003: HKDF-based DEK derivation (not per-chunk storage)
  • ADR-011: Crypto-shred cache invalidation TTL
  • ADR-028: External tenant KMS providers (Vault, KMIP, AWS KMS, PKCS#11)

Consensus and replication

  • ADR-007: System key manager HA via Raft
  • ADR-026: Per-shard Raft groups on fabric (Strategy A)
  • ADR-009: Audit log sharding and GC

Storage

  • ADR-005: Erasure coding and chunk durability
  • ADR-006: Inline data threshold
  • ADR-029: Raw block device allocator
  • ADR-030: Dynamic small-file placement

Protocols and access

  • ADR-008: Native client fabric discovery
  • ADR-013: POSIX semantics scope
  • ADR-014: S3 API compatibility scope
  • ADR-019: Gateway deployment model
  • ADR-023: Protocol RFC compliance scope

Operations

  • ADR-015: Observability contract
  • ADR-016: Backup and disaster recovery
  • ADR-024: Device management and capacity thresholds
  • ADR-025: Storage administration API

Advisory

  • ADR-020: Workflow advisory and client telemetry
  • ADR-021: Workflow advisory architecture

Client

  • ADR-031: Client-side cache