Skip to content

Latest commit

 

History

History
60 lines (44 loc) · 3.2 KB

File metadata and controls

60 lines (44 loc) · 3.2 KB

Architecture Decision Records

Decisions that had real alternatives and evolved over time. Tiny by design.

Format: numbered, dated, with Status + Supersedes / Superseded by headers.

Index

# 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

Topics intentionally not recorded

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; wmctrl references in early code comments referred to the Go predecessor gofi.
  • 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.

Template

# 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.

See also

  • 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.