auth: Register entry beside Sign in, behind a config switch (off) #68

Merged
void merged 4 commits from void/register-entry into dev 2026-11-11 01:30:40 +00:00
Member

Per Heimdall, a Register entry beside Sign in, behind a config switch that defaults off.

  • config.registration {enabled, url}: off in code and in config.json. The url is the account service's own registration page (placeholder, empty); this client invents no route.
  • On (enabled true and an http(s) url): the sign-in page shows "Register" as a link to that url, with the consent sentence and notice version N. Both come from trainingNotice.ts; TRAINING_NOTICE_VERSION = 1 is new there, the one number the room notice shares. Off: nothing from this PR renders and the existing in-client Register link stays as it was. On: the entry replaces that link, so there is one door.
  • /signed-up/ is the return page, in our voice: "Follow the steps from the sign-up page to finish. Then sign in here." No promise about mail. With the switch off the route redirects to sign in.
  • Chromeless: plain ink text and links, no panels or pills; stacked column, so phone first.

Tests (registrationEntry.test.ts, 5): hidden when absent/off, ships off in config.json, hidden for empty/relative/non-web urls, text and version equal trainingNotice.ts's, pretend sentence on the preview server. Vitest 16 passing in the touched files, prettier and eslint clean. Not rendered in a browser; no react test renderer in the repo, so the components are covered through the pure registrationEntry.

Open for Libby (front-door path): the url allowlist is http(s) only; where MAS sends people back to is MAS's config, this PR only provides /signed-up/. Not merged, not deployed.

🤖 Generated with Claude Code

Per Heimdall, a Register entry beside Sign in, behind a config switch that defaults off. - `config.registration {enabled, url}`: off in code and in `config.json`. The url is the account service's own registration page (placeholder, empty); this client invents no route. - On (enabled true and an http(s) url): the sign-in page shows "Register" as a link to that url, with the consent sentence and `notice version N`. Both come from `trainingNotice.ts`; `TRAINING_NOTICE_VERSION = 1` is new there, the one number the room notice shares. Off: nothing from this PR renders and the existing in-client Register link stays as it was. On: the entry replaces that link, so there is one door. - `/signed-up/` is the return page, in our voice: "Follow the steps from the sign-up page to finish. Then sign in here." No promise about mail. With the switch off the route redirects to sign in. - Chromeless: plain ink text and links, no panels or pills; stacked column, so phone first. Tests (`registrationEntry.test.ts`, 5): hidden when absent/off, ships off in config.json, hidden for empty/relative/non-web urls, text and version equal `trainingNotice.ts`'s, pretend sentence on the preview server. Vitest 16 passing in the touched files, prettier and eslint clean. Not rendered in a browser; no react test renderer in the repo, so the components are covered through the pure `registrationEntry`. Open for Libby (front-door path): the url allowlist is http(s) only; where MAS sends people back to is MAS's config, this PR only provides `/signed-up/`. Not merged, not deployed. 🤖 Generated with [Claude Code](https://claude.com/claude-code)
auth: Register entry beside Sign in, behind a config switch that is off
All checks were successful
Build pull request / Build pull request (pull_request) Successful in 3m9s
8f31174da0
config.registration {enabled, url}: off by default and in config.json. When on with a
http(s) url, the sign-in page shows Register (a link to the account service's own page)
with the consent sentence and its version, both read from trainingNotice.ts
(new TRAINING_NOTICE_VERSION shared with the room notice). /signed-up/ is the return
page: it says to follow the steps from the sign-up page and promises nothing about mail;
with the switch off it redirects to sign in. Off keeps the existing Register link.

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
auth: sign-up return page renders; gamecult.org is the default homeserver
All checks were successful
Build pull request / Build pull request (pull_request) Successful in 3m35s
137fb5a96c
/signed-up/ sat inside AuthLayout, which discovers a homeserver and sends paths it does
not know to sign in, so it never rendered. The signed-out routes move to authRoutes.tsx
with the return page beside the layout (its own card, no discovery); a test matches the
real route table and renders the page. Drop the visible notice version from the entry
(it stays in registrationEntry's data and tests) and the unused getSignedUpPath.

clientDefaultServer falls back to gamecult.org, and the repo config.json lists it first
and defaults to it; a config that names its own list (the production pin) is unaffected.

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
void force-pushed void/register-entry from 137fb5a96c
All checks were successful
Build pull request / Build pull request (pull_request) Successful in 3m35s
to e070008d46
Some checks failed
Build pull request / Build pull request (pull_request) Has been cancelled
2026-11-10 23:15:56 +00:00
Compare
void force-pushed void/register-entry from e070008d46
Some checks failed
Build pull request / Build pull request (pull_request) Has been cancelled
to 3f86551ba4
Some checks failed
Build pull request / Build pull request (pull_request) Has been cancelled
2026-11-10 23:41:24 +00:00
Compare
auth: register failures in plain words; /register goes to the account service when the switch is on
Some checks failed
Build pull request / Build pull request (pull_request) Has been cancelled
fbec0322ef
The previous commit carried only the fallback split. This one carries the rest of Libby's two blockers and Heimdall's decision:

- config.json keeps only the registration block over dev's; clientDefaultServer is dev's again (the gamecult.org default is #86).
- registerErrorTrouble maps a register error code to registerTroubleMessage (new troubles: password-weak, password-short, unknown); PasswordRegisterForm shows those, never the server's text.
- RegisterRoute: switch on, /register offers the account service link and redirects there; switch off, the in-client form.
- Tests: registerErrors.test.ts (code to words, no Matrix code leaks), RegisterRoute.test.tsx (on, off, unusable url).

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
void force-pushed void/register-entry from fbec0322ef
Some checks failed
Build pull request / Build pull request (pull_request) Has been cancelled
to a4942eef86
All checks were successful
Build pull request / Build pull request (pull_request) Successful in 3m9s
2026-11-11 00:25:52 +00:00
Compare
void merged commit 450a7e91ff into dev 2026-11-11 01:30:40 +00:00
Sign in to join this conversation.
No reviewers
No labels
No milestone
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set

Reference
GameCult/Ratatoskr!68
No description provided.