The invitations module ships a referral reward path (billing.referral) and an account Referrals view, but invitationAbilities only grants manage all to platform admins — regular authenticated users have no ability on Invitation, so the account view is unreachable for them. The groundwork is done: list() is invitedBy-scoped for non-admins and the self-referral guard shipped (#3833).
Scope:
- Widen
invitationAbilities: authenticated users can create Invitation and read their own (invitedBy-scoped); admin keeps manage all. Optional config flag so deployments can keep admin-only.
- Analytics: emit a redemption event (e.g.
invitation_redeemed) + carry invite/referral properties on the signup event (funnel currently unmeasurable).
- Notify the referrer when an invitation is accepted and a referral reward lands (currently silent ledger credit).
- Index
users.referredBy.
Downstream consumers with billing.referral.enabled pick this up via update-stack.
Created via /dev:issue
The invitations module ships a referral reward path (
billing.referral) and an account Referrals view, butinvitationAbilitiesonly grantsmanage allto platform admins — regular authenticated users have no ability onInvitation, so the account view is unreachable for them. The groundwork is done:list()is invitedBy-scoped for non-admins and the self-referral guard shipped (#3833).Scope:
invitationAbilities: authenticated users cancreateInvitation andreadtheir own (invitedBy-scoped); admin keepsmanage all. Optional config flag so deployments can keep admin-only.invitation_redeemed) + carry invite/referral properties on the signup event (funnel currently unmeasurable).users.referredBy.Downstream consumers with
billing.referral.enabledpick this up via update-stack.Created via /dev:issue