Process-wide registry of the dependency checks behind GET /ready.
Liveness (GET /health) is answered by the endpoint itself and must never consult a dependency. Readiness is different: it reports whether the process is able to do its work, so it has to ask the dependencies (database, shared memory, ...). The component that owns such a dependency registers a named check once during startup; the HTTP layer runs every registered check per readiness request and turns the results into 200 or 503.
The registry is a process-wide singleton (the same pattern LoggerService uses): checks are registered from components in different layers (persistence plugins, feature services) that share no DI scope with the HTTP server, which is built from configuration alone. Registering a name that is already present replaces the old check, so a re-initialization stays idempotent.
Thread safety: registerCheck(), clear() and run() may be called from any thread. The checks themselves run outside the registry lock - a slow dependency must not block other components from registering, and a check may take locks of its own subsystem.