Files
clean-architecture-backend-…/src/adapter/outbound/notification/CLAUDE.md
T

2.3 KiB

adapter:outbound:notification — notification adapter

Registered identity

  • Module ID: adapter-outbound-notification
  • Gradle path: :adapter:outbound:notification
  • Focused test (derived from Gradle path): ./gradlew :adapter:outbound:notification:test --console=plain
  • Runtime baseline: Java 21; repository framework baseline: Spring Boot 4.0.0.
  • Registry SSOT: src/config/architecture/modules.json.

Package root: dev.caskeleton.adapter.outbound.notification.

Responsibility

  • 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. Do not add behavior to those classes while building their canonical replacements.

Boundaries

  • Allowed dependency edges come only from the module's src/config/architecture/modules.json entry.
  • No inbound DTO/controller, persistence, bootstrap, or sample dependency.
  • Provider selection may route configured channels but must not encode business eligibility rules.

Tests

Use provider/client fakes and contract tests; no real webhook or email network calls. Settings changes include binding/validation tests.