feat: add production capability foundations
This commit is contained in:
@@ -12,10 +12,28 @@ Package root: `dev.caskeleton.adapter.outbound.notification`.
|
||||
|
||||
## Responsibility
|
||||
|
||||
- Implement notification provider routing and provider-specific Slack/email clients behind ports.
|
||||
- Own provider settings, technical fallback, and provider adaptation.
|
||||
- Preserve the current raw notification router/provider seams only as the `R0 legacy` compatibility
|
||||
baseline until the reviewed canonical cutover removes them.
|
||||
- Implement future provider protocols behind application-owned ports without leaking SDK, transport,
|
||||
bootstrap, or persistence types.
|
||||
- Own provider settings, technical fallback mechanics, and provider adaptation; application policy
|
||||
owns mode, eligibility, retry/fallback decisions and business failure semantics.
|
||||
- Reuse `adapter:outbound:support` for shared outbound concerns.
|
||||
|
||||
## Current R0 freeze
|
||||
|
||||
- `RoutingNotifier` performs route-list fan-out over `(Channel, providerId)`.
|
||||
- `FailOpenNotificationProvider` applies one global fail-open rule.
|
||||
- `google-email`/`GoogleEmailClient` and `slack-webhook`/`SlackClient` are fake-only extension seams,
|
||||
not production integrations or qualified provider cards.
|
||||
- Checked-in provider selector keys drift from the router's `routes` + provider `enabled` grammar.
|
||||
Preserve and document that drift until the canonical graph replaces it; do not silently reinterpret
|
||||
the old keys.
|
||||
- There are no feature/application production consumers and no real-provider, durable, receipt,
|
||||
security, load, or rotation evidence.
|
||||
- The exact legacy deletion inventory lives in [README.md](README.md). Do not add behavior to those
|
||||
classes while building their canonical replacements.
|
||||
|
||||
## Boundaries
|
||||
|
||||
- Allowed dependency edges come only from the module's
|
||||
|
||||
Reference in New Issue
Block a user