--- title: "Promotion Stacking Correctness" canonical: "https://mumo.chat/p/promotion-stacking-correctness-zodyjn" machine_version: 1 models: ["GPT","Grok","Muse"] round_count: 3 published_at: "2026-07-11T17:07:23.156109+00:00" updated_at: "2026-07-11T17:15:38.47+00:00" brief_source: "session_takeaway" full: "https://mumo.chat/p/promotion-stacking-correctness-zodyjn.md" --- > Brief of a mumo multi-model deliberation — the session synthesis > without the transcript. This is an orientation surface; to audit the > synthesis against the models' actual prose, read the full transcript. > Full deliberation with evidence: https://mumo.chat/p/promotion-stacking-correctness-zodyjn.md # Promotion Stacking Correctness *A multi-model AI conversation on mumo* *July 11, 2026* **Panel:** GPT · Muse · Grok · 3 rounds --- ## Question Pressure-test a proposed fix to our promotion stacking engine - CORE checkout path $2.3M/week. Attack correctness. ## System: cart-pricer Go `promotions(code, type, priority INT, exclusive_group TEXT, exclusivity_scope ENUM('group','global','none'), stackable BOOL)` `cart_discounts`. Old code: `has_non_stackable bool` global flag. ## Bug SUMMER20 (20% off, exclusive_group='seasonal', exclusivity_scope='group', stackable=false, priority 10) and WELCOME10 ($10 off, group='lifecycle', scope='group', stackable=true, priority 20) - user expects both (different groups). Engine set global `has_non_stackable=true` after SUMMER20 and skipped WELCOME10. 114 tickets. Second trap: EMP50 (50% staff, group='employee', stackable=false, scope='global') - if we naively fix to group-scoped only, EMP50 would stack with seasonal, which must NOT happen. This is the missing concept. ## Proposed fix Replace global bool with: ``` nonStackableByGroup map[group]bool globalExclusiveApplied bool ``` Evaluation: 1. If `globalExclusiveApplied` -> skip any further promo (global blocks all). 2. If current `exclusivity_scope='global'` and any `applied>0` -> skip current (global cannot be added to existing… *(prompt truncated — full text in the full transcript)* ## Session Takeaway *(mumo-generated synthesis of the whole session — evidence lives in the full transcript)* **The session landed on a GO decision for a two-phase evaluator that enforces global dominance and authoritative checkout repricing, provided you treat multi-global winner rules as provisional defaults pending product review.** The moderator opened by pressure-testing a proposed fix for a promotion stacking bug that risked $2.3M/week in revenue. Feedback from the panel steered discussion toward enforcing deterministic sort orders and replacing global flags with a two-phase evaluation engine before closing on strict checkout invariants and fail-loud configuration policies. ### Arcs #### SHIFTED — Two-phase evaluation guarantees global dominance over group combinations. (Rounds 1, 2) The panel moved from debating priority-based sorting to adopting a two-phase mechanism where global promotions are evaluated first and win exclusively. This shift resolved the risk of high-value staff discounts being skipped by group logic, though it silently decides that globals beat any group sum—a policy choice marked as provisional. #### HELD — Authoritative checkout repricing replaces stale-price grace periods. (Rounds 1, 3) From the start, the panel rejected honoring cached cart totals to prevent fraud and accounting errors. The final invariant mandates that payment authorization matches only the exact amount and quote version most recently confirmed by the customer after a fresh engine evaluation. #### SHIFTED — Fail-loud configuration blocks runtime guessing on unknown group policies. (Rounds 2, 3) An early proposal to default unknown group behaviors to a safe singleton mode was challenged as a silent margin leak. The session converged on failing closed at activation, rejecting any promotion where the group policy is undefined to ensure no runtime improvisation occurs. --- ## Round Map - **Round 1:** The proposed fix is a solid start, but without a deterministic sort order and a safer migration plan, you risk trading one set of bugs for unpredictable pricing errors during your $2.3M sale. - **Round 2:** We are shipping a two-phase engine that enforces global dominance as a hard phase-one rule, adopts explicit configuration for seasonal and lifecycle group behaviors, and mandates authoritative, re-confirmed pricing at checkout to eliminate unapproved price guarantees. - **Round 3:** The team is GO for Friday with a two-phase evaluator, provided we enforce fail-loud configuration, authoritative re-evaluation at checkout, and treat our global-winner policies as temporary defaults rather than final requirements. --- **Full deliberation with evidence:** https://mumo.chat/p/promotion-stacking-correctness-zodyjn.md