One Sender, Eighteen Registries, and a Rail for the Nodes That May Not Hold the Key
Fourteen of our cloud operator registries were configured to send email through smtp.example.com, authenticating with the password CHANGE_ME.
Nothing happened. Nobody was affected. No feature broke.
I want to dwell on that password for a second. CHANGE_ME is not a credential, it is a to-do item. It sat in fourteen configuration files the way "buy milk" sits on a fridge, and it survived the way fridge notes survive: nothing in the house actually depended on milk. The server it belonged to, smtp.example.com, lives on a domain the internet's standards body reserved so that nothing real ever answers there. Fourteen registries were told, in effect: should you ever need to send mail, address the void, and introduce yourself with an apology.
The reason none of this mattered is the best statistic this platform owns. Those fourteen registries hold about 1,600 developer accounts between them, and not one belongs to a person. They are federation mirrors with addresses like federated-59@registry-op-losangeles.federation, minted by peers syncing agent cards to one another. Robots, wall to wall, none of whom has ever wanted an email, because wanting email requires being a person. Eleven accounts are unverified, most of them the same mirror artifact, and one is called quicktest@test.com, who I feel safe saying is not waiting by the inbox.
So the entire population that could have needed a working mail server was software, and the one human with an account was the one writing the configuration. That is what pre-release software looks like from the inside, and it goes in the journal anyway, because the interesting question was never what broke. Nothing broke. The interesting question is what happens when the first stranger arrives.
This week the platform got ready for strangers
Because strangers change everything. A stranger types a real address into the signup form, so a node that demands verification has to be able to deliver it. A stranger might be handed an entire registry, so administrator rights have to travel without a password travelling. A stranger will not take our word for anything, which suits us, because we stopped asking anyone to. Everything in this post is one preparation or another for that arrival.
The placeholder, first, because on its own it was innocent. REQUIRE_EMAIL_VERIFICATION defaults to true, which is correct. The template wrote a placeholder mail server, which is what templates are for. Put together, they describe a registry that would demand a stranger verify an address and then be structurally unable to send the mail, with the remedy sitting on an admin endpoint that appears in no interface. Nobody hit it, because nobody was standing there. It was armed and pointed at whoever showed up first.
And it was invisible for a reason worth writing down. Every health check was green, and every one of them was right: each service was doing exactly what its configuration said. Monitoring can only check propositions somebody has stated, and a node must never demand verification it cannot deliver had never been stated by anyone. Not a missing check. A missing sentence.
noreply@ and red from SecurityAlerts@, because the colour is a claim about which mailbox sent it, and claims do not get to be decoration. The template on screen is the receipt an account gets for exercising its right to be anonymized; data rights here are endpoints you can call, and the mail is just the paperwork.Three postures, and only three
So the sentence got written down and then made structural. Every node we host resolves to exactly one of three mail postures, and the broken fourth combination is now not expressible:
- direct. The node holds a submission credential and dials SMTP itself. Verification on.
- relay. The node holds no credential at all and asks its parent to send. Verification on.
- none. No send path. Verification off, and invite codes forced on, because with verification off they are the only remaining gate.
The invariant is one line: verification on implies a working send path. There is no branch that emits verification-on without one. The suite enforcing it was deliberately broken three times to confirm it actually fails when the code is wrong, because a test that has never been made to fail is decoration.
A second invariant fell out that we had also never written down: no node may end up with neither verification nor invites, which is a registry open to the entire internet with no barrier at all. It had never happened. Nothing had been preventing it either.
A node that must send mail and must not hold the credential
Here is the constraint that made this worth building rather than just patching.
Some deployments of this software are administered by people who are not us. That is the whole point of the operator model, and it means nothing if the operator does not genuinely control the box. But a submission credential inside a container somebody else administers is a credential we have given away, and it sends as our domain. Both of those are true and they pull in opposite directions.
So such a node does not speak SMTP at all. It asks its parent to send, over the federation lane that already exists, and holds nothing.
template in the closed set?
rate window open?"}:::gate B["verification link built from
the caller's OWN registered base URL"]:::own S["sent as noreply@
parent's template, parent's subject"]:::ok X["refused"]:::deny end R -->|"template name + opaque token
no URL · no body · no sender"| G G -->|"yes"| B --> S G -->|"no: 403, audited,
recipient stored as a hash"| X classDef own fill:#141e2e,stroke:#3B82F6,stroke-width:2px,color:#e4ecf4 classDef act fill:#1a2234,stroke:#8B5CF6,stroke-width:2px,color:#e4ecf4 classDef gate fill:#2a1f0e,stroke:#F59E0B,stroke-width:2px,color:#e4ecf4 classDef ok fill:#0d2a23,stroke:#10B981,stroke-width:2px,color:#d1fae5 classDef deny fill:#2a0e0e,stroke:#DC2626,stroke-width:2px,color:#fecaca
Four properties make the relay safe, and each is load-bearing:
- The sender is not caller-controlled. We tested it by attaching
from,subjectandbodyfields to a request. They were ignored, and the mail went out with the parent's own subject. - No free-form content, and no URL either. The child names a template from a closed allowlist and supplies an opaque token. It never sends the verification link. The parent builds that from the caller's own registered base URL, so there is no attacker-controlled string anywhere in the message. The request schema exposes five fields and not one of them is a URL, a body or a sender.
- Holding a federation licence is not permission to send mail. Two independent grants. A perfectly valid licence that is not on the relay allowlist gets a 403.
- Every attempt is audited, accepted or refused, with the recipient stored as a hash rather than an address.
My favourite property of this design is how little the child can say. Its entire outbound vocabulary is a template name and a token. It cannot utter a URL, a sender, a subject or a sentence of its own, and it is remarkably hard to phish anybody with a vocabulary of two nouns.
And an ordering rule worth more than any of them: verification was switched on for a relay node only after a relayed message was proven to arrive from inside that node's own container. Turning it on first and testing afterwards would have recreated the exact situation this work exists to remove, with extra steps and more confidence.
Invitations are a separate axis, and always were
The first version of this module tied the two together: if you have mail you are open, if you do not you are invite-only. Tidy, and wrong. Requiring an invitation and verifying the address someone was invited at are independent choices, and the deployments we care most about want both at once.
The invitation system does real work here. An invite code can carry administrator rights, so a fresh registry can be handed to someone who has no account on it and no password has to travel anywhere. Codes are minted, listed, audited and revoked from the interface, and a code that grants administrator sits behind its own confirmation because it should.
What it grants is now a choice rather than a constant. The code names which areas of administration it confers, the account is created holding those and nothing else, and it never receives the old blanket flag that skips the checks entirely. An invitation also cannot hand out authority its author does not have, which sounds obvious and was not true until this week: the endpoint that mints codes is itself one of the narrower admin surfaces, so before the clamp a support desk could have invited itself a treasury.
OWN areas"]:::own --> C{"clamp: granted must be
a subset of the minter's"}:::gate T["areas ticked
on the mint form"]:::act --> C C -->|"within"| K["code minted: it names
exactly what it grants"]:::ok C -->|"beyond"| D["403: a code cannot carry
a right its author lacks"]:::deny K --> A["redeemed: the account holds
those areas and nothing else,
no blanket super-flag"]:::ok classDef own fill:#141e2e,stroke:#3B82F6,stroke-width:2px,color:#e4ecf4 classDef act fill:#1a2234,stroke:#8B5CF6,stroke-width:2px,color:#e4ecf4 classDef gate fill:#2a1f0e,stroke:#F59E0B,stroke-width:2px,color:#e4ecf4 classDef ok fill:#0d2a23,stroke:#10B981,stroke-width:2px,color:#d1fae5 classDef deny fill:#2a0e0e,stroke:#DC2626,stroke-width:2px,color:#fecaca
That switch gets its own strip rather than a checkbox in a row of four, and its own confirmation, because the failure mode is not a typo. It is granting a stranger control of a registry and finding out later.
Both axes are now set per node, independently, and the console shows both.
The console reads each node's answer, not our opinion of it
The design decision that matters in this view is where the numbers come from. Verification and invite state are not read from our configuration. They are read from each node's own public registration-config endpoint, which is the same answer it gives a stranger standing at its signup form. If our configuration and a node's behaviour ever disagree, this console will report the behaviour, and it will be right to. A monitoring view that reports what you intended rather than what is true is worse than no view at all, because it gets believed.
It also refuses to call unknown healthy. A node we cannot reach is not counted as fine, because treating unknown as fine is the precise habit that lets a placeholder mail server spend months being nobody's problem. The two deactivated peers in the banner are the other side of the same discipline: excluded rather than counted as failures, because reporting a decommissioned node as unreachable is a category error, and a console that cries over category errors teaches you to stop reading it.
The template that wrote it
Fixing fourteen nodes still leaves the fifteenth to be born broken. The configurations were not fourteen accidents; they were one line in a provisioning template, copied faithfully fourteen times. The nodes are where the symptom showed. The template is the organism.
So the refusal moved to birth. Provisioning now validates its inputs before the first directory, container or certificate exists, and declines to create a node that would demand verification without a way to deliver it, a node with half a mail configuration, or a node with no public hostname. The comment above that check states the policy in one line: a half-provisioned frame is worse than a refused one. And both ways a node can be born here, as a sovereign frame or as a hosted operator, decide their mail posture through one shared module, so the two paths cannot drift apart and quietly reinvent the bug. The trap is not patched. It can no longer be written at the only place it was ever written.
The same pass decided what a newborn node is handed by default, and the answer is: as little as possible. The registry container of a fresh deployment mounts no control socket and no host directories. If a deployment genuinely needs reach into the machine that hosts it, the person provisioning it has to type the sentence I GRANT ROOT ON THIS HOST into the request. Not a checkbox, not a yes. The whole sentence, in capitals, compared character for character. Consent that can happen by default is not consent, and there are grants nobody should ever make on muscle memory.
Every gate gets a door
Preparing for strangers also meant walking the building and trying every locked door, and one of them turned out to have no handle on the inside.
Accounts here carry a flag that forces a password change before anything else is allowed. The server has enforced it for months: flag set, every administrative call refused until the password changes. What never existed was the screen, and the honest reason is that nobody ever needed it. For as long as this platform had one human user, who was also its author, the flag was only ever set by scripts that changed the password themselves one line later. The only person that gate could conceivably have trapped was the locksmith. It was not a hole. It was a door nobody had needed yet, in a building with one tenant.
Then registries started being handed to people, the flag landed on a real account for the first time, and the missing half showed itself: a console where every action fails, politely, with no explanation anywhere on it. So the door exists now. The screen says why it is there, and while the flag is set it is the only route the interface will resolve to. Not a dismissible banner. The only destination.
Out of it came the review rule for every surface here: each demand the system makes must ship with a door, in the interface, reachable by the person the demand lands on. The test is to walk the path as the person with nothing. No shell, no source, no colleague, nothing but what is on the screen. Bureaucracies fail that test all the time, the stamp you can only get from the counter that is demanding the stamp, and software inherits the shape effortlessly, because software is bureaucracy that executes. The one advantage software has is that the shape can be found in review and refused.
Nothing here asks to be believed
There is a preference running underneath everything above, and this is the post to say it plainly, because the mail console is the purest example of it yet.
Every load-bearing claim this platform makes about itself is checkable by someone who does not trust us. The conservation of the ledger is attested by an auditor that is a separate process reading the database directly; it does not work for the registries it audits and it does not take their word for anything. A registry's identity and commitments travel on a card signed with its own key, so a peer verifies a signature rather than a reputation. The mail console believes signup pages over our configuration. Even the relay's audit trail stores recipients as hashes: enough to prove what happened, too little to expose who it happened to.
The reason is not ideology. Belief is infrastructure that other people operate. It gets extended and withdrawn on schedules nobody publishes, and a system whose guarantees depend on its operator being believed inherits every one of those moods. Arithmetic does not fluctuate. A signature verifies the same way on a bad day. If the operator of this network were unreachable tomorrow, every claim in this post would still check, because none of them was ever routed through anyone's word.
Build as if nobody will vouch for you, and it stops mattering whether anybody does.
Terms you can read before you log in
Strangers also get paperwork, and ours fits on a page. The evaluation terms say the access is a courtesy rather than a contract, that either side can end it at any time without giving a reason, that nothing is warranted, and that you should not put real data in it. That is the whole document, short on purpose: an evaluation agreement you can read in full before you log in is worth more than a generous one you cannot.
It is a page you can read at two in the morning, in eight languages, and it says the same thing in all of them.
One document in that sidebar exists because German law requires that a person operating a public service be findable: a name, an address, a human being. We comply. But findability only answers who to hold responsible; it says nothing about whether anything the service claims is true. The other nine documents are pointed at running code, and running code makes the kind of claim this platform prefers: the kind you can check without asking anyone's permission.
The short version
A registry that asks for your email address is now structurally incapable of asking for one it cannot verify, and the provisioning that once wrote the placeholder now refuses to write it. A deployment we do not control can send verification mail without ever holding a credential of ours, from a closed set of templates, with a link it cannot influence, and every attempt audited to a hash. An invite code can hand that deployment its first administrator, with exactly the rights its author chose and never more than its author held, without a password ever travelling.
Eighteen registries, zero violations, and one page that will say so without anyone having to remember to look.
The week's real product is two sentences that had never been written down. A node must never demand verification it cannot deliver. A node must never stand open with neither verification nor invites. Both are code now, at the fleet and at the factory, and the suite guarding them was broken on purpose three times to prove it can object.
And underneath the sentences, the standard they came from. Everything in this post was built to work for the person with nothing. No credential of ours, in the relay. No password in transit, in the handover. No signature, in the terms. No belief in us, in the auditor. That person is not a persona we invented for testing. Sooner or later it is everyone.
The mail server was called smtp.example.com and the password was CHANGE_ME and it mattered to nobody, and it would have mattered enormously to exactly one person: whoever arrived first. They will get a different building now. Every gate has a door, the invitations say what they mean, and the money answers for itself, in public, four hundred thousand times and counting.