A nearby shop may lack one item while a farther warehouse can ship the entire basket. Define the commercial priority before asking a supplier to “fix the nearest warehouse”. A reproducible routing brief lists the surviving candidates after each rule.
Source-bound fact
Shopify’s documented default prioritises fewer splits, then destination market, then closest location; distance is straight-line. Official reference · Checked 17 October 2026.
Filled synthetic acceptance example
Synthetic teaching example, not a client case or a real-store assessment. On narrow screens, scroll to read the complete table.
| Input | Check basis | Expected |
|---|---|---|
| Anear:1/2SKUs; Bfar:2/2SKUs; same market | minimise split first | B survives full-basket test |
| B and C both complete; Bsame market | market before distance | B preferred in stated model |
| Equal address; different creation times | specific platform tie rule | verify actual location metadata |
Supplier acceptance procedure
- Record at least two active locations, basket requirements, availability, market and configured rule order.
- Give the supplier the near-but-incomplete negative case and compare candidates after every rule.
- Keep address-validation failures separate from stock/routing results; retain the observed location ID and uncertainty.
Interpret the output
The model can choose the farther complete location without contradicting the stated fewer-splits priority. That is not proof of Shopify’s internal optimiser, travel time or guaranteed tie behaviour. Use the counterexample to agree intent, then obtain an authorised real routing trace.
Explicit limits
Finite teaching ranking only, not an allocation engine. Custom metafields, multi-shipment optimisation, unavailable stock and geocoding require separate testing.
Replay the finite teaching model
Save both files in one folder. With Node22 or newer, run the command below. JSON contains explicit inputs and expected results. The script processes synthetic data only, with no network, credentials, payment or API calls. Passing proves the finite model only, not a live integration.
Filled inputs and expectations · Inspectable teaching script
node check.mjs fulfilment-routing-priority-evidence.json