DESIGN.
License: CC0 1.0 Universal — Public Domain neurons.me / suiGn
0. The one-sentence version
A namespace's claim ledger already lets a human .me prove "I am who I say I am, here" — this doc proposes the same primitive for a surface (a monad, a netget instance, any running service), so "this server is who it says it is" stops being a bare string in a JSON registry and becomes the same kind of verifiable claim.
For a while I described .me with a sentence I thought was precise: "everything that can be named, is authorized, and finishes resolving."
It sounds rigorous, but it's redundant. It lists three conditions, and there is really only one.
Authorization is not a filter
The usual way to think about access is in two steps. First you resolve the name, and then some middleware decides whether you're allowed to see the result. Authorization becomes a gate placed in front of something that already exists.
.me doesn't work that way. When you ask for a path, the resolver doesn't find a value and then hide it from you. What it returns is the result of resolving that name for you.
sui.me/profile/email
That same path can resolve in three ways:
For the owner, it resolves to the value.
For a visitor, it resolves to closed.
If the node doesn't exist, it resolves to "does not exist."
These aren't three permissions applied to one result. They are three different results of the same resolution. closed is not an error or a rejection; it's the correct answer for whoever is asking.
Termination isn't a separate condition either
"Finishes resolving" falls the same way. A resolution that never finishes isn't a resolution, it's a hung process. Requiring that it terminate is already part of what resolving means.
That doesn't make cycles go away. A pointer can point to another pointer that points back, and a chain of hops across namespaces can grow without limit. The difference is where those rules live. They aren't conditions stacked on top of the model; they're part of how resolution works: detect cycles, cap the number of hops, and return a defined result when the limit is reached.
The sentence that remains
Everything that can be named and resolved, in the context of whoever asks.
"Named" says what belongs in the system: anything with a path. "Resolved" already includes authorization and termination. "In the context of whoever asks" makes explicit what used to be hidden inside "authorized," which is that resolution depends on the identity of whoever requests it.
Why it matters
When authorization is a filter, every layer ends up reimplementing it: the API, the frontend, the proxy. Each one has its own idea of who can see what, and sooner or later they disagree.
When authorization is part of resolution, there is exactly one place that decides what a name means for someone. The interface doesn't ask "am I allowed?"; it asks "what is this for me?" and renders whatever comes back, whether that's a value, closed, or nothing.
That change in the question is what makes .me closer to a language than to a database. A language doesn't have "forbidden values." It has expressions, and every expression is evaluated in a context.
Top comments (1)
Once written it runs.