- Ya
- 8 Agosti 2026, 16:47 UTC
- Mwandishi
- Kamo
- Ahadi ya
- 620a257
A MORTGAGE market appeared on /commerce whenever POS was on, regardless of the MLOS app, and /features/enable had no billing check at all — the padlock in the settings UI was presentation only, so a direct POST switched on an unentitled app. - FeatureController: 403 on enable when the plan does not include the app; serialize an 'entitled' verdict on both features[] and available[] so the UI padlock and the 403 are computed by the same service and cannot disagree. - CommerceMarketController: GET /allowed-types for the market-type picker (model allow-list intersected with entitlement); the market list drops unentitled verticals — hidden, never archived, so restoring the plan brings the market back with its data intact. - **************** fail-closed guard over every /{marketId}/... sub-route. AppAvailabilityInterceptor cannot express this — its prefix map is one prefix to one ServiceType and /commerce-markets serves all seven verticals under POS. - POSController: public callers of the subscription catalog no longer see rows bound to an app that has not reached COMPLETED, so moving a ServiceType to COMPLETED is what publishes it to the marketing site. Internal callers still see everything in order to price it beforehand. - MortgageVerticalResolver: readiness measured POS only, so an org that never bought MLOS still read as ready; it now reports MLOS in 'missing' too.