Backend Changes
⛔ Breaking Changes
- Feat(es): promote es.* rotation and index-cleaner feature gates to beta (@ysh-bot in #9018)
- Feat(es): remove support for elasticsearch v6 (@yurishkuro in #8948)
- Feat(mcp): merge jaegermcp extension into jaegerquery extension (@Nabil-Salah in #8894)
- Feat(es): add configurable max_trace_duration and improve time-range design (@yurishkuro in #8840)
✨ New Features
- Feat(es): add --backend flag to esmapping-generator for opensearch selection (@ysh-bot in #8985)
- Feat(es): native trace summaries (summaryreader) (@Me-Priyank in #8812)
🐞 Bug fixes, Minor Improvements
- Feat(es): add synchronous bulk write primitive to the elasticsearch client (@ysh-bot in #8992)
- Feat(es): gate parentspanid reference-compat write behind a feature gate (@ysh-bot in #9015)
- Fix(ci): resolve published snapshot shas for oke demo deploy (@FlamingSaint in #8999)
- feat(jaegerai): add genai span attributes and gateway↔sidecar trace propagation (@SoumyaRaikwar in #8942)
- Chore(storage): remove expired stable feature gates (@Anujkumar9081 in #8970)
- Chore(es): scrub lingering olivere references from code comments (@ysh-bot in #8983)
- Feat(es): migrate template creation to esclient and retire legacy mapping rendering (@Me-Priyank in #8963)
- Fix(storage): reject mutually-exclusive es auth methods in validate() (@Anujkumar9081 in #8946)
- Make "spm not configured" error message more explicit (@Saithej2k in #8878)
- Feat(es): migrate span writes onto an owned bounded bulk indexer (@yurishkuro in #8944)
- Fix(auth): synchronize fallback token in tokenproviderwithtime closure (@yurishkuro in #8952)
- Feat(es): migrate service/operation reads onto owned searcher and query ast (@yurishkuro in #8943)
- [es] add bearer-token and api-key cli flags to es admin tools (rfc 0006 m3.5c) (@yurishkuro in #8939)
- [es] route admin plane through the shared auth stack (rfc 0006 m3.5b) (@yurishkuro in #8937)
- Fix(clickhouse): validate decoded trace/span id lengths to prevent panic on corrupted rows (@iammdzaidalam in #8935)
- Fix(es): apply custom_headers to all elasticsearch clients and honor host override (@iammdzaidalam in #8917)
- Fix(storage): populate req.getbody before sigv4 signing, not after (@truffle-dev in #8768)
- Fix(mcp): report total_count and truncated on get_services and get_span_names (@CedricConday in #8902)
- Fix(sampling): forfeit leader lock on graceful shutdown (@HESleagacy in #8825)
- Feat(tracestoremetrics): forward summaryreader when underlying reader supports it (@yurishkuro in #8895)
- Feat(hotrod): add standard otel db semconv attributes to hotrod spans (@yurishkuro in #8893)
- Fix(es): populate parentspanid field on write path (@yurishkuro in #8859)
- Fix(mcp): don't error on empty critical path (@Me-Priyank in #8806)
- Fix(jaegermcp): wait for server goroutine to exit on shutdown (@g-k-s-03 in #8852)
- Fix(mcp): validate span_id format before querying backend (@truffle-dev in #8845)
- Test(v1adapter): fix mock expectation validation in dependency reader tests (@kavyarathod05 in #8756)
- Fix(es): improve es/os integration test ci coverage and reduce noise (@yurishkuro in #8836)
- Fix(es): emit opensearch ism rollover_alias and consolidate backendversion (@yurishkuro in #8830)
- Feat(query): accept base64-encoded trace ids in http api endpoints (@yurishkuro in #8828)
- Refactor(es): introduce index rotation config schema with legacy flag deprecation (@yurishkuro in #8823)
🚧 Experimental Features
- Feat(ai-gateway): serve per-session ui tools over the session-scoped mcp endpoint (@Nabil-Salah in #8973)
- Feat(ai-gateway): add session-scoped mcp endpoint and session-stream registry (@Nabil-Salah in #8910)
- Feat(jaegermcp): add
read_skilltool for agent skill discovery (@SoumyaRaikwar in #8849) - Feat(es): add datastreamrotation strategy and data-stream-aware span write path (@Me-Priyank in #8833)
👷 CI Improvements
- Fix(build): build embedded ui with pnpm after jaeger-ui migration (@ysh-bot in #9044)
- Fix windows test cleanup failure: close output/error log file handles (@shayannab in #8884)
- [chore] close idle connections for http clients in integration tests (@Manik2708 in #8815)
- [chore]: add binary.stop() and binarypath for mid-test process control (@iammdzaidalam in #8822)
- Feat(es): add e2e integration tests for all rotation strategies (@yurishkuro in #8838)
⚙️ Refactoring
- Refactor(ai-gateway): apply rfc 0008 terminology — turn registry, route id, endpoint naming (@Nabil-Salah in #9017)
- Refactor(es): introduce batch writespans api in v2 elasticsearch trace writer (@ysh-bot in #8990)
- Feat(es): delete the olivere elasticsearch client stack (@ysh-bot in #8982)
- Test(es): retire the detailederror olivere-error enricher (@ysh-bot in #8981)
- Test(es): migrate the elasticsearch rotation e2e tests to the owned client (@ysh-bot in #8976)
- Refactor(es): make esclient.client a pointer handle (@ysh-bot in #8979)
- Test(es): migrate the direct elasticsearch integration tests to the owned client (@ysh-bot in #8975)
- Feat(es): close idle connections on the owned elasticsearch client (@ysh-bot in #8974)
- Feat(es): migrate the es metricstore onto the owned searcher and query ast (@ysh-bot in #8967)
- Feat(es): migrate the es span reader onto the owned searcher and query ast (@ysh-bot in #8958)
- Feat(es): migrate dependency store reads and writes onto owned esclient (@ysh-bot in #8957)
- Feat(es): migrate sampling store reads and writes onto owned esclient (@yurishkuro in #8954)
- Test(es): snapshot sampling store write requests via an injectable clock (@yurishkuro in #8955)
- Unify elasticsearch backend version detection at client construction (rfc 0006 m4) (@iammdzaidalam in #8938)
- Relocate the shared es roundtripper stack into the esclient package (@yurishkuro in #8936)
- Route the elasticsearch admin client through a shared elastic-transport-go pool (@yurishkuro in #8932)
- Rename the elasticsearch control-plane client package to esclient (@yurishkuro in #8930)
- Add es/os request-snapshot suite baseline and converge mapping fixtures (@yurishkuro in #8922)
- Refactor(es): thread context.context through the es rest client (@Me-Priyank in #8873)
- Refactor(es): rename index name constants, eliminate *indexbasename (@yurishkuro in #8870)
- Refactor(es): move index name constants to config package, drop prefix param from resolved*rotation (@yurishkuro in #8868)
- Refactor(es): extract client construction into clientbuilder package (@yurishkuro in #8842)
- Feat: export reusable jaegercli.newcommand for custom ocb distributions (@iammdzaidalam in #8835)
- Refactor(es): rename rotation implementation files to rotation_{name}.go (@yurishkuro in #8839)
- Chore(storage): remove fswatcher from elasticsearch factory (@iammdzaidalam in #8750)
- Refactor(es): migrate depstore and metricstore to use rotation interface (@yurishkuro in #8826)
📖 Documentation
- Rfc 0004: elasticsearch/opensearch data streams for span storage (@yurishkuro in #8804)
📊 UI Changes
✨ New Features
- Feat(genai-tab): add content-sensitive rendering toggle (plain/markdown/json) for message content (@swetalin-10 in #4213)
- Feat(assistant): add markdown rendering and panel resize (@SoumyaRaikwar in #4181)
- Feat(search): add ascending sort support for start time column (@akshatsinghai6682-sketch in #4033)
- Feat: treat trace ids as opaque strings, support base64 encoding (@yurishkuro in #4118)
- Feat(flamegraph): implement native & improved flamegraph trace view (@yurishkuro in #4098)
- Feat(tracing): export ui-emitted otlp traces to jaeger (@yurishkuro in #4051)
🐞 Bug fixes, Minor Improvements
- Fix(genai): fix span icon hover tooltip and refine type icons and labels (@swetalin-10 in #4239)
- Feat(timeline): emphasize span-type icons and soften tree chrome (@ysh-bot in #4238)
- Chore(genai-tab): prefix the token usage row with "tokens:" (@swetalin-10 in #4222)
- Fix(trace): show span pill labels as tooltips (@udita-0707 in #4220)
- Feat(trace): expand span pills to hardcoded attribute set (@udita-0707 in #4214)
- Fix(genai-tab): simplify and fix rendering of genai span icons (@swetalin-10 in #4221)
- Feat(search): show and track trace search latency (@ysh-bot in #4216)
- Refactor(otel): introduce iattributes collection replacing raw attribute arrays (@ysh-bot in #4211)
- Feat(trace): add http status summary chips (@udita-0707 in #4149)
- Feat(spanbarrow): add genai span type icons for llm, tool, agent, and retrieval spans (@swetalin-10 in #3857)
- Fix(stats): make heatmap theme-aware (@jkowall in #4200)
- Fix(listview): remove array-length pre-allocation that created holes (@dolliecoder in #4194)
- Feat(genai-tab): add genai span detail content (@swetalin-10 in #4191)
- Feat(utils): add genai span classification and isgenaitrace detection (@swetalin-10 in #3856)
- Feat(monitor): sync monitor filters to url on change (@udita-0707 in #4182)
- Fix(timeline): restore critical path hover animation in dark mode (@yurishkuro in #4180)
- Feat(search): add absolute/relative toggle for table start time (@yurishkuro in #4175)
- Feat(search): improve table view column sorting (@sksingh2005 in #3994)
- Fix(filter-spans): stringify object/array attribute values for span search (@bhuvan-somisetty in #4171)
- Fix: increase critical path bar contrast in dark mode (@bhavyamsharmaa in #4163)
- Fix(assistant): render tool-call parts in chat thread (@SoumyaRaikwar in #4164)
- Feat(monitor): support service/spankind/timeframe url params (@udita-0707 in #4119)
- Feat(trace): add decorative span type icons in tree view (@swetalin-10 in #3832)
- Fix(tracegraph): theme-aware edge and legend colors in dark mode (@bhavyamsharmaa in #4074)
- Fix(tracepage): handle root span navigation at index 0 (@dolliecoder in #4145)
- Fix: fix sidepanel resize when timeline is hidden (@sksingh2005 in #4046)
- Fix(bug): clear trace id input field on navigation/reload (#4135) (@shubhtrek in #4136)
- Refactor: standardize keyvaluepair typing across the ddg model (@shubhtrek in #4064)
- Default to table view for search results (@yurishkuro in #4133)
- Feat(flamegraph): resizable 50/50 table/chart split with scroll affordance (@yurishkuro in #4121)
- Fix: copyicon button jumps/enlarges on hover (animation/layout glitch) (@akshatsinghai6682-sketch in #4022)
- Fix(plexus): use currentcolor for ddg edge weight labels in dark mode (@shubhtrek in #4079)
- Fix(search): keep back-to-search across find and trace id clicks (@udita-0707 in #4080)
- Fix(monitor): replace hardcoded light-mode colors with design tokens in operations table (@udita-0707 in #4054)
- Fix(assistant): wrap fetch passed to httpagent (@yurishkuro in #4044)
🚧 Experimental Features
- Feat(genai): add genai tab shell to span detail panel (@swetalin-10 in #4122)
- Feat(tracepage): add genaitimelineviewer view type with auto-activation (@swetalin-10 in #3872)
👷 CI Improvements
- Chore(pnpm): migrate from npm to pnpm (@thisis-manan in #4137)
- Chore(ci): route build/lint/test/coverage steps through makefile entrypoints(part of migration to pnpm) (@aprv10 in #4139)
⚙️ Refactoring
- Refactor(search): remove dead trace redux slice and its search actions/api (@swetalin-10 in #3999)
- Refactor(timeline): extract critical path logic into helper module (@sonalyadav1 in #4060)
- Refactor(stats): extract computespanselftime to shared utility (@yurishkuro in #4113)
- Refactor(ddg): use functional component for graph (@sksingh2005 in #4100)
- Refactor:migrate virtualizedtraceview to functional component (@sksingh2005 in #4081)
- Refactor(tracegraph): migrate to functional component (@sksingh2005 in #4058)