Skip to content

fix(otel): tighten OTel-bridge Span spec compliance#8242

Draft
BridgeAR wants to merge 2 commits intomasterfrom
BridgeAR/fix-otel-bridge-spec-compliance
Draft

fix(otel): tighten OTel-bridge Span spec compliance#8242
BridgeAR wants to merge 2 commits intomasterfrom
BridgeAR/fix-otel-bridge-spec-compliance

Conversation

@BridgeAR
Copy link
Copy Markdown
Member

@BridgeAR BridgeAR commented May 2, 2026

The OTel-bridge Span class drifted from the JS SDK in three places that
showed up as observable differences for OTel consumers. This commit fixes
all three behind a single set of helpers, with focused unit coverage.

  1. Mutations after end() were not consistently a no-op.
    setAttribute/addEvent/addLink/recordException/setStatus could
    still poke the underlying DD span after end() returned, contradicting
    the OTel spec which requires a finished span to be immutable. The
    writable-span gate (_duration === undefined) is now centralised in
    span-helpers.js so every helper short-circuits at the same point.

  2. setStatus did not implement the OTel precedence rules.
    The spec says OK is final, ERROR > UNSET, and a later UNSET must
    never overwrite. The bridge tracked a boolean _hasStatus, so a second
    OK (after ERROR) silently kept the error and a second ERROR could
    not refresh the message. Replaced with a #statusCode private field
    and an applyOtelStatus(currentCode, status) -> newCode helper that
    encodes the precedence table once.

  3. addEvent's overloads were not normalised.
    addEvent(name, hrTime) was treated as attributes, so the timestamp
    ended up tagged on the event instead of as its time. addOtelEvent
    now detects TimeInput shapes and routes them to the right slot.

The helpers also gained addOtelLinks so the bridge does not loop in the
class layer, and setOtelAttributes no longer mutates its attributes
input as a drive-by while the gate was being added.

Test-only: new packages/dd-trace/test/opentelemetry/span-helpers.spec.js
covers each helper in isolation (gate, precedence, normalisation, error
tagging, normalizeLinkContext shape coverage). Existing span.spec.js
gained the precedence describe block, post-end no-op coverage across all
mutation methods, and the addEvent time-input regression test.

No production behaviour change for code paths that were already spec-
compliant; the gate and precedence fixes are observable only on paths
that misused the bridge.

BridgeAR added 2 commits May 1, 2026 17:39
Pulls the OTel-to-Datadog translation logic out of `span.js` and
`tracer.js` into a single `span-helpers.js` module exposing:
`normalizeLinkContext`, `setOtelAttribute`, `setOtelAttributes`,
`addOtelLink`, `recordException`, `setStatus`.

No behavior change. Consolidating these small helpers in one place
keeps the OTel-bridge translation layer easy to reason about and lets
future bridge objects reuse the same logic without duplication.
The OTel-bridge `Span` class drifted from the JS SDK in three places that
showed up as observable differences for OTel consumers. This commit fixes
all three behind a single set of helpers, with focused unit coverage.

1. Mutations after `end()` were not consistently a no-op.
   `setAttribute`/`addEvent`/`addLink`/`recordException`/`setStatus` could
   still poke the underlying DD span after `end()` returned, contradicting
   the OTel spec which requires a finished span to be immutable. The
   writable-span gate (`_duration === undefined`) is now centralised in
   `span-helpers.js` so every helper short-circuits at the same point.

2. `setStatus` did not implement the OTel precedence rules.
   The spec says `OK` is final, `ERROR > UNSET`, and a later `UNSET` must
   never overwrite. The bridge tracked a boolean `_hasStatus`, so a second
   `OK` (after `ERROR`) silently kept the error and a second `ERROR` could
   not refresh the message. Replaced with a `#statusCode` private field
   and an `applyOtelStatus(currentCode, status) -> newCode` helper that
   encodes the precedence table once.

3. `addEvent`'s overloads were not normalised.
   `addEvent(name, hrTime)` was treated as attributes, so the timestamp
   ended up tagged on the event instead of as its time. `addOtelEvent`
   now detects `TimeInput` shapes and routes them to the right slot.

The helpers also gained `addOtelLinks` so the bridge does not loop in the
class layer, and `setOtelAttributes` no longer mutates its `attributes`
input as a drive-by while the gate was being added.

Test-only: new `packages/dd-trace/test/opentelemetry/span-helpers.spec.js`
covers each helper in isolation (gate, precedence, normalisation, error
tagging, `normalizeLinkContext` shape coverage). Existing `span.spec.js`
gained the precedence describe block, post-end no-op coverage across all
mutation methods, and the `addEvent` time-input regression test.

No production behaviour change for code paths that were already spec-
compliant; the gate and precedence fixes are observable only on paths
that misused the bridge.
@github-actions
Copy link
Copy Markdown
Contributor

github-actions Bot commented May 2, 2026

Overall package size

Self size: 5.69 MB
Deduped: 6.53 MB
No deduping: 6.53 MB

Dependency sizes | name | version | self size | total size | |------|---------|-----------|------------| | import-in-the-middle | 3.0.1 | 82.56 kB | 817.39 kB | | dc-polyfill | 0.1.10 | 26.73 kB | 26.73 kB |

🤖 This report was automatically generated by heaviest-objects-in-the-universe

@BridgeAR BridgeAR changed the title refactor(otel): extract bridge helpers into span-helpers.js fix(otel): tighten OTel-bridge Span spec compliance May 2, 2026
@codecov
Copy link
Copy Markdown

codecov Bot commented May 2, 2026

Codecov Report

❌ Patch coverage is 81.25000% with 18 lines in your changes missing coverage. Please review.
✅ Project coverage is 89.62%. Comparing base (f6faa2b) to head (c9981b1).
⚠️ Report is 14 commits behind head on master.

Files with missing lines Patch % Lines
...ackages/dd-trace/src/opentelemetry/span-helpers.js 78.04% 18 Missing ⚠️
Additional details and impacted files
@@           Coverage Diff           @@
##           master    #8242   +/-   ##
=======================================
  Coverage   89.61%   89.62%           
=======================================
  Files         829      830    +1     
  Lines       43356    43399   +43     
  Branches     7916     7930   +14     
=======================================
+ Hits        38855    38896   +41     
- Misses       4501     4503    +2     
Flag Coverage Δ
aiguard-integration-active 41.32% <ø> (-0.01%) ⬇️
aiguard-integration-latest 41.27% <ø> (-0.01%) ⬇️
aiguard-integration-maintenance 41.32% <ø> (-0.01%) ⬇️
aiguard-macos 35.82% <ø> (-0.08%) ⬇️
aiguard-ubuntu 35.93% <ø> (-0.08%) ⬇️
aiguard-windows 35.73% <ø> (-0.08%) ⬇️
apm-capabilities-tracing-macos 48.27% <98.64%> (+0.08%) ⬆️
apm-capabilities-tracing-ubuntu-active 48.31% <98.64%> (+0.08%) ⬆️
apm-capabilities-tracing-ubuntu-latest 48.28% <98.64%> (+0.08%) ⬆️
apm-capabilities-tracing-ubuntu-maintenance 48.31% <98.64%> (+0.08%) ⬆️
apm-capabilities-tracing-ubuntu-oldest 48.30% <98.64%> (+0.08%) ⬆️
apm-capabilities-tracing-windows 48.10% <98.64%> (+0.09%) ⬆️
apm-integrations-aerospike-18-gte.5.2.0 34.96% <ø> (-0.09%) ⬇️
apm-integrations-aerospike-20-gte.5.5.0 34.98% <ø> (-0.09%) ⬇️
apm-integrations-aerospike-22-gte.5.12.1 34.98% <ø> (-0.09%) ⬇️
apm-integrations-aerospike-22-gte.6.0.0 34.98% <ø> (-0.09%) ⬇️
apm-integrations-aerospike-eol- 34.88% <ø> (-0.09%) ⬇️
apm-integrations-child-process 36.14% <ø> (-0.09%) ⬇️
apm-integrations-confluentinc-kafka-javascript-18 41.83% <ø> (-0.08%) ⬇️
apm-integrations-confluentinc-kafka-javascript-20 41.85% <ø> (-0.08%) ⬇️
apm-integrations-confluentinc-kafka-javascript-22 41.85% <ø> (-0.08%) ⬇️
apm-integrations-confluentinc-kafka-javascript-24 41.78% <ø> (-0.08%) ⬇️
apm-integrations-couchbase-18 35.17% <ø> (-0.07%) ⬇️
apm-integrations-couchbase-eol 35.24% <ø> (-0.07%) ⬇️
apm-integrations-dns 34.99% <ø> (-0.12%) ⬇️
apm-integrations-elasticsearch 35.56% <ø> (-0.07%) ⬇️
apm-integrations-http-latest 42.98% <ø> (-0.07%) ⬇️
apm-integrations-http-maintenance 43.04% <ø> (-0.07%) ⬇️
apm-integrations-http-oldest 43.05% <ø> (-0.07%) ⬇️
apm-integrations-http2 40.34% <ø> (-0.08%) ⬇️
apm-integrations-kafkajs-latest 41.72% <ø> (-0.08%) ⬇️
apm-integrations-kafkajs-oldest 41.76% <ø> (-0.09%) ⬇️
apm-integrations-net 35.66% <ø> (-0.09%) ⬇️
apm-integrations-next-11.1.4 29.45% <ø> (-0.06%) ⬇️
apm-integrations-next-13.2.0 31.30% <ø> (-0.07%) ⬇️
apm-integrations-next-gte.10.2.0.and.lt.11 23.33% <ø> (ø)
apm-integrations-next-gte.11.0.0.and.lt.13 31.31% <ø> (-0.07%) ⬇️
apm-integrations-next-gte.13.0.0.and.lt.14 31.55% <ø> (-0.07%) ⬇️
apm-integrations-next-gte.14.0.0.and.lte.14.2.6 31.37% <ø> (-0.07%) ⬇️
apm-integrations-next-gte.14.2.7.and.lt.15 31.37% <ø> (-0.07%) ⬇️
apm-integrations-next-gte.15.0.0 31.43% <ø> (-0.07%) ⬇️
apm-integrations-oracledb 35.24% <ø> (-0.09%) ⬇️
apm-integrations-prisma-18-gte.6.16.0.and.lt.7.0.0 35.53% <ø> (-0.07%) ⬇️
apm-integrations-prisma-latest-all 35.86% <ø> (-0.07%) ⬇️
apm-integrations-restify 37.09% <ø> (-0.10%) ⬇️
apm-integrations-sharedb 34.57% <ø> (-0.09%) ⬇️
apm-integrations-tedious 35.13% <ø> (-0.09%) ⬇️
appsec-express 52.80% <ø> (-0.05%) ⬇️
appsec-fastify 49.31% <ø> (-0.06%) ⬇️
appsec-graphql 49.47% <ø> (-0.08%) ⬇️
appsec-integration-active 37.61% <ø> (+<0.01%) ⬆️
appsec-integration-latest 37.58% <ø> (+<0.01%) ⬆️
appsec-integration-maintenance 37.60% <ø> (+<0.01%) ⬆️
appsec-integration-oldest 37.60% <ø> (+<0.01%) ⬆️
appsec-kafka 42.08% <ø> (-0.06%) ⬇️
appsec-ldapjs 41.29% <ø> (-0.08%) ⬇️
appsec-lodash 41.41% <ø> (-0.08%) ⬇️
appsec-macos 56.82% <ø> (-0.06%) ⬇️
appsec-mongodb-core 45.67% <ø> (-0.08%) ⬇️
appsec-mongoose 46.57% <ø> (-0.06%) ⬇️
appsec-mysql 48.74% <ø> (-0.05%) ⬇️
appsec-next-latest-11.1.4 29.62% <ø> (-0.06%) ⬇️
appsec-next-latest-13.2.0 31.51% <ø> (-0.07%) ⬇️
appsec-next-latest-gte.10.2.0.and.lt.11 28.55% <ø> (-0.05%) ⬇️
appsec-next-latest-gte.11.0.0.and.lt.13 31.49% <ø> (-0.07%) ⬇️
appsec-next-latest-gte.13.0.0.and.lt.14 31.69% <ø> (-0.07%) ⬇️
appsec-next-latest-gte.14.0.0.and.lte.14.2.6 31.53% <ø> (-0.07%) ⬇️
appsec-next-latest-gte.14.2.7.and.lt.15 31.53% <ø> (-0.07%) ⬇️
appsec-next-latest-gte.15.0.0 31.53% <ø> (-0.07%) ⬇️
appsec-next-oldest-11.1.4 29.64% <ø> (-0.06%) ⬇️
appsec-next-oldest-13.2.0 31.74% <ø> (-0.07%) ⬇️
appsec-next-oldest-gte.10.2.0.and.lt.11 28.68% <ø> (-0.05%) ⬇️
appsec-next-oldest-gte.11.0.0.and.lt.13 31.51% <ø> (-0.07%) ⬇️
appsec-next-oldest-gte.13.0.0.and.lt.14 31.94% <ø> (-0.07%) ⬇️
appsec-next-oldest-gte.14.0.0.and.lte.14.2.6 31.78% <ø> (-0.07%) ⬇️
appsec-next-oldest-gte.14.2.7.and.lt.15 31.78% <ø> (-0.07%) ⬇️
appsec-next-oldest-gte.15.0.0 31.78% <ø> (-0.07%) ⬇️
appsec-node-serialize 40.59% <ø> (-0.08%) ⬇️
appsec-passport 44.57% <ø> (-0.09%) ⬇️
appsec-postgres 48.31% <ø> (-0.08%) ⬇️
appsec-sourcing 40.08% <ø> (-0.08%) ⬇️
appsec-stripe 42.34% <ø> (-0.08%) ⬇️
appsec-template 40.75% <ø> (-0.08%) ⬇️
appsec-ubuntu 56.89% <ø> (-0.06%) ⬇️
appsec-windows 56.69% <ø> (-0.08%) ⬇️
debugger-ubuntu-active 44.41% <ø> (-0.06%) ⬇️
debugger-ubuntu-latest 44.36% <ø> (-0.06%) ⬇️
debugger-ubuntu-maintenance 44.42% <ø> (-0.06%) ⬇️
debugger-ubuntu-oldest 44.78% <ø> (-0.06%) ⬇️
instrumentations-instrumentation-bluebird 29.89% <ø> (-0.09%) ⬇️
instrumentations-instrumentation-body-parser 37.73% <ø> (-0.09%) ⬇️
instrumentations-instrumentation-child_process 35.52% <ø> (-0.09%) ⬇️
instrumentations-instrumentation-cookie-parser 31.81% <ø> (-0.08%) ⬇️
instrumentations-instrumentation-express 32.02% <ø> (-0.08%) ⬇️
instrumentations-instrumentation-express-mongo-sanitize 31.93% <ø> (-0.08%) ⬇️
instrumentations-instrumentation-express-session 37.36% <ø> (-0.09%) ⬇️
instrumentations-instrumentation-fs 29.57% <ø> (-0.09%) ⬇️
instrumentations-instrumentation-generic-pool 30.59% <ø> (ø)
instrumentations-instrumentation-http 36.98% <ø> (-0.09%) ⬇️
instrumentations-instrumentation-knex 29.86% <ø> (-0.09%) ⬇️
instrumentations-instrumentation-light-my-request 37.29% <ø> (-0.09%) ⬇️
instrumentations-instrumentation-mongoose 30.94% <ø> (-0.08%) ⬇️
instrumentations-instrumentation-multer 37.50% <ø> (-0.09%) ⬇️
instrumentations-instrumentation-mysql2 35.49% <ø> (-0.09%) ⬇️
instrumentations-instrumentation-passport 41.16% <ø> (-0.09%) ⬇️
instrumentations-instrumentation-passport-http 40.94% <ø> (-0.09%) ⬇️
instrumentations-instrumentation-passport-local 41.44% <ø> (-0.09%) ⬇️
instrumentations-instrumentation-pg 35.02% <ø> (-0.09%) ⬇️
instrumentations-instrumentation-promise 29.82% <ø> (-0.09%) ⬇️
instrumentations-instrumentation-promise-js 29.83% <ø> (-0.09%) ⬇️
instrumentations-instrumentation-q 29.86% <ø> (-0.09%) ⬇️
instrumentations-instrumentation-url 29.83% <ø> (-0.09%) ⬇️
instrumentations-instrumentation-when 29.84% <ø> (-0.09%) ⬇️
instrumentations-integration-esbuild-active 19.74% <ø> (+<0.01%) ⬆️
instrumentations-integration-esbuild-latest 19.72% <ø> (+<0.01%) ⬆️
instrumentations-integration-esbuild-maintenance 19.74% <ø> (+<0.01%) ⬆️
instrumentations-integration-esbuild-oldest 19.72% <ø> (+<0.01%) ⬆️
llmobs-ai 38.47% <ø> (-0.07%) ⬇️
llmobs-anthropic 37.96% <ø> (-0.07%) ⬇️
llmobs-bedrock 37.16% <ø> (-0.08%) ⬇️
llmobs-google-genai 37.59% <ø> (-0.08%) ⬇️
llmobs-langchain 37.13% <ø> (-0.07%) ⬇️
llmobs-openai 41.29% <ø> (-0.06%) ⬇️
llmobs-sdk-active 45.97% <ø> (-0.08%) ⬇️
llmobs-sdk-latest 45.90% <ø> (-0.08%) ⬇️
llmobs-sdk-maintenance 45.97% <ø> (-0.08%) ⬇️
llmobs-sdk-oldest 45.95% <ø> (-0.08%) ⬇️
llmobs-vertex-ai 37.78% <ø> (-0.08%) ⬇️
openfeature-macos 38.87% <ø> (+<0.01%) ⬆️
openfeature-ubuntu 38.95% <ø> (-0.01%) ⬇️
openfeature-unit-active 50.43% <ø> (-0.52%) ⬇️
openfeature-unit-latest 50.28% <ø> (-0.52%) ⬇️
openfeature-unit-maintenance 50.43% <ø> (-0.52%) ⬇️
openfeature-unit-oldest 50.43% <ø> (-0.52%) ⬇️
openfeature-windows 38.74% <ø> (-0.01%) ⬇️
platform-core 36.53% <ø> (ø)
platform-esbuild 40.80% <ø> (ø)
platform-instrumentations-misc 31.35% <ø> (+0.01%) ⬆️
platform-integration-active 48.01% <27.08%> (-0.01%) ⬇️
platform-integration-latest 47.97% <27.08%> (-0.02%) ⬇️
platform-integration-maintenance 48.03% <27.08%> (+<0.01%) ⬆️
platform-integration-oldest 48.21% <27.08%> (-0.01%) ⬇️
platform-shimmer 42.11% <ø> (ø)
platform-unit-guardrails 35.88% <ø> (ø)
platform-webpack 20.79% <ø> (+<0.01%) ⬆️
plugins-azure-durable-functions 37.63% <ø> (+0.05%) ⬆️
plugins-azure-event-hubs 35.62% <ø> (+0.01%) ⬆️
plugins-azure-service-bus 36.05% <ø> (+0.01%) ⬆️
plugins-bullmq 40.79% <ø> (+0.03%) ⬆️
plugins-cassandra 35.25% <ø> (-0.21%) ⬇️
plugins-cookie 26.47% <ø> (ø)
plugins-cookie-parser 26.28% <ø> (ø)
plugins-crypto 27.32% <ø> (ø)
plugins-dd-trace-api 35.49% <ø> (-0.07%) ⬇️
plugins-express-mongo-sanitize 26.42% <ø> (ø)
plugins-express-session 26.24% <ø> (ø)
plugins-fastify 39.41% <ø> (-0.08%) ⬇️
plugins-fetch 35.86% <ø> (-0.09%) ⬇️
plugins-fs 35.76% <ø> (-0.07%) ⬇️
plugins-generic-pool 25.40% <ø> (ø)
plugins-google-cloud-pubsub 43.07% <ø> (-0.04%) ⬇️
plugins-grpc 38.12% <ø> (-0.08%) ⬇️
plugins-handlebars 26.46% <ø> (ø)
plugins-hapi 37.35% <ø> (-0.10%) ⬇️
plugins-hono 37.59% <ø> (-0.09%) ⬇️
plugins-ioredis 35.81% <ø> (-0.07%) ⬇️
plugins-knex 26.14% <ø> (ø)
plugins-langgraph 35.14% <ø> (-0.09%) ⬇️
plugins-ldapjs 24.02% <ø> (ø)
plugins-light-my-request 25.88% <ø> (ø)
plugins-limitd-client 30.13% <ø> (-0.07%) ⬇️
plugins-lodash 25.47% <ø> (ø)
plugins-mariadb 36.68% <ø> (-0.07%) ⬇️
plugins-memcached 35.46% <ø> (-0.07%) ⬇️
plugins-microgateway-core 36.44% <ø> (-0.16%) ⬇️
plugins-modelcontextprotocol-sdk 34.38% <ø> (-0.09%) ⬇️
plugins-moleculer 38.14% <ø> (-0.08%) ⬇️
plugins-mongodb 36.65% <ø> (-0.07%) ⬇️
plugins-mongodb-core 36.28% <ø> (-0.07%) ⬇️
plugins-mongoose 36.14% <ø> (-0.07%) ⬇️
plugins-multer 26.24% <ø> (ø)
plugins-mysql 36.54% <ø> (+0.06%) ⬆️
plugins-mysql2 36.52% <ø> (-0.07%) ⬇️
plugins-node-serialize 26.51% <ø> (ø)
plugins-opensearch 35.11% <ø> (-0.09%) ⬇️
plugins-passport-http 26.30% <ø> (ø)
plugins-pino 31.85% <ø> (-0.07%) ⬇️
plugins-postgres 34.50% <ø> (-0.19%) ⬇️
plugins-process 27.32% <ø> (ø)
plugins-pug 26.47% <ø> (ø)
plugins-redis 36.02% <ø> (-0.07%) ⬇️
plugins-router 39.76% <ø> (-0.10%) ⬇️
plugins-sequelize 25.18% <ø> (ø)
plugins-test-and-upstream-amqp10 35.78% <ø> (-0.07%) ⬇️
plugins-test-and-upstream-amqplib 40.92% <ø> (-0.07%) ⬇️
plugins-test-and-upstream-apollo 36.60% <ø> (-0.08%) ⬇️
plugins-test-and-upstream-avsc 35.09% <ø> (-0.09%) ⬇️
plugins-test-and-upstream-bunyan 31.26% <ø> (-0.09%) ⬇️
plugins-test-and-upstream-connect 37.95% <ø> (-0.08%) ⬇️
plugins-test-and-upstream-graphql 37.30% <ø> (-0.07%) ⬇️
plugins-test-and-upstream-koa 37.54% <ø> (-0.10%) ⬇️
plugins-test-and-upstream-protobufjs 35.31% <ø> (-0.09%) ⬇️
plugins-test-and-upstream-rhea 40.99% <ø> (-0.09%) ⬇️
plugins-undici 36.49% <ø> (-0.20%) ⬇️
plugins-url 27.32% <ø> (ø)
plugins-valkey 35.48% <ø> (-0.09%) ⬇️
plugins-vm 27.32% <ø> (ø)
plugins-winston 31.73% <ø> (-0.09%) ⬇️
plugins-ws 39.06% <ø> (-0.10%) ⬇️
profiling-macos 44.04% <ø> (+0.08%) ⬆️
profiling-ubuntu 44.41% <ø> (-0.06%) ⬇️
profiling-windows 41.11% <ø> (-0.06%) ⬇️
serverless-aws-sdk-latest-aws-sdk 35.39% <ø> (-0.08%) ⬇️
serverless-aws-sdk-latest-bedrockruntime 33.86% <ø> (-0.08%) ⬇️
serverless-aws-sdk-latest-client 22.12% <ø> (ø)
serverless-aws-sdk-latest-dynamodb 36.28% <ø> (-0.06%) ⬇️
serverless-aws-sdk-latest-eventbridge 29.45% <ø> (-0.07%) ⬇️
serverless-aws-sdk-latest-kinesis 39.20% <ø> (-0.07%) ⬇️
serverless-aws-sdk-latest-lambda 36.50% <ø> (-0.09%) ⬇️
serverless-aws-sdk-latest-s3 34.46% <ø> (-0.08%) ⬇️
serverless-aws-sdk-latest-serverless-peer-service 40.82% <ø> (-0.09%) ⬇️
serverless-aws-sdk-latest-sns 40.37% <ø> (-0.08%) ⬇️
serverless-aws-sdk-latest-sqs 39.48% <ø> (-0.06%) ⬇️
serverless-aws-sdk-latest-stepfunctions 35.11% <ø> (-0.08%) ⬇️
serverless-aws-sdk-latest-util 47.80% <ø> (ø)
serverless-aws-sdk-oldest-aws-sdk 35.45% <ø> (-0.08%) ⬇️
serverless-aws-sdk-oldest-bedrockruntime 33.90% <ø> (-0.08%) ⬇️
serverless-aws-sdk-oldest-client 22.50% <ø> (ø)
serverless-aws-sdk-oldest-dynamodb 36.33% <ø> (-0.06%) ⬇️
serverless-aws-sdk-oldest-eventbridge 29.50% <ø> (-0.07%) ⬇️
serverless-aws-sdk-oldest-kinesis 39.27% <ø> (-0.07%) ⬇️
serverless-aws-sdk-oldest-lambda 36.55% <ø> (-0.09%) ⬇️
serverless-aws-sdk-oldest-s3 34.52% <ø> (-0.08%) ⬇️
serverless-aws-sdk-oldest-serverless-peer-service 40.89% <ø> (-0.09%) ⬇️
serverless-aws-sdk-oldest-sns 40.56% <ø> (-0.06%) ⬇️
serverless-aws-sdk-oldest-sqs 39.54% <ø> (-0.06%) ⬇️
serverless-aws-sdk-oldest-stepfunctions 35.15% <ø> (-0.08%) ⬇️
serverless-aws-sdk-oldest-util 48.12% <ø> (ø)
serverless-azure-functions-client 39.28% <ø> (-0.01%) ⬇️
serverless-azure-functions-eventhubs 38.93% <ø> (-0.01%) ⬇️
serverless-azure-functions-servicebus 38.99% <ø> (-0.01%) ⬇️
serverless-lambda 33.57% <ø> (-0.08%) ⬇️
test-optimization-cucumber-latest-7.0.0 50.21% <ø> (+0.01%) ⬆️
test-optimization-cucumber-latest-latest 52.73% <ø> (+0.13%) ⬆️
test-optimization-cucumber-oldest-7.0.0 50.25% <ø> (+0.16%) ⬆️
test-optimization-cypress-latest-10.2.0-commonJS 47.43% <ø> (+0.11%) ⬆️
test-optimization-cypress-latest-10.2.0-esm 47.44% <ø> (+0.08%) ⬆️
test-optimization-cypress-latest-14.5.4-commonJS 48.03% <ø> (+0.08%) ⬆️
test-optimization-cypress-latest-14.5.4-esm 48.07% <ø> (+0.08%) ⬆️
test-optimization-cypress-latest-latest-commonJS 48.58% <ø> (+0.13%) ⬆️
test-optimization-cypress-latest-latest-esm 48.58% <ø> (+0.11%) ⬆️
test-optimization-cypress-oldest-10.2.0-commonJS 47.44% <ø> (+0.08%) ⬆️
test-optimization-cypress-oldest-10.2.0-esm 47.48% <ø> (+0.08%) ⬆️
test-optimization-cypress-oldest-14.5.4-commonJS 48.07% <ø> (+0.08%) ⬆️
test-optimization-cypress-oldest-14.5.4-esm 48.10% <ø> (+0.08%) ⬆️
test-optimization-jest-latest-24.8.0 53.55% <ø> (+0.07%) ⬆️
test-optimization-jest-latest-latest 54.42% <ø> (+0.09%) ⬆️
test-optimization-jest-oldest-24.8.0 53.59% <ø> (+0.07%) ⬆️
test-optimization-jest-oldest-latest 54.43% <ø> (+0.09%) ⬆️
test-optimization-mocha-latest-5.2.0 48.63% <ø> (+0.09%) ⬆️
test-optimization-mocha-latest-latest 52.96% <ø> (+0.09%) ⬆️
test-optimization-mocha-oldest-5.2.0 48.66% <ø> (+0.09%) ⬆️
test-optimization-mocha-oldest-latest 53.09% <ø> (+0.09%) ⬆️
test-optimization-playwright-latest-latest-playwright-active-test-span 44.31% <ø> (+0.29%) ⬆️
test-optimization-playwright-latest-latest-playwright-atr 42.99% <ø> (+0.12%) ⬆️
test-optimization-playwright-latest-latest-playwright-efd 43.29% <ø> (+0.10%) ⬆️
test-optimization-playwright-latest-latest-playwright-impacted-tests 42.95% <ø> (+<0.01%) ⬆️
test-optimization-playwright-latest-latest-playwright-reporting 43.09% <ø> (+0.09%) ⬆️
test-optimization-playwright-latest-latest-playwright-test-management 44.72% <ø> (+0.12%) ⬆️
test-optimization-playwright-latest-oldest-playwright-active-test-span 44.35% <ø> (+0.29%) ⬆️
test-optimization-playwright-latest-oldest-playwright-atr 43.17% <ø> (+0.12%) ⬆️
test-optimization-playwright-latest-oldest-playwright-efd 43.32% <ø> (+0.10%) ⬆️
test-optimization-playwright-latest-oldest-playwright-impacted-tests 42.98% <ø> (+<0.01%) ⬆️
test-optimization-playwright-latest-oldest-playwright-reporting 43.14% <ø> (+0.09%) ⬆️
test-optimization-playwright-latest-oldest-playwright-test-management 44.78% <ø> (+0.12%) ⬆️
test-optimization-playwright-oldest-latest-playwright-active-test-span 44.32% <ø> (+0.26%) ⬆️
test-optimization-playwright-oldest-latest-playwright-atr 43.03% <ø> (+0.12%) ⬆️
test-optimization-playwright-oldest-latest-playwright-efd 43.30% <ø> (+0.10%) ⬆️
test-optimization-playwright-oldest-latest-playwright-impacted-tests 43.00% <ø> (+<0.01%) ⬆️
test-optimization-playwright-oldest-latest-playwright-reporting 43.10% <ø> (+0.09%) ⬆️
test-optimization-playwright-oldest-latest-playwright-test-management 44.74% <ø> (+0.12%) ⬆️
test-optimization-playwright-oldest-oldest-playwright-active-test-span 44.39% <ø> (+0.29%) ⬆️
test-optimization-playwright-oldest-oldest-playwright-atr 43.21% <ø> (+0.12%) ⬆️
test-optimization-playwright-oldest-oldest-playwright-efd 43.33% <ø> (+0.10%) ⬆️
test-optimization-playwright-oldest-oldest-playwright-impacted-tests 43.02% <ø> (+<0.01%) ⬆️
test-optimization-playwright-oldest-oldest-playwright-reporting 43.16% <ø> (+0.09%) ⬆️
test-optimization-playwright-oldest-oldest-playwright-test-management 44.79% <ø> (+0.12%) ⬆️
test-optimization-selenium-latest 46.11% <ø> (+0.08%) ⬆️
test-optimization-selenium-oldest 45.57% <ø> (+0.08%) ⬆️
test-optimization-testopt-active 47.39% <ø> (+0.15%) ⬆️
test-optimization-testopt-latest 47.35% <ø> (+0.15%) ⬆️
test-optimization-testopt-maintenance 47.39% <ø> (+0.15%) ⬆️
test-optimization-testopt-oldest 48.16% <ø> (+0.16%) ⬆️
test-optimization-vitest-latest 51.08% <ø> (+0.12%) ⬆️
test-optimization-vitest-oldest 48.10% <ø> (+0.38%) ⬆️

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.

@datadog-datadog-prod-us1
Copy link
Copy Markdown

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

Tests

🎉 All green!

❄️ No new flaky tests detected
🧪 All tests passed

🎯 Code Coverage (details)
Patch Coverage: 88.16%
Overall Coverage: 86.52% (+0.04%)

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

@pr-commenter
Copy link
Copy Markdown

pr-commenter Bot commented May 2, 2026

Benchmarks

Benchmark execution time: 2026-05-02 12:43:53

Comparing candidate commit c9981b1 in PR branch BridgeAR/fix-otel-bridge-spec-compliance with baseline commit f6faa2b in branch master.

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

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant