Operating it

Governance (v0)

How identities get into — and out of — a dedid registry. Status: v0, deliberate minimum. The signed write plane carries out these decisions; it does not make them.

Principle: closed by default, auditable always

A registry's power is deciding who exists on the network, so onboarding is a governed act, not an API call. Two invariants:

  1. Closed by default. No self-service registration. The read plane is public; the write plane does not exist until the operator configures a publisher key, and then accepts only writes signed by one.
  2. Every governance decision is a log entry. Onboarding, key rotation, and revocation are appends to the transparency log — provable, ordered, witnessable. Governance that cannot be audited is not governance.

v0 workflow (current)

Enforcement is structural. A node with no DEDI_PUBLISHER_KEYS registers no write routes at all. A node with keys has 13 signed /admin routes, and each accepts only a request signed by a key the operator issued, scoped to one namespace, so an unsolicited party cannot onboard even by trying. (dedid seed also writes, but straight to the database, so it needs database access.)

Authentication on the admin surface

Two independent checks, answering different questions. Both must pass.

Question it answers Configured with Scope
Operator gate (HTTP basic) May you reach this node's admin surface at all? DEDI_ADMIN_USER (default admin), DEDI_ADMIN_PASSWORD The whole surface: the console page and every /admin/** route
Publisher signature (Ed25519) Who is writing, and may that key write here? DEDI_PUBLISHER_KEYS Per key, per namespace

The gate never replaces the signature. A shared password cannot say who wrote — it is the signature that binds a version to a key id, records created_by: publisher:<kid>, and confines a key to its own namespaces. So operator credentials alone cannot write; a signature alone cannot get through a configured gate.

The gate is optional. Making it mandatory would lock out every running deployment and signed script on the next restart, and the write plane was already closed to anything unsigned. Leaving it unset with the write plane open logs a warning on every boot, because the console is then a publicly reachable form soliciting a private key.

Two structural properties matter as much as the checks:

What is built, and what is not

Non-goals

← All documentation