feat(email): QbitEmailTransport for MARKETING sends through qbit-email #11

Merged
KofTwentyTwo merged 2 commits from feature/email-qbit into develop 2026-10-14 13:10:59 +00:00
KofTwentyTwo commented 2026-10-14 04:13:14 +00:00 (Migrated from github.com)

Phase (d) of the qbit-email design (QRun-IO/qbit-email docs/DESIGN.md section 11).

Adds QbitEmailTransport (MARKETING, one message per recipient, ad-hoc Markdown from the campaign content, idempotency marketing:::, linked execution). qbit-email adds the RFC 8058 unsubscribe link and enforces suppression; SUPPRESSED recipients are skipped and counted, REFUSED becomes REJECTED with reasons, exceptions are AMBIGUOUS with lookup() reconciliation. Chosen automatically for qqq_email when qbit-email is produced and no host transport is registered; QqqMessagingEmailTransport stays the fallback. getStatus() reports NOT_CONFIGURED without the unsubscribe key or public base URL. Also bumps the QQQ BOM to 4.1.0-RC.5 (qbit-email needs it), which renames one kernel-hook test. 48 tests (4 new).

qbit-email is an <optional> dependency at 0.1.0-RC.1 (property qbit-email.version); every qbit-email reference is in one adapter class behind a Class.forName + EmailRuntime.config(qInstance) guard. Uses qbit-email 0.1.0-RC.1 from Maven Central; ./mvnw verify is green against it.

🤖 Generated with Claude Code

Phase (d) of the qbit-email design (QRun-IO/qbit-email docs/DESIGN.md section 11). Adds QbitEmailTransport (MARKETING, one message per recipient, ad-hoc Markdown from the campaign content, idempotency marketing:<content>:<approval>:<recipient key>, linked execution). qbit-email adds the RFC 8058 unsubscribe link and enforces suppression; SUPPRESSED recipients are skipped and counted, REFUSED becomes REJECTED with reasons, exceptions are AMBIGUOUS with lookup() reconciliation. Chosen automatically for qqq_email when qbit-email is produced and no host transport is registered; QqqMessagingEmailTransport stays the fallback. getStatus() reports NOT_CONFIGURED without the unsubscribe key or public base URL. Also bumps the QQQ BOM to 4.1.0-RC.5 (qbit-email needs it), which renames one kernel-hook test. 48 tests (4 new). qbit-email is an `<optional>` dependency at `0.1.0-RC.1` (property `qbit-email.version`); every qbit-email reference is in one adapter class behind a `Class.forName` + `EmailRuntime.config(qInstance)` guard. Uses `qbit-email` **0.1.0-RC.1** from Maven Central; `./mvnw verify` is green against it. 🤖 Generated with [Claude Code](https://claude.com/claude-code)
Sign in to join this conversation.