- execution: add
ProbeRunnerclass — async context manager for running health checks outside of ASGI applications; supports customrun_policy, probe options, timeout handling, and resource cleanup viaawait runner.close() - execution: add
RunPolicydataclass to configure probe execution —mode(strict/reporting),execution(sequential/parallel),probe_timeout_ms, andhealth_evaluation(all_required/partial_allowed) - models: add
HealthErrorexception model with structured fields:code(error code),message(human-readable),duration_ms,timeout_ms, andmeta(additional context with automatic secret redaction) - checks: add optional config object: all connection-based checks accept
config: XConfig | Noneand build from**kwargswhenconfigis None; config dataclasses infast_healthchecks.checks.configs - url: when
block_private_hosts=True, resolve URL host before request and reject loopback/private IPs (SSRF and DNS rebinding protection) - integrations: add
healthcheck_shutdown,close_probes,run_probefor resource cleanup and non-ASGI usage - integrations: add runner injection — all integration functions (
health(),healthcheck_shutdown,run_probe,ProbeAsgi,HealthcheckRouter) accept optionalrunnerparameter to reuse ProbeRunner instances across requests - errors: add centralized error mapping via
map_exception_to_health_error()— maps common exceptions (TimeoutError, ValueError, OSError subclasses) toHealthErrorwith appropriate error codes and metadata - errors: automatic secret redaction —
HealthError.metafilters out keys matching patterns*password*,*secret*,*token*,*api_key*,*credential*case-insensitively - integrations: add
HealthcheckRouter.close()for FastAPI lifespan shutdown - probe: add
allow_partial_failureoption (healthy when at least one check passes) - checks: add
aclose()to Redis, Kafka, Mongo, OpenSearch, RabbitMQ, URL checks for client cleanup - kafka: add
from_dsn()and client caching - exceptions: introduce documented exception hierarchy (
HealthCheckError,HealthCheckTimeoutError,HealthCheckSSRFError). Timeout and SSRF validation now raise these subclasses;except asyncio.TimeoutErrorandexcept ValueErrorstill work. See API reference for details. - ci: bump workflow uses CHANGELOG.md only; optional input
increment(PATCH/MINOR/MAJOR); replace## Unreleasedheader before bump for custom release notes, single commit per run - docker: add healthchecks to Compose services, Kafka waits for healthy Zookeeper
- docs: document lifecycle, probe options, DSN formats,
run_probeusage
- dsn: replace Pydantic with plain
strandurlsplitvalidation - function: use
get_running_loop(), honor bool return from check function - default_handler: return empty body for healthy responses (minimal JSON or None for 204)
- dependencies: drop pydantic extra, upgrade asyncpg, psycopg, redis, aiokafka, motor, fastapi, faststream, litestar, opensearch
- justfile: use
docker compose --wait, addpytest -n autofor parallel tests - examples: use factory functions instead of module-level probe constants
- changelog: fix typos in previous entries
- checks: config dataclasses in
configs.py;ToDictMixin/_build_dictuse config for serialization; long parameter lists replaced by single optional config (removes need for PLR0913 noqa in check constructors) - integrations: unify probe execution:
ProbeAsgiandrun_probeshare the same check execution and timeout logic inintegrations.base - tests: integration checks use async fixtures with
await check.aclose()in teardown; removePytestUnraisableExceptionWarningsuppression from conftest - checks: type
healthcheck_safewithtyping.Concatenateand remove bothtype: ignorein_base.pyfor the decorator - integrations:
HealthcheckRouter,health()(FastStream/Litestar),ProbeAsgi, andbuild_health_routesnow accept onlyoptions: ProbeRouteOptions | None(see Breaking changes) - checks: change
checksfrom Iterable to Sequence - ci: add composite actions (setup-test-env, upload-coverage), remove Pydantic matrix
- project: development status Planning → Production/Stable, license inline in pyproject
- lint: satisfy TC001/TC002/TC003 (typing-only imports under
TYPE_CHECKING) - dependencies: remove unused optional extra
msgspec, remove redundant dev dependencygreenlet
- ci: add Dependabot, Rollback workflow, Release workflow (build and publish to PyPI), CodeQL, Dependency Review; remove 3_docs, 4_pythonpublish; update 1_test (Python 3.10–3.14 matrix, Windows + WSL, Docker Compose cache, justfile)
- ci: add pip-audit, split tests into imports/unit/integration, add scheduled runs
- build: add
.editorconfig,.gitattributes; rename.envto.env.example; updateMANIFEST.in
- docs: add CONTRIBUTING.md, SECURITY.md, docs structure (api, configuration, lifecycle, probe-options, dsn-formats, run-probe, ssrf, style-guide, decisions)
- docs: update README, installation, usage, changelog; single source of truth for documentation
- integrations:
HealthcheckRouter,health()(FastStream/Litestar),ProbeAsgi, andbuild_health_routesnow accept onlyoptions: ProbeRouteOptions | None. Passingdebug,prefix,success_handler, etc. directly is no longer supported. Migration: build options withbuild_probe_route_options(debug=..., prefix=..., ...)and pass the result asoptions=. Example:HealthcheckRouter(Probe(...), options=build_probe_route_options(debug=True, prefix="/health")). - models: class
HealthcheckReportrenamed toHealthCheckReport. Migration: update imports and usages toHealthCheckReport. - probe: type of
Probe.checkschanged fromIterable[Check]toSequence[Check]. Migration: pass a list or tuple of checks, not a generator or one-shot iterable. - dependencies: optional extras
pydanticandmsgspecremoved. DSN and validation no longer use Pydantic. Minimum dependency versions updated (see pyproject.toml). Migration: removepydanticormsgspecextras from your dependencies and upgrade packages to the versions specified in pyproject.toml if needed.
- typing: prevent typing from failing
- all: upgrade dependencies, make tests more stable, switch
mypytoty
- all: make PEP 561 compatible
- mongo: added multihost support for MongoDB
- healthchecks: added OpenSearch healthcheck
- dependencies: upgrade github actions
- vscode: fixed ruff plugin setup
- dependencies: upgrade dependencies
- dependencies: upgrade pre-commit
- docs: typo in install commands
- tests: move
to_dictmethod out of tests
- redis: added support for SSL connections
- dependencies: upgrade dependencies and pre-commit
- mongo: fixed Mongo check
- validate_dsn: removed dummy validation isinstance
- setuptools: included packages
- docs: changed logo for documentation to green color
- docs: fixed
README.md
- all: 🚀 INIT