Append-only log of significant decisions. New ADRs are added with the next number. Past ADRs are not edited; if a decision is reversed, write a new ADR that supersedes it.
| # | Title | Status |
|---|---|---|
| 0001 | Language: Rust | Accepted |
| 0002 | Async runtime: tokio | Accepted |
| 0003 | Latency histogram: hdrhistogram | Accepted |
| 0004 | Strategy: head-on competition with reaatech/mcp-load-test | Accepted |
| 0005 | Serve mode: expose load tester as MCP server over stdio | Accepted |
| 0006 | Zero-copy protocol types on the request hot path | Accepted |
| 0007 | Transport security posture: redirects, frame caps, path validation | Accepted |
| 0008 | Release profile: panic = "abort" |
Accepted |
| 0009 | Regression threshold defaults: 10% p99 / 0.5pp error rate | Accepted |
| 0010 | Opt-in strict MCP schema validation | Accepted |
| 0011 | Supply-chain policy: CDLA-Permissive-2.0 + triaged advisory ignores | Accepted |
| 0012 | SSRF host-allowlist + always-on private-IP-literal block | Accepted |
| 0013 | SpawnOptions API for stdio stderr capture | Accepted |
| 0014 | Error hints, --explain, and doctor (AI-friendliness §21) |
Accepted |
| 0015 | Defer crates.io; git-install + GitHub Release binaries (amends 0004) | Accepted |
- Choosing between alternative dependencies/frameworks
- Establishing a project-wide convention
- Reversing a previous decision
- Anything you'd otherwise re-litigate in PR review
# NNNN. Short title
Date: YYYY-MM-DD
Status: Proposed | Accepted | Superseded by [NNNN](NNNN-...)
## Context
What's the situation? What's the question we're answering?
## Decision
The choice we made.
## Alternatives considered
What else we looked at and why we didn't pick them.
## Consequences
What this commits us to. What it makes easy / hard. Open questions.