Implement/review one-transaction checkout() batching (feed → commit → buyRelics → applyRelics → monthly action) with deterministic validation, canonical ordering, and exact payment reconciliation (refund extra).
checkout(CheckoutParams) in contracts or the UI that builds the cart.msg.value >= totalCost, refund extra.payFeedCost(dayId) if includeFeedcommitDaily(dayId, commitHash) if presentbuyRelics(scope=id/dayId/monthId, batch)applyRelics(scope, batch)setMonthlyBet/adjustincludeMonthlyActiondayId always; validate monthId iff monthly action is included.totalCost = feedCost (optional) + sum(relicCosts + fees).msg.value >= totalCost.msg.value - totalCost to sender (safe pattern).Standardize revert selectors/messages:
INVALID_PHASE, INVALID_DAY, INVALID_MONTHINSUFFICIENT_PAYMENT, INSUFFICIENT_STOCK, INSUFFICIENT_SLOTSINVALID_ARRAY_LENGTH, INVALID_TARGET, MONTHLY_RATE_LIMIT