# Architecture Decision Records This directory records the significant decisions behind Swarm House, in the order they were made. Each record is immutable once **Accepted** — a later decision that changes course gets a new number and supersedes the old one rather than editing it. ## ADR vs ASR | Kind | What it captures | Where it lives | | --- | --- | --- | | **ADR** (Architecture Decision Record) | A point-in-time decision for *this* repository, with the options considered and their consequences | Here, in `docs/adr/` | | **ASR** (Architecture Standard Record) | A standing, cross-repository policy every project must obey (Go-first, secrets, layout) | The ecosystem `inventar` repo, not here | The rules in [`../../AGENTS.md`](../../AGENTS.md) are this repo's local standing constraints; anything ecosystem-wide belongs in `inventar` as an ASR. Design decisions specific to the platform are ADRs and belong here. ## Index | ADR | Decision | Status | | --- | --- | --- | | [ADR-0001](ADR-0001-no-swarm-orchestrator.md) | No swarm-wide orchestrator; coordinate through data | Accepted | | [ADR-0002](ADR-0002-one-storage-format.md) | One storage format on every tier — Parquet + DuckDB, Hive layout | Accepted | | [ADR-0003](ADR-0003-sync-derived-state-only.md) | Sync derived state only; raw telemetry stays local | Accepted | | [ADR-0004](ADR-0004-sql-over-ssh-contract.md) | Read-only SQL-over-SSH as the peer query contract; no debug API | Accepted | | [ADR-0005](ADR-0005-wireguard-beneath-ssh.md) | WireGuard beneath SSH for the mesh transport | Accepted | | [ADR-0006](ADR-0006-iac-boundaries.md) | IaC split: Ansible hosts, Terraform ground, Flux ground-only, fleet manifest for drones | Accepted | | [ADR-0007](ADR-0007-non-root-image.md) | Run the simulator image as a non-root user | Accepted | | [ADR-0008](ADR-0008-runtime-data-paths.md) | Shared `var/t1` / `var/t3` runtime paths; state out of Git | Accepted | | [ADR-0009](ADR-0009-bounded-lake-scans.md) | Bound observability lake scans to a flight window and cache | Accepted | ## Writing a new ADR 1. Copy [`TEMPLATE.md`](TEMPLATE.md) to `ADR-NNNN-short-slug.md` (next free number). 2. Fill in Context, Options (if more than one was real), Decision, Consequences. 3. Add a row to the index above. 4. Cross-link the ADR from the design doc it affects (and vice versa). Keep the tone laconic: state the decision and why, skip the narrative.