Skip to content

v5.104.0 proposal - #8489

Merged
pabloerhard merged 60 commits into
v5.xfrom
v5.104.0-proposal
May 20, 2026
Merged

v5.104.0 proposal#8489
pabloerhard merged 60 commits into
v5.xfrom
v5.104.0-proposal

Conversation

@dd-octo-sts

@dd-octo-sts dd-octo-sts Bot commented May 15, 2026

Copy link
Copy Markdown
Contributor
  • [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

piochelepiotr and others added 9 commits May 15, 2026 06:16
* 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>
@codecov

codecov Bot commented May 15, 2026

Copy link
Copy Markdown

Codecov Report

❌ Patch coverage is 91.55496% with 63 lines in your changes missing coverage. Please review.
✅ Project coverage is 89.98%. Comparing base (6b35e7d) to head (cde96c8).
⚠️ Report is 1235 commits behind head on v5.x.

Files with missing lines Patch % Lines
...ackages/datadog-instrumentations/src/mocha/main.js 80.00% 32 Missing ⚠️
packages/datadog-instrumentations/src/vitest.js 89.62% 14 Missing ⚠️
packages/datadog-instrumentations/src/cucumber.js 96.22% 2 Missing ⚠️
...nstrumentations/src/helpers/rewriter/transforms.js 60.00% 2 Missing ⚠️
...ckages/datadog-instrumentations/src/mocha/utils.js 91.66% 2 Missing ⚠️
...ckages/datadog-instrumentations/src/grpc/client.js 96.87% 1 Missing ⚠️
...ages/datadog-instrumentations/src/helpers/kafka.js 80.00% 1 Missing ⚠️
...-instrumentations/src/helpers/rewriter/compiler.js 50.00% 1 Missing ⚠️
packages/datadog-instrumentations/src/kafkajs.js 92.30% 1 Missing ⚠️
packages/datadog-instrumentations/src/mongoose.js 83.33% 1 Missing ⚠️
... and 6 more
Additional details and impacted files
@@            Coverage Diff             @@
##             v5.x    #8489      +/-   ##
==========================================
+ Coverage   83.19%   89.98%   +6.79%     
==========================================
  Files         476      844     +368     
  Lines       20153    45731   +25578     
  Branches        0     8529    +8529     
==========================================
+ Hits        16766    41152   +24386     
- Misses       3387     4579    +1192     
Flag Coverage Δ
aiguard-integration-active 41.16% <50.43%> (?)
aiguard-integration-latest 41.11% <50.43%> (?)
aiguard-integration-maintenance 41.16% <50.43%> (?)
aiguard-macos 34.90% <37.62%> (?)
aiguard-ubuntu 35.00% <37.62%> (?)
aiguard-windows 34.78% <35.64%> (?)
apm-capabilities-tracing-macos 49.29% <48.33%> (?)
apm-capabilities-tracing-ubuntu-active 49.14% <47.50%> (?)
apm-capabilities-tracing-ubuntu-latest 49.11% <47.50%> (?)
apm-capabilities-tracing-ubuntu-maintenance 49.32% <48.33%> (?)
apm-capabilities-tracing-ubuntu-oldest 49.13% <47.50%> (?)
apm-capabilities-tracing-windows 48.93% <45.41%> (?)
apm-integrations-aerospike-20-gte.5.5.0 34.35% <40.59%> (?)
apm-integrations-aerospike-22-gte.5.12.1 34.35% <40.59%> (?)
apm-integrations-aerospike-22-gte.6.0.0 34.35% <40.59%> (?)
apm-integrations-aerospike-eol- 34.26% <40.59%> (?)
apm-integrations-child-process 35.41% <42.57%> (?)
apm-integrations-confluentinc-kafka-javascript-18 41.23% <48.78%> (?)
apm-integrations-confluentinc-kafka-javascript-20 41.25% <48.78%> (?)
apm-integrations-confluentinc-kafka-javascript-22 41.25% <48.78%> (?)
apm-integrations-confluentinc-kafka-javascript-24 41.18% <48.78%> (?)
apm-integrations-couchbase-18 34.51% <40.59%> (?)
apm-integrations-couchbase-eol 34.40% <40.59%> (?)
apm-integrations-dns 34.18% <45.54%> (?)
apm-integrations-elasticsearch 35.15% <50.79%> (?)
apm-integrations-http-latest 42.07% <59.63%> (?)
apm-integrations-http-maintenance 42.13% <59.63%> (?)
apm-integrations-http-oldest 42.15% <59.63%> (?)
apm-integrations-http2 39.51% <48.51%> (?)
apm-integrations-kafkajs-latest 41.03% <55.55%> (?)
apm-integrations-kafkajs-oldest 40.99% <55.55%> (?)
apm-integrations-net 35.07% <51.48%> (?)
apm-integrations-next-11.1.4 28.78% <29.66%> (?)
apm-integrations-next-12.3.7 30.73% <33.98%> (?)
apm-integrations-next-13.0.0 30.73% <33.98%> (?)
apm-integrations-next-13.2.0 30.72% <33.98%> (?)
apm-integrations-next-13.5.11 30.88% <33.98%> (?)
apm-integrations-next-14.0.0 30.82% <33.98%> (?)
apm-integrations-next-14.2.35 30.79% <33.98%> (?)
apm-integrations-next-14.2.6 30.82% <33.98%> (?)
apm-integrations-next-14.2.7 30.79% <33.98%> (?)
apm-integrations-next-15.4.0 30.86% <33.98%> (?)
apm-integrations-oracledb 34.68% <39.80%> (?)
apm-integrations-prisma-18-gte.6.16.0.and.lt.7.0.0 36.65% <41.26%> (?)
apm-integrations-prisma-latest-all 35.47% <34.64%> (?)
apm-integrations-restify 36.44% <40.95%> (?)
apm-integrations-sharedb 33.90% <37.62%> (?)
apm-integrations-tedious 34.49% <39.80%> (?)
appsec-express 52.06% <55.96%> (?)
appsec-fastify 48.81% <54.95%> (?)
appsec-graphql 48.89% <54.86%> (?)
appsec-integration-active 37.04% <12.04%> (?)
appsec-integration-latest 37.01% <12.04%> (?)
appsec-integration-maintenance 37.05% <12.04%> (?)
appsec-integration-oldest 37.04% <12.04%> (?)
appsec-kafka 41.52% <48.48%> (?)
appsec-ldapjs 40.78% <48.54%> (?)
appsec-lodash 40.86% <48.54%> (?)
appsec-macos 58.15% <59.25%> (?)
appsec-mongodb-core 45.35% <43.30%> (?)
appsec-mongoose 46.22% <44.36%> (?)
appsec-mysql 48.13% <58.03%> (?)
appsec-next-latest-11.1.4 28.91% <29.66%> (?)
appsec-next-latest-12.3.7 30.87% <33.98%> (?)
appsec-next-latest-13.0.0 30.87% <33.98%> (?)
appsec-next-latest-13.2.0 30.88% <33.98%> (?)
appsec-next-latest-13.5.11 30.96% <33.98%> (?)
appsec-next-latest-14.0.0 30.90% <33.98%> (?)
appsec-next-latest-14.2.35 30.90% <33.98%> (?)
appsec-next-latest-14.2.6 30.90% <33.98%> (?)
appsec-next-latest-14.2.7 30.90% <33.98%> (?)
appsec-next-latest-15.0.0 30.90% <33.98%> (?)
appsec-next-latest-latest 30.91% <33.98%> (?)
appsec-next-oldest-11.1.4 28.92% <29.66%> (?)
appsec-next-oldest-12.3.7 30.88% <33.98%> (?)
appsec-next-oldest-13.0.0 30.88% <33.98%> (?)
appsec-next-oldest-13.2.0 31.16% <33.98%> (?)
appsec-next-oldest-13.5.11 31.25% <33.98%> (?)
appsec-next-oldest-14.0.0 31.19% <33.98%> (?)
appsec-next-oldest-14.2.35 31.19% <33.98%> (?)
appsec-next-oldest-14.2.6 31.19% <33.98%> (?)
appsec-next-oldest-14.2.7 31.19% <33.98%> (?)
appsec-next-oldest-15.0.0 31.19% <33.98%> (?)
appsec-next-oldest-latest 29.65% <19.44%> (?)
appsec-node-serialize 40.08% <48.54%> (?)
appsec-passport 43.90% <54.12%> (?)
appsec-postgres 47.80% <57.27%> (?)
appsec-sourcing 39.48% <48.54%> (?)
appsec-stripe 41.70% <52.29%> (?)
appsec-template 40.34% <48.54%> (?)
appsec-ubuntu 58.16% <59.25%> (?)
appsec-windows 58.04% <57.40%> (?)
debugger-ubuntu-active 43.23% <46.95%> (?)
debugger-ubuntu-latest 43.18% <46.95%> (?)
debugger-ubuntu-maintenance 43.25% <47.82%> (?)
debugger-ubuntu-oldest 43.68% <47.82%> (?)
instrumentations-instrumentation-bluebird 29.28% <32.67%> (?)
instrumentations-instrumentation-body-parser 37.02% <44.23%> (?)
instrumentations-instrumentation-child_process 34.80% <33.66%> (?)
instrumentations-instrumentation-cookie-parser 31.19% <38.46%> (?)
instrumentations-instrumentation-express 31.40% <38.46%> (?)
instrumentations-instrumentation-express-mongo-sanitize 31.32% <38.46%> (?)
instrumentations-instrumentation-express-session 36.72% <44.23%> (?)
instrumentations-instrumentation-fs 28.97% <32.67%> (?)
instrumentations-instrumentation-generic-pool 28.52% <7.89%> (?)
instrumentations-instrumentation-http 36.22% <43.68%> (?)
instrumentations-instrumentation-knex 29.26% <32.67%> (?)
instrumentations-instrumentation-light-my-request 36.60% <37.86%> (?)
instrumentations-instrumentation-mongoose 30.57% <37.12%> (?)
instrumentations-instrumentation-multer 36.70% <44.23%> (?)
instrumentations-instrumentation-mysql2 34.81% <41.17%> (?)
instrumentations-instrumentation-passport 40.47% <52.29%> (?)
instrumentations-instrumentation-passport-http 40.15% <52.29%> (?)
instrumentations-instrumentation-passport-local 40.63% <52.29%> (?)
instrumentations-instrumentation-pg 34.36% <34.31%> (?)
instrumentations-instrumentation-promise 29.22% <32.67%> (?)
instrumentations-instrumentation-promise-js 29.23% <32.67%> (?)
instrumentations-instrumentation-q 29.25% <32.67%> (?)
instrumentations-instrumentation-url 29.18% <32.67%> (?)
instrumentations-instrumentation-when 29.24% <32.67%> (?)
instrumentations-integration-esbuild-0.16.12-active 19.21% <4.74%> (?)
instrumentations-integration-esbuild-0.16.12-latest 19.19% <4.74%> (?)
instrumentations-integration-esbuild-0.16.12-maintenance 19.21% <4.74%> (?)
instrumentations-integration-esbuild-0.16.12-oldest 19.20% <4.74%> (?)
instrumentations-integration-esbuild-latest-active 19.21% <4.74%> (?)
instrumentations-integration-esbuild-latest-latest 19.19% <4.74%> (?)
instrumentations-integration-esbuild-latest-maintenance 19.21% <4.74%> (?)
instrumentations-integration-esbuild-latest-oldest 19.20% <4.74%> (?)
llmobs-ai 37.74% <36.63%> (?)
llmobs-anthropic 37.84% <35.92%> (?)
llmobs-bedrock 36.48% <37.14%> (?)
llmobs-google-genai 36.89% <35.92%> (?)
llmobs-langchain 38.16% <40.77%> (?)
llmobs-openai-latest 40.41% <42.71%> (?)
llmobs-openai-oldest 40.45% <42.71%> (?)
llmobs-sdk-active 44.93% <41.58%> (?)
llmobs-sdk-latest 44.86% <41.58%> (?)
llmobs-sdk-maintenance 44.93% <41.58%> (?)
llmobs-sdk-oldest 44.91% <41.58%> (?)
llmobs-vertex-ai 37.01% <35.92%> (?)
openfeature-macos 37.97% <41.00%> (?)
openfeature-ubuntu 38.05% <41.00%> (?)
openfeature-unit-active 48.85% <73.17%> (?)
openfeature-unit-latest 48.69% <73.17%> (?)
openfeature-unit-maintenance 48.85% <73.17%> (?)
openfeature-unit-oldest 48.85% <73.17%> (?)
openfeature-windows 37.82% <39.56%> (?)
platform-core 36.45% <33.33%> (?)
platform-esbuild 39.82% <33.33%> (?)
platform-instrumentations-misc 31.40% <37.96%> (?)
platform-integration-active 47.05% <53.84%> (?)
platform-integration-latest 47.01% <53.84%> (?)
platform-integration-maintenance 47.06% <53.84%> (?)
platform-integration-oldest 47.23% <53.84%> (?)
platform-shimmer 42.26% <55.00%> (?)
platform-unit-guardrails 23.16% <25.00%> (?)
platform-webpack 20.35% <5.50%> (?)
plugins-azure-event-hubs 34.85% <34.23%> (?)
plugins-azure-service-bus 35.35% <40.70%> (?)
plugins-bullmq 40.06% <39.02%> (?)
plugins-cassandra 34.74% <48.59%> (?)
plugins-cookie 27.41% <20.00%> (?)
plugins-cookie-parser 27.14% <20.00%> (?)
plugins-crypto 27.27% <33.33%> (?)
plugins-dd-trace-api 34.66% <33.66%> (?)
plugins-express-mongo-sanitize 27.32% <20.00%> (?)
plugins-express-session 27.09% <20.00%> (?)
plugins-fastify 38.79% <48.57%> (?)
plugins-fetch 35.09% <37.50%> (?)
plugins-fs 35.02% <42.57%> (?)
plugins-generic-pool 25.94% <20.00%> (?)
plugins-google-cloud-pubsub 42.28% <37.95%> (?)
plugins-grpc 37.55% <57.46%> (?)
plugins-handlebars 27.38% <20.00%> (?)
plugins-hapi 36.67% <41.74%> (?)
plugins-hono 36.96% <41.74%> (?)
plugins-ioredis 35.26% <50.00%> (?)
plugins-knex 26.90% <20.00%> (?)
plugins-langgraph 34.47% <37.62%> (?)
plugins-ldapjs 24.07% <20.00%> (?)
plugins-light-my-request 26.57% <20.00%> (?)
plugins-limitd-client 29.52% <32.67%> (?)
plugins-lodash 26.05% <20.00%> (?)
plugins-mariadb 36.14% <50.00%> (?)
plugins-memcached 34.79% <48.54%> (?)
plugins-microgateway-core 35.79% <38.83%> (?)
plugins-modelcontextprotocol-sdk 33.67% <33.66%> (?)
plugins-moleculer 37.54% <38.83%> (?)
plugins-mongodb 36.19% <57.14%> (?)
plugins-mongodb-core 35.83% <54.03%> (?)
plugins-mongoose 35.60% <48.48%> (?)
plugins-multer 27.09% <20.00%> (?)
plugins-mysql 35.64% <46.60%> (?)
plugins-mysql2 35.79% <47.05%> (?)
plugins-node-serialize 27.47% <20.00%> (?)
plugins-opensearch 34.62% <43.58%> (?)
plugins-passport-http 27.14% <20.00%> (?)
plugins-pino 31.27% <40.77%> (?)
plugins-postgres 35.49% <40.19%> (?)
plugins-process 27.27% <33.33%> (?)
plugins-pug 27.41% <20.00%> (?)
plugins-redis 35.27% <46.15%> (?)
plugins-router 39.15% <50.00%> (?)
plugins-sequelize 25.64% <20.00%> (?)
plugins-test-and-upstream-amqp10 34.99% <41.58%> (?)
plugins-test-and-upstream-amqplib 40.05% <41.34%> (?)
plugins-test-and-upstream-apollo 36.09% <41.66%> (?)
plugins-test-and-upstream-avsc 35.20% <37.62%> (?)
plugins-test-and-upstream-bunyan 30.65% <40.77%> (?)
plugins-test-and-upstream-connect 37.36% <47.57%> (?)
plugins-test-and-upstream-graphql 36.99% <42.71%> (?)
plugins-test-and-upstream-koa 36.94% <45.63%> (?)
plugins-test-and-upstream-protobufjs 35.41% <37.62%> (?)
plugins-test-and-upstream-rhea 40.18% <46.15%> (?)
plugins-undici 35.66% <42.47%> (?)
plugins-url 27.27% <33.33%> (?)
plugins-valkey 34.90% <48.71%> (?)
plugins-vm 27.27% <33.33%> (?)
plugins-winston 31.17% <40.00%> (?)
plugins-ws 38.17% <42.71%> (?)
profiling-macos 42.73% <52.63%> (?)
profiling-ubuntu 43.14% <53.50%> (?)
profiling-windows 40.00% <45.61%> (?)
serverless-aws-sdk-latest-aws-sdk 34.41% <20.59%> (?)
serverless-aws-sdk-latest-bedrockruntime 33.02% <34.28%> (?)
serverless-aws-sdk-latest-client 21.74% <18.18%> (?)
serverless-aws-sdk-latest-dynamodb 35.39% <41.90%> (?)
serverless-aws-sdk-latest-eventbridge 28.56% <14.92%> (?)
serverless-aws-sdk-latest-kinesis 38.54% <46.29%> (?)
serverless-aws-sdk-latest-s3 33.92% <42.85%> (?)
serverless-aws-sdk-latest-sns 39.65% <47.22%> (?)
serverless-aws-sdk-latest-sqs 39.15% <48.14%> (?)
serverless-aws-sdk-latest-stepfunctions 34.59% <37.14%> (?)
serverless-aws-sdk-latest-util 47.47% <40.00%> (?)
serverless-aws-sdk-oldest-aws-sdk 34.50% <20.59%> (?)
serverless-aws-sdk-oldest-bedrockruntime 33.29% <34.28%> (?)
serverless-aws-sdk-oldest-client 22.22% <18.18%> (?)
serverless-aws-sdk-oldest-dynamodb 35.46% <41.90%> (?)
serverless-aws-sdk-oldest-eventbridge 28.60% <14.92%> (?)
serverless-aws-sdk-oldest-kinesis 38.67% <46.29%> (?)
serverless-aws-sdk-oldest-lambda 36.05% <45.71%> (?)
serverless-aws-sdk-oldest-s3 33.98% <42.85%> (?)
serverless-aws-sdk-oldest-serverless-peer-service 40.63% <48.95%> (?)
serverless-aws-sdk-oldest-sns 39.73% <47.22%> (?)
serverless-aws-sdk-oldest-sqs 39.04% <48.14%> (?)
serverless-aws-sdk-oldest-stepfunctions 34.67% <37.14%> (?)
serverless-aws-sdk-oldest-util 47.77% <40.00%> (?)
serverless-azure-durable-functions 36.98% <42.47%> (?)
serverless-azure-functions-eventhubs 38.46% <42.62%> (?)
serverless-azure-functions-servicebus 38.51% <42.62%> (?)
serverless-lambda 35.99% <37.93%> (?)
test-optimization-cucumber-latest-7.0.0 50.32% <55.97%> (?)
test-optimization-cucumber-latest-latest 53.20% <75.54%> (?)
test-optimization-cucumber-oldest-7.0.0 50.36% <55.97%> (?)
test-optimization-cypress-eol-6.7.0-commonJS 45.90% <68.27%> (?)
test-optimization-cypress-latest-12.0.0-commonJS 48.80% <68.27%> (?)
test-optimization-cypress-latest-12.0.0-esm 48.83% <68.27%> (?)
test-optimization-cypress-latest-14.5.4-commonJS 48.65% <68.27%> (?)
test-optimization-cypress-latest-14.5.4-esm 48.68% <68.27%> (?)
test-optimization-cypress-latest-latest-commonJS 49.14% <68.96%> (?)
test-optimization-cypress-latest-latest-esm 49.17% <68.96%> (?)
test-optimization-cypress-oldest-12.0.0-commonJS 48.84% <68.27%> (?)
test-optimization-cypress-oldest-12.0.0-esm 48.87% <68.27%> (?)
test-optimization-cypress-oldest-14.5.4-commonJS 48.17% <68.27%> (?)
test-optimization-cypress-oldest-14.5.4-esm 48.72% <68.27%> (?)
test-optimization-jest-latest-latest 54.80% <74.82%> (?)
test-optimization-jest-latest-oldest 53.65% <74.82%> (?)
test-optimization-jest-oldest-latest 54.81% <74.82%> (?)
test-optimization-jest-oldest-oldest 53.66% <74.82%> (?)
test-optimization-mocha-latest-latest 53.58% <76.19%> (?)
test-optimization-mocha-latest-oldest 48.82% <60.95%> (?)
test-optimization-mocha-oldest-latest 53.67% <76.19%> (?)
test-optimization-mocha-oldest-oldest 48.76% <60.95%> (?)
test-optimization-playwright-latest-latest-playwright-atr 43.15% <64.78%> (?)
test-optimization-playwright-latest-latest-playwright-efd 43.58% <65.49%> (?)
test-optimization-playwright-latest-latest-playwright-final-status 43.61% <67.60%> (?)
test-optimization-playwright-latest-latest-playwright-impacted-tests 43.09% <64.78%> (?)
test-optimization-playwright-latest-latest-playwright-reporting 43.04% <67.60%> (?)
test-optimization-playwright-latest-latest-playwright-test-management 44.81% <68.30%> (?)
test-optimization-playwright-latest-oldest-playwright-atr 39.38% <54.92%> (?)
test-optimization-playwright-latest-oldest-playwright-reporting 40.42% <54.92%> (?)
test-optimization-playwright-oldest-latest-playwright-active-test-span 44.34% <65.49%> (?)
test-optimization-playwright-oldest-latest-playwright-atr 43.19% <64.78%> (?)
test-optimization-playwright-oldest-latest-playwright-efd 43.59% <65.49%> (?)
test-optimization-playwright-oldest-latest-playwright-final-status 43.64% <67.60%> (?)
test-optimization-playwright-oldest-latest-playwright-impacted-tests 43.12% <64.78%> (?)
test-optimization-playwright-oldest-latest-playwright-reporting 43.05% <67.60%> (?)
test-optimization-playwright-oldest-latest-playwright-test-management 44.82% <68.30%> (?)
test-optimization-playwright-oldest-oldest-playwright-reporting 40.44% <54.92%> (?)
test-optimization-selenium-latest 45.60% <40.62%> (?)
test-optimization-selenium-oldest 45.16% <45.31%> (?)
test-optimization-testopt-active 46.97% <38.74%> (?)
test-optimization-testopt-latest 46.94% <38.74%> (?)
test-optimization-testopt-maintenance 46.97% <38.74%> (?)
test-optimization-testopt-oldest 47.82% <51.74%> (?)
test-optimization-vitest-latest 51.21% <78.26%> (?)
test-optimization-vitest-oldest 48.30% <72.82%> (?)

Flags with carried forward coverage won't be shown. Click here to find out more.

☔ View full report in Codecov by Sentry.
📢 Have feedback on the report? Share it here.

🚀 New features to boost your workflow:
  • ❄️ Test Analytics: Detect flaky tests, report on failures, and find test suite problems.
  • 📦 JS Bundle Analysis: Save yourself from yourself by tracking and limiting bundle sizes in JS merges.

@dd-octo-sts

dd-octo-sts Bot commented May 15, 2026

Copy link
Copy Markdown
Contributor Author

Overall package size

Self size: 5.84 MB
Deduped: 6.88 MB
No deduping: 6.88 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

@datadog-datadog-prod-us1-2

datadog-datadog-prod-us1-2 Bot commented May 15, 2026

Copy link
Copy Markdown

Tests

🎉 All green!

🧪 All tests passed
❄️ No new flaky tests detected

🎯 Code Coverage (details)
Patch Coverage: 83.60%
Overall Coverage: 86.70%

This comment will be updated automatically if new data arrives.
🔗 Commit SHA: cde96c8 | Docs | Datadog PR Page | Give us feedback!

@pr-commenter

pr-commenter Bot commented May 15, 2026

Copy link
Copy Markdown

Benchmarks

Benchmark execution time: 2026-05-20 06:37:48

Comparing candidate commit cde96c8 in PR branch v5.104.0-proposal with baseline commit eb856ae in branch v5.x.

Found 11 performance improvements and 0 performance regressions! Performance is the same for 1484 metrics, 98 unstable metrics.

scenario:log-with-debug-20

  • 🟩 instructions [-392.4M instructions; -254.1M instructions] or [-10.209%; -6.609%]

scenario:propagation-inject-20

  • 🟩 cpu_user_time [-980.686ms; -949.153ms] or [-45.347%; -43.889%]
  • 🟩 execution_time [-1003.360ms; -975.503ms] or [-45.449%; -44.187%]
  • 🟩 instructions [-4.2G instructions; -4.2G instructions] or [-32.036%; -31.665%]

scenario:propagation-inject-22

  • 🟩 cpu_user_time [-952.791ms; -936.996ms] or [-45.403%; -44.651%]
  • 🟩 execution_time [-972.731ms; -959.220ms] or [-45.377%; -44.747%]
  • 🟩 instructions [-4.2G instructions; -4.1G instructions] or [-31.772%; -31.517%]

scenario:propagation-inject-24

  • 🟩 cpu_user_time [-975.207ms; -957.243ms] or [-46.528%; -45.671%]
  • 🟩 execution_time [-996.059ms; -980.537ms] or [-46.454%; -45.730%]
  • 🟩 instructions [-4.1G instructions; -4.1G instructions] or [-31.366%; -31.168%]
  • 🟩 max_rss_usage [-5.541MB; -4.183MB] or [-7.487%; -5.652%]

sabrenner and others added 3 commits May 16, 2026 06:01
…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
dd-octo-sts Bot force-pushed the v5.104.0-proposal branch from fd66fc8 to 5b7323a Compare May 16, 2026 06:01
dependabot Bot and others added 13 commits May 19, 2026 06:26
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.
rochdev and others added 4 commits May 20, 2026 06:26
…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
dd-octo-sts Bot force-pushed the v5.104.0-proposal branch from efac65d to cde96c8 Compare May 20, 2026 06:26
@pabloerhard
pabloerhard marked this pull request as ready for review May 20, 2026 21:28
@pabloerhard
pabloerhard requested review from a team as code owners May 20, 2026 21:28
@pabloerhard
pabloerhard requested review from BridgeAR, leoromanovsky, lym953, sameerank and wconti27 and removed request for a team May 20, 2026 21:28
@pabloerhard
pabloerhard merged commit 21526bc into v5.x May 20, 2026
917 checks passed
@pabloerhard
pabloerhard deleted the v5.104.0-proposal branch May 20, 2026 21:32
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.