TS-side symmetric evaluation of limit rules for a single route. Thin
wrapper over search() + the shared pickWinningRule picker —
mirrors the SQL CTE precedence in ProductRouteService.search().
Returns the winning rule's limit values (or null if no rule matches).
The caller falls back to the route's vendor-baseline limits in that case.
Returns limit rules visible to this customer:
customerId IS NULL)type='ADMIN', customerId=input.customerId)type='CUSTOMER', customerId=input.customerId)Pass types: ["CUSTOMER"] from a controller to restrict to the customer's
own writable slice. Write paths always operate on the CUSTOMER slice
regardless of this filter.
Customer-tier CRUD over
product_limit_rule. Always operates on thetype='CUSTOMER'slice. Customer rules can only TIGHTEN against the matching admin baseline (max columns ≤ admin baseline; min columns ≥ admin baseline). Violations returnINVALID_LIMIT_RULEnaming the offending column.Identity / version split: see ProductLimitRuleAdminService.
Internal admins must use
ProductLimitRuleAdminServiceinstead.