Auto-assign first seat, Free as floor, broader org invalidation

FixSecurityService
Shipped
April 28, 2026 at 3:34 AM UTC
Author
Kamo
Commit
1d0c131

BillingSetupService now activates the first open license slot for the creator when seeding a sub-org subscription (and same for promote-to-billing-owner) — otherwise a fresh sub-org owner only sees the Free baseline despite being a licensee on the seeded plan. EntitlementService: - Free-plan baseline applied via mergePlanFeatures (not the union variant) so a feature included on Free is granted even if a paid licensee plan happens to mark it not-included. Plans should be monotonic; this is a safety net. - resolveTopLevelOrgId fallback now uses findFirstByIsTopLevelTrue instead of scanning every org. - invalidateOrg walks Member.findByOrganizationId so members without a SubscriptionMember row (legacy sub-orgs, top-level org members) are not skipped. - Drop unused mergePlanFeaturesUnion helper. AccountController: drop the stale "masterAccountHolder fallback" doc and re-word the promote-billing-owner comment to match the new model (the BillingGroup concept is gone).

All changes

Like what you see shipping?

Every one of these updates lands in your workspace automatically. Start free and watch it grow week after week.

Start Free ForeverView Pricing