Skip to content

ADR Process

An ADR captures one decision that had real alternatives: the context, the options weighed, the choice, and its consequences — so future maintainers (including us, later) don’t re-litigate or accidentally reverse it blind.

  1. Copy 0000-template.mdNNNN-short-slug.md (next free number), status proposed.
  2. Discuss in the PR; land it proposed if implementation must wait for evidence (spikes), or accepted when decided.
  3. Accepted ADRs are immutable. Changing course = a new ADR with Supersedes: NNNN (and the old one gains Superseded-by).
  4. Small reversible choices don’t need an ADR. Anything expensive to reverse — protocol shapes, licenses, platform commitments — does.
ADRTitleStatus
0001WebRTC + GStreamer for media transportaccepted
0002Ubuntu 24.04 / GStreamer 1.24 baselineaccepted
0003Polyglot monorepoaccepted
0004Rust for the signaling serveraccepted
0005TS core + React bindings + demo splitaccepted
0006Desktop backend selectionproposed (M2 spikes)
0007webrtcbin+FrameHub vs webrtcsinkproposed (M1 spike)
0008DataChannel topology & reliability classesaccepted
0009Privilege separation on the robotproposed
0010Devcontainer + compose + Xvfb robot-simaccepted
0011AGPL-3.0 open core + commercial licensingaccepted
0012Agent in C++accepted
0013WebSocket signaling with a transport seamaccepted
0014Astro + Starlight for the websiteaccepted
0015Backend integration: unified contract, sidecar + managed twinaccepted
0016SWUpdate as the OTA foundationproposed (M8)
0017libsoup-3 for agent networkingaccepted