Each ADR captures one decision: its context, the choice, and the consequences. They are immutable once accepted — to change a decision, add a new ADR that supersedes the old one (note it in both).
| # | Decision | Status |
|---|---|---|
| 0001 | Use NEPacketTunnelProvider (NetworkExtension) for on-device capture |
Accepted |
| 0002 | Use GRDB/SQLite for history instead of SwiftData/Core Data | Accepted |
| 0003 | Never bypass third-party SSL pinning | Accepted |
| 0004 | Live IPC via mmap ring buffer + Darwin signal | Accepted |
| 0005 | Userspace TCP termination for TLS inspection | Accepted |
| 0006 | Pass UDP/QUIC through without termination | Accepted |
| 0007 | Decrypted content: its own switch, its own shorter retention, its own deletion | Accepted |
| 0008 | TR-03161 audit workflow: core scope, published per finished increment, attribution by controlled session + baseline | Accepted; publication rule superseded by 0009 |
| 0009 | Development happens directly in the public repository; the private one is only a notebook | Accepted |
# NNNN — Title
- Status: Proposed | Accepted | Superseded by NNNN
- Date: YYYY-MM-DD
## Context
What forces are at play; what problem needs deciding.
## Decision
The choice, stated plainly.
## Consequences
What becomes easier, what becomes harder, what we accept.
## Alternatives considered
Each option and why it lost.