What's new in v0.8.13
v0.8.13 is a standards-alignment release. The carbon report now emits the SCI per-functional-unit intensity alongside the existing footprint, every detector is mapped to the RGESN 2024 criteria it relates to, and the periodic disclosure gains an interpretive ESRS E1 datapoint crosswalk. The disclosure schema advances to perf-sentinel-report/v1.3, additively, so older readers and reports stay valid and an older report keeps its content_hash when re-hashed. The Helm chart ships opt-in alerting and disruption protection. Every addition is backward compatible: no daemon wire protocol, configuration key, or Prometheus metric changes, and existing machine outputs keep their shape. The minimum supported Rust version stays 1.96.0. The simulation-lab release-gate passed.
GreenOps: SCI per-functional-unit intensity
The carbon report now emits co2.sci_per_trace, the SCI v1.0 intensity ((E x I) + M) / R with the functional unit R defined as one trace, alongside the pre-existing co2.total numerator footprint. The functional unit is declared in-band on co2.functional_unit ("trace", which maps to the SCI specification's Transaction / database read-or-write functional unit), and the new estimate carries the methodology tag sci_v1_intensity. co2.total remains the absolute footprint, co2.sci_per_trace is the intensity score per unit of work, so a consumer no longer has to derive the SCI score downstream. The SCI specification permits average grid intensity (it requires location-based, not market-based), so the figure is conformant. The field appears in the analyze JSON and on the daemon's GET /api/export/report.
Detection: RGESN 2024 crosswalk
Each detector type is now mapped to the RGESN 2024 criteria (ARCEP, Arcom, ADEME) it relates to, via FindingType::rgesn_criteria(). The mapping is surfaced per anti-pattern in the periodic disclosure (applications[].anti_patterns[].rgesn_criteria) and documented as a crosswalk table in docs/METHODOLOGY.md. This is an interpretive crosswalk, not a compliance certification: the RGESN criterion titles do not name "N+1 query" or "slow query", these are the criteria a detection helps satisfy. N+1 and redundant queries map to server-side caching (7.1) and request budgeting (6.1, 6.5), chatty services to the request-reduction criteria (4.9, 4.10, 6.1), fanout and pool saturation to elastic architecture (3.2), and serialized calls to asynchronous compute (8.10). The slow-query detectors carry no criterion, RGESN family 9 "Algorithmie" targets machine-learning workloads rather than single-operation latency.
Disclosure: ESRS E1 crosswalk and schema v1.3
The periodic disclosure gains methodology.standard_crosswalk, an interpretive map from the report's figures to the EU climate-reporting standard ESRS E1 (Delegated Regulation (EU) 2023/5303): energy to E1-5, operational carbon to E1-6 Scope 2 on a location-based basis, and embodied carbon to E1-6 Scope 3 (categories 1 and 2). The crosswalk carries its own in-band caveats: it is a mapping aid and not a certification, the location-based figure is not the market-based Scope 2 value ESRS also requires, the figures keep their 2x directional uncertainty bracket, and an audited inventory by a qualified body is still required. The disclosure schema advances to perf-sentinel-report/v1.3. Both the standard_crosswalk and the per-pattern rgesn_criteria additions use serde(default) plus skip_serializing_if, so they are omitted when absent and a pre-v1.3 report keeps its content_hash when re-hashed on this binary.
Helm chart: alerting and disruption protection
The chart now ships operator-facing alerting and disruption protection, both opt-in and off by default. An opt-in PrometheusRule (prometheusRule.enabled) packages the daemon's loss and saturation alerts: daemon unreachable via absent(perf_sentinel_active_traces), OTLP rejection, analysis shedding, analysis-queue saturation, the findings store nearing its cap, correlator-pair eviction, and service-cardinality overflow, each alert naming the [daemon] knob to raise. Per-backend energy-scraper staleness alerts are gated behind prometheusRule.energyScrapers, and prometheusRule.additionalRules appends custom rules verbatim. An opt-in PodDisruptionBudget (podDisruptionBudget.enabled) adds voluntary-disruption protection, defaulting to maxUnavailable: 1 rather than minAvailable: 1 so it does not wedge node drains on the single-replica daemon. The chart moves charts/perf-sentinel from 0.2.59 to 0.2.61 across this window (0.2.60 ships the two resources, 0.2.61 tracks appVersion 0.8.13).
Dependencies
tower-http moves from 0.6.11 to 0.7.0. It backs the daemon HTTP stack (request decompression, body-size limit, CORS). None of the 0.7.0 breaking changes reaches that usage, the bump is verified by a clean compile and the full test suite.
Operator-visible behavior change
Additive only. The analyze JSON and GET /api/export/report gain co2.sci_per_trace and co2.functional_unit. The periodic disclosure gains methodology.standard_crosswalk and per-pattern rgesn_criteria, and its schema string becomes perf-sentinel-report/v1.3. The Helm PrometheusRule and PodDisruptionBudget are off by default. No daemon HTTP route, OTLP wire shape, configuration key, or Prometheus metric is removed or changed, and every machine export (JSON, SARIF, the HTML structure, NDJSON) keeps its shape.
Why this is additive and backward compatible
Every new field is additive with a serde default, so older consumers ignore it and older reports deserialize unchanged. The disclosure schema v1.3 accepts v1.0 through v1.3, and the content_hash of an older report is unchanged when re-hashed on this binary. The two new Helm resources are opt-in and off by default, so an upgrade renders an identical manifest set unless the operator flips the flags. The minimum supported Rust version stays 1.96.0.
Validation
The simulation-lab release-gate passed: the daemon k6 suite and the batch scenarios, plus the v0.8.13-specific assertions on the SCI intensity field, the RGESN and ESRS crosswalks, the verify-hash fail-closed path, and the new Helm resources. CI covers the build, the full test suite (cargo test --workspace), clippy at -D warnings, cargo fmt, both the default and --no-default-features builds, and the Helm CI legs (lint, kubeconform, and a live helm install --wait plus helm test on a kind cluster).
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.13" \
--expected-issuer "https://token.actions.githubusercontent.com"gh CLI 2.49 or newer required for gh attestation verify.
Full Changelog: v0.8.12...v0.8.13