Status: accepted, explicitly temporary
A single 32-byte network key currently does three jobs: derives the rendezvous topic, encrypts payloads, and grants membership. Anyone holding it is a member, permanently.
Ship v1 this way. Replace the third job — authorization — with admin-signed per-device credentials in M5.
Configuration is one secret, which makes the whole system explainable in two commands. At 3–5 machines you control, "rotate the key and re-enrol" is a chore rather than a project.
Five concrete failures:
Only authorization changes. Rendezvous genuinely needs a shared secret — every member must independently compute the same topic with no coordination — but that secret need not also grant membership.
K_rdv keeps deriving the topic, payload key and per-pair PSKs.{device_pk, wg_pk,
name, overlay_ip, not_before, not_after, caps}, verified against admin_pk
— a public value in config.shrooms invite emits a one-time, 15-minute token. This is the
highest-value single change: a leaked clipboard stops being worth anything.
Built — see ADR-017.admin_pk already exists in config and credential already exists in the
announce, both empty and ignored. M5 is a behaviour change rather than a
wire-format and config break across every machine simultaneously.