- Shipped
- August 24, 2026 at 10:55 PM UTC
- Author
- Kamo
- Commit
- e04180a
FeatureController now sends parent/children/isParent on every serialized app so the client can render children nested under their parent. Served rather than mirrored in TypeScript on purpose: the ServiceType mirrors have drifted from Java twice already and a second copy of the tree would be one more thing to drift. No new response shape was needed for the cascade — /enable and /disable already re-serialize the whole feature list, so knock-on changes arrive without the client reconciling anything. Both auto-provision loops now skip a child whose parent the platform does not offer, since enableFeature cascades the parent on and would otherwise switch on a parent nobody published. OrganizationController's loop had NO PHI check while FeatureController's equivalent did, on a public unauthenticated endpoint. For a PHI tenant the first blocked module threw, the surrounding catch logged a warning, and effectiveFeatures silently fell back to raw rows with no applied-model projection. It now asks rather than catches, exactly as the features listing does. /api/security/ehr registered. The commerce prefixes stay mapped to POS: the parent is the right coarse gate and **************** already refines per market. 938 tests green.