Skip to content

✨ owner_add lifecycle: invitee decline, owner cancel, pending visibility, last-owner scope, user-delete cleanup #3831

Description

@PierreBrisorgueil

Cross-PR review 2026-06-11 (epic #3808 P5a follow-up). A pending owner_add is currently a write-only row:

  • The owner sees NOTHING after addMember (members list is ACTIVE-only) and has no cancel affordance; re-add 422s.
  • The invitee can accept but NOT decline (no endpoint, no button) — yet createJoinRequest's error copy says "Please accept or decline it".
  • The row never expires (no TTL/sweep).
  • remove()'s last-owner protection counts the PENDING row's role → an API-created pending owner-role row in a 1-owner org cannot be cancelled at all (scope the check to ACTIVE rows being removed).
  • users.service remove() cleans ACTIVE memberships only → user deletion orphans PENDING rows (join_request orphans pollute the approval list; owner_adds orphan silently).

Fix set: invitee DELETE (decline) on own pending owner_add with the same consent gate; owner cancel path (and/or show pending owner_adds in the members list with a status chip + cancel — Vue counterpart below); scope last-owner protection to ACTIVE; deleteMany({userId, status:'pending'}) on user delete; fix the join-request error copy.
Vue counterpart (same topic): pending rows in the members table + a Decline button on the My-Organizations pending list.
Refs: #3813, pierreb-devkit/Vue#4281, epic #3808.

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions