Date: 2026-08-18 Status: Stub — the statements below are made. Nothing beyond them is decided.
US prefix (ADR-010). The name segment is a snapshot
taken at minting; the random suffix is what makes it unique, so renaming does not
re-identify anyone.auth.root_identities lists ways to reach a User, not Users (ADR-030).auth.binding_signers is
asked about that signer every time it is used, so striking a signer out still reaches
bindings already written down.auth.root_identities closes one way in, and a User holds several; disabling the User
is the person, not the door.system, where the token objects already are (ADR-027).system is not (ADR-026). An ATTESTOR sees no
User record: not another's, and not their own. There is no directory of people at that
level. What an ATTESTOR sees inside a namespace is what signed something, and by is
the signer (ADR-026) — never the person behind it.A User has a display_name, and it is a name rather than half a login. Not unique, never asked for at a door, no password beside it. What identifies a User is a key they hold or an account they proved.
"display_name of root cannot be changed anymore when set"
"if display_name of root is unset, it becomes root"
"regardless of root_identity setting it or not, root is never an available display name except for the one root identity user, they dont need to set their display name as root"
So the ROOT User is root from the moment they exist, without choosing it, and root is
the one name no other User may take.
ADR-026 says "Namespace is identity. There is no separate concept of a user." Naming the User retires that, and resolves ADR-026 against itself: it also says an identity lives in a namespace, which is the half that survives.
A User is one object per person under <location>/system/users/ on the parquet
backend, holding an id, a display_name, any number of emails, the level, the
keys it holds and the accounts that reach it. A sqlite deployment keeps none,
the way it keeps no tokens.
POST /auth/user/arrive is where a person says a name and an email, and
requires neither. The name is settled once; an email that arrives later is added
rather than refused, because a User has any number of them.
A User holds no last name and no phone number.
A User does not live in a namespace. They have permission to reach namespaces, and nothing records which yet.
created_by is empty on ROOT, because the node that signed its first admission
is not written down.
A namespace's owner is a string, and so is a credential's admitted_as.
The ROOT User's provenance is the node that signed the first admission, and the first
admission is what creates them — so the two land together, or neither does. ADR-030
records that the path has never been run. Until it is, created_by is empty on the ROOT
User, and that emptiness is a placeholder for the node rather than the answer.
system holds the User records, and only the parquet backend has namespaces at all
(ADR-026, "Not done") — so on SQLite there is nowhere for them to go yet.