releases.shpreview

APM

Application performance monitoring and tracing SDKs

Mon
Wed
Fri
JunJulAugSepOctNovDecJanFebMarAprMayJun
Less
More
Releases77Avg Interval31hAvg Cadence24/mo

WebSocket connections no longer fail; memory leaks fixed

This release1 enhancementImprovements to existing features11 fixesBug fixesAI-tallied from the release notes
Bug Fixes
  • AAP: This fix resolves an issue where the AppSec body-parsing hook consumed the websocket.connect ASGI message, causing ASGI/FastAPI WebSocket connections to fail with HTTP 500 w hen AppSec was enabled.
<!-- -->
  • CI Visibility: fix the default HTTP timeout for backend requests from 15 seconds to 30 seconds, and add the DD_CIVISIBILITY_BACKEND_API_TIMEOUT_MILLIS environment variable (previ ously missing) to override it. The value is expressed in milliseconds (e.g. 60000 for 60 seconds), consistent with the Java tracer. The same timeout now applies uniformly to all ba ckend requests, including skippable test fetches.
<!-- -->
  • tracing: Fixes a race condition where extra service names could be silently dropped from Remote Configuration /v0.7/config payloads in multi-threaded applications (e.g. uWSGI).
<!-- -->
  • LLM Observability: Fixes an issue where reasoning_content was missing from streamed chat completions in the OpenAI and LiteLLM integrations when an OpenAI-compatible reasoning pr ovider (e.g. DeepSeek, Qwen) emitted delta.reasoning_content chunks. The aggregated message now captures reasoning text in the output message, matching non-streaming behavior.
<!-- -->
  • Fixed an issue that could have caused some timers, like the one responsible for Symbol Database uploads, to fire repeatedly after the first execution.
<!-- -->
  • internal: This fix resolves a memory leak where reference cycles through PeriodicThread callbacks were invisible to Python's cyclic garbage collector and could accumulate when th reads used bound methods as targets.
<!-- -->
  • profiling: Fixes a memory leak in native frame tracking caused by unbounded native call-site metadata growth.
<!-- -->
  • SCA: This fix resolves an issue where unresolved runtime reachability targets could accumulate across Software Composition Analysis updates, causing resident memory usage to grow o ver time.
<!-- -->
  • sqlalchemy: Fixes duplicate SQLAlchemy event listeners when trace_engine() is called repeatedly for the same engine.
<!-- -->
  • dynamic instrumentation: fixes an issue where the Symbol Database uploader sends empty payloads on a recurring timer.
<!-- -->
  • code origin: fixed an issue that could have caused pytest to crash internally when inspecting the call stack from an exception thrown by a view function when Code Origin is enabled

Claude Agent errors now show descriptive messages; service name race fixed

This release5 fixesBug fixesAI-tallied from the release notes
Bug Fixes
  • LLM Observability: This fix resolves an issue in the Claude Agent SDK integration where a span's error message showed an uncategorized unknown error category from the upstream Claude Agent SDK instead of a descriptive API error. The integration now surfaces the detailed error message from the assistant message content.
<!-- -->
  • tracing: Fixes a race condition where extra service names could be silently dropped from Remote Configuration /v0.7/config payloads in multi-threaded applications (e.g. uWSGI).
<!-- -->
  • code origin: fixed an issue that could have caused pytest to crash internally when inspecting the call stack from an exception thrown by a view function when Code Origin is enabled.
<!-- -->
  • LLM Observability: Resolves an issue where non-string tag values passed to LLMObs.annotate(tags=...) could cause spans to be dropped during ingestion.
<!-- -->
  • LLM Observability: Fixes provider mis-attribution on openai spans when an OpenAI (or AsyncOpenAI) client and an AzureOpenAI (or AsyncAzureOpenAI) client are instantiated at the same time. Provider is now determined per-call rather than from the most recently constructed client.

Bedrock Converse/ConverseStream support; OTLP trace IDs now 128-bit

This release1 featureNew capabilities5 fixesBug fixesAI-tallied from the release notes
  • [bd9c62865a] - (SEMVER-PATCH) fix(cucumber): support v13 parallel mode (Juan Antonio Fernández de Alba) #8748
  • [5beadb493f] - (SEMVER-PATCH) test(ci): harden sandbox cleanup (Juan Antonio Fernández de Alba) #8741
  • [80fbfd2b7e] - (SEMVER-PATCH) fix(vitest): pin node 18 vitest 3 version (Juan Antonio Fernández de Alba) #8747
  • [5ef172cd28] - (SEMVER-MINOR) feat(aws-sdk, llmobs): support Bedrock Converse and ConverseStream (Alexandre Choura) #8079
  • [c8eb110fc1] - (SEMVER-PATCH) fix(llmobs/ai): surface prompt cache tokens for Vercel AI SDK integration across all supported providers (Jessica Gamio) #8530
  • [6588ac18da] - fix(otlp): Ensure all OTLP spans get the full 128-bit trace IDs (Zach Montoya) #8618
  • [376bad086b] - (SEMVER-PATCH) test(profiling): add retries to OOM heap profile tests for Node 26 compatibility (Attila Szegedi) #8742
  • [e46c478d65] - (SEMVER-PATCH) chore(deps): bump the serverless group across 1 directory with 11 updates (dependabot[bot]) #8738
  • [fe0be207ed] - (SEMVER-PATCH) chore(deps): bump the ai-and-llm group across 1 directory with 5 updates (dependabot[bot]) #8736
  • [e83cf13cdf] - (SEMVER-PATCH) fix(profiling): route logger calls through central log module (Ayan Khan) #8697
  • [908c8119d2] - (SEMVER-PATCH) chore(deps): bump openai (dependabot[bot]) #8735
  • [03116dfb95] - (SEMVER-PATCH) ci(release): fix validation workflow never triggering on proposal branches (Roch Devost) #8714
  • [3b6d66c138] - (SEMVER-PATCH) test(aws-sdk): fix flaky stepfunctions startExecution span assertion (Roch Devost) #8717
  • [0687e2f44f] - (SEMVER-PATCH) fix(ci): handle stale failure conclusion in all-green retry (Roch Devost) #8599

Memory leaks fixed in profiling, SCA, and periodic timers

This release4 fixesBug fixesAI-tallied from the release notes
Bug Fixes
  • internal: Fixed an issue that could have caused some timers, like the one responsible for Symbol Database uploads, to fire repeatedly after the first execution.
<!-- -->
  • internal: This fix resolves a memory leak where reference cycles through PeriodicThread callbacks were invisible to Python's cyclic garbage collector and could accumulate when threads used bound methods as targets.
<!-- -->
  • profiling: Fixes a memory leak in native frame tracking caused by unbounded native call-site metadata growth.
<!-- -->
  • SCA: This fix resolves an issue where unresolved runtime reachability targets could accumulate across Software Composition Analysis updates, causing resident memory usage to grow over time.

AI Guard blocks now bypass generic exception handlers; AWS Durable Execution traced

This release13 featuresNew capabilities3 enhancementsImprovements to existing features12 fixesBug fixesAI-tallied from the release notes
Upgrade Notes
  • AI Guard: ddtrace.appsec.ai_guard.AIGuardAbortError now derives from ddtrace.internal._exceptions.DDBlockException (a BaseException subclass) instead of Exception. This brings AI Guard block decisions in line with how ASM blocks are surfaced and prevents a generic except Exception: in user code from silently swallowing a block.
<!-- -->
  • settings: Legacy environment variable names registered as aliases in the configuration registry now also work when set via local or fleet stable config files, not just shell environment variables. #17958
<!-- -->
  • ray: Adds DD_TRACE_RAY_IGNORED_ACTORS configuration to exclude specific Ray actor methods from instrumentation. Set DD_TRACE_RAY_IGNORED_ACTORS='{"ActorA": ["method1"], "ActorB": "*"}' to leave matching methods or actors uninstrumented while continuing to trace other Ray actor methods. Matching is based on actor class name only.
Deprecation Notes
  • Tracing: DD_TRACE_INFERRED_SPANS_ENABLED is deprecated and will be removed in 5.0.0. Use DD_TRACE_INFERRED_PROXY_SERVICES_ENABLED instead. The old environment variable continues to work but emits a DDTraceDeprecationWarning when set.
New Features
  • aws_durable_execution_sdk_python: Add tracing support for the aws-durable-execution-sdk-python library. Instruments @durable_execution workflows and DurableContext operations (step, invoke, wait, wait_for_condition, wait_for_callback, create_callback, map, parallel, run_in_child_context) to generate spans.
<!-- -->
  • LLM Observability: Adds step spans to the Claude Agent SDK integration. Each inference cycle is now represented by a step container span with an llm child span for the model call and tool child spans for any tool invocations.
<!-- -->
  • tracing: Adds a centralized supported-configurations.json registry of all supported DD_* and OTEL_* environment variables, following the same schema used by other Datadog tracing libraries. Accesses to unregistered environment variables now produce a debug log to help identify typos or unsupported configuration options.
<!-- -->
  • AI Guard: Copies anomaly-detection attributes from the local root (service-entry) span onto every ai_guard span: ai_guard.http.useragent, ai_guard.http.client_ip, ai_guard.network.client.ip, ai_guard.usr.id and ai_guard.usr.session_id.
<!-- -->
  • AI Guard: When DD_AI_GUARD_ENABLED=true is set and an ai_guard span is created during a request, the tracer now populates http.client_ip and network.client.ip on the service-entry (local root) span, mirroring the behavior used for Application Security. If AI Guard does not run during the request, no client IP tags are added. DD_TRACE_CLIENT_IP_ENABLED is ignored once AI Guard reports, and DD_TRACE_CLIENT_IP_HEADER continues to override header resolution.
<!-- -->
  • ai_guard: add AI Guard evaluation support to the OpenAI SDK chat completions instrumentation. Both non-streaming and streaming requests and non-streaming responses are evaluated through the configured AI Guard client, and evaluation is automatically skipped when a framework integration (LangChain, Strands Agents) is already evaluating the same call.
<!-- -->
  • code origin for spans: The code origin for spans feature has been enabled by default.
<!-- -->
  • code origin: attach code origin information to the first span generated by a function wrapped with <span class="title-ref">tracer.wrap</span>.
<!-- -->
  • openfeature: This introduces a configurable initialization timeout for DataDogProvider. The timeout controls how long initialize() waits for configuration before returning, and defaults to 10 seconds. Set it via the DD_EXPERIMENTAL_FLAGGING_PROVIDER_INITIALIZATION_TIMEOUT_MS environment variable or the init_timeout constructor parameter.
<!-- -->
  • CI Visibility: This introduces Jenkins custom parent ID propagation, which enables Datadog to correlate tests run from Jenkins with their Jenkins jobs and pipelines.
<!-- -->
  • LLM Observability: Adds an optional cost_tags argument to LLMObs.annotate() and LLMObs.annotation_context(). Pass a list of tag keys (already set via tags or annotated previously on the same span) to have them attached to the cost and token metrics generated from LLM and embedding spans, which can help breaking down spend by team, project, org, or any custom dimension.
<!-- -->
  • LLM Observability: Adds support for an optional version (string) field on each tool definition dictionary passed to LLMObs.annotate() via the tool_definitions parameter.
<!-- -->
  • profiling: Add DD_PROFILING_LOCK_EXCLUDE_MODULES config to skip lock profiling for framework-internal locks. Excluded locks remain native with zero profiling overhead. Set it to a comma-separated list of module prefixes (e.g., django.db,sqlalchemy.pool,urllib3).
<!-- -->
  • LLM Observability: Bedrock Agent orchestration step events (model invocations, tool/action group calls, knowledge base lookups, guardrails, rationales) are now emitted as APM child spans of the Bedrock Agent <agent_id> span when LLM Observability is enabled, with the same LLMObs payload shape as before.
Bug Fixes
  • tracing: Exclude wrapt==2.2.0 from the supported dependency range to avoid a regression that breaks wrapped C descriptors.

  • ai_guard: This fix resolves a conflict between ddtrace.auto and strands when imported in the same file, which left Strands hooks silently disabled. The Strands integration now loads lazily on first attribute access so its event class identities match those the agent dispatches.

<!-- -->
  • appsec: Adds telemetry metrics instrum.user_auth.missing_user_login and instrum.user_auth.missing_user_id when Django auth events cannot resolve the expected identity fields, enabling detection of misconfigured user model field mappings.
<!-- -->
  • AAP: This fix resolves an issue where the usr.session_id tag was missing from the entry span of authenticated follow-up Django requests when automatic user instrumentation was enabled. They now also carry usr.session_id, matching other authenticated user-tagging paths.
<!-- -->
  • azure_cosmos: This change removes the http.status_code tags from Azure CosmosDB spans and replaces them with the use of the db.response.status_code metric. For customers using ddtrace v4.8.0 and relying on the http.status_code tag of cosmosdb.query spans, this is a breaking change.
<!-- -->
  • CI Visibility: Fixes an issue in the pytest plugin where a malformed log call emitted a --- Logging error --- traceback to stderr during Attempt to Fix retries, polluting pytest output and contributing to spurious test failures.
<!-- -->
  • CI Visibility: Fixes an IndexError in retry bookkeeping that occurred when a test's teardown phase failed. The error produced --- Logging error --- tracebacks in stderr, which could pollute test output and cause spurious test failures during retries. #17863
<!-- -->
  • CI Visibility: Fixes a regression where setting DD_TEST_MANAGEMENT_ENABLED=0 was not honored by the new pytest plugin, causing Test Management features such as quarantining, disabling tests, and Attempt to Fix to remain enabled.
<!-- -->
  • CI Visibility: Fixes code coverage instrumentation on Python 3.13, 3.14, and 3.15. Resolves lost per-test line data caused by: sys.monitoring callbacks running in a snapshot context where ContextVar changes are not visible (Python 3.14+); empty modules emitting no LINE events (Python 3.13+); and ProcessPoolExecutor child coverage not being propagated to the parent context. Also fixes a stale-data bug where child process executable lines could inflate coverage denominators after stop_coverage() was called before join().
<!-- -->
  • datastreams: Demotes the retry limit exceeded submitting pathway stats log from ERROR to WARNING and removes the multi-line traceback from the record. This message fires when the processor cannot reach the agent within its 1-second timeout; the dropped 10 seconds of DSM data is auto-recovered on the next flush.
<!-- -->
  • LLM Observability: Fixes a concurrency bug in the Bedrock Agent integration where concurrent invoke_agent calls could orphan or cross-attribute spans due to shared class-level state. Per-invocation state is now used.
<!-- -->
  • LLM Observability: This fix resolves an issue where text wrapped in Bedrock Converse guardContent content blocks was rendered as [Unsupported content type: guardContent] in traces, dropping the user's input.
<!-- -->
  • Fixed an issue that could have caused some instrumented code to fail to execute correctly when the original function had keyword arguments passed in as a cell variable.
<!-- -->
  • CI Visibility: Fixes an issue where tests marked as attempt-to-fix could have failures hidden when they were also quarantined or disabled.
<!-- -->
  • django: Stop tagging async view and middleware spans as errored on routine ASGI cancellations (e.g. client disconnects on streaming responses), a regression introduced in 4.8.0rc4. Cancellation still propagates; the span just finishes without error.type='asyncio.exceptions.CancelledError'.
<!-- -->
  • django: Fixes DD_DJANGO_DATABASE_SERVICE and DD_DJANGO_DATABASE_SERVICE_NAME, which were previously generated as DD_DJANGO-DATABASE_SERVICE and DD_DJANGO-DATABASE_SERVICE_NAME. The hyphenated names were invalid POSIX identifiers and unusable from most shells. Hyphens in integration names are now normalized to underscores when building env var names. The old hyphenated names are preserved as aliases for backward compatibility. #17952
<!-- -->
  • django: API endpoint discovery now supports Django sub-applications mounted with django.urls.include(...). Endpoints are reported with their full URL path including the parent prefix — for example, a view served at /api/users/ is now reported as /api/users/ instead of losing the /api/ prefix.
<!-- -->
  • django: API endpoint discovery now reports the correct HTTP methods for views decorated with @require_http_methods combined with another decorator such as @csrf_exempt; the declared methods are reported instead of a generic wildcard entry.
<!-- -->
  • telemetry: tolerate malformed installed distribution metadata so a single bad dist-info entry no longer floods stderr with repeated tracebacks.
<!-- -->
  • langchain, botocore: This fix resolves an issue where auto-instrumented langchain_aws.ChatBedrockConverse spans reported an opaque inference-profile ARN identifier as the model name when an inference profile was used. base_model_id which represents the underlying foundation model is now checked first when extracting model names, and the botocore Bedrock integration reads the resolved base model from a shared in-process cache populated by langchain so the same resolution applies to the underlying bedrock-runtime span.
<!-- -->
  • LLM Observability: This fix resolves an issue where running an experiment with a dataset whose records had null metadata caused the summary evaluator to crash with a TypeError while preparing evaluator inputs.
<!-- -->
  • LLM Observability: Changes the default model_name and model_provider of LLM and embedding spans from custom to unknown if not provided or empty. This applies to both auto-instrumented spans and manual instrumentation via LLMObs.llm() / LLMObs.embedding() and the @llm / @embedding decorators.
<!-- -->
  • profiling: Fixes an issue where the lock profiler silently stopped capturing lock events when running under ddtrace-run with <span class="title-ref">gevent</span> installed.
<!-- -->
  • LLM Observability: The OpenAI integration now preserves assistant message content when tool_calls are present on the same message. #17760
<!-- -->
  • openfeature: This fix resolves an issue where DataDogProvider.initialize() returned before configuration was received, causing the OpenFeature SDK to mark the provider as ready to serve evaluations too early and flag evaluations to silently return default values. The provider now waits for configuration before returning.
<!-- -->
  • openfeature: Fixes targeting key handling in the OpenFeature provider. None targeting key is now correctly passed to the native evaluator instead of being coerced to empty string. Flags that don't require a targeting key (static, rule-based) now evaluate successfully without one, matching the Datadog provider spec. Additionally, the Rust binding now correctly maps TargetingKeyMissing errors from libdatadog instead of returning a generic error code.
<!-- -->
  • tracing: Fixes an issue where the svc.auto process tag produced garbled values such as python_-m_unittest when a process was launched with the full command as a single sys.argv[0] string (e.g. from a Docker ENTRYPOINT, a process manager, or a subprocess call with an unsplit command). The correct module or script name is now extracted in these cases. #17764
<!-- -->
  • profiling: A crash that could happen in child processes after fork has been fixed.
<!-- -->
  • profiling: A rare crash caused by the memory allocation profiler has been fixed.
<!-- -->
  • RemoteConfig: Fixed an issue where deleted remote configurations were not applied, causing stale settings to persist.
<!-- -->
  • tracing: This fix resolves a memory leak where reference cycles through a span's properties were invisible to Python's cyclic garbage collector and accumulated proportionally to traced call volume.
<!-- -->
  • starlette: This fix resolves an issue where passing middleware=None caused application startup to fail when Starlette tracing was enabled.
<!-- -->
  • wsgi: This fix resolves an issue where the http.url tag on inbound request spans contained the WSGI mount prefix twice (for example /admin/admin/users instead of /admin/users) when the application was served behind werkzeug.middleware.dispatcher.DispatcherMiddleware or any other in-process mount that preserves the original request URI in RAW_URI / REQUEST_URI while also setting SCRIPT_NAME.
<!-- -->
  • tracing: A crash that occurred when exiting a gevent application with DD_TRACE_DEBUG=1 has been fixed.
<!-- -->
  • langchain: Strips interface identifiers (e.g. chat, llm) and path prefixes (e.g. models/) when extracting the model_provider and model_name, so reported values identify the actual provider and model name rather than the LangChain interface or API resource path.
<!-- -->
  • llmobs: fixes child spans created within an experiment task not inheriting the dataset_id tag. Previously only dataset_name was propagated via baggage to child spans; dataset_id is now propagated as well, making dataset, project, and experiment context (name and ID) consistent across all spans in an experiment trace.
<!-- -->
  • Profiling: This fixes a bug where uploaded profiles would not have a linked span post fork
<!-- -->
  • profiling: A rare crash happening on systems with small stack sizes when profiling asyncio code has been fixed.
<!-- -->
  • propagation: Limits parsing of the W3C tracestate header during tracecontext extraction to 32 list-members and 512 UTF-8 bytes, consistent with the W3C Trace Context specification (https://www.w3.org/TR/trace-context/). Extra list-members and trailing whole entries that would exceed the byte budget are ignored, so unusually large headers no longer expand unbounded work during extraction. The Datadog dd= list-member is preferred: it is kept when present (including when it appears late in the header or alone exceeds the byte cap), and other vendors are dropped first. List-members longer than DD_TRACE_TRACESTATE_ITEM_MAX_CHARS (128) characters are removed first when trimming by list-member count or byte budget, so shorter vendor entries are kept when possible.
<!-- -->
  • Fixed a startup deadlock when using snowflake-connector-python >= 4.4.0 with DD_TRACE_SNOWFLAKE_ENABLED=true.
<!-- -->
  • tracing: This change fixes an issue in which <span class="title-ref">svc_src</span> is set to <span class="title-ref">m</span> in cases where <span class="title-ref">service</span> matches the <span class="title-ref">_default_service</span> of an active integration config. In such cases, the intended behavior is that it <span class="title-ref">svc_src</span> is equal to <span class="title-ref">service</span>. #17712
<!-- -->
  • tracing: Parsing incoming baggage HTTP headers now respects DD_TRACE_BAGGAGE_MAX_ITEMS [default 64] and DD_TRACE_BAGGAGE_MAX_BYTES [default 8192], consistent with baggage injection. Previously, extraction could retain every comma-separated entry regardless of those limits. The tracer drops excess pairs and records truncation telemetry when limits apply.
Other Changes
  • profiling: The ECHION_ALT_VM_READ_FORCE configuration flag has been removed and support for the associated feature has been dropped.

Wrapt 2.2.0 excluded; agent connection logs fixed

This release2 fixesBug fixesAI-tallied from the release notes
Bug Fixes
  • tracing: Exclude wrapt==2.2.0 from the supported dependency range to avoid a regression that breaks wrapped C descriptors.
  • LLM Observability: Agent connection error logs are no longer logged when using agentless and not running a Datadog agent.

Undici CONNECT span no longer unfinished; metrics delta temporality fixed

This release1 featureNew capabilities5 enhancementsImprovements to existing features5 fixesBug fixesAI-tallied from the release notes
  • [f7f2c7c2f1] - (SEMVER-PATCH) chore(deps): bump the gh-actions-packages group across 2 directories with 2 updates (dependabot[bot]) #8563
  • [4afcb7eed4] - (SEMVER-PATCH) fix(undici) unfinished CONNECT span (Pablo Erhard) #8558
  • [a34acbb466] - (SEMVER-PATCH) test(aerospike,couchbase): fix hook timeouts and couchbase service readiness (Roch Devost) #8550
  • [908e4d7558] - (SEMVER-PATCH) perf: reduce redis and ioredis bindStart overhead (Ruben Bridgewater) #8494
  • [85211ec3ec] - (SEMVER-PATCH) fix(metrics): fix delta temporality not being applied to OTLP counter exports (Sameeran Kunche) #8556
  • [32b49b2a0d] - (SEMVER-PATCH) chore(deps): bump openai (dependabot[bot]) #8539
  • [0bc47a6727] - (SEMVER-PATCH) perf(graphql): skip stacktrace symbolication on validation-only errors (Ruben Bridgewater) #8499
  • [8feb9ce389] - (SEMVER-PATCH) fix(types): import opentracing from the consumer's installed package (Ruben Bridgewater) #8525
  • [31353c773c] - (SEMVER-PATCH) ci: remove systematic Mocha --retries 1 on master (Roch Devost) #8552
  • [e769f32bb0] - (SEMVER-PATCH) fix(google-cloud-pubsub): poll for GC collection instead of fixed retry count (Roch Devost) #8553
  • [180549f994] - (SEMVER-PATCH) fix(mongoose): make PeerCat model registration idempotent (Roch Devost) #8551
  • [d7e1a534e9] - (SEMVER-PATCH) fix(aws-sdk): fix flaky SFN, SNS DSM, S3, and Bedrockruntime tests (Roch Devost) #8548
  • [1c8044f42a] - (SEMVER-PATCH) fix(appsec): increase beforeEach timeout in rasp-metrics integration test (Roch Devost) #8547
  • [e6eac5a6f0] - (SEMVER-PATCH) fix(electron): fix flaky IPC tests and Xvfb startup race (Roch Devost) #8546
  • [43f95f074d] - (SEMVER-PATCH) chore(ci): update dd-sts-action to v1.0.1 (Charles de Beauchesne) #8545
  • [d5421208ad] - (SEMVER-PATCH) ci(electron): push results to test optimization (Roch Devost) #8544
  • [65a9329653] - (SEMVER-PATCH) chore(deps): bump ws from 8.20.0 to 8.20.1 in /benchmark/sirun/startup/everything-fixture in the npm_and_yarn group across 1 directory (dependabot[bot]) #8542
  • [178fc6bd2a] - (SEMVER-PATCH) chore(ci): set ffe as owner of .github/workflows/openfeature.yml (Charles de Beauchesne) #8535
  • [25d47abf77] - (SEMVER-PATCH) test only Node LTS (Pablo Erhard) #8529
  • [a01a6b8efd] - (SEMVER-PATCH) test: prefer assert.match for string matching (Thomas Watson) #8540
  • [49f1bb171a] - (SEMVER-PATCH) test(electron): raise plugin-spec startApp beforeEach timeout to 10s (Ruben Bridgewater) #8536
  • [dcfdb77b29] - (SEMVER-PATCH) test(debugger): widen sampling spec tolerance to absorb wall-clock skew (Thomas Watson) #8534
  • [7302ef8258] - (SEMVER-PATCH) test: use assert.strictEqual / notStrictEqual for === and !== checks (Thomas Watson) #8538
  • [f74834adaa] - (SEMVER-PATCH) [test optimization] Fix early metadata encoding bug (Juan Antonio Fernández de Alba) #8528
  • [18d97575dc] - (SEMVER-PATCH) perf(id): memoise Identifier.toBigInt instead of re-decoding the buffer per call (Ruben Bridgewater) #8495
  • [54f0666bbb] - (SEMVER-PATCH) fix(rewriter): emit valid ESM imports for instrumented modules (Ruben Bridgewater) #8526
  • [7b5b32caca] - (SEMVER-PATCH) fix(kafkajs): skip header injection on brokers below Produce v3 (Ruben Bridgewater) #8390
  • [ab11acdbb6] - (SEMVER-PATCH) test: reduce agent.load overhead by reducing proxyquire calls (Ruben Bridgewater) #8099
  • [85baecf3cd] - (SEMVER-PATCH) perf(elasticsearch): cache per-instance tag keys and skip empty params stringify (Ruben Bridgewater) #8376
  • [5d72f2d380] - (SEMVER-PATCH) refactor(graphql): drop unused @graphql-tools/executor deep hook (Ruben Bridgewater) #8510
  • [c1eddead4b] - (SEMVER-PATCH) ci(codecov): restrict codecov/patch to PRs targeting master (Ruben Bridgewater) #8464
  • [9952e24b41] - (SEMVER-PATCH) chore(llmobs): fix flaky openai test (Sam Brenner) #8490
  • [f8614b357f] - (SEMVER-PATCH) feat(shimmer): add wrapCallback for tracer-controlled closures (Ruben Bridgewater) #8503
  • [3631da6a36] - (SEMVER-MINOR) feat(appsec): Always report content-length and content-type response headers when appsec is enabled (Carles Capell) #8482
  • [858e1cb0a2] - (SEMVER-PATCH) perf(storage): cache storage() at module load (Ruben Bridgewater) #8500
  • [bcab75cd29] - (SEMVER-MINOR) feat(crashtracking): capture and report uncaught exceptions (Gyuheon Oh) #8176
  • [28c1ff37b8] - (SEMVER-PATCH) perf(service-naming): short-circuit repeat registerExtraService calls (Ruben Bridgewater) #8496
  • [bdc736b843] - (SEMVER-PATCH) [test optimization] parallelize test optimization requests (Juan Antonio Fernández de Alba) #8520
  • [29cd9f5967] - (SEMVER-PATCH) [test optimization] use worker efd retry count in parallel cucumber (Juan Antonio Fernández de Alba) #8478
  • [9f243d934c] - (SEMVER-PATCH) [test optimization] merge static mocked files with recorded mocks in jest (Juan Antonio Fernández de Alba) #8477
  • [19dfbe4dbe] - (SEMVER-PATCH) test: targeted aerospike and electron suite timeouts (Ruben Bridgewater) #8527
  • [30cbcacac3] - (SEMVER-MINOR) feat(appsec): collect Datadog security-testing headers on entry spans (Christophe Papazian) #8463
  • [16ab502164] - (SEMVER-PATCH) [test optimization] stabilize vitest async setup instrumentation (Juan Antonio Fernández de Alba) #8519
  • [c497d0a4ca] - (SEMVER-PATCH) fix(mocha): correct timing for top-level it() tests (Sebastián Kay) #8480
  • [806f177fbf] - (SEMVER-MINOR) feat(mongodb): add opt-in query value obfuscation (Ruben Bridgewater) #8401
  • [f9a39f203d] - (SEMVER-PATCH) [test optimization] Stabilize Cypress intake payload waits (Juan Antonio Fernández de Alba) #8522
  • [f221629d3b] - (SEMVER-PATCH) chore(deps): bump axios (dependabot[bot]) #8518
  • [539aa4a662] - (SEMVER-PATCH) fix(grpc): handle client_streaming and bidi 3-arg overload (Crystal Luc-Magloire) #8276
  • [1eda439d60] - (SEMVER-PATCH) fix(openfeature): cap pending exposure events (Ruben Bridgewater) #8162
  • [9e41a6aae3] - (SEMVER-PATCH) deprecation(llmobs): deprecate llmobs.enable and llmobs.disable for dd-trace v7 (Sam Brenner) #8427
  • [934f932039] - (SEMVER-PATCH) ci(appsec): split next jobs by individual version instead of range (Roch Devost) #8472
  • [c4b0554b7d] - (SEMVER-PATCH) chore(deps): bump express (dependabot[bot]) #8488
  • [7a01a98566] - (SEMVER-PATCH) ci(apm-integrations): split next jobs by individual version instead of range (Roch Devost) #8484
  • [199e240fb1] - (SEMVER-PATCH) ci(all-green): rerun failed workflows on startup when all-green is rerun (Roch Devost) #8475
  • [4566023687] - (SEMVER-PATCH) ci: split integration-bundler into integration-esbuild and integration-webpack (Roch Devost) #8470
  • [ee54394360] - (SEMVER-PATCH) ci: retry yarn install on failure in datadog-ci action (Roch Devost) #8459
  • [d482f4b7e9] - (SEMVER-PATCH) ci: remove node_modules cache from install action (Roch Devost) #8393
  • [c833bf860a] - (SEMVER-PATCH) chore(benchmark): reduce sirun log iterations from 40 to 10 (Roch Devost) #8474
  • [94c1d4e91c] - (SEMVER-MINOR) feat(kafkajs): add kafka.messages.offsets to producer span (Piotr WOLSKI) #8468

Langchain Bedrock spans now use correct model; inference profile ARN bug fixed

This release1 fixBug fixesAI-tallied from the release notes

Estimated end-of-life date, accurate to within three months: 05-2027 See the support level definitions for more information.

Bug Fixes
  • LLM Observability: Users auto instrumenting Langchain and using Bedrock inference profiles would have their spans' be associated with the inference profile's ARN instead of the underlying LLM model. We now resolve the correct underlying model if users pass base_model_id to their ChatBedrockConverse instantiation. https://github.com/DataDog/dd-trace-py/pull/18151

Full Changelog: https://github.com/DataDog/dd-trace-py/compare/v4.8.5...v4.8.6

Bedrock guardContent no longer drops user input; inferred spans setting deprecated

This release1 enhancementImprovements to existing features4 fixesBug fixesAI-tallied from the release notes

Estimated end-of-life date, accurate to within three months: 05-2027 See the support level definitions for more information.

Deprecation Notes
  • Tracing: DD_TRACE_INFERRED_SPANS_ENABLED is deprecated and will be removed in 5.0.0. Use DD_TRACE_INFERRED_PROXY_SERVICES_ENABLED instead. The old environment variable continues to work but emits a DDTraceDeprecationWarning when set.
Bug Fixes
  • LLM Observability: This fix resolves an issue where text wrapped in Bedrock Converse guardContent content blocks was rendered as [Unsupported content type: guardContent] in traces, dropping the user's input.
<!-- -->
  • LLM Observability: The OpenAI integration now preserves assistant message content when tool_calls are present on the same message. #17760
<!-- -->
  • starlette: This fix resolves an issue where passing middleware=None caused application startup to fail when Starlette tracing was enabled.
<!-- -->
  • LLM Observability: Resolves an issue in the Claude Agent SDK integration where unnecessary LLM spans were being created and affecting the trace structure. The handler now only opens a new LLM span after a UserMessage that actually contained tool results, so messages without tool results no longer overwrite the in-flight LLM span.
  • [03ac52a9a1] - (SEMVER-PATCH) bump native-metrics to 3.1.2 (Roch Devost) #8473
  • [65ca8204f9] - (SEMVER-PATCH) fix(lint): validate config names against both index.d.ts and index.d.v5.ts (Roch Devost) #8465
  • [ba39be2a3f] - (SEMVER-PATCH) ci(llmobs): parallelize openai job by Node version (Roch Devost) #8471
  • [2b8834f73a] - (SEMVER-PATCH) ci: route high-volume CI API calls through dd-octo-sts (Roch Devost) #8391
  • [dc3e2ec89e] - (SEMVER-PATCH) feat(electron): add initial support (Roch Devost) #7002
  • [56b6048e0b] - (SEMVER-PATCH) [test optimization] stabilize web app server lifecycle (Juan Antonio Fernández de Alba) #8444
  • [ae0e0c8872] - (SEMVER-PATCH) [test optimization] Fix playwright v5 tests (Juan Antonio Fernández de Alba) #8458
  • [3325f9eed8] - (SEMVER-PATCH) ci(serverless): use tags for serverless-tools ci (Olivier Nzia) #8213
  • [07cf95645a] - (SEMVER-PATCH) fix(config): keep v5 IAST programmatic aliases working (Ruben Bridgewater) #8457
  • [991d15c649] - (SEMVER-PATCH) refactor(config): route env reads through the config singleton (Ruben Bridgewater) #8241
  • [423ac93b66] - (SEMVER-PATCH) chore(aiguard): Fix ai guard flaky test (Ugaitz Urien) #8454
  • [afdaeed5c2] - (SEMVER-PATCH) chore(deps): bump oxc-parser from 0.128.0 to 0.129.0 in the runtime-minor-and-patch-dependencies group across 1 directory (dependabot[bot]) #8446
  • [0e26510523] - (SEMVER-PATCH) chore(deps-dev): bump sinon from 21.1.2 to 22.0.0 (dependabot[bot]) #8447
  • [0284dcf408] - (SEMVER-PATCH) chore(deps-dev): bump eslint-plugin-n from 17.24.0 to 18.0.1 (dependabot[bot]) #8448
  • [39a17c01e2] - (SEMVER-PATCH) fix(mocha): report test_suite_end for files with no describe wrapper (Sebastián Kay) #8437
  • [b06d144553] - (SEMVER-PATCH) fix: pin specific @datadog/openfeature-node-server version (Ugaitz Urien) #8456
  • [935054053e] - (SEMVER-PATCH) chore(deps): bump the gh-actions-packages group across 2 directories with 1 update (dependabot[bot]) #8449
  • [f3b4edc644] - (SEMVER-PATCH) chore(deps-dev): bump the dev-minor-and-patch-dependencies group across 1 directory with 6 updates (dependabot[bot]) #8445
  • [9e5e475c35] - (SEMVER-PATCH) Revert "ci: replace CodeQL workflow with default setup configuration (#8380)" (Roch Devost) #8443
  • [aaf5e60a0a] - (SEMVER-PATCH) ci: add dd-octo-sts policies for upcoming workflow rate-limit changes (Roch Devost) #8392
  • [4c42d937ee] - (SEMVER-PATCH) ci: update playwright-tools image to 1.54.1-5 (Roch Devost) #8440
  • [4774cc13ac] - (SEMVER-PATCH) perf(graphql): memoize the apollo signature pipeline (Ruben Bridgewater) #8308
  • [f8e5148693] - (SEMVER-PATCH) test(ci-visibility): wait for cypress child exit before next test (Ruben Bridgewater) #8418
  • [0402d979d8] - (SEMVER-PATCH) fix(kafkajs): read clusterId from existing metadata (Ruben Bridgewater) #8389
  • [6bc8c6cccf] - (SEMVER-PATCH) test(ci-visibility): gather payloads until child exits (Ruben Bridgewater) #8419
  • [e78a6c1e4f] - (SEMVER-PATCH) fix(ci): prevent Buildkite non-PR builds from being tagged as PRs (Juan Antonio Fernández de Alba) #8435
  • [6f1d63ccbc] - (SEMVER-PATCH) fix(pg): stop accumulating DBM comments on reused query objects (Ruben Bridgewater) #8400
  • [89df4e6258] - (SEMVER-PATCH) refactor: drop JSDoc @param defaults (Ruben Bridgewater) #8350
  • [abf97b0011] - (SEMVER-PATCH) implement ai guard telemetry metrics (Ilyas Shabi) #8093
  • [4ab60e2551] - (SEMVER-PATCH) refactor(config): gate experimental.appsec, plugins, ingestion shapes (Ruben Bridgewater) #8318
  • [626ce462f1] - (SEMVER-PATCH) [test optimization] propagate DD_CUSTOM_PARENT_ID for Jenkins (Daniel Fernández) #8433
  • [31899bd0b8] - (SEMVER-PATCH) refactor(config): gate experimental b3, profiling, and b3 single header (Ruben Bridgewater) #8316
  • [3ada9255d9] - (SEMVER-PATCH) bench: fix benchmarks running unsupported Node.js 26 (Ruben Bridgewater) #8430
  • [eeeccd65ce] - (SEMVER-PATCH) fix(kafka): stop mutating caller-owned message.headers (Ruben Bridgewater) #8388
  • [b2f62ef205] - (SEMVER-PATCH) test(setup): isolate getInstrumentation from production addHook (Ruben Bridgewater) #8396
  • [1b83d35bbb] - (SEMVER-PATCH) refactor(lambda): collapse runtime/ritm.js into index.js (Ruben Bridgewater) #8397
  • [7ffc20933c] - (SEMVER-PATCH) ci(benchmarks): fail sirun job when individual variants crash (Fayssal DEFAA) #8292
  • [a78d2d57d7] - (SEMVER-PATCH) perf(couchbase): cache the per-operation channel bag (Ruben Bridgewater) #8373
  • [fc09317297] - (SEMVER-PATCH) docs: fix legacyBaggageEnabled default value and MIGRATING.md (Ruben Bridgewater) #8317
  • [242bdf9f90] - (SEMVER-PATCH) fix(llmobs): avoid malformed x-datadog-tags when carrier header is unset (Grace Williams) #8366
  • [89ae70d027] - (SEMVER-PATCH) perf(graphql): trim per-resolver allocations (Ruben Bridgewater) #8309
  • [6da7add04d] - (SEMVER-PATCH) refactor(config): gate experimental.iast aliases off in v6 (Ruben Bridgewater) #8320
  • [973a882bd3] - (SEMVER-PATCH) test(pg): pin prepared-statement reuse under DBM full mode (Ruben Bridgewater) #8398
  • [c8d56550fd] - (SEMVER-PATCH) chore: support re-runs in the community PR CI script (Ruben Bridgewater) #8385
  • [af652f0ad2] - (SEMVER-PATCH) perf(pg): assign the injectable text directly when configurable (Ruben Bridgewater) #8372
  • [cd377ffa8d] - (SEMVER-PATCH) fix(fetch): rename globalThis.fetch wrapper from "value" to "fetch" (Ruben Bridgewater) #8406
  • [e55e65b7f8] - (SEMVER-PATCH) perf(redis): tighten per-command instrumentation (Ruben Bridgewater) #8310
  • [985b1d0322] - (SEMVER-PATCH) test(http): cover server-side request hook resource.name override (Ruben Bridgewater) #8399
  • [ff25b95aa9] - (SEMVER-PATCH) chore(ci) update one-pipeline (gh-worker-campaigns-3e9aa4[bot]) #8424
  • [5f6e1bb9be] - (SEMVER-PATCH) chore(benchmark): drop Node 18 from sirun matrix and add Node 26 (Ruben Bridgewater) #8423
  • [81e10d12de] - (SEMVER-PATCH) perf(encode): emit span fields and event attributes as compact msgpack ints (Ruben Bridgewater) #8229
  • [f73d984145] - (SEMVER-PATCH) ci: activate codecov coverage minimum for PRs (Ruben Bridgewater) #8209
  • [e8c394c014] - (SEMVER-PATCH) fix(llmobs): bound Bedrock token-headers cache (Ruben Bridgewater) #8161
  • [6b370862a5] - (SEMVER-MINOR) docs(appsec): drop deprecated extended-headers and rasp.bodyCollection types in v6 (Ruben Bridgewater) #8322
  • [2b48b7991f] - (SEMVER-PATCH) fix(benchmark): restore five crashing sirun bench groups (Ruben Bridgewater) #8307
  • [60cfa5c013] - (SEMVER-PATCH) [test optimization] Mitigate vitest flakiness (Juan Antonio Fernández de Alba) #8417
  • [841b085491] - (SEMVER-PATCH) [test optimization] Restore retries to test optimization tests (Juan Antonio Fernández de Alba) #8414
  • [47d6ffedc1] - (SEMVER-PATCH) [test optimization] Mitigate jest flakiness (Juan Antonio Fernández de Alba) #8415
  • [084086b666] - (SEMVER-PATCH) test(ci-visibility): disable real net access in git_metadata (Ruben Bridgewater) #8416
  • [e9eca7962d] - (SEMVER-MINOR) Send hidden tags under _dd.ci.library_configuration_error in every event of a test session (Sebastián Kay) #8274
  • [e276b97573] - (SEMVER-PATCH) [test optimization] bump cypress latest version (Juan Antonio Fernández de Alba) #8365
  • [9fad4a59bd] - (SEMVER-PATCH) [test optimization] bump vitest latest version (Juan Antonio Fernández de Alba) #8383
  • [1407421603] - (SEMVER-PATCH) chore: key the cache on DD_TRACE_GIT_METADATA_ENABLED (Ruben Bridgewater) #8395
  • [b92bdc19fa] - (SEMVER-PATCH) [test optimization] Use duration buckets for cypress EFD retries (Juan Antonio Fernández de Alba) #8290
  • [914484dd16] - (SEMVER-PATCH) docs(iast): drop deprecated securityControls type (Ruben Bridgewater) #8315
  • [0b494e8792] - (SEMVER-PATCH) chore(deps): bump the test-versions group across 1 directory with 2 updates (dependabot[bot]) #8410
  • [807fceb14d] - (SEMVER-PATCH) chore(deps): bump openai (dependabot[bot]) #8360
  • [f5ee7b20de] - (SEMVER-PATCH) fix(tracing): fix TypeError in ritm.js when requiring node:-prefixed built-in modules (Yuichi Uchida) #8304
  • [057685610b] - (SEMVER-PATCH) fix(stacktrace): filter dd-trace instrumentation frames for any repo directory name (Roch Devost) #8301
  • [a39c44ed42] - (SEMVER-PATCH) test(ws): refactor lifecycle hooks to use dynamic ports and separate afterEach (Roch Devost) #8367
  • [e3a718bae7] - (SEMVER-PATCH) chore(deps-dev): bump nock from 13.5.6 to 14.0.14 (dependabot[bot]) #8280
  • [a3bb4cd3af] - (SEMVER-PATCH) ci: replace CodeQL workflow with default setup configuration (Roch Devost) #8380
  • [47591c3fde] - (SEMVER-PATCH) perf(aws-sdk): trim per-response allocations (Ruben Bridgewater) #8328
  • [c05e122cbe] - (SEMVER-PATCH) perf(mongodb): cache the per-connection topology shape (Ruben Bridgewater) #8370
  • [fc437471cc] - (SEMVER-PATCH) perf(database): cache the DBM SQL injection comment per connection (Ruben Bridgewater) #8371
  • [8d6b8824d2] - (SEMVER-PATCH) perf(grpc): cache method metadata, drop banned for-in walks (Ruben Bridgewater) #8377
  • [5c2656c36b] - (SEMVER-PATCH) chore(deps): bump dc-polyfill from 0.1.10 to 0.1.11 (Brian Marks) #8369
  • [e05e6c6784] - (SEMVER-PATCH) perf(pubsub): trim per-message allocations in publish hot path (Ruben Bridgewater) #8374
  • [9fb4d152b2] - (SEMVER-PATCH) perf(mongodb): fold limit-depth and bigint sanitisation into one pass (Ruben Bridgewater) #8375
  • [c610358953] - (SEMVER-PATCH) fix(grpc): require a colon and a strictly numeric tail before tagging… (Ruben Bridgewater) #8378
  • [a46860bc55] - (SEMVER-PATCH) refactor(azure-metadata): parse WEBSITE_OWNER_NAME without regex (Ruben Bridgewater) #8348
  • [8e9d38b0d3] - (SEMVER-PATCH) docs(plugins): drop deprecated whitelist/blacklist plugin types from v6 surface (Ruben Bridgewater) #8321
  • [43de16c356] - (SEMVER-PATCH) chore(couchbase): drop SDK 2.x instrumentation hook (Ruben Bridgewater) #8362
  • [b893e3165d] - (SEMVER-PATCH) test: add a few database tests to cover recent reports better (Ruben Bridgewater) #7534
  • [26f3793cd9] - (SEMVER-PATCH) fix(aws-sdk): global crypto error (Pablo Erhard) #8368
  • [5802bcb274] - (SEMVER-PATCH) fix(plugin-mysql): destructure CLIENT_PORT_KEY from the constants module (Ruben Bridgewater) #8303
  • [5e54f8226f] - (SEMVER-PATCH) [test optimization] Bump playwright support to 1.59 (Juan Antonio Fernández de Alba) #8363
  • [b3c20f8cf1] - (SEMVER-PATCH) [test optimization] Bump cucumber latest version (Juan Antonio Fernández de Alba) #8364
  • [a5834a8f30] - (SEMVER-PATCH) [test optimization] Support Jest 30.4.1 (Juan Antonio Fernández de Alba) #8361
  • [aa3c020225] - (SEMVER-PATCH) fix(config): disable OTLP only when protocolVersion is explicitly set (Ruben Bridgewater) #8335
  • [0b803f55de] - (SEMVER-PATCH) [test-optimization] Propagate ITR skipping enabled tag to suites and tests (Andrey Marchenko) #8332
  • [7350d99b0f] - (SEMVER-PATCH) [test optimization] Use duration buckets for playwright EFD retries (Juan Antonio Fernández de Alba) #8289

Estimated end-of-life date, accurate to within three months: 05-2027 See the support level definitions for more information.

Bug Fixes
  • azure_cosmos: This change removes the http.status_code tags from Azure CosmosDB spans and replaces them with the use of the db.response.status_code metric. For customers using ddtrace v4.8.0 and relying on the http.status_code tag of cosmosdb.query spans, this is a breaking change.
Latest
Jun 11, 2026