feat(health): register email provider and readiness checks with core central health #16

Merged
KofTwentyTwo merged 4 commits from feature/health-checks into develop 2026-10-15 02:27:01 +00:00
KofTwentyTwo commented 2026-10-14 18:40:34 +00:00 (Migrated from github.com)

Summary

Registers email provider and readiness checks with the core health registry.

This is the qbit side of QQQ central health monitoring (spec docs/specs/HEALTH.md, QRun-IO/qqq#1199; kernel QRun-IO/qqq#1207).

Checks registered

  • email.provider.<id>: DEPENDENCY/EMAIL, 300s, one per active provider. It uses the passive health state from real sends (UNHEALTHY is DOWN). The transport SPI has no non-sending connectivity method, so the check does no network I/O. The last failure message is never copied, because it can contain recipients.
  • email.readiness: DEPENDENCY/EMAIL, 300s. Runs EmailApi.readiness for each category; not ready is DEGRADED, with the failed check names as details.

Removed or changed: the home's standalone provider-health list, replaced by a generic status widget that reads central health. Passive health and the email.provider.unhealthy alerts are kept.

Secrets, credentials, recipients, prompts and PHI never go into details. A sentinel test covers every check's failure paths.

QQQ 4.1.0-RC.8

This PR pins QQQ 4.1.0-RC.8, which ships the central health kernel (QRun-IO/qqq#1207), and merges in develop (help bundles, foreign keys). The merge conflicts are resolved so that both sides are kept.

Tests

297 tests pass. Coverage is 95.4% of instructions and 100% of classes.
Local build: ./mvnw -o verify against RC.8.

Codex implemented this from the spec. I reviewed it.

🤖 Generated with Claude Code

## Summary Registers email provider and readiness checks with the core health registry. This is the qbit side of QQQ central health monitoring (spec `docs/specs/HEALTH.md`, QRun-IO/qqq#1199; kernel QRun-IO/qqq#1207). **Checks registered** - `email.provider.<id>`: DEPENDENCY/EMAIL, 300s, one per active provider. It uses the passive health state from real sends (UNHEALTHY is DOWN). The transport SPI has no non-sending connectivity method, so the check does no network I/O. The last failure message is never copied, because it can contain recipients. - `email.readiness`: DEPENDENCY/EMAIL, 300s. Runs `EmailApi.readiness` for each category; not ready is DEGRADED, with the failed check names as details. **Removed or changed:** the home's standalone provider-health list, replaced by a generic status widget that reads central health. Passive health and the `email.provider.unhealthy` alerts are kept. Secrets, credentials, recipients, prompts and PHI never go into details. A sentinel test covers every check's failure paths. ## QQQ 4.1.0-RC.8 This PR pins QQQ 4.1.0-RC.8, which ships the central health kernel (QRun-IO/qqq#1207), and merges in develop (help bundles, foreign keys). The merge conflicts are resolved so that both sides are kept. ## Tests 297 tests pass. Coverage is 95.4% of instructions and 100% of classes. Local build: `./mvnw -o verify ` against RC.8. Codex implemented this from the spec. I reviewed it. 🤖 Generated with [Claude Code](https://claude.com/claude-code)
Sign in to join this conversation.