Taking card payments is an optional module, but the Store's node types named one directly. A deployment that did not mount it could not compile them at all — CS0234: the type or namespace name 'Payments' does not exist in the namespace 'MeshWeaver' — and pages with nothing to do with money rendered blank.

The platform now ships IPaymentProvider in MeshWeaver.Mesh.Contract: a provider-neutral contract for opening a hosted checkout, cancelling a subscription at the end of its paid period, verifying and reading a webhook delivery, and asking whether the processor can actually reach this portal. A payment module supplies an implementation; a portal that mounts none simply resolves nothing.

The absence is a state, not a null to guard. hub.PaymentProvider() returns null on a portal that does not sell, and every commerce surface answers that case explicitly — a refusal with a sentence in the viewer's language, a payment-path report that says out of scope rather than healthy or broken. No reflection probe for an assembly, no try/catch around a payment type.

The reasoning, and the shape a second provider implements, is in The Payment Provider Contract.

Reconnecting…
The connection to the server was interrupted. Trying to restore it…
Trying again…
The connection could not be restored. Reloading the page…
The server was updated. Reloading the page to pick up the latest version.