Skip to content

v0.4.0-beta

Choose a tag to compare

@nishujangra nishujangra released this 27 Jul 11:21
· 440 commits to master since this release

Spooky 0.4.0-beta — Runtime Lifecycle & Canonical Observability

Minor release covering all changes since 0.3.1-beta.

Added

  • Deterministic runtime lifecycle state machine — reload commits, drain, and shutdown now flow through explicit lifecycle states rather than ad-hoc paths, making generation swaps predictable under load.
  • Canonical observability vocabulary — admission outcomes, local reason enums, overload metric labels, and backend health-failure reasons all map to one canonical set, with bounded connect-attempt label cardinality to keep metric series stable.
  • Unified backend refresh classification — DNS/health refreshes report explicit traffic-continuity outcomes, and the canonical backend health-failure reason is surfaced in the control-plane snapshot.
  • Structured reload rejections — operator-facing reload preflight failures now carry structured messages, backed by a typed operational-policy vocabulary for runtime ownership and reload rules.
  • Live log-level reloadlog.level changes apply on config reload via a runtime set_log_level, no restart required.

Fixed

  • Process-shared watchdog and DNS resolver are now carried across reload instead of being rebuilt, preserving state through generation swaps.
  • Bundle-lock panic and control-API unreachable paths replaced with fail-safe recovery; backend client-rotation failure is now an explicit, operator-visible outcome.
  • Pre-response requests still reading the body now time out under the request-body bucket.
  • Restored stateful round-robin selection, failover availability on circuit-open retries, and streaming guardrail failure semantics.
  • WebSocket upgrade headers preserved in bootstrap 101 responses.
  • Upstreams iterated in name order so route conflicts report deterministically.

Changed

  • Public API surface locked down across all crates — crate-internal items demoted, unreachable_pub enforced, dead code removed, and public runtime/listener/connection surfaces documented.
  • Documentation realigned to the post-refactor architecture (edge runtime ownership, runtime generation & backend lifecycle, request lifecycle, transport boundaries, observability, and reload behavior).
  • Test suite hardened with per-contract cases asserting QUIC/bootstrap parity, metric label vocabularies, and retry/hedge accounting.

Known Limitations

  • No dynamic backend discovery (static config only)
  • Listener bind address and protocol changes still require a restart
  • Pre-GA — extended soak testing recommended before broad production rollout