When a health request arrives with no QQQ context, BackupsHealthIndicator.check creates a context with a plain new QSession(). Token-based authentication modules (OAuth2, Auth0) reject every tokenless session except QSystemUserSession, so the plan query failed in ActionHelper.validateSession (JWTDecodeException: The token is null).
## Problem
When a health request arrives with no QQQ context, `BackupsHealthIndicator.check` creates a context with a plain `new QSession()`. Token-based authentication modules (OAuth2, Auth0) reject every tokenless session except `QSystemUserSession`, so the plan query failed in `ActionHelper.validateSession` (`JWTDecodeException: The token is null`).
The same bug in qbit-object-storage left kof22's storage tables empty (QRun-IO/qbit-object-storage#18). kof22 is adopting central health (KofTwentyTwo/Website-Backend#228), so this check would have errored there.
## Fix
The context-less path now uses `new QSystemUserSession(qInstance)`. A new test pins the session class.
## Tests
`./mvnw verify` is green locally.
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Blocking a user prevents them from interacting with repositories, such as opening or commenting on pull requests or issues. Learn more about blocking a user.
Problem
When a health request arrives with no QQQ context,
BackupsHealthIndicator.checkcreates a context with a plainnew QSession(). Token-based authentication modules (OAuth2, Auth0) reject every tokenless session exceptQSystemUserSession, so the plan query failed inActionHelper.validateSession(JWTDecodeException: The token is null).The same bug in qbit-object-storage left kof22's storage tables empty (QRun-IO/qbit-object-storage#18). kof22 is adopting central health (KofTwentyTwo/Website-Backend#228), so this check would have errored there.
Fix
The context-less path now uses
new QSystemUserSession(qInstance). A new test pins the session class.Tests
./mvnw verifyis green locally.🤖 Generated with Claude Code