Architecture Decision Records¶
Each ADR records one architectural decision — the context, the options weighed, the choice, and its consequences — in MADR format. ADRs are immutable: once accepted they are superseded by a later ADR, never rewritten. They are the durable "why"; the design docs describe the resulting current shape, and link back here.
New decision? Copy adr-template.md.
| ADR | Decision |
|---|---|
| 0001 | Structure E2E coverage around one representative archive→restore workflow |
| 0002 | Skip publishing a snapshot for a no-op (unchanged) archive |
| 0003 | Use distinct typed hashes (ContentHash / ChunkHash / FileTreeHash) |
| 0004 | Split filetree entry and hash identities |
| 0005 | Adopt scoped Stryker mutation testing |
| 0006 | Build filetrees from hashed-directory staging |
| 0007 | Separate phase and detail logging in pipeline handlers |
| 0008 | Introduce internal filesystem domain types (RelativePath, PathSegment) |
| 0009 | Clarify test fixture boundaries |
| 0010 | Route application use cases through feature handlers (IMediator) |
| 0011 | Require 90% production line coverage |
| 0012 | Adopt zstd as the compression algorithm (gzip kept read-only) |
| 0013 | Decouple Core from its hosts and storage backend |
| 0014 | AES-256-GCM (ArGCM1) format with long-term recoverability |
| 0015 | Scale the chunk index via dynamic-length prefix sharding |
| 0016 | Anchor multi-machine cache coherence on the snapshot epoch |
| 0017 | Idempotent, non-distributed crash recovery via metadata-presence commit |
| 0018 | v5→v7 migration only: carry Archive-tier chunk metadata in a sidecar |
| 0019 | Centralize file/folder exclusion defaults in Arius.Core (embedded appsettings.json + options pattern) |
| 0020 | Cost estimation behind a provider-agnostic interface |
| 0021 | Opt-in change-detection hashcache for fast-hash archive runs |
| 0022 | Scripted-fake-Core harness for Api/Web test coverage |