# Keep A Default Sink Behind Every Error Path

Keeps an application starting without custom sinks, and replaces them deliberately when it has them.

Follow these project instructions.
# Keep A Default Sink Behind Every Error Path

Keeps an application starting without custom sinks, and replaces them deliberately when it has them.

Version: `1.0.0`

The framework registers do-nothing sinks for errors, logs and audit so that a host providing none still starts. That is a safety net, not a configuration: an application running on the defaults is discarding everything it records.

Register real sinks in every environment you would investigate an incident in, and replace the default registration rather than adding a second one alongside it. Two registrations for one contract is a coin toss over which the container resolves, and the one that wins is the one nobody notices.

After wiring, prove it. Raise a deliberate error in the deployed environment and read it back out of the store. Registration code that compiles is not evidence that anything was written.

Registration order matters as much as the registration: the framework's defaults only apply where nothing has been registered, so a package that registers its own sink later can quietly displace yours.

#### Constraints
- Do not register a second sink alongside the default - replace it.
- Never ship an environment you would investigate on no-op sinks.

#### Verification
- A deliberate error was raised and then read back from the store
- Every investigated environment resolves a real sink, not the default
- Only one implementation is registered per sink contract
