Backend Changes
⛔ Breaking Changes
- Fix(es): configure numeric attribute indexing instead of gating it (@ysh-bot in #9694)
- Refactor(es): give the span index its own options type (@ysh-bot in #9693)
- Fix(remote-storage): configure the service from one confmap-decoded file (@ysh-bot in #9699)
- Fix(es): honor index-prefix in dependencies/sampling legacy templates (@zarna1parekh in #9684)
- Feat(es): promote the native trace summaries gate to stable (@ysh-bot in #9609)
- Feat(query): promote the structured filters feature gate to beta (@ysh-bot in #9607)
- Feat(query): give span searches their own query interceptor hooks (@ysh-bot in #9597)
- Feat(es): promote the omitparentspanidreference gate to beta (@ysh-bot in #9586)
✨ New Features
- Feat(es): declare span search and pagination (@baroquebobcat in #9729)
- Feat(memory): execute caller-selected span ordering (@ysh-bot in #9672)
- Feat(query): expose span ordering in api v3 (@ysh-bot in #9671)
- Feat(storage): forward span ordering over grpc (@ysh-bot in #9670)
- Feat(query): validate and bind span ordering (@ysh-bot in #9669)
🐞 Bug fixes, Minor Improvements
- Fix(memory): skip same-service parents when building dependency links (@lopster568 in #9090)
- Fix(es-rollover): reject unknown --unit values in lookback (takeover #9442) (@jkowall in #9732)
- Fix(jaegerquery,remotestorage): remove nil error wrap in start() (@g-k-s-03 in #8882)
- Fix(memory): use read locks for read-only samplingstore methods (@shayannab in #9005)
- Fix(es): return an error for a nil predicate instead of panicking (@RudraDudhat2509 in #9709)
- Feat(es): break span sort ties on the backing index and document id (@baroquebobcat in #9720)
- Feat(es): search spans in the core reader (@baroquebobcat in #9704)
- Fix(release): re-enable slsa provenance with valid tag reference (#9046) (@Kartikupadhyay44 in #9702)
- Feat(es): wire span search through the elasticsearch reader (@baroquebobcat in #9700)
- Feat(es): lower starttime comparisons into filter (rfc 0016 m4) (@baroquebobcat in #9697)
- Fix(ai-sidecar): point default mcp url to query port 16686 (@rautaditya2606 in #9658)
- Fix(memory): validate positive maxtraces (@DsThakurRawat in #9634)
- Fix(es): gate attribute ordering separately from typed attribute indexing (@ysh-bot in #9690)
- Fix(query): answer capability refusals with unimplemented instead of invalidargument (@ysh-bot in #9685)
- Fix(storage): apply timeout to grpc storage calls (@anishmehta24 in #9638)
- Fix(remotesampling): reject non-positive leader election lease refresh intervals (@pujitha24 in #9647)
- Fix(es): give the sync batch size half of the bulk cap as headroom (@ysh-bot in #9645)
- Fix(jptrace): tracesdata.marshaltosizedbuffer writes to buffer head instead of tail (@om7057 in #9629)
- Fix(config): batch and block on overflow in the kafka ingester configurations (@ysh-bot in #9624)
- Fix(query): copy the whole pagination struct before clamping (@ysh-bot in #9618)
- Fix(query): clamp the page size on a copy rather than through the caller pointer (@ysh-bot in #9617)
- Feat(query): admit rfc 0014 pagination into the query path (@om7057 in #9450)
- Feat(es): support span.traceid and span.spanid in structured filters (@prajak002 in #9610)
- Fix(anonymizer): write ui trace file when max-spans-count is reached (@DsThakurRawat in #9567)
- Feat(query): add findspans to the query service (@baroquebobcat in #9581)
- Fix(mcp): reject negative durations in search_traces before querying (@pujitha24 in #9575)
- Fix(mcp): back off to a rune boundary when truncating read_skill (@om7057 in #9589)
- Fix(query): refuse a trace filter that a later interceptor drops (@ysh-bot in #9606)
- Fix(es): prevent service-operation key collisions (@SaadShakeel1 in #9440)
- Fix(elasticsearch): support ordered built-in text filters (@alishair7071 in #9477)
- Fix(samplingstore): propagate write errors in insertthroughput and insertprobabilitiesandqps (@shashankvarma499 in #9533)
- Fix(es): retry failed writes in the synchronous kafka ingester config (@ysh-bot in #9593)
- Feat(query): add the rfc 0014 pagination contract to tracestore (@om7057 in #9570)
- Fix(es-rollover): reject non-positive unit-count in lookback action (@DsThakurRawat in #9568)
- Test(jaegerquery): add labeled trace fixtures and e2e coverage for the built-in skills (@SoumyaRaikwar in #9263)
- Fix(query): prevent archiving archive-only traces (@jkowall in #9391)
- Fix(es): do not double the separator when index-prefix already ends in "-" (@pujitha24 in #9551)
- Fix(tracegen): validate attr-keys and attr-values to prevent divide-by-zero (@shashankvarma499 in #9545)
🚧 Experimental Features
- Feat(storage): add findspans and search pagination to the memory backend (@om7057 in #9611)
- Feat(storage): add the rfc 0014 page token that paginating readers return (@ysh-bot in #9655)
- Feat(query): add the api_v3 findspans handler and http route (@om7057 in #9613)
- Feat(es): add the jaeger_storage_writer connector to dead-letter rejected spans (@ysh-bot in #9604)
- Feat(es): report terminally rejected bulk items in a typed error (@ysh-bot in #9598)
- Feat(query): rfc 0016 m2 - pt 1 - add searchspans to capabilities and findspans to reader (@baroquebobcat in #9578)
👷 CI Improvements
- Feat(release): draft the github release when the prepare pr merges (@albertteoh in #9740)
- Ci(backward-compat): build the earlier revision from the latest release tag instead of main (@alishair7071 in #9547)
- Ci(test): raise the storage integration test timeout to 20 minutes (@ysh-bot in #9680)
- Ci: check out the default branch explicitly in the pr quota workflow (@ysh-bot in #9591)
- Test(integration): support explicit upgrade scenarios in backward-compatibility harness (@Kartikupadhyay44 in #9566)
⚙️ Refactoring
- Refactor(memory): give filter values a kind instead of one flag per type (@ysh-bot in #9677)
- Refactor(tracestore): make searchdepth and pagesize unsigned on internal query types (@Kartikupadhyay44 in #9642)
- Refactor(query): give the query service its own request types (@ysh-bot in #9654)
- Refactor(jptrace): share the hex trace and span id parsers (@ysh-bot in #9632)
- Refactor(exporter): register jaeger_storage_exporter as a connector with a dead-letter output (@ysh-bot in #9622)
- Refactor(storage): export the storage exporter's write core as tracewriter (@ysh-bot in #9599)
- Refactor(query): name search query fields in plain english in refusals (@ysh-bot in #9616)
- Refactor(query): validate a search query once in the query service alone (@ysh-bot in #9612)
- Refactor(storage): generalize paginated reader results (@ysh-bot in #9585)
📖 Documentation
- Docs(rfc): mark rfc 0016 m3 delivered (@ysh-bot in #9759)
- Docs(rfc): split the deferred kafka consumer milestone into receiver-level batching and a worker pool (@ysh-bot in #9696)
- Docs(rfc): record the es/os pagination and tie-breaking decisions for span search (@ysh-bot in #9691)
- Docs(rfc): state the single-value rule that attribute ordering must settle (@ysh-bot in #9679)
- Docs(rfc): specify caller-selected span ordering (@ysh-bot in #9667)
- Docs(rfc): record the delivered rfc 0014 m2 plumbing (@ysh-bot in #9630)
- Docs(adr): record synchronous elasticsearch writes and lossless pipelines in adr-014 (@ysh-bot in #9621)
- Docs(rfc): propose streaming responses for the api v3 http gateway (@ysh-bot in #9620)
- Docs(rfc): compare the clickhouse schema with the clickstack exporter schema (@ysh-bot in #9596)
- Docs(rfc): unify paginated reader results (@ysh-bot in #9584)
📊 UI Changes
🐞 Bug fixes, Minor Improvements
- Fix(trace): prevent call-stack overflow on deeply nested traces (@jkowall in #4554)
- Fix(model): align parentage with the backend (@ysh-bot in #4569)
- Fix(jaeger-ui): guard missing array fields in otelspanfacade (@abhayrajjais01 in #4323)
- Fix(dependencygraph): include lookback in view traces url to prevent 400 error. (@kams19-ops in #4151)
- Feat(genai): add a json (deep) view that unwraps embedded json (@ysh-bot in #4544)
- Fix(genai): accept bare gen_ai.input and gen_ai.output (@ysh-bot in #4542)
- Fix(flamegraph): preserve search highlighting when collapsing nodes above (@padmasri-web in #4529)
- Fix(api/v3): drop out-of-range search timestamps gracefully (@padmasri-web in #4508)
- Fix: improve image alt text (@Piyush4801 in #4524)
- Fix: optimize span index to row index lookup (@Safian62 in #4500)
- Fix: correct deep dependencies endpoint (@Safian62 in #4484)
- Feat(api/v3): validate v3 trace wire contract at boundary (@sksingh2005 in #4455)
- Fix(trace-timeline): make span-details divider draggable from the header (@KKamJi98 in #4412)
👷 CI Improvements
- Feat(release): draft the github release when the prepare pr merges (@albertteoh in #4571)
- Ci(security): resolve scorecard alerts (@ysh-bot in #4557)
- Ci: check formatting across platforms (@ysh-bot in #4495)
⚙️ Refactoring
- Test(model): materialize otlp trace specs (@sksingh2005 in #4527)
- Refactor(model): rename trace display helpers (@ysh-bot in #4573)
- Refactor(ui): convert deepdependencies to functional component (@Harizz076 in #3970)
- Chore: drop _get from spantreeoffset hover handlers (@Priyanshu-byte-coder in #4358)
- Chore(lint): replace react-x plugin with oxlint's native versions (@akashchamp in #4463)
- Chore: eliminate as any cast on redux store in app provider (#4333) (@Kartikupadhyay44 in #4456)
- Feat(monitor): migrate metrics fetching from redux to react query (@parshipcy in #4048)
- Refactor(tracepage): decouple graph search logic (@sksingh2005 in #4176)