feat(health): register object storage connection checks with core central health #17

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

Summary

Registers one health check per object-storage connection. It reuses CapabilityProbe in a deadline-aware, read-only mode: no write or presign probes, and no capability rows are stored.

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

  • object_storage.connection.<id>: DEPENDENCY/STORAGE, 300s, 20s timeout. A connection problem (auth, TLS, DNS, clock) is DOWN with the problem kind as a detail. Clock skew over 900s is DEGRADED. A connection with no buckets is UNKNOWN.

Removed or changed: nothing. Both Test connection actions stay, including the on-demand write tests. A check is turned off in the central health_check table, so there is no new column on this qbit's tables.

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.

Stand-ins: RC.8 still lacks the core replacement (qqq#1165) for the two STAND-IN shims, so their removeBy moved from RC.8 to RC.9.

Tests

12 new health tests pass. Locally, the full run skips Docker-backed tests, and the G4 shim-expiry checks fail against the SNAPSHOT; both are environmental. CI runs them.
Local build: ./mvnw -o verify -Denforcer.skipRules=requireReleaseDeps against RC.8.

Codex implemented this from the spec. I reviewed it and removed a per-connection enabled column Codex had added (schema change, duplicates health_check.enabled).

🤖 Generated with Claude Code

## Summary Registers one health check per object-storage connection. It reuses `CapabilityProbe` in a deadline-aware, read-only mode: no write or presign probes, and no capability rows are stored. 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** - `object_storage.connection.<id>`: DEPENDENCY/STORAGE, 300s, 20s timeout. A connection problem (auth, TLS, DNS, clock) is DOWN with the problem kind as a detail. Clock skew over 900s is DEGRADED. A connection with no buckets is UNKNOWN. **Removed or changed:** nothing. Both Test connection actions stay, including the on-demand write tests. A check is turned off in the central `health_check` table, so there is no new column on this qbit's tables. 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. **Stand-ins:** RC.8 still lacks the core replacement (qqq#1165) for the two `STAND-IN` shims, so their `removeBy` moved from RC.8 to RC.9. ## Tests 12 new health tests pass. Locally, the full run skips Docker-backed tests, and the G4 shim-expiry checks fail against the SNAPSHOT; both are environmental. CI runs them. Local build: `./mvnw -o verify -Denforcer.skipRules=requireReleaseDeps` against RC.8. Codex implemented this from the spec. I reviewed it and removed a per-connection `enabled` column Codex had added (schema change, duplicates `health_check.enabled`). 🤖 Generated with [Claude Code](https://claude.com/claude-code)
Sign in to join this conversation.