## CtrlSpice/otel-desktop-viewer — v0.3.2…v0.4.0

_34 commits._

### Features
- **feat: add retention limits via configurable store size cap (#257)** (8c095ac)

### Fixes
- **Fix search ID wire-form comparison (closes #276) (#283)** (ac2d9e2)
- **fix: guard sharedcomponent map with a mutex (#274)** (9b9c6a5)
- **Frontend test suite + CI, fix aggregation reset on back-navigation (#273)** (36c1d6a)
- **Fix Routing (#231)** (8b16d6c)

### Backend
- **Restore per-stream metric deletion (#292)** (04ef43a)
- **Harden store concurrency with scoped RWMutex (closes #238) (#291)** (aa69e62)
- **Revert "Harden store concurrency with scoped RWMutex (closes #238)"** (cb1010f)
- **Harden store concurrency with scoped RWMutex (closes #238)** (2966d6f)
- **Extract shared signal list page composable (#244) (#290)** (9743b17)
- **Pit lane tidy-up — duplicate util, EditorConfig, pre-commit (closes #252) (#289)** (b7f4bb9)
- **Harden desktop exporter lifecycle (closes #239, #240, #247) (#288)** (93b2dd0)
- **Route backend logging through collector zap (#287)** (d140029)
- **Build frontend in Docker image (#286)** (ec74932)
- **Sync ARCHITECTURE.md with live RPC surface and error codes (#285)** (34c7bda)
- **Remove dead ErrSpanNotFound (-32006) error chain (#284)** (5d4772d)
- **Frontend cleanup: shrink images, drop footer axolotl, quiet build noise (#281)** (0c04b57)
- **Restore generics in SignalListDrawer and PageLayout (#280)** (b5cb393)
- **Type the telemetry service wire layer (#279)** (b6e188b)
- **JSON-RPC hardening: not-found convention, delete param validation, full handler coverage (#275)** (0d328eb)
- **set rpc request body limit (#255)** (ec9c6a3)
- **Make traces deep-linkable via /traces/{id} (#229)** (1659caa)
- **make language bar ignore frontend build output** (26c0302)

### Docs
- **docs: add declarative config example for SDK setup (#258)** (099d9c3)

### Chore
- **build(deps): bump actions/setup-go from 6 to 7 (#271)** (282460f)
- **build(deps): bump actions/checkout from 6 to 7 (#267)** (de11df2)
- **build(deps): bump actions/cache from 5 to 6 (#266)** (b131194)
- **build(deps): bump actions/download-artifact from 7 to 8 (#265)** (6346543)
- **build(deps): bump actions/setup-node from 6 to 7 (#264)** (b62613b)
- **chore: bump more go things (#263)** (28e8feb)
- **chore: add dependabot config, pin docker base image (#262)** (7af6e31)
- **chore(frontend): bump deps to latest stable (#261)** (13f9cce)
- **chore: bump collector to v0.156, raise security floors (#260)** (3fee824)
- **Chore: Clean up static serving (#232)** (4042fad)

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