Skip to content

Commit b08c49c

Browse files
chore(release): update root CHANGELOG.md
1 parent bfa75e1 commit b08c49c

1 file changed

Lines changed: 144 additions & 0 deletions

File tree

CHANGELOG.md

Lines changed: 144 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,150 @@ 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=25857962aacd -->
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+
- **API keys and MCP install snippets stay masked until revealed**: both now
76+
hide their secret behind a shared reveal-to-copy control, so you can open
77+
those pages without the key on screen (#2988).
78+
- **Closing the dashboard filter editor confirms first**: you are asked before
79+
unsaved changes to a dashboard filter are discarded, so a stray click no
80+
longer loses the edits you were part-way through (#3005, thanks @pulpdrew!).
81+
- **Better metric discovery over MCP**: the MCP server's metric discovery is
82+
improved, so an agent working with your metrics finds the right one more
83+
reliably (#2861, thanks @karl-power!).
84+
85+
### 🐛 Bug Fixes
86+
87+
- **Alerts reliably notify their configured channels**: configured channels were
88+
encoded as `@webhook-<id>` mention strings and appended after whatever you
89+
wrote in the alert message, so a body containing enough mentions consumed the
90+
entire per-event notification cap and the alert's own channel — the one target
91+
it was set up to notify — was silently never reached. Configured channels are
92+
now built directly, queued first, and exempt from a cap that only ever meant
93+
to bound ad hoc mentions. Mentions in the message body are unchanged, still
94+
capped, and still deduplicated against the configured channels, so naming one
95+
twice notifies it once (#2984, thanks @jordan-simonovski!).
96+
- **The alerts pages show every notification target**: rows and the alert detail
97+
header only rendered the legacy singular channel, so an alert notifying three
98+
webhooks read as if it notified one, labelled a generic "Webhook" rather than
99+
the webhook's name. The detail page now names each target with its service
100+
icon, keeping the first two inline and collapsing the rest into a `+N more`
101+
tooltip, while rows show the icons with names on hover. The evaluation
102+
history's "Webhook Duration" column is renamed "Notification duration" with a
103+
tooltip, since the figure was always the wall time of a delivery that fans out
104+
to every target at once (#3001, thanks @jordan-simonovski!).
105+
- **Session replays survive very large recorded events**: an rrweb event over
106+
the recorder's ~950KB chunk size is split into chunks that all share one
107+
timestamp, and the replay query ordered by timestamp alone, so ClickHouse
108+
could return them scrambled and the event — often the full DOM snapshot with
109+
all its inlined CSS — was silently dropped, leaving replays empty, unstyled or
110+
frozen mid-session. The stream is now ordered deterministically, chunks are
111+
reassembled by explicit index, and any event that still cannot be rebuilt is
112+
flagged in the player instead of swallowed. Existing recordings play back
113+
correctly without re-ingestion (#2956).
114+
- **Gemini-backed MCP clients can connect again**: the quantile `level` field
115+
was advertised as a numeric enum, and Gemini's function declarations accept
116+
`enum` only alongside `type: "string"` — so a client forwarding tool schemas
117+
to the provider had its whole tool list rejected over this one field, with a
118+
generic "trouble connecting to the model provider" error that named neither
119+
the tool nor the property. `level` is now advertised as a string enum on
120+
`clickstack_timeseries`, `clickstack_table`, `clickstack_save_dashboard` and
121+
`clickstack_patch_dashboard`; numeric input is still accepted and
122+
out-of-set values are still rejected, and the external REST API's own contract
123+
is untouched (#2971, thanks @RIP21!).
124+
- **Drilling down to Search carries the variable's value, not its name**:
125+
dashboard variables are now expanded before a drill-down opens the search
126+
page, so the search runs against the values you were looking at instead of the
127+
unresolved variable references (#3008, thanks @pulpdrew!).
128+
- **A failed release-marker query says so**: when the query behind release
129+
markers fails — for example because a source's version expression references a
130+
column such as `ResourceAttributes` that the table does not have — you now get
131+
a distinct "couldn't load release markers" notification, instead of an empty
132+
chart indistinguishable from "no releases in this time range" (#3007, thanks
133+
@teeohhem!).
134+
135+
### 📦 Build / Packaging
136+
137+
- **`@hyperdx/common-utils` ships usable type declarations**: internal `@/*`
138+
path aliases no longer leak into the published `.d.ts` files, where they could
139+
not be resolved by consumers (#2969, thanks @pulpdrew!).
140+
141+
<!-- hyperdx-package-list -->
142+
143+
### 📦 Package changelogs
144+
145+
- `@hyperdx/api` 2.36.0 → 2.37.0 — [changelog](https://github.com/hyperdxio/hyperdx/blob/main/packages/api/CHANGELOG.md#2370)
146+
- `@hyperdx/app` 2.36.0 → 2.37.0 — [changelog](https://github.com/hyperdxio/hyperdx/blob/main/packages/app/CHANGELOG.md#2370)
147+
- `@hyperdx/common-utils` 0.27.0 → 0.27.1 — [changelog](https://github.com/hyperdxio/hyperdx/blob/main/packages/common-utils/CHANGELOG.md#0271)
148+
- `@hyperdx/hdx-eval` 0.3.2 → 0.3.3 — [changelog](https://github.com/hyperdxio/hyperdx/blob/main/packages/hdx-eval/CHANGELOG.md#033)
149+
- `@hyperdx/otel-collector` 2.36.0 → 2.37.0 — [changelog](https://github.com/hyperdxio/hyperdx/blob/main/packages/otel-collector/CHANGELOG.md#2370)
150+
151+
<!-- /hyperdx-package-list -->
152+
9153
## v2.36.0 — 2026-08-21
10154

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

0 commit comments

Comments
 (0)