# Let Services Decide And Providers Deliver

Keeps the decision to send a message in the service and the delivery detail in the provider.

Follow these project instructions.
# Let Services Decide And Providers Deliver

Keeps the decision to send a message in the service and the delivery detail in the provider.

Version: `1.0.0`

The service decides whether to send, to whom, and what it says. The provider decides how it goes out. Keep the seam there and a provider becomes a swap rather than a rewrite.

The seam breaks quietly. A provider-specific payload built in a service, a template chosen by a provider field, a retry rule living in whichever layer first needed it - each is a reason the second provider will not fit, and you only find out when you add it.

Use the templating abstraction for content rather than assembling a provider's payload shape in a service. Content belongs to the message, not to the transport carrying it.

Provider credentials and endpoints live in that provider's own configuration section, validated at startup. A service should not be able to name the provider it is using, and should not need to.

#### Constraints
- Do not put a decision about whether to send inside a provider.
- Never build a provider-specific payload shape in a service.
- Never read provider credentials outside that provider’s configuration section.

#### Verification
- No service names a delivery provider or its payload shape
- Provider settings are validated at startup, in that provider’s own section
- Swapping the provider changes registration and configuration only
