ADR 0005 — The magnus extension is the only binding layer

Status

Accepted (2026-08-25; user decision — “remove all legacy, we do not need fallbacks”).

Context

The 0.1 gem wrapped the libconfium C ABI through the ffi gem (Confium::Lib attach tables, CFM, Digest, a TC::Session wrapper). Since 0.4.0 the extension is pure Rust via magnus + rb_sys and wraps the confium-* crates directly. The FFI files were never loaded by the entry point and had rotted past function: they called Confium.call_ffi, a method that never existed, while the RBS carried a phantom declaration of it purely to keep steep green.

Keeping them invited the wrong mental model — a reader asking “how do sessions work?” found three answers, one of them a lie — and no fallback was ever real.

Decision

The C-ABI files are deleted (not attic’d). There is exactly one binding layer: the magnus extension. If a future need for a C ABI appears (embedding, non-Ruby hosts), it is a new proposal with its own ADR, not a revival of these files.

Consequences

  • No ffi-gem-based path exists; do not re-add one as a “fallback”.
  • Confium::TC::SessionStub (an interface-shape placeholder) is gone too; the real per-party session protocol is tracked in the upstream session-protocol work and will land behind the SigningSession seam.
  • The RBS declares only what actually runs.