Skip to content

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