Use a qbit-email API, not its internals (architecture G1) #13

Closed
opened 2026-10-14 13:17:51 +00:00 by KofTwentyTwo · 0 comments
KofTwentyTwo commented 2026-10-14 13:17:51 +00:00 (Migrated from github.com)

The qbit-email integration (#11) added com.kingsrook.qbits:qbit-email as an optional dependency. email/QbitEmailTransport and MarketingRuntime import its internals:

  • EmailRuntime and EmailQBitConfig;
  • outbox.EmailService, EmailRequest, EmailSendResult and EmailCategory;
  • metadata.EmailTables;
  • support.SystemWrites.

This is the same coupling that architecture review QRun-IO/qqq#1150 flagged in F4 (easypost to alerts) and F5 (marketing to assistant). The enforced guardrails (qbit-build-parent 2.1.0, G1) reject it.

Fix:

  • qbit-email publishes a small API, either a com.kingsrook.qbits.email.api package or a qbit-email-api artifact, holding at least the send request and result, the category, and an "is the outbox available" probe. Alternatively, it registers as a core QQQ messaging provider, so marketing calls core and needs no qbit-email type at all.
  • Marketing then depends only on that API.

Until then: qbit-marketing#12 allow-lists qbit-email and its packages explicitly in qbit.guardrails.allowedQbitArtifacts/allowedApiPackages, pointing at this issue. The exception is visible and tracked.

The qbit-email integration (#11) added `com.kingsrook.qbits:qbit-email` as an optional dependency. `email/QbitEmailTransport` and `MarketingRuntime` import its internals: - `EmailRuntime` and `EmailQBitConfig`; - `outbox.EmailService`, `EmailRequest`, `EmailSendResult` and `EmailCategory`; - `metadata.EmailTables`; - `support.SystemWrites`. This is the same coupling that architecture review QRun-IO/qqq#1150 flagged in F4 (easypost to alerts) and F5 (marketing to assistant). The enforced guardrails (qbit-build-parent 2.1.0, G1) reject it. **Fix:** - qbit-email publishes a small API, either a `com.kingsrook.qbits.email.api` package or a `qbit-email-api` artifact, holding at least the send request and result, the category, and an "is the outbox available" probe. Alternatively, it registers as a core QQQ messaging provider, so marketing calls core and needs no qbit-email type at all. - Marketing then depends only on that API. **Until then:** qbit-marketing#12 allow-lists `qbit-email` and its packages explicitly in `qbit.guardrails.allowedQbitArtifacts`/`allowedApiPackages`, pointing at this issue. The exception is visible and tracked.
Sign in to join this conversation.
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: QRun-IO/qbit-marketing#13