feat: add production capability foundations

This commit is contained in:
donghyeon-ka
2026-07-31 23:50:44 +09:00
parent b3add0162d
commit 567422f2e5
757 changed files with 132385 additions and 2146 deletions
+20 -2
View File
@@ -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