v0.80.0 — a namespace that does not eat the internet
.sh was sold for $2, and it took the registry off the air
.sh was claimed through the ordinary registration flow, by someone who is not us. It is Saint Helena's country-code top-level domain. It is also where this project's own registry lives: pit.moshcode.sh.
Every bridge that fetched the ending list therefore learned to treat the registry as a Moshpit name. It stopped forwarding it to the clearnet and tried to resolve it through the registry it had just made unreachable — a resolver that cannot resolve the thing it needs in order to resolve anything.
The state on an affected machine was a bridge that was running, listening, correctly routed to, and answering NXDOMAIN to the entire internet:
pit.moshcode.sh → NXDOMAIN
alt.2600 → NXDOMAIN
mail-ads.google.com → NXDOMAIN
Moshpit names failed for the same reason clearnet ones did. Resolving a name takes a live registry query, and the registry was the thing being swallowed.
It took the rest of the ccTLD with it. On a machine running the bridge as its resolver, real .sh sites answered a Moshpit parking address — a site that exists, quietly replaced by one that does not.
RESERVED_TLDS was written to prevent exactly this. It named com, net, org, edu, mil, int and arpa. There are 1438 delegated top-level domains.
Both halves are closed
The registry no longer sells an ending IANA already delegates. That covers the single and the bulk registration paths, since both go through the same rejection, and it holds even for callers that are allowed to take reserved names. Reserving .bank is policy, and policy has exceptions; answering for .sh is a machine that has lost a piece of the internet, and there is no caller for whom that is the intended outcome.
The bridge no longer answers for one, whatever the registry says it sold. isOurs is the last word now, rather than the ending list it is handed.
Neither half is sufficient alone, and the second is the one that helps anyone today: 622 colliding endings are already registered, across 14 owners. Nobody running a bridge should have to wait for that to be tidied up before their resolver works again.
The list is vendored rather than fetched at run time. A registry that phoned IANA on every claim would sell .sh the moment IANA had a bad minute, and a resolver that did it per query would have a dependency on the very thing it exists to avoid needing. scripts/generate-iana-tlds.mjs regenerates it. There are two copies, because src/ ships to npm as the CLI and apps/pwa/ deploys as the Pit and is not a workspace — and a test fails if they ever drift.
What changes for a name you hold
An ending that collides with a real TLD stops resolving through the bridge. That is the point, and it is worth being plain about: if you were using one, it will stop working, because on every machine running a Moshpit resolver it was already breaking the real domain of the same name.
Endings that are not real TLDs are untouched. .eggs, .hacker, .2600 and the rest resolve exactly as before, and .42 is still available — the rule is about collision with the existing internet, not about how a name looks.
Verified against a live bridge
Holding all 18224 endings, including sh:
| name | before | after |
|---|---|---|
pit.moshcode.sh |
NXDOMAIN | 69.46.46.24 |
moshcode.sh |
hijacked | 69.46.46.31, its real record |
moshcoding.sh |
69.46.46.103, a parking address |
nothing, because it genuinely does not exist |
blue.eggs |
69.46.46.103 |
unchanged |
alt.2600 |
67.205.189.229 |
unchanged |
One existing test asserted that .ai was registerable. .ai is Anguilla's ccTLD; the expectation had encoded the bug, and now tests the length rule with an ending that is only about length.
The 622 endings already sold are not deleted here. The guards above make them harmless without it, and removing paid claims across 14 owners is a decision to take deliberately rather than as a side effect of a bug fix.