Files
hq/02-DECISIONS/0034-the-local-account-owns-the-mesh.md
jschoubben fccac61e58 The board is a web application, not a category
Supersedes 0032, which decided the right thing and described it wrongly.
The decision is unchanged: the account that installed the host owns the
mesh, and there is no user model.

What was wrong was inventing "a surface that delegates authentication"
for the board. It is a web application with a login, in the way every
web application has a login. That is a fact about an application, not a
property of the mesh.

The cost was not cosmetic. It made the identity module look like part of
the mesh's authority — something the mesh depends on to know who anybody
is — when the mesh knows nothing about people at all and one of the
applications running on it happens to have a login.

Keeps the line that is worth writing down, and states it more plainly:
signing in to an application must not become authority over the mesh.
Today it cannot, because the board reads and does not act. The moment it
can assign a module, whoever it lets in has mesh authority — and it
would arrive as a feature rather than as a decision. So a surface that
can change the mesh is a change to who owns the mesh, and is taken as
one. Not forbidden; just not something that turns up in a pull request
titled "add assign button".
2026-08-31 21:08:39 +02:00

4.0 KiB

topic, status, date, deciders, reconstructed, supersedes
topic status date deciders reconstructed supersedes
how we work accepted 2026-08-31 jochen false 02-DECISIONS/0032-the-local-account-owns-the-mesh.md

34. The local account owns the mesh, and a web application's login is not that

Supersedes ADR 0032, which decided the right thing and described it wrongly. The decision below is unchanged; what it said about the board was an invention.

Context

ADR 0032 answered who owns the mesh — the account that installed the host — and then framed the board as a surface that delegates authentication, a category it made up for the occasion. It does not need one.

The board is a web application. It has a login, provided by the identity module, in the way every web application has a login. That is a fact about an application, not a property of the mesh, and giving it a name in the mesh's vocabulary implied a relationship that is not there.

The cost of the invented category was not cosmetic. It made the identity module look like part of the mesh's own authority — something the mesh depends on to know who anybody is — when the truth is that the mesh knows nothing about people at all, and one of the applications running on it has a login.

Decision

The account that installed the host owns the mesh on that node. Authority is a local login. There is nothing else to hold, no user model, no roles, and nothing to administer.

This follows from what was already decided. ADR 0004 says there is no authorisation between nodes — every node is the operator's own, so a message from one is a message from them, and the mesh boundary is the security boundary. A user model inside that boundary would guard nothing: anyone it could stop could read the node's key off the disk.

A web application's login is its own business. The board authenticates its users through the identity module. So might anything else the mesh runs. None of that is mesh authority, and the mesh does not learn who anybody is from it.

The line this draws, which is the reason to write it down

Signing in to an application must not, on its own, become authority over the mesh.

Today it cannot: the board reads and does not act (11-a-board.md — not the way to change things). Looking at a page tells you what is true and changes nothing.

The moment the board can assign a module, whoever it lets in has mesh authority — and it would arrive as a feature rather than as a decision. That is the failure this record exists to make visible, because it is the kind that is only obvious afterwards.

So: a surface that can change the mesh is a change to who owns the mesh, and is taken as one. Not forbidden — wanting to manage nodes from a browser is reasonable — but not something that turns up in a pull request titled add assign button.

Consequences

The identity module is not special. Not substrate (ADR 0031), not part of the mesh's authority, and nothing about the mesh stops working when it is down. Some applications cannot be logged into, which is what it means for an application's login provider to be unavailable.

Anyone with a shell on a node has full authority there. Unchanged from ADR 0032, and still the sentence that decides who gets an account on a machine. The protection is the machine's own login and the overlay that keeps it unreachable from outside (ADR 0007).

A node cannot be operated by somebody without a login on it. The cost of having no user model. If that is ever wanted, the paragraph above says what it costs.

References

  • ADR 0032 — superseded; same decision, invented category
  • ADR 0004 — the mesh boundary is the security boundary
  • ADR 0031 — the control plane authenticates nobody