github robintra/perf-sentinel v0.8.5

latest release: chart-v0.2.50
6 hours ago

What's new in v0.8.5

v0.8.5 drains the daemon's in-flight streaming window on SIGTERM as well as SIGINT, so a normal Kubernetes pod termination flushes the window through detection instead of dropping it. It also makes the daemon binary and the core test suite build and run on Windows, and documents the instrumentation and sampling bounds that frame a thin report. There is no breaking change to the daemon wire protocol, the configuration format, or any existing command. The minimum supported Rust version stays 1.96.0. The release-gate lab validation passed end to end.

Daemon: graceful drain on SIGTERM

A shared shutdown helper now resolves on SIGINT (all platforms) and SIGTERM (Unix), used by both the daemon event loop and the one-shot Tempo fetch loop. The daemon drains its in-flight streaming window on SIGTERM as well as SIGINT, so a normal Kubernetes pod termination (a rolling update, a scale-down, a node drain, all of which deliver SIGTERM) flushes the in-flight window through detection instead of dropping it. Only an ungraceful kill, a SIGKILL after the grace period elapses or an OOM, still loses the window. The one-shot Tempo fetch drain aborts in-flight fetches on SIGTERM too, for consistent shutdown behavior across modes. To benefit from the drain, keep terminationGracePeriodSeconds above the configured window duration so the flush completes before the kill.

Portability: Windows build and tests

The daemon binary and the core test suite now build and run on Windows under the MSVC toolchain. These were pre-existing Windows-only failures that the Linux CI never caught. A .cargo/config.toml reserves an 8 MiB main-thread stack for the Windows MSVC target, so the debug #[tokio::main] runtime future no longer overflows the platform default 1 MiB stack, which previously crashed even perf-sentinel --version. A symlink-rejection test and its now-unused import are gated to Unix, a non-Unix permission-tightening stub keeps the async signature of its Unix counterpart, and the Kepler and Redfish staleness-gauge tests poll for the gauge to climb instead of assuming a fixed scrape-failure delay that holds on Linux but not on Windows. No Linux behavior changes.

Documentation

The README, the limitations guide, the instrumentation guide, and the Helm deployment guide, in English and the French mirrors, document the entry costs that bound a report. Instrumentation quality bounds findings, spans missing their carrying attributes (the SQL statement or the HTTP URL) are dropped silently, so a thin report is ambiguous and the inspect path is the way to tell. Upstream head-based sampling keeps whole traces, so per-trace detectors stay correct, but rare patterns, aggregates, and cross-trace correlation degrade, kept distinct from the daemon sampling_rate knob. The daemon state model is spelled out: an in-memory window, no persistence, no shared state across replicas, trace-id routing for per-trace correctness, and window loss bounded to ungraceful kills. The SIGTERM handler scope and the Windows stack-reservation note are clarified inline.

Helm chart

charts/perf-sentinel 0.2.49 to 0.2.50, appVersion 0.8.4 to 0.8.5. Template surface unchanged, additive metadata only.

Operator-visible behavior change

A graceful pod termination (SIGTERM) now drains the in-flight streaming window through detection rather than dropping it, so findings from the window in progress survive a rolling update or a scale-down. Keep terminationGracePeriodSeconds above the configured window duration to benefit. No detection verdict, daemon route, OTLP wire shape, configuration key, or Prometheus metric changes.

Validation

The release-gate lab validation passed end to end on a live cluster and is recorded as PASS in the ledger. The Windows build fix is covered by CI, which the simulation lab, running on Linux, does not exercise.

Why this is a patch and not a minor

The release is additive and backward compatible. The SIGTERM drain extends the existing graceful-shutdown path that already handled SIGINT, and it changes no existing command, flag, output format, daemon route, OTLP wire protocol, configuration key, or Prometheus metric. The Windows fix is a portability correction with no Linux behavior change. The minimum supported Rust version stays 1.96.0.

Verifying this release

# Binary integrity via SLSA Build L3 attestation
gh attestation verify perf-sentinel-linux-amd64 \
  --owner robintra --repo perf-sentinel

# A periodic disclosure produced by this binary
perf-sentinel verify-hash --report perf-sentinel-report.json \
  --expected-identity "https://github.com/robintra/perf-sentinel/.github/workflows/release.yml@refs/tags/v0.8.5" \
  --expected-issuer "https://token.actions.githubusercontent.com"

gh CLI 2.49 or newer required for gh attestation verify (unchanged from v0.7.2).

Full Changelog: v0.8.4...v0.8.5

Don't miss a new perf-sentinel release

NewReleases is sending notifications on new releases.