commerce: stacking precedence + best-price selection + backward query (16 tests) — Phase 2 done
Some checks are pending
Test, Build, and Deploy / test-build-deploy (push) Waiting to run
Some checks are pending
Test, Build, and Deploy / test-build-deploy (push) Waiting to run
stack.sx — precedence as a separate selection layer, not in the rules. Exclusivity = unordered code pairs; valid-stackings enumerates every legal subset of applicable promos; best-stacking deterministically picks max total discount (stable on ties); stacking-by-totalo answers "which legal stacking yields total D?" backward. Member vs guest falls out of applicable-promos. Completes Phase 2. Total 99/99 across 6 suites. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
This commit is contained in:
@@ -21,7 +21,7 @@ reconciliation — all auditable via the event log.
|
||||
|
||||
## Status (rolling)
|
||||
|
||||
`bash lib/commerce/conformance.sh` → **83/83** (5 suites: catalog, cart, price, api, promo) — Phase 1 done, Phase 2 in progress
|
||||
`bash lib/commerce/conformance.sh` → **99/99** (6 suites: catalog, cart, price, api, promo, stack) — Phases 1-2 done
|
||||
|
||||
## Ground rules
|
||||
|
||||
@@ -62,8 +62,8 @@ lib/commerce/api.sx ── (commerce/add) (commerce/total) (commerce/checkout)
|
||||
|
||||
## Phase 2 — Promotions (relational)
|
||||
- [x] promo rules: percentage, fixed, bundle, member rate
|
||||
- [ ] explicit stacking precedence; "best price" backward query
|
||||
- [ ] tests: stacking order, mutually-exclusive promos, member vs guest
|
||||
- [x] explicit stacking precedence; "best price" backward query
|
||||
- [x] tests: stacking order, mutually-exclusive promos, member vs guest
|
||||
|
||||
## Phase 3 — Order lifecycle (flow + store)
|
||||
- [ ] order flow: reserve stock → await payment → fulfil
|
||||
@@ -76,6 +76,14 @@ lib/commerce/api.sx ── (commerce/add) (commerce/total) (commerce/checkout)
|
||||
- [ ] tests: webhook replay, partial refund, double-charge guard
|
||||
|
||||
## Progress log
|
||||
- 2026-06-07 — `stack.sx` (**Phase 2 complete**): stacking precedence as a
|
||||
separate selection layer (precedence NOT in the rules, per the miniKanren
|
||||
design rule). Exclusivity = unordered code pairs; `valid-stackings` enumerates
|
||||
every legal subset of applicable promos (powerset ∖ excluded combos);
|
||||
`best-stacking` is the deterministic max-total-discount selection (stable on
|
||||
ties). `stacking-by-totalo` is the best-price backward query ("which legal
|
||||
stacking yields total D?"). Member vs guest falls out of applicable-promos.
|
||||
stack suite 16/16; total 99/99.
|
||||
- 2026-06-07 — `promo.sx` (Phase 2 piece 1): four promo types as tagged tuples
|
||||
`(:percent code class bps)`/`(:fixed code threshold amount)`/`(:bundle code sku
|
||||
n)`/`(:member code class bps)`. Per-promo discount is pure integer arithmetic;
|
||||
|
||||
Reference in New Issue
Block a user