feat(api): structured readiness checks #15

Merged
KofTwentyTwo merged 1 commits from feature/readiness-checks into develop 2026-10-14 15:16:04 +00:00
KofTwentyTwo commented 2026-10-14 15:12:40 +00:00 (Migrated from github.com)

API gap found while moving qbit-marketing to the public API: EmailApi.readiness() returned only a boolean and text, but marketing must tell a missing unsubscribe key or base URL (NOT_CONFIGURED) from a missing provider (REJECTED at send) to keep its status mapping.

  • New EmailApiReadinessCheck enum (NOT_INSTALLED, PROVIDER_MISSING, PROVIDER_INVALID, PHI_PROVIDER, PUBLIC_BASE_URL, UNSUBSCRIBE_KEY, BRAND_POSTAL_ADDRESS, BODY_KEY).
  • EmailApiReadiness gains failedChecks() and failed(check). The record gains a component; the api package has not shipped in any RC yet (RC.1 predates it), so nobody is broken.
  • Tests assert the checks next to the existing reasons.

Please include it in 0.1.0-RC.2.

🤖 Generated with Claude Code

API gap found while moving qbit-marketing to the public API: `EmailApi.readiness()` returned only a boolean and text, but marketing must tell a missing unsubscribe key or base URL (NOT_CONFIGURED) from a missing provider (REJECTED at send) to keep its status mapping. - New `EmailApiReadinessCheck` enum (NOT_INSTALLED, PROVIDER_MISSING, PROVIDER_INVALID, PHI_PROVIDER, PUBLIC_BASE_URL, UNSUBSCRIBE_KEY, BRAND_POSTAL_ADDRESS, BODY_KEY). - `EmailApiReadiness` gains `failedChecks()` and `failed(check)`. The record gains a component; the api package has not shipped in any RC yet (RC.1 predates it), so nobody is broken. - Tests assert the checks next to the existing reasons. Please include it in 0.1.0-RC.2. 🤖 Generated with [Claude Code](https://claude.com/claude-code)
Sign in to join this conversation.