From bb753d29c24607f777bd56f0846a43452dce2157 Mon Sep 17 00:00:00 2001 From: George Krajcsovits Date: Fri, 16 Oct 2026 09:01:29 +0200 Subject: [PATCH 1/3] om2/version: bump rc version in preparation of changes (#3140) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: György Krajcsovits --- docs/specs/om/open_metrics_spec_2_0.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/docs/specs/om/open_metrics_spec_2_0.md b/docs/specs/om/open_metrics_spec_2_0.md index b7e2c13fd..25951e3aa 100644 --- a/docs/specs/om/open_metrics_spec_2_0.md +++ b/docs/specs/om/open_metrics_spec_2_0.md @@ -29,9 +29,9 @@ author: organization: Grafana Labs --- -- Version: 2.0.0-rc0 +- Version: 2.0.0-rc1 - Status: Experimental -- Date: March 2026 +- Date: October 2026 - Authors: Arthur Silva Sens, Bartłomiej Płotka, David Ashpole, György Krajcsovits, Owen Williams, Richard Hartmann - Emeritus: Ben Kochie, Brian Brazil, Rob Skillington From c10695ab335fdeb64c8576e12d485a2b132ce2c1 Mon Sep 17 00:00:00 2001 From: George Krajcsovits Date: Tue, 20 Oct 2026 17:29:13 +0200 Subject: [PATCH 2/3] om2/gaugehistogram: prohibit negative count and bucket values (#3139) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * chore: propose Jan as a maintainer Signed-off-by: Jan Fajerski * build(deps): bump source-map-js from 1.2.1 to 1.2.2 Bumps [source-map-js](https://github.com/7rulnik/source-map-js) from 1.2.1 to 1.2.2. - [Release notes](https://github.com/7rulnik/source-map-js/releases) - [Changelog](https://github.com/7rulnik/source-map-js/blob/main/CHANGELOG.md) - [Commits](https://github.com/7rulnik/source-map-js/compare/v1.2.1...v1.2.2) --- updated-dependencies: - dependency-name: source-map-js dependency-version: 1.2.2 dependency-type: indirect ... Signed-off-by: dependabot[bot] * build(deps): bump sharp from 0.35.4 to 0.35.5 Bumps [sharp](https://github.com/lovell/sharp) from 0.35.4 to 0.35.5. - [Release notes](https://github.com/lovell/sharp/releases) - [Commits](https://github.com/lovell/sharp/compare/v0.35.4...v0.35.5) --- updated-dependencies: - dependency-name: sharp dependency-version: 0.35.5 dependency-type: indirect ... Signed-off-by: dependabot[bot] * build(deps): bump postcss-selector-parser and postcss-preset-mantine Bumps [postcss-selector-parser](https://github.com/postcss/postcss-selector-parser) to 7.1.6 and updates ancestor dependency [postcss-preset-mantine](https://github.com/mantinedev/postcss-preset-mantine). These dependencies need to be updated together. Updates `postcss-selector-parser` from 6.1.4 to 7.1.6 - [Release notes](https://github.com/postcss/postcss-selector-parser/releases) - [Changelog](https://github.com/postcss/postcss-selector-parser/blob/main/CHANGELOG.md) - [Commits](https://github.com/postcss/postcss-selector-parser/compare/6.1.4...7.1.6) Updates `postcss-preset-mantine` from 1.17.0 to 1.18.0 - [Commits](https://github.com/mantinedev/postcss-preset-mantine/commits) --- updated-dependencies: - dependency-name: postcss-selector-parser dependency-version: 7.1.6 dependency-type: indirect - dependency-name: postcss-preset-mantine dependency-version: 1.18.0 dependency-type: direct:development ... Signed-off-by: dependabot[bot] * build(deps-dev): bump @modelcontextprotocol/sdk from 1.26.0 to 1.32.1 Bumps [@modelcontextprotocol/sdk](https://github.com/modelcontextprotocol/typescript-sdk) from 1.26.0 to 1.32.1. - [Release notes](https://github.com/modelcontextprotocol/typescript-sdk/releases) - [Commits](https://github.com/modelcontextprotocol/typescript-sdk/compare/v1.26.0...1.32.1) --- updated-dependencies: - dependency-name: "@modelcontextprotocol/sdk" dependency-version: 1.32.1 dependency-type: indirect ... Signed-off-by: dependabot[bot] * build(deps-dev): bump proxy-addr from 2.0.7 to 2.0.8 Bumps [proxy-addr](https://github.com/jshttp/proxy-addr) from 2.0.7 to 2.0.8. - [Release notes](https://github.com/jshttp/proxy-addr/releases) - [Changelog](https://github.com/jshttp/proxy-addr/blob/master/HISTORY.md) - [Commits](https://github.com/jshttp/proxy-addr/compare/v2.0.7...v2.0.8) --- updated-dependencies: - dependency-name: proxy-addr dependency-version: 2.0.8 dependency-type: indirect ... Signed-off-by: dependabot[bot] * build(deps): bump next from 15.5.24 to 15.5.27 Bumps [next](https://github.com/vercel/next.js) from 15.5.24 to 15.5.27. - [Release notes](https://github.com/vercel/next.js/releases) - [Commits](https://github.com/vercel/next.js/compare/v15.5.24...v15.5.27) --- updated-dependencies: - dependency-name: next dependency-version: 15.5.27 dependency-type: direct:production ... Signed-off-by: dependabot[bot] * om2/gaugehistogram: prohibit negative count and bucket values Even though a negative count may arise from arithmetic operations from on native histograms, we don't believe that the resulting distribution means anything or is useful. Instead of changing the validation of histograms stored in Prometheus , we're making the specification more strict. Note: negative histograms may still be calculated in Prometheus and returned as PromQL query results or used as intermediate values in calculations. As explained by the native histograms specification: https://prometheus.io/docs/specs/native_histograms/#unary-minus-and-negative-histograms Signed-off-by: György Krajcsovits * Add TEMPer USB thermal sensor exporter link Signed-off-by: Barry Postma * Apply suggestion from @bwplotka Co-authored-by: Bartlomiej Plotka Signed-off-by: George Krajcsovits * ci: only require OpenMetrics spec version bump on PRs against main (#3148) PRs targeting a feature branch such as om2-rc1 collect several spec changes that are released under a single version. Requiring a version bump on each of them is noise, so restrict the check to PRs against main, where the accumulated work gets its version. Signed-off-by: György Krajcsovits --------- Signed-off-by: Jan Fajerski Signed-off-by: dependabot[bot] Signed-off-by: György Krajcsovits Signed-off-by: Barry Postma Signed-off-by: George Krajcsovits Co-authored-by: Jan Fajerski Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> Co-authored-by: Jan Fajerski Co-authored-by: Barry Postma Co-authored-by: Julius Volz Co-authored-by: Bartlomiej Plotka --- docs/specs/om/open_metrics_spec_2_0.md | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/docs/specs/om/open_metrics_spec_2_0.md b/docs/specs/om/open_metrics_spec_2_0.md index 25951e3aa..f15b3920b 100644 --- a/docs/specs/om/open_metrics_spec_2_0.md +++ b/docs/specs/om/open_metrics_spec_2_0.md @@ -339,9 +339,9 @@ GaugeHistograms measure current distributions. Common examples are how long item A GaugeHistogram Sample MUST contain Gcount, Gsum values. -The Gcount value MUST be equal to the number of measurements currently in the GaugeHistogram. The Gcount is a gauge semantically. The Gcount SHOULD be an integer. The Gcount SHOULD NOT be -Inf, +Inf, NAN, or negative. +The Gcount value MUST be equal to the number of measurements currently in the GaugeHistogram. The Gcount is a gauge semantically. The Gcount SHOULD be an integer. The Gcount MUST NOT be negative. The Gcount SHOULD NOT be +Inf, NaN. -Float and negative Gcount is allowed to make it possible to expose results of arithmetic operations on GaugeHistograms, such as the rate of change of a Histogram over time. +Float Gcount is allowed to make it possible to expose results of arithmetic operations on GaugeHistograms, such as the rate of change of a Histogram over time. The Gsum value MUST be equal to the sum of all the measured values currently in the GaugeHistogram. The Gsum is a gauge semantically. @@ -349,9 +349,9 @@ A GaugeHistogram MUST measure values that are not NaN in either [Classic Buckets If a GaugeHistogram stops measuring values in either Classic or Native Buckets and keeps measuring values in the other, it MUST clear and not expose the buckets it stopped measuring into. This avoids exposing different distribution from the two kind of buckets at the same time. -Every Bucket MUST have well-defined boundaries and a value. Boundaries of a Bucket MUST NOT be NaN. Bucket values SHOULD be integers. Semantically, bucket values are gauges and SHOULD NOT be -Inf, +Inf, NaN, or negative. +Every Bucket MUST have well-defined boundaries and a value. Boundaries of a Bucket MUST NOT be NaN. Bucket values are gauges semantically. Bucket values SHOULD be integers. Bucket values MUST NOT be negative. Bucket values SHOULD NOT be +Inf, NaN. -Float and negative bucket values are allowed to make it possible to expose results of arithmetic operations on GaugeHistograms, such as the rate of change of a Histogram over time. +Float bucket values are allowed to make it possible to expose results of arithmetic operations on GaugeHistograms, such as the rate of change of a Histogram over time. A GaugeHistogram SHOULD NOT include NaN measurements. If a GaugeHistogram includes NaN measurements, then NaN measurements MUST be counted in the Gcount and the Gsum MUST be NaN. From 50dc412606a37fed42773448fd6a4ffc2bb7ff7b Mon Sep 17 00:00:00 2001 From: David Ashpole Date: Wed, 28 Oct 2026 10:07:16 -0400 Subject: [PATCH 3/3] om2/summary: allow negative Sum and Quantile values (#3150) Signed-off-by: David Ashpole --- docs/specs/om/open_metrics_spec_2_0.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/docs/specs/om/open_metrics_spec_2_0.md b/docs/specs/om/open_metrics_spec_2_0.md index f15b3920b..f2ad67a52 100644 --- a/docs/specs/om/open_metrics_spec_2_0.md +++ b/docs/specs/om/open_metrics_spec_2_0.md @@ -371,13 +371,13 @@ Summaries SHOULD NOT be used, because quantiles are not aggregatable and the use A Summary Sample MUST contain a Count, Sum and a set of quantiles. -Semantically, Count and Sum values are counters so MUST NOT be NaN or negative. Count MUST be an integer. +Semantically, Count is a counter so MUST NOT be NaN or negative. Count MUST be an integer. Sum MUST NOT be NaN. Sum is only a counter semantically as long as there are no negative event values measured by the Summary. A Summary SHOULD have a Start Timestamp. Start Timestamp MUST NOT be based on the collection period of quantile values. -Quantiles are a map from a quantile to a value. An example is a quantile 0.95 with value 0.2 in a metric called `myapp_http_request_duration_seconds` which means that the 95th percentile latency is 200ms over an unknown timeframe. If there are no events in the relevant timeframe, the value for a quantile MUST be NaN. A Quantile's Metric's LabelSet MUST NOT have "quantile" label name. Quantiles MUST be between 0 and 1 inclusive. Quantile values MUST NOT be negative. Quantile values SHOULD represent the recent values. Commonly this would be over the last 5-10 minutes. +Quantiles are a map from a quantile to a value. An example is a quantile 0.95 with value 0.2 in a metric called `myapp_http_request_duration_seconds` which means that the 95th percentile latency is 200ms over an unknown timeframe. If there are no events in the relevant timeframe, the value for a quantile MUST be NaN. A Quantile's Metric's LabelSet MUST NOT have "quantile" label name. Quantiles MUST be between 0 and 1 inclusive. Quantile values SHOULD represent the recent values. Commonly this would be over the last 5-10 minutes. #### Unknown