Skip to content

Architecture Decision Records

This folder holds one file per significant architectural decision, in MADR format. ADRs capture why the system is built the way it is — the context, the options weighed, and the consequences — so a future reader (human or AI agent) does not have to reverse-engineer intent from the code.

  • Append-only & immutable. Never rewrite an accepted ADR. If a decision changes, write a new ADR and set the old one’s status to Superseded by NNNN.
  • One decision per file. Filename: NNNN-kebab-case-slug.md (zero-padded).
  • Link, don’t duplicate. Reference code as path:line and link sibling ADRs with relative links. The canonical fact lives in exactly one place.
ADRTitleStatus
0001Long-polling over webhook for update intakeAccepted
0002Fat services return (text, keyboard); thin handlersAccepted
0003lazy="raise" on large / unmigrated relationshipsAccepted
0004Preserve TS bot behaviour bug-for-bug across cutoverAccepted
0005Outbound sender: bounded concurrency + 429 retry + per-message isolationAccepted
0006Shared DB schema owned by backend; reflection test, not migrationsAccepted
0007Keep DB TLS verification ON (no rejectUnauthorized:false)Accepted
# NNNN. <short decision title>
- **Status:** Proposed | Accepted | Superseded by [NNNN](NNNN-...md)
- **Date:** YYYY-MM-DD
- **Deciders:** <names / roles>
## Context and problem statement
<What forces are at play? What problem are we solving? 2–4 sentences.>
## Considered options
1. **<Option A>** — <one line>
2. **<Option B>** — <one line>
## Decision outcome
Chosen: **<Option>**, because <justification>.
### Consequences
- ✅ <positive>
- ⚠️ <trade-off / negative>
## More information
<Links to code (`path:line`), related ADRs, external references.>