Kestrel Fastening Systems KESTREL FASTENING SYSTEMS

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.