Files
vmall/openspec/changes/archive/2026-09-23-add-aftersale-refunds/proposal.md
T

1.7 KiB

Why

The order lifecycle currently stops after confirmation of delivery. Without a per-line after-sale and refund path, a paid order has no marketplace-safe recovery when goods or fulfillment fail. This is a baseline commerce gap, not an optional enhancement.

What Changes

  • Add customer-owned refund-only and return-refund applications for paid or shipped order items, with localized reasons, integer minor-unit amounts, and evidence URLs.
  • Add guarded merchant decisions, buyer return tracking, bilateral messages, one-time rejected appeals, and optional platform arbitration.
  • Credit completed refunds to customer_accounts through the existing append-only ledger and aggregate refunded order totals without a real payment gateway.
  • Expose the flow in Mall, shop-admin, and platform-admin while preserving a deterministic Mall mock adapter and LIVE_PICKS wiring.

Capabilities

New Capabilities

  • aftersale: Per-order-item applications, state transitions, messages, arbitration, and ledger-backed refund completion.

Modified Capabilities

  • order: After-sale eligibility windows, per-line refundable amounts, and authoritative refund totals.
  • frontend-mall: Customer after-sale application, tracking, messages, and history surfaces.
  • frontend-shop-admin: Shop-scoped after-sale processing workspace.
  • frontend-admin: Platform read-only monitoring and dispute arbitration.

Non-goals

Real payment-channel refunds, exchanges, reshipments, shipping insurance, and IM negotiation are excluded; messages replace live negotiation.

Impact

Adds one after-sale migration, shared API contracts, Rust module and integration coverage, customer and console pages, fixed-adapter parity, and account-ledger/order-total integration.