Backend Changes
⛔ Breaking Changes
• Feat(query)!:remove v1 http endpoints the ui no longer calls (@ysh-bot in #9260)
• Replace ai.enable_mcp with an optional ai.mcp config block (@SoumyaRaikwar in #9194)
• Fix(es):reject five unsupported elasticsearch config keys at startup (@ysh-bot in #9076)
• Feat(clickhouse):promote clickhouse storage feature gate to stable (@ysh-bot in #9058)
✨ New Features
• Feat(mcp):let search_traces omit the service name (@ysh-bot in #9262)
• Feat(storage):let backends declare that search can omit the service name (@ysh-bot in #9256)
🐞 Bug fixes, Minor Improvements
• Fix(memory):match unset-status spans in error=false trace search (@hharshhsaini in #9096)
• Fix(anonymizer):register the gogo codec (@DsThakurRawat in #9540)
• Fix(release):paginate the commits query in the release notes script (@ysh-bot in #9560)
• Fix(release):fail the release notes script on PRs that cannot be categorized (@ysh-bot in #9561)
• Fix(es):surface failed _msearch items instead of dropping traces silently (@hharshhsaini in #9008)
• Feat(featuregate):normalize Jaeger gate names (@maindevhoon in #9037)
• Fix(mcp):use inclusive bound for critical path child search (@Harizz076 in #9174)
• Feat(es):accept --feature-gates in esmapping-generator and es-rollover init (@ysh-bot in #9546)
• Fix(anonymizer):read the writer's zero-span capture without panicking (@DsThakurRawat in #9528)
• Validate targetsamplespersecond is positive (@Atul-Koundal in #9379)
• Fix(es-index-cleaner):quote index prefix in index name pattern (@DsThakurRawat in #9525)
• Feat(es):add optional index.mapping.total_fields.limit to the span index template (@zarna1parekh in #9523)
• Fix(mcp):respect search_depth when maxresults is unlimited (0) (@shashankvarma499 in #9517)
• Es tracestore:set flags("none") on tag regexpquery (#9387) (@SHIVANSH-ux-ys in #9454)
• Fix(query):cap searchdepth at 10000 and reject negatives (@jkowall in #9492)
• Fix(security):clear open codeql and scorecard token-permission alerts (@jkowall in #9488)
• Fix(otel-demo):upgrade opensearch to 3.7.0 (@jkowall in #9397)
• Fix(es):clear the span writer's service cache in purge (@ysh-bot in #9416)
• Fix(storage):remove the duplicate otelgrpc handler on the storage client (@ysh-bot in #9417)
• Fix(telemetry):trace the jaeger_storage extension (@ysh-bot in #9414)
• Fix(otel-demo):harden dashboards rollout diagnostics (@jkowall in #9393)
• Fix(query):name server spans after the route when middleware copies the request (@ysh-bot in #9406)
• Fix(es):bound service and operation query lookback (@ekagra1602 in #9400)
• Fix(mcp):cap read_skill output at max_read_file_size (@CedricConday in #8993)
• [query] add erraccessdenied sentinel for query interceptor access-control errors (@rishabhkumar92 in #9402)
• Fix(storage):remove http status heuristics (@HESleagacy in #9386)
• Feat(ai-gateway):send configurable headers on the acp agent handshake (@SoumyaRaikwar in #9395)
• Fix(query):default search_depth in api_v3 grpc handler (@vyncint in #9100)
• Feat(mcptools):add gen_ai.tool.call.arguments/result to the gateway's mcp tool-call span (@SoumyaRaikwar in #9304)
• Fix(clickhouse):apply config defaults at unmarshal so explicit zeros survive (@ysh-bot in #9345)
• Fix(otel-demo):expand opensearch volume online (@jkowall in #9315)
• Fix(otel-demo):allow explicit opensearch recovery waiver (@jkowall in #9313)
• Fix(ai-gateway):preserve message boundaries when reading acp over websocket (@SoumyaRaikwar in #9296)
• Fix(otel-demo):add tested opensearch recovery gate (@jkowall in #9306)
• Feat(jaeger):expose default component factories via jaegercli.components (@iammdzaidalam in #9073)
• Fix(jaeger):exclude e2e-only storage_cleaner from the production binary (@ysh-bot in #9300)
• Feat(storage):let remote storage report its search capabilities (@ysh-bot in #9269)
• Fix(examples):add an otel collector startup probe (@jkowall in #9257)
• Fix(memory):return copies of stored traces, not references (@ysh-bot in #9261)
• Feat(query):reject a search the storage backend cannot serve (@ysh-bot in #9259)
• Fix(examples):pin the otel demo chart (@jkowall in #9245)
• Fix(es):return non-error traces for error=false search (@hharshhsaini in #9210)
• Fix(apiv3):return notfound for missing trace (@ADITYA-CODE-SOURCE in #9151)
• Feat(jaegerai):add gen_ai.tool.call.arguments/result to sidecar tool-call spans (@SoumyaRaikwar in #9011)
• Feat(es):add optional poison-pill drop for synchronous writes (@ysh-bot in #9109)
• Feat(es):warn on misaligned synchronous-write batch sizing (@ysh-bot in #9098)
• Feat(es):add deterministic content-hash _id for idempotent span writes (@ysh-bot in #9094)
• Fix(es):add spanid tie-breaker to trace-read search_after pagination (@hharshhsaini in #9063)
• Feat(query):return a context from query interceptor hooks (@ysh-bot in #9082)
• Fix(elasticsearch):use post instead of get for _msearch requests (@magic-peach in #9027)
• Feat(es):rewire sniffing.enabled and log_level onto the esclient transport (@ysh-bot in #9077)
• Fix(es):restore gzi