v5.104.0 proposal - #8489
Merged
Merged
Conversation
* feat(kafkajs): tag producer span with partition and offset Mirror dd-trace-java PR #11107 for kafkajs: set kafka.partition and kafka.message.offset on the producer span using the broker-returned RecordMetadata. Only tagged when the send resolves to a single (topic, partition) tuple, since one producer span covers a multi-partition batch and a single value would be misleading. kafka.cluster_id was already tagged on both producer and consumer spans, and the consumer span already carried partition and offset, so no additional changes are needed for those tags. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com> * refactor(kafkajs): replace producer partition/offset tags with kafka.messages.offsets Replace single-value kafka.partition and kafka.message.offset on the producer span with a single kafka.messages.offsets tag carrying the full list of (partition, start_offset) pairs returned by the broker. One producer span covers a multi-partition batch, so a list captures every partition the batch landed in rather than only the single-partition case. Total record count is still available via the pre-existing kafka.batch_size metric. Per-partition record counts are not in the broker response and would require replicating kafkajs's partitioner, so they are not included. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com> * test(kafkajs): cover single- and multi-message producer batches Restore kafka.partition and kafka.message.offset flat tags on the producer span, but only when the send is a single-record batch. In that case the one response entry's partition/offset describes the exact record, so the flat tags are unambiguous. Multi-message batches still expose data through kafka.messages.offsets only. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com> * feat(kafkajs): add kafka.messages.offsets to eachBatch consumer span Mirror the producer change on the batch consumer side. kafkajs's eachBatch hands the user one batch per (topic, partition), so all records share a single partition and a known start offset (the first record's offset). Tag kafka.messages.offsets accordingly, and surface the flat kafka.message.offset metric only when the batch is a single record — matching the producer's single-record convention. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com> * fix(kafkajs): flip negated condition to satisfy lint Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com> * Revert "feat(kafkajs): add kafka.messages.offsets to eachBatch consumer span" eachBatch is always single-partition by construction, so the list-form tag is redundant with the flat kafka.partition that's already set on the consume-batch span. Revert and leave the consume-batch span as it was on master. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com> * fix(kafkajs): preserve 64-bit precision in producer offset tags Keep offsets as strings to avoid Number() precision loss past 2^53, sort by partition for deterministic tag output, and use ?? so a literal-zero baseOffset isn't dropped. Move kafka.message.offset from metric to meta to match the string type. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com> --------- Co-authored-by: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Co-authored-by: Claude Sonnet 4.6 (1M context) <noreply@anthropic.com>
Co-authored-by: Claude Sonnet 4.6 (1M context) <noreply@anthropic.com>
Co-authored-by: Claude Sonnet 4.6 (1M context) <noreply@anthropic.com>
…n-webpack (#8470) Co-authored-by: Claude Sonnet 4.6 (1M context) <noreply@anthropic.com>
…run (#8475) Co-authored-by: Claude Sonnet 4.6 (1M context) <noreply@anthropic.com>
…f range (#8484) Replace semver ranges in the APM integrations/next CI matrix with individual pinned versions, so each job tests exactly one Next.js version and job names show a clear version number. The >=10.2.0 <11 range is removed as 10.x is explicitly skipped in the test file (TODO comment). Each remaining range is replaced by its coerced minimum and resolved maximum as separate entries. The closed upper bound of >=15.0.0 <15.4.1 resolves to 15.4.0 as the maximum, so both 15.0.0 and 15.4.0 are pinned individually. The include/range_clean section is removed since plain version strings contain only digits and dots, which are all valid Codecov flag characters. Co-authored-by: Claude Sonnet 4.6 (1M context) <noreply@anthropic.com>
Bumps the test-versions group with 1 update in the /integration-tests/esbuild directory: [express](https://github.com/expressjs/express). Updates `express` from 4.22.1 to 4.22.2 - [Release notes](https://github.com/expressjs/express/releases) - [Changelog](https://github.com/expressjs/express/blob/v4.22.2/History.md) - [Commits](expressjs/express@v4.22.1...v4.22.2) --- updated-dependencies: - dependency-name: express dependency-version: 4.22.2 dependency-type: direct:production update-type: version-update:semver-patch dependency-group: test-versions ... Signed-off-by: dependabot[bot] <support@github.com> Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
…8472) Co-authored-by: Claude Sonnet 4.6 (1M context) <noreply@anthropic.com>
Contributor
Author
Overall package sizeSelf size: 5.84 MB Dependency sizes| name | version | self size | total size | |------|---------|-----------|------------| | import-in-the-middle | 3.0.1 | 82.56 kB | 817.39 kB | | opentracing | 0.14.7 | 194.81 kB | 194.81 kB | | dc-polyfill | 0.1.11 | 25.74 kB | 25.74 kB |🤖 This report was automatically generated by heaviest-objects-in-the-universe |
🎉 All green!🧪 All tests passed 🎯 Code Coverage (details) 🔗 Commit SHA: cde96c8 | Docs | Datadog PR Page | Give us feedback! |
BenchmarksBenchmark execution time: 2026-05-20 06:37:48 Comparing candidate commit cde96c8 in PR branch Found 11 performance improvements and 0 performance regressions! Performance is the same for 1484 metrics, 98 unstable metrics. scenario:log-with-debug-20
scenario:propagation-inject-20
scenario:propagation-inject-22
scenario:propagation-inject-24
|
…or dd-trace v7 (#8427) * deprecate llmobs.enable and llmobs.disable for dd-trace v7 * lint
Without a cap, `#pendingEvents` grows for the lifetime of the process when the agent strategy probe fails (agent unreachable, EVP proxy missing) and `setEnabled(true)` never fires. The buffer holds exposure events emitted before the probe completes, so it accumulates one entry per feature flag evaluation. Silent drops invalidate experiment results: the upstream provider (`@datadog/openfeature-node-server`) caches submitted exposures and skips duplicates against that cache, so any event we drop here keeps being masked after recovery. The writer now emits a `log.warn` on the first drop and exposes a `droppedEventCount` getter so the loss is observable. The cap is by event count, not bytes: 1000 events, drop-oldest, mirroring the parent's `_bufferLimit`. A byte cap would require `Buffer.byteLength(JSON.stringify(event))` per `append()` — expensive on a hot path, and the parent re-stringifies on drain anyway. Drop-oldest preserves recent exposures, which have higher diagnostic value once the agent does come up. The overflow itself is a single `push(...events)` + `splice(0, dropped)` so the disabled-state buffer stays O(N) on a batch instead of the per-event `shift()` it replaced. Drive-by: * Convert `ExposuresWriter`'s subclass-only state to `#private` (`#enabled`, `#pendingEvents`, `#context`) and methods (`#buildContext`, `#formatExposureEvent`). The parent `BaseFFEWriter` keeps its `_underscore` fields — that conversion belongs in a separate change.
* test(grpc): regression for 3-arg overloads on client_streaming and bidi Existing client.spec.js coverage exercises only 1-arg overloads for client_streaming (`getClientStream(callback)`) and bidi (`getBidi(stream)`), which incidentally survive a positional-metadata bug in the instrumentation wrapper. Add four new cases — `(metadata, callback)` and `(metadata, options, callback)` for client_stream; `(metadata)` and `(metadata, options)` for bidi — so the broken 3-arg shape is caught in CI. Each new case asserts the call returns a stream object before validating the trace, surfacing the regression as "expected stream, got undefined" rather than a swallowed timeout. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com> * fix(grpc): use type-aware metadata index for client_streaming and bidi The @grpc/grpc-js client surface exposes two different positional shapes: unary and server_streaming take `(request, metadata?, options?, callback?)` — metadata at index 1 — while client_streaming and bidi take `(metadata?, options?, callback?)` — metadata at index 0. Both wrap layers (the per-RPC `wrapMethod` and the lower-level `createWrapMakeRequest`) hard-coded the unary/server_streaming offset, so for client_streaming and bidi the synthetic `Metadata` insertion in `ensureMetadata` landed in the wrong slot. The 3-arg overload `Sum(metadata, opts, cb)` ended up dispatched as 4 args with a synthetic Metadata wedged in front of `opts`; upstream rejected the shape with "Incorrect arguments passed" and the wrapper silently returned `undefined`. Pick the metadata index from the RPC type at wrap time so the splice lands correctly for all four signatures. Symmetric fix in `createWrapMakeRequest` covers the latent equivalent on the lower-level `Client.prototype.makeClientStreamRequest` / `makeBidiStreamRequest` path (metadata at index 3 there, not 4). Repro: https://github.com/w1am/dd-trace-repro Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com> * fix(grpc): rethrow errors from wrapped client methods so failures surface `callMethod` caught any throw from the underlying gRPC call, published to `errorChannel`, and fell through with no return — turning a synchronous gRPC error into a silent `undefined` return. User code then crashed downstream (`TypeError: Cannot read properties of undefined`) with no pointer back to dd-trace, and the only way to see the real error was to subscribe to `apm:grpc:client:request:error` directly. Rethrow after publishing so instrumentation never changes observable error semantics. The error channel still fires for subscribers; user code now sees the original throw at the call site. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com> * refactor(grpc): replace ensureMetadata with resolveMetadata Address review feedback on the brittleness of the previous splice-based helper. The new helper: * Uses `instanceof grpc.Metadata` (with a `constructor.name` fallback for the cross-realm edge case of duplicate `@grpc/grpc-js` instances) instead of string-name duck typing. * Returns `{ metadata, args }` so callers no longer round-trip through `args[index]` to extract the metadata. Index awareness lives in one place. * Returns `args` by reference when no reshape is needed (user already provided a Metadata) — eliminates a per-call array allocation on the common path. * Preserves the prior replace-vs-insert semantics for falsy slots so `getUnary(req, undefined, cb)` still resolves to a 3-arg call (extra trailing `undefined` would be rejected by upstream's strict argument validator). Pair this with two adjacent cleanups in the same call path: * Hoist the `startChannel.hasSubscribers` check from inside `callMethod` up into the wrap closures (`wrapMethod`, `createWrapMakeRequest`). When tracing is off, the wrapper is now a single boolean check + an `apply` — no allocation, no ctx object, no synthetic Metadata. dd-trace stops modifying user calls when it has nothing to contribute. * Lazy-copy `args` inside `callMethod` only when about to mutate (the callback substitution / append for unary and client_stream). Combined with `resolveMetadata` returning by reference, server_streaming and bidi calls with a user-provided Metadata now go through the wrap with zero array allocations. No behavior change on any existing call shape; the regression suite from the prior commits in this PR is unchanged.
dd-octo-sts
Bot
force-pushed
the
v5.104.0-proposal
branch
from
May 16, 2026 06:01
fd66fc8 to
5b7323a
Compare
Bumps the test-versions group with 1 update in the /integration-tests/esbuild directory: [axios](https://github.com/axios/axios). Updates `axios` from 1.16.0 to 1.16.1 - [Release notes](https://github.com/axios/axios/releases) - [Changelog](https://github.com/axios/axios/blob/v1.x/CHANGELOG.md) - [Commits](axios/axios@v1.16.0...v1.16.1) --- updated-dependencies: - dependency-name: axios dependency-version: 1.16.1 dependency-type: direct:production update-type: version-update:semver-patch dependency-group: test-versions ... Signed-off-by: dependabot[bot] <support@github.com> Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
* feat(mongodb): add opt-in query value obfuscation The new `obfuscateQuery` option / `DD_TRACE_MONGODB_OBFUSCATE_QUERY` env var replaces every primitive leaf with `'?'` in the `mongodb.query` tag and the resource name. Keys, operators (`$gte`, `$in`, ...), and array / pipeline shape are preserved so the redacted output is still a usable query signature. Without it, sensitive values customers pass to `find` / `update` / `aggregate` land verbatim on the span, and high-cardinality scalars blow out metrics indexed on `resource.name` whenever `queryInResourceName` is also enabled. * feat(mongodb): add types mode to obfuscateQuery The new `'types'` mode replaces each primitive leaf with its `typeof` name (`'string'`, `'number'`, `'boolean'`, `'bigint'`, `'object'`, `'null'`) instead of `'?'`. Customers using the redacted query to design indexes get the value types they need without raw values landing on the span. `obfuscateQuery` becomes a `'none' | 'types' | 'redact'` enum. `'redact'` keeps the original `'?'` placeholder; `'none'` is the opt-out. A string-only enum avoids the env-var pipeline round-tripping booleans through strings. Fixes: #3776
…#8463) * feat(appsec): collect Datadog security-testing headers on entry spans Tag `x-datadog-endpoint-scan` and `x-datadog-security-test` request headers on service entry spans as `http.request.headers.<name>`, unconditionally — regardless of `DD_TRACE_HEADER_TAGS` or AppSec being enabled. These markers let the API endpoint reducer distinguish Datadog scan/test traffic from real user traffic and keep it out of the API inventory. Headers are not propagated downstream (dd-trace-js only injects tracer headers into outgoing requests). Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com> * refactor(appsec): address review feedback on security-testing headers Inline the two header tag-sets directly into addRequestTags, drop the helper function and SECURITY_TESTING_HEADERS array (only two markers will ever exist). Remove inferred-proxy span tagging — RFC only mandates the service entry span. Drop the lowercase-normalization regression test and the inferred-proxy test. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com> --------- Co-authored-by: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
* test(aerospike): bump suite timeout and guard releaseEventLoop
The "without configuration" `before` hook can time out when the native
binding plus `proxyquire` cold-load runs against the 5 s default on a
cold CI disk cache. The visible error is a secondary `TypeError` from
`aerospike.releaseEventLoop()` in `after`, because `aerospike` is
assigned in `beforeEach` -- Mocha skips that when `before` fails, so
the real `agent.load('aerospike')` failure never reaches the report.
Bump the timeout to the minimal headroom that survives the cold path
and optional-chain `releaseEventLoop()` so a future `before` failure
surfaces its real cause instead of the masked TypeError.
* test(electron): raise integration spec beforeEach timeout to 30s
Spawning the freshly-packaged Electron binary in `beforeEach` exceeds
the existing 15 s ceiling on cold CI runners: the packaged binary was
just written to disk in `before` (cold page cache) and has to load the
bundled Chromium plus dd-trace on first launch. Master hit this twice
in the last week (electron-workflow runs 25919871105 and 26037630300,
both `"before each" hook for "should create an http.request span for
net.fetch calls": Error: Timeout of 15000ms exceeded.`).
Raising the per-`beforeEach` timeout to 30 s matches what the `before`
hook (which already does heavier work) reserves for itself and lines
up with `useSandbox`'s own teardown budget.
…#8496) `registerExtraService` is meant to register each emitting service name once, but `span_format.js` calls it on every span as part of the `_dd.base_service` tag path. A redis pipeline that flushes 100 commands in one tick pays 100 `Set.add` lookups for the single name `redis`. A 1-element cache of the most-recent argument removes the redundancy at the source. The hot caller -- spans of the same kind, back-to-back -- always resolves to the same name, so a single-slot memo absorbs the common case without changing the function's contract: `getExtraServices` still returns the same set, the 64-name cap still applies, and invalid inputs (`null`, `undefined`, `''`) are still rejected. The cache lives inside `extra-services.js` rather than at the caller so `clear()` -- already called between every Mocha test -- is the single invalidation point, and a regression test pins that behaviour. Microbench (1M calls, 8-span bursts of 4 hot service names, 0.4 % unique tail; median of 5 trials, Node 22, M1): * baseline (no cache): 4.52 ms / 221 Mops/s * patched (1-elem): 2.57 ms / 390 Mops/s (1.76x) * Set.add reached: 128 907 / 1 000 000 (87 % short-circuit rate) `getExtraServices()` returns the same 64-entry set in both runs.
* First pass at uncaught exception reporting -- crashtracker * harden check that our listener fired, and write to stderr * Integration tests for crashtracker Remove unused return vals, include line, col number for stacktracer validation Give profiling runtime ownership of ct files Strict equal instead of === Keep codeowner as js lang platform * Clean up
Every span enter / activate / log-injection / DSM path re-resolved
`legacy` against the namespace registry on each call. The handle is
stable once registered, so each module captures it into a
`legacyStorage` const and reads that constant instead. `scope.activate`
alone reaches the factory four times per span entry.
Microbench (Node 24.15.0, 7-trial median, 1M iters/trial):
`storage('legacy')` lookup is 7.12 ns/op (min 7.07, max 7.35). After
this change the cost is paid once at require-time per module and zero
ns/op on every subsequent call site.
…adiness (#8550) Co-authored-by: Claude Sonnet 4.6 (1M context) <noreply@anthropic.com>
…with 2 updates (#8563) Bumps the gh-actions-packages group with 2 updates in the / directory: [actions/checkout](https://github.com/actions/checkout) and [github/codeql-action](https://github.com/github/codeql-action). Bumps the gh-actions-packages group with 2 updates in the /.github/workflows directory: [actions/checkout](https://github.com/actions/checkout) and [github/codeql-action](https://github.com/github/codeql-action). Updates `actions/checkout` from 6.0.0 to 6.0.2 - [Release notes](https://github.com/actions/checkout/releases) - [Changelog](https://github.com/actions/checkout/blob/main/CHANGELOG.md) - [Commits](actions/checkout@v6...de0fac2) Updates `github/codeql-action` from 4.35.4 to 4.35.5 - [Release notes](https://github.com/github/codeql-action/releases) - [Changelog](https://github.com/github/codeql-action/blob/main/CHANGELOG.md) - [Commits](github/codeql-action@68bde55...9e0d7b8) Updates `actions/checkout` from 6.0.0 to 6.0.2 - [Release notes](https://github.com/actions/checkout/releases) - [Changelog](https://github.com/actions/checkout/blob/main/CHANGELOG.md) - [Commits](actions/checkout@v6...de0fac2) Updates `github/codeql-action` from 4.35.4 to 4.35.5 - [Release notes](https://github.com/github/codeql-action/releases) - [Changelog](https://github.com/github/codeql-action/blob/main/CHANGELOG.md) - [Commits](github/codeql-action@68bde55...9e0d7b8) --- updated-dependencies: - dependency-name: actions/checkout dependency-version: 6.0.2 dependency-type: direct:production update-type: version-update:semver-patch dependency-group: gh-actions-packages - dependency-name: github/codeql-action dependency-version: 4.35.5 dependency-type: direct:production update-type: version-update:semver-patch dependency-group: gh-actions-packages - dependency-name: actions/checkout dependency-version: 6.0.2 dependency-type: direct:production update-type: version-update:semver-patch dependency-group: gh-actions-packages - dependency-name: github/codeql-action dependency-version: 4.35.5 dependency-type: direct:production update-type: version-update:semver-patch dependency-group: gh-actions-packages ... Signed-off-by: dependabot[bot] <support@github.com> Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
dd-octo-sts
Bot
force-pushed
the
v5.104.0-proposal
branch
from
May 20, 2026 06:26
efac65d to
cde96c8
Compare
pabloerhard
marked this pull request as ready for review
May 20, 2026 21:28
pabloerhard
requested review from
BridgeAR,
leoromanovsky,
lym953,
sameerank and
wconti27
and removed request for
a team
May 20, 2026 21:28
pabloerhard
approved these changes
May 20, 2026
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
f7f2c7c2f1] - (SEMVER-PATCH) chore(deps): bump the gh-actions-packages group across 2 directories with 2 updates (dependabot[bot]) #85634afcb7eed4] - (SEMVER-PATCH) fix(undici) unfinished CONNECT span (Pablo Erhard) #8558a34acbb466] - (SEMVER-PATCH) test(aerospike,couchbase): fix hook timeouts and couchbase service readiness (Roch Devost) #8550908e4d7558] - (SEMVER-PATCH) perf: reduce redis and ioredis bindStart overhead (Ruben Bridgewater) #849485211ec3ec] - (SEMVER-PATCH) fix(metrics): fix delta temporality not being applied to OTLP counter exports (Sameeran Kunche) #855632b49b2a0d] - (SEMVER-PATCH) chore(deps): bump openai (dependabot[bot]) #85390bc47a6727] - (SEMVER-PATCH) perf(graphql): skip stacktrace symbolication on validation-only errors (Ruben Bridgewater) #84998feb9ce389] - (SEMVER-PATCH) fix(types): import opentracing from the consumer's installed package (Ruben Bridgewater) #852531353c773c] - (SEMVER-PATCH) ci: remove systematic Mocha --retries 1 on master (Roch Devost) #8552e769f32bb0] - (SEMVER-PATCH) fix(google-cloud-pubsub): poll for GC collection instead of fixed retry count (Roch Devost) #8553180549f994] - (SEMVER-PATCH) fix(mongoose): make PeerCat model registration idempotent (Roch Devost) #8551d7e1a534e9] - (SEMVER-PATCH) fix(aws-sdk): fix flaky SFN, SNS DSM, S3, and Bedrockruntime tests (Roch Devost) #85481c8044f42a] - (SEMVER-PATCH) fix(appsec): increase beforeEach timeout in rasp-metrics integration test (Roch Devost) #8547e6eac5a6f0] - (SEMVER-PATCH) fix(electron): fix flaky IPC tests and Xvfb startup race (Roch Devost) #854643f95f074d] - (SEMVER-PATCH) chore(ci): update dd-sts-action to v1.0.1 (Charles de Beauchesne) #8545d5421208ad] - (SEMVER-PATCH) ci(electron): push results to test optimization (Roch Devost) #854465a9329653] - (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]) #8542178fc6bd2a] - (SEMVER-PATCH) chore(ci): set ffe as owner of .github/workflows/openfeature.yml (Charles de Beauchesne) #853525d47abf77] - (SEMVER-PATCH) test only Node LTS (Pablo Erhard) #8529a01a6b8efd] - (SEMVER-PATCH) test: prefer assert.match for string matching (Thomas Watson) #854049f1bb171a] - (SEMVER-PATCH) test(electron): raise plugin-spec startApp beforeEach timeout to 10s (Ruben Bridgewater) #8536dcfdb77b29] - (SEMVER-PATCH) test(debugger): widen sampling spec tolerance to absorb wall-clock skew (Thomas Watson) #85347302ef8258] - (SEMVER-PATCH) test: use assert.strictEqual / notStrictEqual for === and !== checks (Thomas Watson) #8538f74834adaa] - (SEMVER-PATCH) [test optimization] Fix early metadata encoding bug (Juan Antonio Fernández de Alba) #852818d97575dc] - (SEMVER-PATCH) perf(id): memoise Identifier.toBigInt instead of re-decoding the buffer per call (Ruben Bridgewater) #849554f0666bbb] - (SEMVER-PATCH) fix(rewriter): emit valid ESM imports for instrumented modules (Ruben Bridgewater) #85267b5b32caca] - (SEMVER-PATCH) fix(kafkajs): skip header injection on brokers below Produce v3 (Ruben Bridgewater) #8390ab11acdbb6] - (SEMVER-PATCH) test: reduce agent.load overhead by reducing proxyquire calls (Ruben Bridgewater) #809985baecf3cd] - (SEMVER-PATCH) perf(elasticsearch): cache per-instance tag keys and skip empty params stringify (Ruben Bridgewater) #83765d72f2d380] - (SEMVER-PATCH) refactor(graphql): drop unused @graphql-tools/executor deep hook (Ruben Bridgewater) #8510c1eddead4b] - (SEMVER-PATCH) ci(codecov): restrict codecov/patch to PRs targeting master (Ruben Bridgewater) #84649952e24b41] - (SEMVER-PATCH) chore(llmobs): fix flaky openai test (Sam Brenner) #8490f8614b357f] - (SEMVER-PATCH) feat(shimmer): add wrapCallback for tracer-controlled closures (Ruben Bridgewater) #85033631da6a36] - (SEMVER-MINOR) feat(appsec): Always report content-length and content-type response headers when appsec is enabled (Carles Capell) #8482858e1cb0a2] - (SEMVER-PATCH) perf(storage): cache storage() at module load (Ruben Bridgewater) #8500bcab75cd29] - (SEMVER-MINOR) feat(crashtracking): capture and report uncaught exceptions (Gyuheon Oh) #817628c1ff37b8] - (SEMVER-PATCH) perf(service-naming): short-circuit repeat registerExtraService calls (Ruben Bridgewater) #8496bdc736b843] - (SEMVER-PATCH) [test optimization] parallelize test optimization requests (Juan Antonio Fernández de Alba) #852029cd9f5967] - (SEMVER-PATCH) [test optimization] use worker efd retry count in parallel cucumber (Juan Antonio Fernández de Alba) #84789f243d934c] - (SEMVER-PATCH) [test optimization] merge static mocked files with recorded mocks in jest (Juan Antonio Fernández de Alba) #847719dfbe4dbe] - (SEMVER-PATCH) test: targeted aerospike and electron suite timeouts (Ruben Bridgewater) #852730cbcacac3] - (SEMVER-MINOR) feat(appsec): collect Datadog security-testing headers on entry spans (Christophe Papazian) #846316ab502164] - (SEMVER-PATCH) [test optimization] stabilize vitest async setup instrumentation (Juan Antonio Fernández de Alba) #8519c497d0a4ca] - (SEMVER-PATCH) fix(mocha): correct timing for top-level it() tests (Sebastián Kay) #8480806f177fbf] - (SEMVER-MINOR) feat(mongodb): add opt-in query value obfuscation (Ruben Bridgewater) #8401f9a39f203d] - (SEMVER-PATCH) [test optimization] Stabilize Cypress intake payload waits (Juan Antonio Fernández de Alba) #8522f221629d3b] - (SEMVER-PATCH) chore(deps): bump axios (dependabot[bot]) #8518539aa4a662] - (SEMVER-PATCH) fix(grpc): handle client_streaming and bidi 3-arg overload (Crystal Luc-Magloire) #82761eda439d60] - (SEMVER-PATCH) fix(openfeature): cap pending exposure events (Ruben Bridgewater) #81629e41a6aae3] - (SEMVER-PATCH) deprecation(llmobs): deprecatellmobs.enableandllmobs.disablefor dd-trace v7 (Sam Brenner) #8427934f932039] - (SEMVER-PATCH) ci(appsec): split next jobs by individual version instead of range (Roch Devost) #8472c4b0554b7d] - (SEMVER-PATCH) chore(deps): bump express (dependabot[bot]) #84887a01a98566] - (SEMVER-PATCH) ci(apm-integrations): split next jobs by individual version instead of range (Roch Devost) #8484199e240fb1] - (SEMVER-PATCH) ci(all-green): rerun failed workflows on startup when all-green is rerun (Roch Devost) #84754566023687] - (SEMVER-PATCH) ci: split integration-bundler into integration-esbuild and integration-webpack (Roch Devost) #8470ee54394360] - (SEMVER-PATCH) ci: retry yarn install on failure in datadog-ci action (Roch Devost) #8459d482f4b7e9] - (SEMVER-PATCH) ci: remove node_modules cache from install action (Roch Devost) #8393c833bf860a] - (SEMVER-PATCH) chore(benchmark): reduce sirun log iterations from 40 to 10 (Roch Devost) #847494c1d4e91c] - (SEMVER-MINOR) feat(kafkajs): add kafka.messages.offsets to producer span (Piotr WOLSKI) #8468