Design decisions¶
These records explain why Sevak is built the way it is. Each one is short: the situation that forced a choice, what was chosen, what it costs, and whether it still stands. They describe decisions that are visible in the code today; the code paths named in each are the place to check that a record is still true.
New decisions are added as the next number. A decision that is replaced is not deleted: its status changes to Superseded by ADR-NNNN and the new record explains the change.
| ADR | Decision | Status |
|---|---|---|
| 0001 | Local-first, no telemetry | Accepted |
| 0002 | Tauri shell, Rust core, plugin architecture | Accepted |
| 0003 | A closed Action vocabulary; the platform provider is the only OS layer |
Accepted |
| 0004 | Keyword and global routing, and how results are ranked | Accepted |
| 0005 | Approval before a script plugin or workflow runs | Accepted |
| 0006 | Alfred Script Filter compatibility | Accepted |
| 0007 | Automated release on every merge to main |
Accepted, with known risks |
| 0008 | Text-only configuration in TOML with comment-preserving saves | Accepted |
| 0009 | Taking over Super+Space differently on each OS | Accepted |
| 0010 | Network features only on the user's action or opt-in | Accepted |
| 0011 | Snippet expansion through low-level input hooks, and no Wayland support | Accepted |
| 0012 | Native extensions reuse the script plugin trust model; no sandbox, honestly labelled | Accepted |
See also the threat model and How Sevak works.