health: an unconfigured email setup should report UNKNOWN, not DEGRADED #24

Open
opened 2026-10-15 04:56:14 +00:00 by KofTwentyTwo · 0 comments
KofTwentyTwo commented 2026-10-15 04:56:14 +00:00 (Migrated from github.com)

Found while fixing QRun-IO/qbit-slack#13. qbit-slack's health indicator reported an unconfigured Slack app as DOWN, which failed kof22's readiness probe.

qbit-email isn't affected in the same way. EmailHealthChecks is a DEPENDENCY check, so it never runs in a probe, and an incomplete configuration reports DEGRADED, not DOWN (EmailHealthChecks.java, "Email configuration incomplete").

The core HEALTH spec (section 3.2) says UNKNOWN is for "cannot tell (not configured, disabled upstream)". When no email provider is configured at all, the check should return HealthCheckOutcome.unknown("Email is not configured"). Partial or invalid configuration should stay DEGRADED or DOWN. That way an optional, unset integration doesn't show as degraded in the central health views.

🤖 Generated with Claude Code

Found while fixing QRun-IO/qbit-slack#13. qbit-slack's health indicator reported an unconfigured Slack app as DOWN, which failed kof22's readiness probe. qbit-email isn't affected in the same way. `EmailHealthChecks` is a DEPENDENCY check, so it never runs in a probe, and an incomplete configuration reports **DEGRADED**, not DOWN (`EmailHealthChecks.java`, "Email configuration incomplete"). The core HEALTH spec (section 3.2) says UNKNOWN is for "cannot tell (not configured, disabled upstream)". When **no** email provider is configured at all, the check should return `HealthCheckOutcome.unknown("Email is not configured")`. Partial or invalid configuration should stay DEGRADED or DOWN. That way an optional, unset integration doesn't show as degraded in the central health views. 🤖 Generated with [Claude Code](https://claude.com/claude-code)
Sign in to join this conversation.
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: QRun-IO/qbit-email#24