- Shipped
- October 18, 2026 at 7:19 PM UTC
- Author
- Kamo
- Commit
- 042d239
BillingService's LicenseService.assign refuses anyone who is not already a licensee of the subscription, so the relay's seat assign alone could not seat a new member. POST **************** now relays that one step under the seat-write gate (owner or MANAGE_ORG_BILLING): it always sets isLicensee, and reads the member's current row first so a subscription manager stays one (BillingService's add rewrites both flags); nobody is ever made a manager here. GET **************** and /storage/(summary|history): the organization's metered usage. BillingService answers them from X-Org-Id alone, so this door asks the owner or VIEW_ORG_BILLING / MANAGE_ORG_BILLING. Cost modes and the platform storage views stay unrelayed.
