FIELD NOTES · ACCEPTANCE EXERCISES

Downloadable does not always mean no shipping

A physical product with a downloadable manual is different from a download-only product. Commission an explicit virtual/downloadable matrix before removing shipping from checkout. Otherwise a supplier may fix the digital product and accidentally stop collecting delivery details for a physical bundle.

Who should use this acceptance brief

Businesses selling digital files, services and physical bundles. Use this as a scoped website handover task. Where real system evidence is required, teaching examples are not a substitute.

Source-bound platform fact

WooCommerce distinguishes Virtual from Downloadable: virtual products do not trigger shipping calculation, while a downloadable item can still require shipping unless also marked virtual. WooCommerce: virtual and downloadable · Checked 16 October 2026.

Filled teaching example

Synthetic example, not a client case. Finite inputs, expected decisions and counterexamples follow; no live integration is claimed.

On narrow screens, scroll to read the complete table.

Input / caseCheck basisExpected decision
virtual=true, downloadable=truefile onlyno shipping
virtual=false, downloadable=truephysical + manualshipping required
virtual=true, downloadable=falseserviceno shipping; no file

Run the acceptance exercise

  1. Classify each representative product by physical fulfilment and digital entitlement independently.
  2. Use an authorised sandbox to test each flag combination and a mixed cart.
  3. Confirm the final address, shipping and download screens rather than relying on admin labels.

Interpret the result and retain evidence

The checker returns the proposed shipping and file requirements for one item. A mixed cart still needs shipping when it contains a physical line, even if another line is virtual. Ask the developer to return those two cases separately and to verify actual order completion and download permissions in the store.

Limits before implementation

Not tax classification, a shipping-rate calculator or entitlement enforcement. Plugin, gateway and store settings require current-version testing.

Replay the finite example

Save both files in one folder and run with Node22.13 or newer. The example sends no network requests and changes no account or site. Filled inputs and expected outputs · Inspectable functions

node decision-check.mjs woocommerce-download-shipping-flags.json