Changelog¶
0.4.0 (2026-08-28)¶
Features¶
- observability: let KeyRedactor exempt exact field names with safe_keys (#14) (a1b7ecf), closes #11
- observability: pass sentry_sdk.init options through SentryErrorTrackingSink (#12) (b434a21), closes #9
Bug Fixes¶
- core: make the observability section protocols read-only so narrowed settings satisfy them (#13) (ebc2c05), closes #8
- observability: keep stdlib extra fields in the structlog sink (#10) (ae85ffb)
0.3.0 (2026-08-28)¶
Features¶
0.2.0 (2026-08-14)¶
Features¶
- add Masker seam with ValueRedactor, ChainRedactor, per-surface redactors and span-attribute redaction (47e40e8)
Documentation¶
- point the README API reference link at its new url (08748d5)
- rewrite the documentation site with concepts, adapters, blueprints and runbooks (db5508c)
0.1.0 (2026-08-12)¶
Initial release of servicewright.
Features¶
Host+Entrypointmodel — oneAppSpecruns any number of transports (HTTP, gRPC, scheduler, daemon, one-shot) under a single lifecycle- Kubernetes-correct shutdown — readiness flips to false before draining, each entrypoint finishes in-flight work inside a grace window, the DI scope closes last
- Failure is visible — an essential entrypoint that dies mid-serve propagates out of
run(), so the process exit code distinguishes a crash from a graceful stop - Stop-aware startup — a signal during warmup or bind abandons startup instead of binding ports and reporting ready on a terminating process
- Signal escalation — the first SIGINT/SIGTERM drains gracefully, a second exits immediately with
128 + signum - Transport-neutral error taxonomy — one
ServiceErrorrenders as an RFC 9457 problem document over HTTP and as the mappedgrpc.StatusCodeover gRPC, with one masking rule and a pluggable renderer - Transport-neutral correlation store — one request id in the logs, in outbound propagation and in the response, bridged into structlog contextvars and OTel Baggage
- DI-agnostic two-tier scopes —
AppScopefor process-lifetime singletons, a freshUnitScopeper request/RPC/job; dishka adapter included - Pluggable observability — metrics, tracing, logging and error tracking as kernel protocols with prometheus, OpenTelemetry, Sentry, structlog and stdlib backends, plus
register_sinkfor your own - Priority-grouped, fail-fast warmup and a health registry driving both the HTTP probes and the gRPC health service
- Zero hard dependencies —
pip install servicewrightpulls nothing; every framework binding lives behind an extra