Skip to content

The sign-up form asks about the Fediverse, with the box ticked - #1193

Merged
wintermeyer merged 1 commit into
mainfrom
worktree-fediverse-registierung
Jul 28, 2026
Merged

The sign-up form asks about the Fediverse, with the box ticked#1193
wintermeyer merged 1 commit into
mainfrom
worktree-fediverse-registierung

Conversation

@wintermeyer

Copy link
Copy Markdown
Owner

TL;DR New members are asked about the Fediverse at sign-up, with the box ticked. That one box sets all three switches of /settings/fediverse, so its wording names the reply storage and its six-month limit. Confirming the address now mints the actor keypair.

Version: 7.187.0 · Hot deploy (no migrations, no config, no deps, no supervision changes).

Why

Federation only ever reached people who went looking for it: the switch lives on /settings/fediverse, a page nobody visits without already knowing the word. Sign-up is the one moment everybody passes through, and most people who join want the connection to Mastodon and friends.

What the box does

  • Ticking it sets fediverse_followers?, fediverse_reactions? and fediverse_replies? (PageController.expand_fediverse_choice/1). That is what "take part" means to somebody reading it — and because the third one stores text written by people who never signed up here, the box carries three lines of explanation naming the reply storage and the six-month ceiling. A consent covers what it says out loud.
  • The /settings/fediverse switch is unchanged: on its own it still leaves replies off, because its wording promises none of that.
  • Unticking sets only participation to false and leaves the other two at their schema defaults, so a later yes on the settings page lands on that page's defaults, not on an echo of a box unticked months earlier.
  • FEDIVERSE_ENABLED=false (intranets) drops the question entirely.

The keypair gap this closed

"Opted in" and "has a key" could not come apart before, because the settings page was the only way in and it calls ensure_actor/1. Sign-up cannot mint it (address unconfirmed, nothing may federate yet, and a key per unconfirmed registration is work for the sweeper). So Accounts.activate_user/1 mints it on first confirmation — without that the delivery worker deletes every activity of a keyless member ("No key … undeliverable for good"), and their first remote Follow would have vanished with no error anywhere.

Tests & docs

Ten tests in test/vutuv_web/controllers/registration_fediverse_test.exs (async: false — two flip :fediverse_enabled), covering the ticked default, all three switches, the unticked path, the German render, the intranet case and the keypair-on-confirmation. checkbox_checked?/2 moved to VutuvWeb.ConnCase since two files need it. docs/architecture/fediverse.md and docs/ADMINS.md updated — the latter now says plainly what the ticked box means for a third-party installation (expect most new accounts to hold third-party replies; FEDIVERSE_ENABLED=false is the only lever).

The vutuv.de privacy page was updated by hand at /admin/legal before this shipped.

An AI agent wrote this text in my name, unreviewed by me. The work behind it is mine; I only delegated the writing.

https://claude.ai/code/session_01PTwE9gLKFFqrkEkVpnpYiN

…7.0)

Federation only ever reached the people who went looking for it. The switch
lives on /settings/fediverse, a page nobody visits without already knowing the
word, so a member who would have said yes was never asked. Sign-up is the one
moment everybody passes through, and most people who join want the connection
to Mastodon and friends, so the question belongs there and the box starts
ticked. Unticking is one click, and /settings/fediverse still takes it back at
any time.

One box, all three switches of that page (expand_fediverse_choice/1): taking
part, the reactions that come back, and the replies people write out there.
That is what "take part" means to somebody reading it — but the third one
stores text written by people who never signed up here, so the box carries
three lines of explanation naming the reply storage and its six-month limit.
A consent covers what it says out loud, which is also why the settings switch,
whose wording promises none of that, still leaves replies off when it is
switched on by itself. Unticking at sign-up sets only participation to false
and leaves the other two at their schema defaults, so a later yes on the
settings page lands on that page's own defaults rather than on an echo of a
box somebody unticked months earlier.

Confirming the address now mints the actor keypair. Until now "opted in" and
"has a key" could not come apart, because the settings page was the only way in
and it calls ensure_actor/1. Sign-up cannot: the address is still unconfirmed,
nothing may federate yet, and a keypair per unconfirmed registration is work
for the sweeper to throw away. Confirmation is the moment federated?/1 turns
true, and it has to mint the key there, because the delivery worker deletes
every activity of a member it finds no key for - the first remote Follow such
a member sent would have vanished with no error anywhere.

Installations that federate nothing (FEDIVERSE_ENABLED=false, intranets) drop
the question entirely. The operator manual now says what the ticked box means
for them: expect most new accounts to federate, and to hold third-party
replies, with FEDIVERSE_ENABLED=false as the only lever. The vutuv.de privacy
page was updated by hand at /admin/legal before this shipped.

An AI agent wrote this text in my name, unreviewed by me. The work behind it is
mine; I only delegated the writing.

Claude-Session: https://claude.ai/code/session_01PTwE9gLKFFqrkEkVpnpYiN
@wintermeyer
wintermeyer force-pushed the worktree-fediverse-registierung branch from 9a3e926 to 82fa7a1 Compare July 28, 2026 11:06
@wintermeyer
wintermeyer merged commit f71715c into main Jul 28, 2026
1 check passed
@wintermeyer
wintermeyer deleted the worktree-fediverse-registierung branch July 28, 2026 11:12
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant