Stop iterating ServiceType.values() against the resolved catalog

FixSecurityService
Shipped
August 9, 2026 at 1:46 AM UTC
Author
Kamo
Commit
698ae2c

resolveAll() omits the deprecated aliases that share an id with a live app (DOC_MANAGER/DOCS, AI_CHAT/AI_SUPPORT), because those have no catalog row of their own. Every consumer here looped over ServiceType.values() and dereferenced catalog.get(st), so those two constants returned null — an NPE on the account Apps page, the /available endpoint, the platform catalog tab, and org auto-provisioning. They iterate the resolved map instead, which cannot produce a key the map has no entry for. serializeFeatures additionally tolerates a null entry rather than throwing, and now does one lookup instead of five.

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