Complete Google and GitHub public signup - #403
Merged
Merged
Conversation
Merged
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
Make Google and GitHub first-class public signup options, rather than exposing the existing login callbacks as an incomplete account-creation path.
/signup. Existing identities still sign in directly; new identities from either/signupor/loginmust finish account setup by confirming their name and accepting current legal documents. No password is required.open_beta_v1, and schedule welcome email/starter collection. Extract one onboarding implementation shared with password signup.user:email(no repository scopes) and require a verified primary email, including private addresses. Keep account-linking/deletion reauthentication identity-only. Do not persist provider tokens.Migration and rollout
Additive migration:
0029_external_signup.sql. Server and bundled portal must ship together through the normal release process. Under an already-open policy, this flow becomes available when the existing provider, legal-document, and authentication-limiter dependencies are configured. Password/email-delivery kill switches do not disable provider-verified signup; registration closure does.Existing external accounts are not retroactively granted public-signup allowances. Allowlisted bootstrap creation in closed/invite mode remains unchanged. Old server versions ignore the new table, but a server rollback also restores the previous external account-creation behavior.
No production configuration or deployment was changed. Actual public Google/GitHub account smoke tests and staging/release qualification remain required before production promotion; browser tests here use mocked provider responses.
Validation
Passed locally with Node 24.19.0 and the checked-in mdbase-rs revision:
cargo fmt --allcargo test --workspacepnpm testpnpm typecheckpnpm check:architecturepnpm test:accessibility— mobile signup choices, consent gating, provider/email UI separation, stable Google nonce while typing, and preserved authorization return targetpnpm e2eRoute coverage additionally includes both providers, absent/unverified email, stale legal versions, expiry, origin rejection, missing dependencies, registration closure, provider deconfiguration, cross-tab proof mismatch, duplicate-account denial, cancellation/replay, safe redirects, and independent preview/redemption rate budgets.
Architecture review
The budget change is explicit and documented: two production server modules, fourteen relative imports, and five TypeScript exports.
external-signup.tsowns the new proof/transaction boundary;public-account-onboarding.tsreplaces the password-only onboarding sequence with one shared implementation. File-size and cycle checks are unchanged.