Architecture decision records¶
Each record captures one decision that someone could reasonably have made differently: the context, the decision, why, what it costs, and what evidence would change it. Records are append-only once accepted. A changed decision gets a new record that supersedes the old one, and the old one's status says so.
To add one, copy the shape of an existing record, take the next number, and add a row here. A test fails if a record is missing from this table or a number is skipped.
| ADR | Decision | Status |
|---|---|---|
| 0001 | One repository with protocol/, server/ and android/ |
Accepted |
| 0002 | A frame is one single-segment SMS, reassembled by us | Accepted |
| 0003 | Frames are base64url; denser alphabets are reserved, not built | Accepted |
| 0004 | zstd with a trained dictionary; Brotli rejected | Accepted |
| 0005 | Twilio inbound by polling; no public endpoint needed | Accepted |
| 0006 | A standalone repository that copies the LUCY family conventions | Accepted |
| 0007 | Requests are plain text, and ! answers in plain text |
Accepted |
| 0008 | Links become numbered chips; the server keeps the URLs | Accepted |
| 0009 | 100% coverage on the server and on all Kotlin logic; screens held by line | Accepted |
| 0010 | The phone only ever sends what a person would | Accepted |
| 0011 | Not the default SMS app in v1; minSdk 31 | Accepted |
| 0012 | A hard daily segment budget with a cost meter | Accepted |
| 0013 | Optional Z85G encoding; base64url remains the default | Accepted for software testing |