RECEIPT / 004
Promotion conflicts get a plan first.
Eligible automatic promotions resolve into a deterministic plan before live cart mutation begins.
Why it matters
If coupons are applied while conflicts are still being discovered, traversal order can become business logic. A separate resolution plan makes ties, exclusivity and failure behavior explicit.
Implementation
- Higher explicit priority wins; deterministic ties use stable coupon identity.
- Stack, exclusive, conflict-group and Best Deal modes are represented explicitly.
- Native WooCommerce individual-use constraints remain hard constraints and protected manual coupons are not evicted.
- Best Deal chooses within explicit bounded groups rather than searching unbounded coupon subsets.
- The resolver produces a minimal removal/application plan before the first live cart mutation.
Evidence
- Best Deal scoring uses WooCommerce cart totals behavior on an isolated cart clone rather than custom discount arithmetic.
- Representative fixed-cart, percentage and fixed-product discount cases are covered against native WooCommerce behavior.
- The runtime keeps automatic ownership separate from coupon application mode so conflict resolution cannot silently claim manual state.
Known boundary
Free-shipping monetary value is not yet scored inside Best Deal groups, and WC_Cart_Totals compatibility remains a tracked release risk. Those limits are intentionally not hidden by this receipt.