smolboid/daemon
randogoth 2d2b42dd6f feat: extract admission into register.rs, with a key-equality gate
The CLI grew the only admission implementation, which a mail-driven one would
have had to duplicate. register::admit is now that path for both callers; it
sends no mail and prints nothing, so the caller decides what the author and
the operator see.

expect is the point of the exercise. A mail-driven registration knows which
key signed the request and must require the address to resolve to that same
key, because a signed Reply-To naming someone else's address proves only that
the sender signed the URI. The CLI passes None and prints the resolved key and
fingerprint instead, since the operator vouches out of band for a target who
has not written in.

slug_of compares the daemon's own registered address, host and port, not
smolmail_host: that setting carries no port while short() does, so two servers
on one host at different ports would both collapse onto bare local slugs and
collide. A test pins that, and another checks every derived slug is a legal
feed path.

Three details that were wrong or silent before:
- synced is reported rather than assumed. push_tokens is inert when the local
  token set may not replace the server's, and the author then stays in the
  requests tier forever; the CLI now says so loudly.
- the welcome mail is sent only when a feed was created, so a re-admit no
  longer mails someone a second time.
- a re-registration may update the nick; the path never moves.

Verified with the rig: admit, post, commands, repost, delete, collision, both
retention modes and an author rotation all pass against a real bunshin.
2026-10-14 19:58:31 +03:00
..
locales/en-US feat: parse mailbox requests and factor out the address claim 2026-10-14 19:37:17 +03:00
src feat: extract admission into register.rs, with a key-equality gate 2026-10-14 19:58:31 +03:00
Cargo.toml refactor: move author-facing mail copy into a Fluent catalogue 2026-10-14 18:48:31 +03:00