Good news first: if checkout blocks, your enforcement is working. What is missing is the earlier warning, which is a display problem rather than a protection one.
1. The cart-page setting is off
Each rule decides separately whether its message appears on the cart page. Turn on Show message in cart page on the rule.
2. The app embed is not active
The cart-page message is delivered by the theme extension. Without the embed it cannot appear — while checkout carries on blocking, which is exactly the combination that reads like a bug.
3. Your theme does not use the cart template
Set a Drawer Watch Selector pointing at your drawer. If the message renders in the wrong place, Error Container Selector controls where.
4. Cart limits behave differently here
Cart quantity and cart amount limits are handled specially on the cart page so that enforcing them does not stop customers changing quantities. If cart limits feel less immediate there than product limits, that is why — and checkout enforcement is identical either way.
Verify the fix
- Break the rule → message appears on the cart page.
- Same in the drawer.
- Fix the cart → message clears.
- Checkout still blocks a bad cart.