Serve the app catalog and read features through it

FeatureSecurityService
Shipped
August 8, 2026 at 8:59 PM UTC
Author
Kamo
Commit
359a9a1

FeatureController derived "is this app offered" from the enum's stage in four separate places, so the answer could only be changed by redeploying the platform. Every one of them now reads AppCatalogService, along with the display name, description and deprecation. The one behavioural subtlety is the root-org gate. It used to read "stage is not COMPLETED, so child orgs may not enable this" — the dogfooding path. It now reads "the platform does not currently offer this". While no override exists those are the same sentence, because unset availability resolves to stage == COMPLETED. Once an operator publishes an app that is still in TESTING, only the new form does the right thing: without it the app would stay silently blocked for every child org. PlatformAppCatalogController is gated to top-level-org owners, the same audience as the neighbouring platform tabs, and reports whether an available app is actually in the plan matrix — an app no plan mentions resolves through the fail-open setting rather than through anything the operator chose.

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