Skip to content

v0.73.0 — A parked name stops being a dead end

Choose a tag to compare

@ralyodio ralyodio released this 29 Aug 09:26
93bbdc2

A parked name stops being a dead end

Until this release the Moshpit registry had two problems that were really one
problem seen from opposite ends. It published contact details nobody had agreed
to publish, and it gave nobody a way to make contact.

GET /api/moshpit/tlds returned owner_email in cleartext for every ending in
the registry — thousands of real addresses, other people's included, to anyone
who could count to 200 in an ?offset=. Nothing read that field: not
moshpit-registry, not the DNS bridge, not a single page in the app. It was a
SELECT that grew a route.

Meanwhile every parked page ended the conversation. A name somebody held said
"claimed but does not point anywhere yet". A name under an ending with no
price said ".eggs is not for sale". Both are true, both land at the exact
moment a visitor wants the name most, and the holder never heard that anyone
asked.

Ownership is public. The account behind it is not.

The endings list now follows the policy /api/moshpit/log already wrote down.
Endings carry a stable owner digest — the same value the log publishes — so
two endings held by one person are still visibly one person, and "who holds how
much of the namespace" is still answerable. What is gone is the address.

{"tld":"cuntries","owner":"0999fea1f2eefd79","alias_of":"pr0n","price_usd":2}

A contact you opt into

A holder can now say how to reach them, per name or per ending, on
/pit/contact. They give an address they read; the registry publishes
k7m2xqbn3f@names.moshcode.sh, which forwards to it. The real address never
appears in a page, an API response, or the allocation log — including on the
holder's own management screen, which does not need it.

Three states: guard publishes the forwarding address, public publishes the
real one for a role address somebody is happy to expose, and none publishes
nothing while keeping the token. That last distinction matters more than it
looks: a published address ends up in other people's address books and on pages
we do not control, so taking one down for a week must not mint a different one
on the way back.

Tokens are ten characters of digits and consonants. Excluding vowels does real
work — a token can never spell a word, so a minted address can never collide
with a mailbox somebody holds at the same domain. support@, abuse@ and
notify@ are unreachable from the alphabet itself rather than from a reserved
list somebody has to maintain.

A contact dies with the name. Releasing or selling one destroys the alias
alongside the pins, records and twin, or the next holder inherits a forwarding
address pointing at the last one.

Not live yet. Guard addresses need a mail host, and that is one credential
away. The DNS is in and verified — MX, SPF and a report-only DMARC on
names.moshcode.sh — but until an API key is set, a contact is recorded,
stays pending, and publishes nothing. /pit/contact says so plainly rather
than pretending.

Offers, and leases

A parked page now takes an offer to buy or lease, and the holder
accepts, refuses, or names a different number.

No account is needed to ask. Requiring one means asking a stranger to sign up
before they may say what they would pay, on the page whose whole job is
converting that stranger. The address is confirmed by mail instead, and that
step is load-bearing: an offer sits unverified and the holder is told nothing
until the link is clicked. Without it the form is a way to write to every holder
in the registry, one name at a time, from our own domain.

Offers are private. Only the holder sees an amount — a public board tells every
later bidder what the last one offered and shows the holder's next buyer exactly
where their floor is. A counter is held beside the original rather than
replacing it, because a negotiation that rewrites its own history is one neither
side can check.

Accepting moves nothing. It opens a CoinPay checkout, and the name transfers
when the payment confirms. Everything is re-checked at settlement: a name that
changed hands in between becomes refund_due rather than a silent loss, and a
completed sale closes every other live offer on that name. A sale leaves nothing
of the seller's behind — contact, alias, pins, records, twin and target all go.

Leases are real. The holder keeps the name; the tenant points it, publishes
under it and presents keys until the term ends, then it reverts on its own.
Paid once upfront for the whole term, because renewing one needs subscription
billing and a story for what happens to a live site when a payment fails — and
a term paid in full before it starts cannot lapse halfway through.

A lease ends by the clock, not by a sweep. A former tenant loses control the
moment the term passes, and their site stops being served immediately; the
hourly sweep does the part a reader cannot, taking the target, records and keys
back off. Their published posts are deliberately left alone — a lapsed lease
should unlink work, not destroy it.

Endings can be bought but not leased. A name minted during an ending's lease
would outlive the lease, so a six-month tenancy would permanently carve up a
namespace its holder never sold. That needs an answer before it can be built.

An arrow pad on the session page — and the reason to upgrade

The mirror could only ever be typed at. Whatever you sent was a line, and a line
is no use against anything that navigates: a reader, a herd bar, a menu all want
↑↓←→ and none of them want text.

A key now rides the command queue as a sentinel the CLI decodes rather than
runs. It skips the line queue on the way in, because a key parked behind pending
text lands on a different row by the time it arrives, and it is pressed against
whatever is reading the terminal right now — readline gets a keypress, and
anything holding the tty in raw mode gets the real escape sequence on stdin.

This is the release that switches it on. Sending a key to an older mosh
would type the sentinel at the prompt of a live machine, so the CLI declares
features: ["keys"] when it registers and the app refuses a key without it. The
pad renders disabled, and says why, against a CLI that has not been updated. If
your pad is greyed out, this is the upgrade that fixes it.


Upgrade with moshcode upgrade, or:

curl -fsSL https://moshcode.sh/install.sh | sh