Architecture Decisions
Architecture Decision Records (ADRs) for cotel. Each record documents a significant technical choice: the context that made it necessary, the options considered, the decision made, and its consequences.
New ADRs go in this directory as NNNN-short-title.md, numbered sequentially.
Records
| # | Title | Status |
|---|---|---|
| ADR-0001 | Storage Engine — DuckDB | Accepted |
| ADR-0002 | Dashboard — React SPA + JSON API | Accepted |
| ADR-0003 | Release Policy and Versioning | Accepted |
| ADR-0004 | Multi-User Telemetry Separation via user.id | Accepted |
| ADR-0005 | Export/Import Format — Versioned ZIP/CSV/Manifest | Accepted |
| ADR-0006 | Cloudflare Tunnel + In-App Bearer Tokens for OTLP Auth | Accepted |
| ADR-0007 | GitHub Issue Intake Security Hardening | Accepted |
| ADR-0008 | Per-agent telemetry identity must not live in shared settings.json env | Accepted |
| ADR-0009 | daily_usage roll-up normalises empty/NULL keys to an unknown sentinel | Accepted |
| ADR-0010 | Guard schema migrations behind a recorded version | Accepted |
| ADR-0011 | Users list — time-ranged stats, server-side sort and pagination | Accepted |
| ADR-0012 | Tools list — time-ranged stats, server-side sort and pagination | Accepted |
| ADR-0013 | spans carries no derived columns: drop duration_ms | Accepted |
| ADR-0014 | Overview — one range selector every panel obeys | Accepted |
| ADR-0015 | Overview — spans and cost share one block, and one plot | Accepted |
| ADR-0016 | Overview — an activity grid, one cell per bucket | Accepted |