Cross-PR review 2026-06-11 — the flagship 2-step flow's biggest UX edge: an org-less invitee with a pending owner_add gets ZERO signal.
addMember sends no email (join-request create/approve/reject all do — asymmetric).
- The auth payload
pendingRequests is join_request-scoped (correct, E16), so signin carries no hint.
- The org-required wall (
organizations.required.view.vue) never fetches mine/pending and has no link to My Organizations; the nav drawer is hidden without an org.
Mitigant: signup always provisions a workspace, so fresh invitees are normally NOT walled — the dead-end hits after leave/removal from the last org.
Fix set: (Node) invitee email in addMember via the mailer abstraction (graceful skip when unconfigured) + a new config/templates/org-member-added.html; (Vue) the wall view fetches + renders pending owner_adds with Accept (or at minimum links to My Organizations). Also fix the cap-reached signup message: signupErrorMessage should prefer the response description ("Registration is currently deactivated") over the generic message ("Signup error").
Refs: #3813, pierreb-devkit/Vue#4281, epic #3808.
Cross-PR review 2026-06-11 — the flagship 2-step flow's biggest UX edge: an org-less invitee with a pending owner_add gets ZERO signal.
addMembersends no email (join-request create/approve/reject all do — asymmetric).pendingRequestsis join_request-scoped (correct, E16), so signin carries no hint.organizations.required.view.vue) never fetchesmine/pendingand has no link to My Organizations; the nav drawer is hidden without an org.Mitigant: signup always provisions a workspace, so fresh invitees are normally NOT walled — the dead-end hits after leave/removal from the last org.
Fix set: (Node) invitee email in
addMembervia the mailer abstraction (graceful skip when unconfigured) + a newconfig/templates/org-member-added.html; (Vue) the wall view fetches + renders pending owner_adds with Accept (or at minimum links to My Organizations). Also fix the cap-reached signup message:signupErrorMessageshould prefer the responsedescription("Registration is currently deactivated") over the genericmessage("Signup error").Refs: #3813, pierreb-devkit/Vue#4281, epic #3808.