feat(health): register webhook endpoint and dispatcher 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 20:01:07 +00:00 (Migrated from github.com)

Summary

Registers one health check per enabled webhook endpoint, plus a dispatcher backlog check, 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

  • webhooks.endpoint.<id>: DEPENDENCY/INTEGRATION, 300s. Reads the EndpointHealth state: UNHEALTHY or PROBATION is DEGRADED, auto-DISABLED is DOWN. Details are the state, consecutive failures and unhealthy-since. URLs, secrets and failure messages are never included.
  • webhooks.dispatcher: DEPENDENCY/INTEGRATION, 300s. If the oldest pending delivery is older than 15 minutes the check is DEGRADED, and older than 60 minutes it is DOWN. Metric: oldestPendingSeconds.

Removed or changed: the home's endpoint-health tile and attention list, replaced by a generic status widget that links to central health. The state machine, alerts and Send Test Event 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

7 new tests; 157 tests in total pass. Checkstyle is clean. Coverage is 93.2% of instructions and 100% of classes.
Local build: ./mvnw -o verify -Denforcer.skipRules=requireReleaseDeps against RC.8.

Codex implemented this from the spec. I reviewed it.

🤖 Generated with Claude Code

## Summary Registers one health check per enabled webhook endpoint, plus a dispatcher backlog check, 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** - `webhooks.endpoint.<id>`: DEPENDENCY/INTEGRATION, 300s. Reads the `EndpointHealth` state: UNHEALTHY or PROBATION is DEGRADED, auto-DISABLED is DOWN. Details are the state, consecutive failures and unhealthy-since. URLs, secrets and failure messages are never included. - `webhooks.dispatcher`: DEPENDENCY/INTEGRATION, 300s. If the oldest pending delivery is older than 15 minutes the check is DEGRADED, and older than 60 minutes it is DOWN. Metric: `oldestPendingSeconds`. **Removed or changed:** the home's endpoint-health tile and attention list, replaced by a generic status widget that links to central health. The state machine, alerts and Send Test Event 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 7 new tests; 157 tests in total pass. Checkstyle is clean. Coverage is 93.2% of instructions and 100% of classes. Local build: `./mvnw -o verify -Denforcer.skipRules=requireReleaseDeps` 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.