Skip to content

Commit ff5ddf8

Browse files
chore(release): update root CHANGELOG.md
1 parent 51b2003 commit ff5ddf8

1 file changed

Lines changed: 147 additions & 0 deletions

File tree

CHANGELOG.md

Lines changed: 147 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,153 @@ PR — keep the `hyperdx-release-notes` comment marker intact when editing so yo
66
edits survive regeneration. Per-package detail lives in each
77
`packages/*/CHANGELOG.md`.
88

9+
## v2.37.0 — 2026-08-27
10+
11+
<!-- hyperdx-release-notes version=2.37.0 inputs=4b5e6edb34f2 -->
12+
13+
**Metrics explorer and in-app release notes**
14+
15+
You no longer have to know a metric's name to chart it: the chart editor gains a
16+
metrics explorer that browses your metric namespace as a tree, searches every
17+
name and description the source reports, and shows a metric's kind, unit,
18+
reporting services and tag values before you commit to it. The Help menu's
19+
"What's new" is rebuilt around these release notes, so each release's highlights
20+
are readable in the app itself. Multi-webhook alerts are now honoured end to
21+
end — every configured channel is notified, and every target is shown on the
22+
alerts pages — and session replays no longer break when a recording contains a
23+
very large event.
24+
25+
### ✨ New Features
26+
27+
- **Metrics explorer in the chart editor**: a browse control beside the metric
28+
select opens a modal with a prefix hierarchy over your metric namespace
29+
(`system``cpu``utilization`) plus search across every metric name and
30+
description. Each row shows the metric's kind and description, and the detail
31+
pane gives the unit, reporting services and tag keys you can drill into,
32+
replacing a flat dropdown of thousands of names that only revealed that
33+
metadata after you had chosen. Names split on `.` when they have one and on
34+
`_` otherwise, decided per metric, so dotted OpenTelemetry names and
35+
underscore-style exporter names both nest sensibly. While browsing a metric's
36+
tags you can stage filters and group-bys as removable chips and apply them
37+
with the metric, and applying sets an aggregation suited to the kind — average
38+
for a gauge, sum for a counter, p95 for a histogram (#3000, thanks
39+
@MikeShi42!).
40+
- **"What's new" lives in the app**: the Help menu's full-changelog modal is
41+
replaced by an inline section, a "View all releases" drawer, and a sparkle on
42+
the Help icon when the running version has not been acknowledged in this
43+
browser. Everything comes from the release notes themselves — headline and
44+
summary lead each release, breaking changes and new features are listed and
45+
badged apart, and the remaining sections are summarised as counts. The
46+
changelog is parsed at build time rather than shipped as a fetched asset
47+
(#2993, thanks @jordan-simonovski!).
48+
- **Dashboard variables are available to everyone**: the feature toggle that
49+
gated dashboard variables is gone, so every deployment gets variables — and
50+
the filter, Lucene and PromQL work below — without turning a flag on first
51+
(#3009, thanks @pulpdrew!).
52+
- **Dashboard filter values persist per variable**: filter value state is now
53+
stored keyed by its variable, so a dashboard keeps the selections you made
54+
(#2963, thanks @pulpdrew!).
55+
- **Exact-match Lucene variable references are distributed**: a Lucene search
56+
that matches a field exactly against a dashboard variable now expands across
57+
the variable's values (#2987, thanks @pulpdrew!).
58+
- **Dashboard variables work in PromQL charts**: a PromQL query on a dashboard
59+
tile now has its variable references substituted before it runs, so PromQL
60+
charts respond to the dashboard's variables like the rest of your tiles, and
61+
the PromQL editor completes the variables available to it as you type. A
62+
variable used somewhere PromQL cannot take one is now called out with a
63+
warning instead of leaving you to work out why the chart is empty, and a
64+
preview shows the generated PromQL the chart will run (#2994, #2995, #2997,
65+
#2998, thanks @pulpdrew!).
66+
67+
### 🔧 Improvements
68+
69+
- **Every alerts-page row has the same trailing controls**: the Terraform
70+
import, source link and acknowledgement actions were each conditional, so no
71+
two rows lined up. The conditional actions move into an overflow menu that
72+
always renders — with a new "Delete alert" item alongside them — and the
73+
acknowledgement button gets a reserved slot, so its absence no longer shifts
74+
the row (#3002, thanks @jordan-simonovski!).
75+
- **The alerts page stays responsive with a long list of alerts**: the list is
76+
virtualised, so only the rows on screen are rendered and scrolling no longer
77+
slows down on a team with hundreds of alerts (#3012, thanks @pulpdrew!).
78+
- **API keys and MCP install snippets stay masked until revealed**: both now
79+
hide their secret behind a shared reveal-to-copy control, so you can open
80+
those pages without the key on screen (#2988).
81+
- **Closing the dashboard filter editor confirms first**: you are asked before
82+
unsaved changes to a dashboard filter are discarded, so a stray click no
83+
longer loses the edits you were part-way through (#3005, thanks @pulpdrew!).
84+
- **Better metric discovery over MCP**: the MCP server's metric discovery is
85+
improved, so an agent working with your metrics finds the right one more
86+
reliably (#2861, thanks @karl-power!).
87+
88+
### 🐛 Bug Fixes
89+
90+
- **Alerts reliably notify their configured channels**: configured channels were
91+
encoded as `@webhook-<id>` mention strings and appended after whatever you
92+
wrote in the alert message, so a body containing enough mentions consumed the
93+
entire per-event notification cap and the alert's own channel — the one target
94+
it was set up to notify — was silently never reached. Configured channels are
95+
now built directly, queued first, and exempt from a cap that only ever meant
96+
to bound ad hoc mentions. Mentions in the message body are unchanged, still
97+
capped, and still deduplicated against the configured channels, so naming one
98+
twice notifies it once (#2984, thanks @jordan-simonovski!).
99+
- **The alerts pages show every notification target**: rows and the alert detail
100+
header only rendered the legacy singular channel, so an alert notifying three
101+
webhooks read as if it notified one, labelled a generic "Webhook" rather than
102+
the webhook's name. The detail page now names each target with its service
103+
icon, keeping the first two inline and collapsing the rest into a `+N more`
104+
tooltip, while rows show the icons with names on hover. The evaluation
105+
history's "Webhook Duration" column is renamed "Notification duration" with a
106+
tooltip, since the figure was always the wall time of a delivery that fans out
107+
to every target at once (#3001, thanks @jordan-simonovski!).
108+
- **Session replays survive very large recorded events**: an rrweb event over
109+
the recorder's ~950KB chunk size is split into chunks that all share one
110+
timestamp, and the replay query ordered by timestamp alone, so ClickHouse
111+
could return them scrambled and the event — often the full DOM snapshot with
112+
all its inlined CSS — was silently dropped, leaving replays empty, unstyled or
113+
frozen mid-session. The stream is now ordered deterministically, chunks are
114+
reassembled by explicit index, and any event that still cannot be rebuilt is
115+
flagged in the player instead of swallowed. Existing recordings play back
116+
correctly without re-ingestion (#2956).
117+
- **Gemini-backed MCP clients can connect again**: the quantile `level` field
118+
was advertised as a numeric enum, and Gemini's function declarations accept
119+
`enum` only alongside `type: "string"` — so a client forwarding tool schemas
120+
to the provider had its whole tool list rejected over this one field, with a
121+
generic "trouble connecting to the model provider" error that named neither
122+
the tool nor the property. `level` is now advertised as a string enum on
123+
`clickstack_timeseries`, `clickstack_table`, `clickstack_save_dashboard` and
124+
`clickstack_patch_dashboard`; numeric input is still accepted and
125+
out-of-set values are still rejected, and the external REST API's own contract
126+
is untouched (#2971, thanks @RIP21!).
127+
- **Drilling down to Search carries the variable's value, not its name**:
128+
dashboard variables are now expanded before a drill-down opens the search
129+
page, so the search runs against the values you were looking at instead of the
130+
unresolved variable references (#3008, thanks @pulpdrew!).
131+
- **A failed release-marker query says so**: when the query behind release
132+
markers fails — for example because a source's version expression references a
133+
column such as `ResourceAttributes` that the table does not have — you now get
134+
a distinct "couldn't load release markers" notification, instead of an empty
135+
chart indistinguishable from "no releases in this time range" (#3007, thanks
136+
@teeohhem!).
137+
138+
### 📦 Build / Packaging
139+
140+
- **`@hyperdx/common-utils` ships usable type declarations**: internal `@/*`
141+
path aliases no longer leak into the published `.d.ts` files, where they could
142+
not be resolved by consumers (#2969, thanks @pulpdrew!).
143+
144+
<!-- hyperdx-package-list -->
145+
146+
### 📦 Package changelogs
147+
148+
- `@hyperdx/api` 2.36.0 → 2.37.0 — [changelog](https://github.com/hyperdxio/hyperdx/blob/main/packages/api/CHANGELOG.md#2370)
149+
- `@hyperdx/app` 2.36.0 → 2.37.0 — [changelog](https://github.com/hyperdxio/hyperdx/blob/main/packages/app/CHANGELOG.md#2370)
150+
- `@hyperdx/common-utils` 0.27.0 → 0.27.1 — [changelog](https://github.com/hyperdxio/hyperdx/blob/main/packages/common-utils/CHANGELOG.md#0271)
151+
- `@hyperdx/hdx-eval` 0.3.2 → 0.3.3 — [changelog](https://github.com/hyperdxio/hyperdx/blob/main/packages/hdx-eval/CHANGELOG.md#033)
152+
- `@hyperdx/otel-collector` 2.36.0 → 2.37.0 — [changelog](https://github.com/hyperdxio/hyperdx/blob/main/packages/otel-collector/CHANGELOG.md#2370)
153+
154+
<!-- /hyperdx-package-list -->
155+
9156
## v2.36.0 — 2026-08-21
10157

11158
<!-- hyperdx-release-notes version=2.36.0 inputs=f975367d849a -->

0 commit comments

Comments
 (0)