diff --git a/CHANGELOG.md b/CHANGELOG.md index 1f3cb47..f6dc600 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -7,24 +7,25 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ## [Unreleased] +## [1.9.2] - 2026-08-16 + ### Fixed -- `/health`'s five dependency probes (neo4j, qdrant, wikijs, searxng, ollama) - now run concurrently under `asyncio.gather`, each bounded at 2s via - `asyncio.wait_for`, instead of serially with no bound on neo4j or qdrant. - A hung (not failing) dependency previously blocked the whole chain past the - container healthcheck's 10s timeout, marking the container unhealthy for a - reason unrelated to its own liveness. A probe that times out now reports - that service unhealthy, the same as one that raises; the others are - unaffected. -- The three remaining probes in `check_service_health()` (paperless, - system_settings, scheduler — computed internally but not currently read by - `/health`) are now bounded and joined into the same `asyncio.gather` as the - five above, rather than running serially and unbounded after it. paperless - and system_settings keep their three-state result (`None` not configured, - `False` configured but unhealthy/timed out, `True` healthy) — an - unconfigured service's probe is never run, so "not configured" cannot be - collapsed into "unhealthy". +- `/health` no longer reports the whole service unhealthy because one + dependency is merely slow. Its five probes (neo4j, qdrant, wikijs, searxng, + ollama) previously ran one after another with no timeout on neo4j or + qdrant, so a single hung dependency could block the response past the + container healthcheck's 10s timeout and get the container marked + unhealthy for a reason unrelated to its own liveness. Each probe is now + bounded at 2s and all five run concurrently, so one hanging dependency is + reported unhealthy on its own without holding up the others or the + response. +- Internal-only: the three probes `check_service_health()` also computes + (paperless, system_settings, scheduler) received the same bounding and + concurrency, for consistency and because they carried the identical + unbounded-hang risk internally. This has no visible effect today — none + of the three is currently returned by `/health` — but protects a future + caller that does read them. ## [1.9.1] - 2026-08-08 diff --git a/pyproject.toml b/pyproject.toml index 2ba8c09..15dad66 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -1,6 +1,6 @@ [project] name = "library-desk" -version = "1.9.1" +version = "1.9.2" description = "Coordination service for The Library system - HybridRAG queries, document ingestion, entity extraction, and knowledge consolidation" readme = "README.md" requires-python = ">=3.12"