Decisions that had real alternatives and evolved over time. Tiny by design.
Format: numbered, dated, with Status + Supersedes / Superseded by headers.
| # | Title | Status |
|---|---|---|
| 0001 | D-Bus single-instance + spawn-per-invocation | Superseded by 0002 |
| 0002 | Single-binary daemon with Unix-socket opcode delegation | Accepted |
| 0003 | Multi-stage fzy scoring | Superseded by 0004 |
| 0004 | Single-pass fzf FuzzyMatchV2 over the full display row | Accepted |
| 0005 | One-shot fixed-window-size init | Superseded by 0006 |
| 0006 | Per-show window-size recompute on cursor monitor | Accepted |
| 0007 | Registry-based tab architecture (CofiTabProvider) | Accepted |
| 0008 | Cluster-correct UTF-8 column rendering | Accepted |
| 0009 | Tolerant JSON I/O via cofi_json_io |
Accepted |
| 0010 | Shared confirm-overlay primitive (show_confirm_overlay) |
Accepted |
| 0011 | Bluetooth polling v1 | Accepted |
| 0012 | Owner-delete startup GC seatbelt | Accepted |
| 0013 | One match entry per rule | Accepted |
| 0014 | Rules subsystem owns automatic dispatch; x11 is event-trigger only | Accepted |
| 0015 | Cross-provider tier-based scoring via tier_score_string |
Accepted |
These were never alternatives — pure day-one choices with no evolution. Captured here so future readers don't waste time digging:
- Xlib + EWMH directly (vs
wmctrl/libwnck/xdotool) — Xlib from the first C commit;wmctrlreferences in early code comments referred to the Go predecessorgofi. - GTK3 — chosen at the C port; never evaluated against GTK4 / Qt / ImGui.
- Event-driven window list (PropertyNotify on root via
GIOChannel) — present in the first commit; cofi never polled. - Test strategy (70 small standalone binaries, hand-stubbed cross-cutting deps) — pattern set in the second test ever; no framework (cmocka/check/criterion) considered.
# NNNN — Title
**Status:** Draft | Accepted | Superseded by NNNN
**Date:** YYYY-MM-DD
**Supersedes:** NNNN (omit if first)
## Context
What forces, what constraints, what came before.
## Decision
What we are going to do — concrete and specific.
## Consequences
What becomes easier or harder; what we accept.
## Alternatives considered
Other options and why they were rejected.- docs/decisions/ — design exploration notes for the plugin API (not strict ADRs). The architecture they explored is now recorded in 0007; the decisions docs remain as historical context.