Skip to main content
Shipping status and physical inventory posting are separate operations. Creating an order under reject_if_insufficient reserves stock. Shipping confirms its holds; it does not by itself consume physical on-hand stock. Version 1.39 adds commerce.inventory.fulfillOrderStock(orderId) for a fully shipped/delivered order.

Verify full shipment and retry

Use a fresh project with @stateset/embedded@1.39.0. Save as stock-fulfillment.mjs:
The transaction checks reservation transitions, exact balances, inventory ledger rows and outbox facts before commit. Already fulfilled holds do not post again. This checks local stock accounting; it does not prove a carrier took custody or an external WMS completed work.

Choose a partial-shipment contract deliberately

The full-order helper is not a substitute for a line-owned partial shipment. Governed reserved shipping has its own typed line/quantity and receipt contract. Preserve the order-line and reservation identities, exact quantities, and original key; inspect actual remaining holds. Do not release confirmed holds and decrement stock manually to imitate an atomic shipment. The apply-gated MCP tool is fulfill_order_stock. Its availability depends on profile, strict governed-command coverage and host policy. Check discovery instead of assuming every native accessor is exposed by a strict endpoint. For standalone Warehouse WMS, physical inventory belongs to that WMS. Do not maintain an independent embedded stock authority for the same operations without an explicit integration and reconciliation contract. See OMS/WMS/TMS.
Last modified on October 20, 2026