feat: unify member invitations across editions in core#6631
Conversation
202699e to
ad24a8b
Compare
|
/review |
|
Claude finished @gustavosbarreto's task in 10m 31s —— View job Code Review CompleteReviewed 100 files across code quality, security, testing, language patterns, and architecture with 5 specialized agents. 2 inline issues posted (1 high, 1 medium).
Additional notes
To request another review round, comment |
ad24a8b to
51863f1
Compare
Migration 011 made idempotent for the Postgres upgrade pathFollow-up to a cross-repo note on shellhub-io/cloud#2426. Postgres is already in production, and the last stable release (v0.26.0) created
Fresh Community installs create the full schema as before. Verified by replaying the exact v0.26.0 schema (seeded with a pending invitation) then applying /review |
51863f1 to
f032020
Compare
Hardened the invite-only registration path (addresses the squatting note)
Added a regression test ( /review |
|
Claude finished @gustavosbarreto's task in 11m 51s —— View job Code Review CompleteReviewed 100 files across code quality, security, testing, language patterns, and architecture with 5 specialized agents, then validated each finding with independent sub-agents. 3 inline issues posted (1 high, 2 medium).
Additional notes
To request another review round, comment |
f032020 to
44922cd
Compare
|
/review |
44922cd to
a668284
Compare
Added unit coverage for the enterprise-gated pathsFollow-up to the coverage note. /review |
|
Claude finished @gustavosbarreto's task in 16m 45s —— View job Code Review CompleteReviewed 100 files across code quality, security, testing, language patterns, and architecture with 5 specialized agents, then validated each surviving finding with independent sub-agents. 2 inline issues posted (1 high, 1 medium).
Additional notes
To request another review round, comment |
6a995fe to
3f4e447
Compare
|
/review |
|
Claude finished @gustavosbarreto's task in 13m 43s —— View job Code Review CompleteReviewed 100 files across code quality, security, testing, language patterns, and architecture with 5 specialized agents, then validated each surviving finding with an independent sub-agent. 2 inline issues posted (1 medium, 1 low).
Additional notes
To request another review round, comment |
The add-member flow now works the same in every edition. Adding a member by email always creates a membership invitation with a one-time signature and returns an /accept-invite link; the invitee follows it to set up their account or, if they already have one, to accept. Cloud also emails the link. On self-hosted Enterprise an existing account is added directly, and an invite from a non-superadmin completes into an account awaiting a system admin's approval. This moves the invitation spine (models, store, services, routes, and registration) out of the cloud repo into core, so Community and Enterprise no longer fall back to a separate onboarding path. Editions layer only add-ons on top: email delivery and the approval gate. The membership invitation carries its signature and expiry on the row (migration 011), replacing the Redis activation token. The activation token path and its /activate route, UI dialog, and account-request tab are removed. Registration (POST /api/users) lands in core, with open self-registration gated to Cloud.
3f4e447 to
f893606
Compare
|
/review |
|
Claude finished @gustavosbarreto's task in 7m 15s —— View job Code Review CompleteReviewed 100 files across code quality, security, testing, language patterns, and architecture with 5 specialized agents, then validated the surviving findings — no new issues found. The code looks good as-is. Additional notes
To request another review round, comment |

The add-member flow now behaves the same in every edition. Adding a member by email always creates a membership invitation with a one-time signature and returns an
/accept-invitelink. The invitee follows it to set up their account, or to accept if they already have one. Cloud also emails the link. On self-hosted Enterprise an existing account is added directly, and an invite from a non-superadmin completes into an account awaiting a system admin's approval.Until now the invitation subsystem lived entirely in the cloud repo, so a Community API lacked those endpoints and the UI fell back to a separate activation-token onboarding path. This moves the invitation spine into core, so all three editions share one flow and one
AddMemberDrawer.What changed:
011that carries the signature and expiry on themembership_invitationsrow, replacing the Redis activation token.POST /api/users) lands in core. Open self-registration stays gated to Cloud; Community and Enterprise are invite-only./activateroute, the activation-link dialog, and the account-request tab are gone.awaiting_approvalgate.The cloud-side counterpart is shellhub-io/cloud#2426.