RMA
The returns flow is almost entirely platform, not layer. This page says which half is which, and which MCP tool is the wrong answer.
What the baseline guarantees
Layer: feature-rma 1.0.0 (data only) + surface-swift 1.5.1 (the page) + the platform. Platform (OOTB, no layer ships it): DW10 Order Management ships the RMA state machine, 7 states — Waiting for product(s) from customer / Received / Rejected / Sent for repair / Received from repair / Returned to customer / Sent replacement. feature-rma seeds NO states; its layer.json records "Rejected" as a configRow purely to document the OOTB dependency. surface-swift: the page Customer center/Customer center/My returns (<site-root>/customer-center/my-returns). feature-rma: exactly ONE row — EcomRmas PACK-RMA-0001, RmaType 1 (Return), RmaStateId 1 (Waiting for product(s) from customer), buyer customer number 98745621. ** That seeded RMA is inert on this site. ** It binds buyer 98745621 (sample-data's IMCUser) and, in the full swift-demo edition, the delivered order FIXT-ORDER-RMA1 from sample-data/_sql/catalog.sql. Neither exists here. The My returns page renders its empty state with the "Add new request" affordance, which is feature-rma's own behaviour probe.
Which skill covers it
dw-commerce-orders (dynamo: true) — references/rma-and-claims.md. dw-demo-swift (dynamo: false) — references/rma-claims.md for renaming the platform's RMA machine into warranty/claims vocabulary.
Which MCP tools brand it
get_rma_states (read the 7 platform states) -> create_orders + complete_order (you need a delivered order to return against) -> the FRONTEND command ?CustomerCenterCmd=addrma -> set_rma_state -> close_rma Reads: get_all_rmas, get_rmas_by_order_id, get_rma_by_id. ** create_rma is the wrong tool for a demo return. ** It produces a backend-only stub: it writes no order-line relation, no comment, no customer number and sends no mail, so the resulting RMA is unreachable from the customer center for ever. The only surface that produces a complete claim is the storefront command (dw-commerce-orders/references/rma-and-claims.md:35, :41-44). Use create_rma only when a backend-visible row is all you need.
Verify
MCP: get_rma_states returns 7 rows including "Rejected". get_all_rmas returns exactly 1 row, RmaId PACK-RMA-0001. Storefront, authenticated: GET <site-root>/customer-center/my-returns contains "Add new request". Anonymous it must not. After creating a return: assert it appears in the CUSTOMER CENTER list, not merely in get_all_rmas. The customer-center list is a three-table inner join, so a stub row satisfies the MCP read and renders nowhere.