## CtrlSpice/otel-desktop-viewer — v0.4.1…v0.5.0

_55 commits._

### Fixes
- **Reduce metrics in the store, and fix four histogram merges that produced plausible numbers (#352)** (918d623)

### Backend
- **Close the three completion edges from the #405 re-review (#407)** (13dd203)
- **One grammar: parse queries by walking the Lezer tree (#405)** (1d6192f)
- **Compute quantiles set-based, once per query, not once per datapoint (#403)** (e8aa80f)
- **Bump testify to 1.12.1 and grpc to 1.83.1 (#404)** (1fb9151)
- **Ask for the whole-window merge only when the metric has one (#402)** (c8b5fcb)
- **Refresh the open log record, not just the log list (#401)** (b82a36c)
- **Tidy the test suite: one setup helper, one shared read-only database, and parallelism where it is safe (#400)** (5afc23f)
- **Ask SQL for the aggregate instead of the whole metric (#399)** (87d9afb)
- **Downscale exponential buckets by slice, not by search (#398)** (1795f7c)
- **Take the saved-views notes back out of the repo (#397)** (94dd77b)
- **Move the saved-views design notes off the tracker (#396)** (6cc9555)
- **Keep Metric.metadata, and test that nothing else is missing (#394)** (c5c771b)
- **Keep the flags spans and links arrive with (#393)** (f9dd88b)
- **Register the svelte prettier plugin that was riding along unused (#387)** (c07b004)
- **One visible-series set, because a metric only ever has one legend (#386)** (a27797e)
- **Pin the Windows compiler to the one that links DuckDB (#385)** (1cee652)
- **Describe request parameters instead of placing them (#383)** (724116c)
- **Accept named parameters, and spell ID consistently (#382)** (2eb193a)
- **Make attribute discovery order total, and legible (#380)** (11072d5)
- **Recover spans stranded by parent cycles, and say which span caused it (#379)** (ea877aa)
- **Rank siblings once, not once per level of the tree (#378)** (03c85ff)
- **Walk a trace's own spans, not the whole table (#377)** (0e8a299)
- **Normalise empty histogram bounds to an empty vector, not nil (#376)** (6512cf9)
- **Report the collector versions the binary is actually built against (#375)** (82fbc0f)
- **Wrap detail values to three lines instead of cutting them at one (#374)** (14f445d)
- **Two series counts, because one number answered two questions (#373)** (190081e)
- **Cache the hashed assets, revalidate the document (#372)** (2dda926)
- **Test the root package, and stop answering startup failures with usage (#371)** (e611faf)
- **Dictionary explicit_bounds, referenced by bounds_id (#370)** (a66e4e1)
- **Collapse state belongs to the reader (#369)** (d363a3d)
- **Put the schema break above the commit list in release notes (#368)** (1d89f68)
- **Check the cumulative merge against the OpenTelemetry SDK (#367)** (7d2b0a5)
- **Fail CI when the committed bundle is stale (#366)** (bbb9400)
- **Fetch the selected heatmap column instead of reading a bucket inside it (#365)** (fc2c0d4)
- **Refresh ARCHITECTURE.md against the current codebase (#364)** (30d2d48)
- **Let queries run while a batch is being appended (#363)** (1f97e99)
- **Revert "Let queries run while a batch is being appended."** (67d0f45)
- **Let queries run while a batch is being appended.** (6a7afa5)
- **Memoise attribute-set derivation across batches (#362)** (a36d395)
- **Cap exemplars so one dense stream cannot size every response (#361)** (4dfe15a)
- **Move metric arithmetic into the store** (fbec394)
- **Fold buckets under a merged zero threshold, and stop taking quantiles from empty ones (#356)** (6a0129c)
- **Bump jsdom to 30, applied directly because its dependabot PR conflicted with the group update that landed first.** (2b31881)
- **Rebuild the embedded frontend bundle against the bumped dependencies, since dependabot updates package.json but not the assets compiled into the binary.** (f8e2291)
- **Resource identity by OTel triplet, and a dictionary cache that survives a restart (#303)** (138a50d)
- **SQL into embedded files, and attribute arrays resolved by map probe (#350)** (8fc5210)
- **Attribute dictionary: dedupe attributes at schema level, reference them by uuid[] (#302)** (5f7fb6a)
- **Schema version stamping, checked before anything is built on the old shape (#301)** (13c32b1)
- **Schema work prep: extension split, bounded contexts, ingest path, metrics-view fixes (#300)** (a3f85de)

### Chore
- **build(deps): bump the minor-and-patch group in /desktopexporter/internal/frontend with 7 updates (#388)** (4a34ec9)
- **build(deps): bump the opentelemetry group with 22 updates (#389)** (e756239)
- **build(deps): bump the minor-and-patch group in /desktopexporter/internal/frontend with 9 updates (#360)** (0184a4d)
- **build(deps): bump the minor-and-patch group across 1 directory with 9 updates (#298)** (ccf474c)
- **build(deps): bump the opentelemetry group with 15 updates (#299)** (d35cc79)

_Recap by [Repo Wrapped](https://repowrapped.com/gh/CtrlSpice/otel-desktop-viewer?utm_source=github-action)._