Skip to content

refactor(config): introduce namespace field and start pruning internalPropertyName#8943

Merged
BridgeAR merged 19 commits into
masterfrom
BridgeAR/2026-06-16-prune-internal-property-name-all
Jun 26, 2026
Merged

refactor(config): introduce namespace field and start pruning internalPropertyName#8943
BridgeAR merged 19 commits into
masterfrom
BridgeAR/2026-06-16-prune-internal-property-name-all

Conversation

@BridgeAR

Copy link
Copy Markdown
Member

Summary

internalPropertyName carries a bespoke full property path (telemetry.debug,
remoteConfig.enabled) that diverges from the canonical env name. This adds a
namespace field that nests the canonical env name under a property path
(remoteConfig.DD_REMOTE_CONFIGURATION_ENABLED) and migrates entries onto it so
the property path is derivable from the canonical name plus a namespace, with no
hand-maintained alias.

  1. namespace resolves the runtime property path and takes precedence over
    configurationNames; it coexists with internalPropertyName so entries move
    one group at a time and the final commit drops internalPropertyName.
  2. remoteConfig.enabled is migrated as the first entry. Telemetry still reports
    the canonical DD_REMOTE_CONFIGURATION_ENABLED name — the canonical name is
    independent of how the property path is derived.

Remaining work

  • Flat top-level aliases (DD_API_KEY, the CI-visibility flags, DD_TRACE_ENABLED, query-string obfuscation, resource renaming, scope) — drop internalPropertyName, fall back to the canonical name.
  • telemetry.* (7 entries) — high test-fixture churn: many specs build telemetry: { enabled, metrics, ... } literals.
  • appsec.* (apiSecurity.*, sca.enabled).
  • iast.securityControlsConfiguration — has a v5 override in major-overrides.js; keep both majors resolving the same runtime path.
  • llmobs.enabled and the AI-lib span limits (langchain/openai/vertexai).
  • profiling.enabled, stats.enabled — namespace takes precedence over the public programmatic name.
  • Drop internalPropertyName from the typedef, defaults.js, generate-config-types.js, and the eslint rule once nothing uses it.

Open question

The AI-lib span limits share a generic consumer: plugins/util/llm.js destructures
{ spanCharLimit, spanPromptCompletionSampleRate } off whichever integration
config it is handed. The namespace shape gives each library a distinct canonical
leaf (DD_LANGCHAIN_SPAN_CHAR_LIMIT vs DD_OPENAI_SPAN_CHAR_LIMIT), so the shared
destructure no longer works without per-library keys. Worth deciding whether those
keep a uniform leaf or the helper learns the per-library names.

Test plan

  • packages/dd-trace/test/config/index.spec.js
  • packages/dd-trace/test/proxy.spec.js
  • eslint-rules/eslint-config-names-sync.test.mjs
  • node scripts/generate-config-types.js --check
  • code-origin integration tests (express/fastify remoteConfig gate)

@dd-octo-sts

dd-octo-sts Bot commented Jun 16, 2026

Copy link
Copy Markdown
Contributor

Overall package size

Self size: 6.36 MB
Deduped: 7.42 MB
No deduping: 7.42 MB

Dependency sizes | name | version | self size | total size | |------|---------|-----------|------------| | import-in-the-middle | 3.2.0 | 104.26 kB | 843.44 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 Jun 16, 2026

Copy link
Copy Markdown

Tests

🎉 All green!

🧪 All tests passed
❄️ No new flaky tests detected

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

@pr-commenter

pr-commenter Bot commented Jun 16, 2026

Copy link
Copy Markdown

Benchmarks

Benchmark execution time: 2026-06-26 16:28:29

Comparing candidate commit d85ba85 in PR branch BridgeAR/2026-06-16-prune-internal-property-name-all with baseline commit 2f4b07f in branch master.

📊 Benchmarking dashboard

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

Explanation

This is an A/B test comparing a candidate commit's performance against that of a baseline commit. Performance changes are noted in the tables below as:

  • 🟩 = significantly better candidate vs. baseline
  • 🟥 = significantly worse candidate vs. baseline

We compute a confidence interval (CI) over the relative difference of means between metrics from the candidate and baseline commits, considering the baseline as the reference.

If the CI is entirely outside the configured SIGNIFICANT_IMPACT_THRESHOLD (or the deprecated UNCONFIDENCE_THRESHOLD), the change is considered significant.

Feel free to reach out to #apm-benchmarking-platform on Slack if you have any questions.

More details about the CI and significant changes

You can imagine this CI as a range of values that is likely to contain the true difference of means between the candidate and baseline commits.

CIs of the difference of means are often centered around 0%, because often changes are not that big:

---------------------------------(------|---^--------)-------------------------------->
                              -0.6%    0%  0.3%     +1.2%
                                 |          |        |
         lower bound of the CI --'          |        |
sample mean (center of the CI) -------------'        |
         upper bound of the CI ----------------------'

As described above, a change is considered significant if the CI is entirely outside the configured SIGNIFICANT_IMPACT_THRESHOLD (or the deprecated UNCONFIDENCE_THRESHOLD).

For instance, for an execution time metric, this confidence interval indicates a significantly worse performance:

----------------------------------------|---------|---(---------^---------)---------->
                                       0%        1%  1.3%      2.2%      3.1%
                                                  |   |         |         |
       significant impact threshold --------------'   |         |         |
                      lower bound of CI --------------'         |         |
       sample mean (center of the CI) --------------------------'         |
                      upper bound of CI ----------------------------------'

Unstable benchmarks

These benchmarks have a confidence interval too wide to call a change; treat them as noise rather than signal.

scenario:appsec-appsec-enabled-24

  • unstable execution_time [-118.868ms; +169.742ms] or [-4.590%; +6.555%]

scenario:appsec-appsec-enabled-26

  • unstable execution_time [-177.492ms; +170.317ms] or [-7.095%; +6.808%]

scenario:appsec-control-20

  • unstable execution_time [-132.105ms; +125.704ms] or [-7.661%; +7.290%]

scenario:appsec-control-24

  • unstable execution_time [-91.736ms; +89.194ms] or [-7.638%; +7.426%]

scenario:appsec-control-26

  • unstable execution_time [-98713.211µs; +99054.811µs] or [-8.315%; +8.343%]

scenario:debugger-line-probe-with-snapshot-default-20

  • unstable max_rss_usage [-8.997MB; +11.463MB] or [-4.906%; +6.250%]

scenario:debugger-line-probe-with-snapshot-default-26

  • unstable max_rss_usage [-17.576MB; +10.248MB] or [-6.717%; +3.916%]

scenario:debugger-line-probe-without-snapshot-20

  • unstable max_rss_usage [-7986.124KB; +8641.324KB] or [-4.820%; +5.215%]

scenario:dogstatsd-with-tags-20

  • unstable cpu_user_time [-214.836ms; +406.635ms] or [-4.276%; +8.093%]
  • unstable execution_time [-215.489ms; +408.306ms] or [-4.224%; +8.004%]
  • unstable throughput [-139612.631op/s; +72236.347op/s] or [-8.489%; +4.392%]

scenario:plugin-graphql-long-with-depth-and-collapse-off-24

  • unstable cpu_user_time [-357.141ms; +403.125ms] or [-8.014%; +9.046%]
  • unstable execution_time [-384.094ms; +431.172ms] or [-8.107%; +9.101%]
  • unstable max_rss_usage [-45.258MB; +52.693MB] or [-8.463%; +9.853%]
  • unstable throughput [-3.513op/s; +3.620op/s] or [-7.734%; +7.970%]

scenario:plugin-graphql-long-with-depth-off-20

  • unstable max_rss_usage [-13.060MB; +5.090MB] or [-8.958%; +3.491%]

scenario:plugin-redis-mixed-26

  • unstable cpu_user_time [-294.014ms; +175.924ms] or [-8.633%; +5.166%]
  • unstable execution_time [-290.268ms; +179.853ms] or [-8.356%; +5.177%]
  • unstable instructions [-2738.5M instructions; +1733.2M instructions] or [-7.263%; +4.596%]
  • unstable throughput [-306097.145op/s; +490690.661op/s] or [-9.113%; +14.608%]

scenario:test-optimization-large-suite-20

  • unstable max_rss_usage [-4186.497KB; +4098.497KB] or [-5.264%; +5.153%]

@BridgeAR
BridgeAR force-pushed the BridgeAR/2026-06-16-prune-internal-property-name-all branch from 068f95d to 9c1be85 Compare June 16, 2026 14:11
@codecov

codecov Bot commented Jun 16, 2026

Copy link
Copy Markdown

Codecov Report

❌ Patch coverage is 97.26027% with 2 lines in your changes missing coverage. Please review.
✅ Project coverage is 92.68%. Comparing base (2f4b07f) to head (d85ba85).

Files with missing lines Patch % Lines
...ges/dd-trace/src/llmobs/plugins/langgraph/index.js 0.00% 1 Missing ⚠️
packages/dd-trace/src/span_stats.js 0.00% 1 Missing ⚠️
Additional details and impacted files
@@            Coverage Diff             @@
##           master    #8943      +/-   ##
==========================================
- Coverage   92.92%   92.68%   -0.24%     
==========================================
  Files         886      886              
  Lines       50777    50781       +4     
  Branches    10002    10008       +6     
==========================================
- Hits        47183    47065     -118     
- Misses       3594     3716     +122     
Flag Coverage Δ
aiguard-integration-active 41.62% <61.81%> (-0.13%) ⬇️
aiguard-integration-latest 41.76% <61.81%> (+<0.01%) ⬆️
aiguard-integration-maintenance 41.84% <61.81%> (+<0.01%) ⬆️
aiguard-macos 34.59% <58.97%> (-0.07%) ⬇️
aiguard-ubuntu 34.74% <58.97%> (-0.07%) ⬇️
aiguard-windows 34.42% <58.97%> (-0.07%) ⬇️
apm-capabilities-tracing-macos 48.55% <62.50%> (+0.21%) ⬆️
apm-capabilities-tracing-ubuntu-active 48.37% <62.50%> (+<0.01%) ⬆️
apm-capabilities-tracing-ubuntu-latest 48.37% <62.50%> (-0.01%) ⬇️
apm-capabilities-tracing-ubuntu-maintenance 48.42% <62.50%> (+<0.01%) ⬆️
apm-capabilities-tracing-ubuntu-oldest ?
apm-capabilities-tracing-windows 48.37% <62.50%> (+<0.01%) ⬆️
apm-integrations-aerospike-18-gte.5.2.0 33.12% <58.97%> (-0.07%) ⬇️
apm-integrations-aerospike-20-gte.5.5.0 33.14% <58.97%> (-0.07%) ⬇️
apm-integrations-aerospike-22-gte.5.12.1 33.14% <58.97%> (-0.07%) ⬇️
apm-integrations-aerospike-22-gte.6.0.0 33.14% <58.97%> (-0.07%) ⬇️
apm-integrations-aerospike-eol- 42.78% <100.00%> (+0.11%) ⬆️
apm-integrations-child-process 34.05% <58.97%> (-0.07%) ⬇️
apm-integrations-confluentinc-kafka-javascript-18 40.05% <58.97%> (-0.07%) ⬇️
apm-integrations-confluentinc-kafka-javascript-20 40.06% <58.97%> (-0.07%) ⬇️
apm-integrations-confluentinc-kafka-javascript-22 40.07% <58.97%> (-0.07%) ⬇️
apm-integrations-confluentinc-kafka-javascript-24 39.96% <58.97%> (-0.07%) ⬇️
apm-integrations-couchbase-eol 33.18% <58.97%> (+0.05%) ⬆️
apm-integrations-couchbase-oldest 33.14% <58.97%> (-0.23%) ⬇️
apm-integrations-dns 32.98% <58.97%> (-0.07%) ⬇️
apm-integrations-elasticsearch ?
apm-integrations-http-latest 41.97% <60.86%> (-0.06%) ⬇️
apm-integrations-http-maintenance 42.06% <60.86%> (-0.06%) ⬇️
apm-integrations-http-oldest 41.99% <60.86%> (-0.06%) ⬇️
apm-integrations-http2 39.08% <58.97%> (-0.09%) ⬇️
apm-integrations-kafkajs-latest 40.10% <58.97%> (-0.07%) ⬇️
apm-integrations-kafkajs-oldest 40.28% <58.97%> (+0.02%) ⬆️
apm-integrations-net 33.67% <58.97%> (-0.07%) ⬇️
apm-integrations-next-11.1.4 36.63% <100.00%> (+0.08%) ⬆️
apm-integrations-next-12.3.7 36.63% <100.00%> (+0.08%) ⬆️
apm-integrations-next-13.0.0 29.13% <58.97%> (-0.07%) ⬇️
apm-integrations-next-13.2.0 29.13% <58.97%> (-0.07%) ⬇️
apm-integrations-next-13.5.11 29.27% <58.97%> (-0.07%) ⬇️
apm-integrations-next-14.0.0 29.20% <58.97%> (-0.07%) ⬇️
apm-integrations-next-14.2.35 29.20% <58.97%> (-0.11%) ⬇️
apm-integrations-next-14.2.6 29.20% <58.97%> (?)
apm-integrations-next-14.2.7 29.20% <58.97%> (-0.07%) ⬇️
apm-integrations-next-15.0.0 29.20% <58.97%> (-0.07%) ⬇️
apm-integrations-next-15.4.0 29.30% <58.97%> (-0.03%) ⬇️
apm-integrations-next-latest 29.30% <58.97%> (-0.07%) ⬇️
apm-integrations-oracledb 34.00% <58.97%> (-0.07%) ⬇️
apm-integrations-prisma-18-gte.6.16.0.and.lt.7.0.0 34.82% <58.97%> (-0.07%) ⬇️
apm-integrations-prisma-latest-all 34.25% <58.97%> (-0.07%) ⬇️
apm-integrations-restify 35.65% <58.97%> (-0.07%) ⬇️
apm-integrations-sharedb 32.58% <58.97%> (-0.07%) ⬇️
apm-integrations-tedious 33.92% <58.97%> (-0.07%) ⬇️
appsec-express 51.31% <69.38%> (?)
appsec-fastify 48.07% <63.26%> (-0.07%) ⬇️
appsec-graphql 47.77% <62.00%> (-0.05%) ⬇️
appsec-integration-active 36.12% <67.21%> (+<0.01%) ⬆️
appsec-integration-latest 36.12% <67.21%> (+<0.01%) ⬆️
appsec-integration-maintenance 36.18% <67.21%> (+<0.01%) ⬆️
appsec-integration-oldest 36.18% <67.21%> (+<0.01%) ⬆️
appsec-kafka 40.29% <60.97%> (-0.06%) ⬇️
appsec-ldapjs 39.82% <60.97%> (-0.06%) ⬇️
appsec-lodash 39.74% <60.97%> (-0.06%) ⬇️
appsec-macos 57.17% <71.18%> (?)
appsec-mongodb-core 43.91% <61.90%> (-0.06%) ⬇️
appsec-mongoose 44.77% <61.90%> (-0.06%) ⬇️
appsec-mysql ?
appsec-next-latest-11.1.4 27.43% <58.97%> (-0.06%) ⬇️
appsec-next-latest-12.3.7 27.59% <60.00%> (+0.04%) ⬆️
appsec-next-latest-13.0.0 29.21% <58.97%> (?)
appsec-next-latest-13.2.0 29.24% <58.97%> (-0.07%) ⬇️
appsec-next-latest-13.5.11 29.33% <58.97%> (-0.07%) ⬇️
appsec-next-latest-14.0.0 29.26% <58.97%> (-0.07%) ⬇️
appsec-next-latest-14.2.35 29.26% <58.97%> (-0.07%) ⬇️
appsec-next-latest-14.2.6 29.26% <58.97%> (-0.07%) ⬇️
appsec-next-latest-14.2.7 29.26% <58.97%> (-0.07%) ⬇️
appsec-next-latest-15.0.0 ?
appsec-next-latest-latest ?
appsec-next-oldest-11.1.4 27.47% <58.97%> (-0.07%) ⬇️
appsec-next-oldest-12.3.7 29.27% <58.97%> (-0.07%) ⬇️
appsec-next-oldest-13.0.0 29.27% <58.97%> (-0.07%) ⬇️
appsec-next-oldest-13.2.0 29.53% <58.97%> (-0.07%) ⬇️
appsec-next-oldest-13.5.11 29.63% <58.97%> (-0.07%) ⬇️
appsec-next-oldest-14.0.0 ?
appsec-next-oldest-14.2.35 29.57% <58.97%> (-0.07%) ⬇️
appsec-next-oldest-14.2.6 ?
appsec-next-oldest-14.2.7 29.57% <58.97%> (-0.07%) ⬇️
appsec-next-oldest-15.0.0 29.57% <58.97%> (-0.07%) ⬇️
appsec-next-oldest-latest 27.78% <60.00%> (+0.04%) ⬆️
appsec-node-serialize 39.03% <60.97%> (-0.06%) ⬇️
appsec-passport 42.66% <61.70%> (-0.06%) ⬇️
appsec-postgres 46.91% <63.26%> (-0.18%) ⬇️
appsec-sourcing 38.51% <60.97%> (-0.06%) ⬇️
appsec-stripe 40.56% <68.08%> (-0.06%) ⬇️
appsec-template 39.32% <60.97%> (-0.06%) ⬇️
appsec-ubuntu 57.28% <71.18%> (-0.05%) ⬇️
appsec-windows 57.07% <71.18%> (-0.07%) ⬇️
debugger-ubuntu-active 43.37% <66.66%> (+0.08%) ⬆️
debugger-ubuntu-latest 43.37% <66.66%> (+<0.01%) ⬆️
debugger-ubuntu-maintenance 43.77% <66.66%> (+0.29%) ⬆️
debugger-ubuntu-oldest 43.79% <66.66%> (+<0.01%) ⬆️
instrumentations-instrumentation-ai 45.86% <100.00%> (+0.10%) ⬆️
instrumentations-instrumentation-aws-sdk 45.43% <100.00%> (+0.09%) ⬆️
instrumentations-instrumentation-bluebird 27.65% <58.97%> (-0.07%) ⬇️
instrumentations-instrumentation-body-parser 35.68% <60.00%> (-0.07%) ⬇️
instrumentations-instrumentation-child_process 33.35% <58.97%> (-0.07%) ⬇️
instrumentations-instrumentation-connect 48.85% <100.00%> (+0.10%) ⬆️
instrumentations-instrumentation-cookie-parser 29.56% <60.00%> (-0.07%) ⬇️
instrumentations-instrumentation-couchbase-18 46.58% <100.00%> (+0.10%) ⬆️
instrumentations-instrumentation-couchbase-eol 46.58% <100.00%> (+0.10%) ⬆️
instrumentations-instrumentation-crypto 27.62% <58.97%> (-0.07%) ⬇️
instrumentations-instrumentation-express 29.76% <60.00%> (-0.07%) ⬇️
instrumentations-instrumentation-express-mongo-sanitize 29.66% <60.00%> (-0.07%) ⬇️
instrumentations-instrumentation-express-multi-version 42.20% <100.00%> (+0.11%) ⬆️
instrumentations-instrumentation-express-session 35.50% <60.00%> (-0.07%) ⬇️
instrumentations-instrumentation-fastify 48.78% <100.00%> (+0.10%) ⬆️
instrumentations-instrumentation-fetch 45.62% <100.00%> (+0.12%) ⬆️
instrumentations-instrumentation-fs 27.33% <58.97%> (-0.07%) ⬇️
instrumentations-instrumentation-generic-pool 27.54% <13.63%> (+0.01%) ⬆️
instrumentations-instrumentation-hono 28.86% <58.97%> (-0.07%) ⬇️
instrumentations-instrumentation-http 37.94% <58.97%> (-0.07%) ⬇️
instrumentations-instrumentation-http-client-options 37.55% <58.97%> (-0.07%) ⬇️
instrumentations-instrumentation-kafkajs 49.49% <100.00%> (+0.09%) ⬆️
instrumentations-instrumentation-knex 27.64% <58.97%> (-0.07%) ⬇️
instrumentations-instrumentation-koa 46.45% <100.00%> (+0.10%) ⬆️
instrumentations-instrumentation-light-my-request 35.31% <60.00%> (-0.07%) ⬇️
instrumentations-instrumentation-mongoose 28.75% <58.97%> (-0.07%) ⬇️
instrumentations-instrumentation-multer 35.35% <60.00%> (-0.07%) ⬇️
instrumentations-instrumentation-mysql2 33.46% <56.41%> (-0.07%) ⬇️
instrumentations-instrumentation-openai-lifecycle 46.54% <100.00%> (+0.10%) ⬆️
instrumentations-instrumentation-otel-sdk-trace 25.54% <10.34%> (+0.01%) ⬆️
instrumentations-instrumentation-passport 39.28% <61.70%> (-0.06%) ⬇️
instrumentations-instrumentation-passport-http 38.98% <61.70%> (-0.06%) ⬇️
instrumentations-instrumentation-passport-local 39.43% <61.70%> (-0.06%) ⬇️
instrumentations-instrumentation-pg 33.19% <56.41%> (-0.07%) ⬇️
instrumentations-instrumentation-promise 27.60% <58.97%> (-0.07%) ⬇️
instrumentations-instrumentation-promise-js 27.60% <58.97%> (-0.07%) ⬇️
instrumentations-instrumentation-q 27.63% <58.97%> (-0.07%) ⬇️
instrumentations-instrumentation-restify 48.10% <100.00%> (+0.11%) ⬆️
instrumentations-instrumentation-router 43.99% <100.00%> (+0.08%) ⬆️
instrumentations-instrumentation-stripe 28.14% <58.97%> (-0.07%) ⬇️
instrumentations-instrumentation-url 27.45% <58.97%> (-0.07%) ⬇️
instrumentations-instrumentation-when 27.61% <58.97%> (-0.07%) ⬇️
instrumentations-instrumentation-zlib 27.50% <58.97%> (-0.07%) ⬇️
instrumentations-integration-esbuild-0.16.12-active 24.72% <57.40%> (+<0.01%) ⬆️
instrumentations-integration-esbuild-0.16.12-latest 24.72% <57.40%> (+<0.01%) ⬆️
instrumentations-integration-esbuild-0.16.12-maintenance 18.75% <10.34%> (?)
instrumentations-integration-esbuild-0.16.12-oldest 18.74% <10.34%> (+<0.01%) ⬆️
instrumentations-integration-esbuild-latest-active 24.72% <57.40%> (+<0.01%) ⬆️
instrumentations-integration-esbuild-latest-latest 24.72% <57.40%> (+<0.01%) ⬆️
instrumentations-integration-esbuild-latest-maintenance 18.75% <10.34%> (+<0.01%) ⬆️
instrumentations-integration-esbuild-latest-oldest 18.74% <10.34%> (?)
llmobs-ai 35.16% <75.00%> (-0.06%) ⬇️
llmobs-anthropic 36.54% <75.00%> (-0.07%) ⬇️
llmobs-bedrock 36.07% <68.18%> (-0.06%) ⬇️
llmobs-google-genai 36.18% <75.00%> (+0.14%) ⬆️
llmobs-langchain ?
llmobs-openai-latest ?
llmobs-openai-oldest 39.52% <75.00%> (-0.06%) ⬇️
llmobs-sdk-active 43.38% <75.00%> (-0.07%) ⬇️
llmobs-sdk-latest 43.38% <75.00%> (-0.07%) ⬇️
llmobs-sdk-maintenance 43.48% <75.00%> (-0.07%) ⬇️
llmobs-sdk-oldest 43.47% <75.00%> (-0.07%) ⬇️
llmobs-vertex-ai 35.66% <76.59%> (-0.06%) ⬇️
master-coverage 92.68% <97.26%> (?)
openfeature-macos 37.51% <62.74%> (+<0.01%) ⬆️
openfeature-ubuntu 37.65% <62.74%> (+<0.01%) ⬆️
openfeature-unit-active 50.17% <59.09%> (+0.03%) ⬆️
openfeature-unit-latest 50.17% <59.09%> (+0.03%) ⬆️
openfeature-unit-maintenance 50.53% <59.09%> (+0.03%) ⬆️
openfeature-unit-oldest 50.53% <59.09%> (+0.03%) ⬆️
openfeature-windows 37.39% <62.74%> (+<0.01%) ⬆️
platform-core 46.88% <100.00%> (+0.12%) ⬆️
platform-esbuild 18.69% <10.34%> (+<0.01%) ⬆️
platform-instrumentations-misc 29.60% <58.82%> (+<0.01%) ⬆️
platform-integration-active 47.27% <65.38%> (-0.04%) ⬇️
platform-integration-latest 47.30% <65.38%> (+<0.01%) ⬆️
platform-integration-maintenance 47.10% <65.38%> (+<0.01%) ⬆️
platform-integration-oldest 47.37% <65.38%> (?)
platform-shimmer 47.85% <100.00%> (+0.11%) ⬆️
platform-unit-guardrails 45.71% <100.00%> (+0.11%) ⬆️
platform-webpack 18.34% <10.34%> (+<0.01%) ⬆️
plugins-aws-durable-execution-sdk-js 32.88% <55.81%> (-0.06%) ⬇️
plugins-axios 35.49% <56.41%> (+<0.01%) ⬆️
plugins-azure-cosmos ?
plugins-azure-event-hubs 34.86% <56.41%> (+<0.01%) ⬆️
plugins-azure-service-bus 35.36% <56.41%> (+<0.01%) ⬆️
plugins-bullmq 39.45% <58.97%> (-0.07%) ⬇️
plugins-cassandra 33.77% <58.97%> (-0.07%) ⬇️
plugins-cookie 41.07% <100.00%> (+0.09%) ⬆️
plugins-cookie-parser 40.90% <100.00%> (+0.09%) ⬆️
plugins-crypto 43.11% <100.00%> (+0.11%) ⬆️
plugins-dd-trace-api 33.20% <58.97%> (-0.07%) ⬇️
plugins-express-mongo-sanitize 40.95% <100.00%> (+0.09%) ⬆️
plugins-express-session 40.81% <100.00%> (+0.09%) ⬆️
plugins-fastify 37.79% <60.00%> (-0.07%) ⬇️
plugins-fetch 34.55% <64.10%> (-0.07%) ⬇️
plugins-fs 33.63% <58.97%> (-0.07%) ⬇️
plugins-generic-pool 40.37% <100.00%> (+0.09%) ⬆️
plugins-google-cloud-pubsub 41.33% <58.97%> (-0.07%) ⬇️
plugins-grpc 36.49% <58.97%> (-0.07%) ⬇️
plugins-handlebars 40.95% <100.00%> (+0.09%) ⬆️
plugins-hapi 35.78% <58.97%> (-0.07%) ⬇️
plugins-hono 35.89% <58.97%> (-0.22%) ⬇️
plugins-ioredis 34.26% <58.97%> (?)
plugins-jest 27.15% <13.63%> (+0.02%) ⬆️
plugins-knex 40.41% <100.00%> (+0.09%) ⬆️
plugins-langgraph 32.33% <54.54%> (-0.07%) ⬇️
plugins-ldapjs 39.36% <100.00%> (+0.09%) ⬆️
plugins-light-my-request 40.51% <100.00%> (+0.09%) ⬆️
plugins-limitd-client 28.01% <58.97%> (-0.07%) ⬇️
plugins-lodash 40.56% <100.00%> (+0.09%) ⬆️
plugins-mariadb 34.89% <58.97%> (?)
plugins-memcached 33.65% <58.97%> (-0.07%) ⬇️
plugins-microgateway-core 34.73% <58.97%> (-0.07%) ⬇️
plugins-modelcontextprotocol-sdk 32.29% <55.81%> (-0.07%) ⬇️
plugins-moleculer 36.55% <58.97%> (-0.07%) ⬇️
plugins-mongodb 35.86% <58.97%> (-0.06%) ⬇️
plugins-mongodb-core 35.38% <58.97%> (-0.07%) ⬇️
plugins-mongoose 34.53% <58.97%> (-0.07%) ⬇️
plugins-multer 40.87% <100.00%> (+0.09%) ⬆️
plugins-mysql 34.59% <58.97%> (-0.06%) ⬇️
plugins-mysql2 34.92% <58.97%> (-0.07%) ⬇️
plugins-nats 36.28% <58.97%> (-0.07%) ⬇️
plugins-node-serialize 40.80% <100.00%> (+0.10%) ⬆️
plugins-opensearch 33.71% <58.97%> (-0.13%) ⬇️
plugins-passport-http 40.68% <100.00%> (+0.09%) ⬆️
plugins-pino 29.86% <58.97%> (-0.07%) ⬇️
plugins-postgres 34.63% <58.97%> (-0.07%) ⬇️
plugins-process 43.11% <100.00%> (+0.11%) ⬆️
plugins-pug 41.07% <100.00%> (+0.09%) ⬆️
plugins-redis 34.23% <58.97%> (-0.13%) ⬇️
plugins-router 38.18% <58.97%> (-0.13%) ⬇️
plugins-sequelize 40.33% <100.00%> (+0.09%) ⬆️
plugins-test-and-upstream-amqp10 33.80% <58.97%> (-0.07%) ⬇️
plugins-test-and-upstream-amqplib 39.11% <58.97%> (-0.07%) ⬇️
plugins-test-and-upstream-apollo 34.81% <60.00%> (-0.06%) ⬇️
plugins-test-and-upstream-avsc 33.69% <58.97%> (-0.07%) ⬇️
plugins-test-and-upstream-bunyan 29.08% <58.97%> (-0.07%) ⬇️
plugins-test-and-upstream-connect 36.28% <58.97%> (-0.07%) ⬇️
plugins-test-and-upstream-graphql 36.06% <58.97%> (?)
plugins-test-and-upstream-koa 35.84% <58.97%> (-0.07%) ⬇️
plugins-test-and-upstream-protobufjs 33.92% <58.97%> (-0.07%) ⬇️
plugins-test-and-upstream-rhea 39.05% <58.97%> (-0.07%) ⬇️
plugins-undici 35.04% <58.97%> (-0.01%) ⬇️
plugins-url 43.11% <100.00%> (+0.11%) ⬆️
plugins-valkey 33.75% <58.97%> (+0.07%) ⬆️
plugins-vm 43.11% <100.00%> (+0.11%) ⬆️
plugins-winston 29.74% <58.97%> (-0.07%) ⬇️
plugins-ws 37.04% <58.97%> (-0.07%) ⬇️
profiling-macos 43.08% <63.46%> (-0.06%) ⬇️
profiling-ubuntu 43.51% <63.46%> (-0.06%) ⬇️
profiling-windows 41.14% <63.46%> (?)
serverless-aws-sdk-latest-aws-sdk 33.11% <55.81%> (?)
serverless-aws-sdk-latest-bedrockruntime 31.97% <55.81%> (-0.06%) ⬇️
serverless-aws-sdk-latest-client 36.66% <100.00%> (+0.08%) ⬆️
serverless-aws-sdk-latest-dynamodb 33.91% <55.81%> (?)
serverless-aws-sdk-latest-eventbridge ?
serverless-aws-sdk-latest-kinesis 37.15% <53.48%> (-0.06%) ⬇️
serverless-aws-sdk-latest-lambda 34.39% <55.81%> (-0.06%) ⬇️
serverless-aws-sdk-latest-s3 32.35% <55.81%> (-0.06%) ⬇️
serverless-aws-sdk-latest-serverless-peer-service 39.29% <61.90%> (?)
serverless-aws-sdk-latest-sns 38.07% <55.81%> (-0.06%) ⬇️
serverless-aws-sdk-latest-sqs 37.84% <55.81%> (-0.06%) ⬇️
serverless-aws-sdk-latest-stepfunctions 32.99% <55.81%> (?)
serverless-aws-sdk-latest-util 47.27% <100.00%> (+0.12%) ⬆️
serverless-aws-sdk-oldest-aws-sdk 33.21% <55.81%> (-0.06%) ⬇️
serverless-aws-sdk-oldest-bedrockruntime 32.06% <55.81%> (-0.06%) ⬇️
serverless-aws-sdk-oldest-client 37.23% <100.00%> (+0.08%) ⬆️
serverless-aws-sdk-oldest-dynamodb 34.01% <55.81%> (-0.12%) ⬇️
serverless-aws-sdk-oldest-eventbridge ?
serverless-aws-sdk-oldest-kinesis 37.32% <53.48%> (-0.06%) ⬇️
serverless-aws-sdk-oldest-lambda 34.49% <55.81%> (?)
serverless-aws-sdk-oldest-s3 32.49% <55.81%> (-0.06%) ⬇️
serverless-aws-sdk-oldest-serverless-peer-service 39.38% <61.90%> (-0.07%) ⬇️
serverless-aws-sdk-oldest-sns 38.17% <55.81%> (-0.06%) ⬇️
serverless-aws-sdk-oldest-sqs 37.91% <55.81%> (-0.06%) ⬇️
serverless-aws-sdk-oldest-stepfunctions 33.09% <55.81%> (-0.06%) ⬇️
serverless-aws-sdk-oldest-util 48.04% <100.00%> (+0.12%) ⬆️
serverless-azure-durable-functions 36.97% <60.00%> (?)
serverless-azure-functions-eventhubs 38.40% <60.00%> (+<0.01%) ⬆️
serverless-azure-functions-servicebus 38.45% <60.00%> (?)
serverless-lambda 34.35% <65.78%> (-0.08%) ⬇️
test-optimization-cucumber-latest-7.0.0 49.94% <57.14%> (?)
test-optimization-cucumber-latest-latest 52.64% <57.14%> (+0.07%) ⬆️
test-optimization-cucumber-oldest-7.0.0 50.02% <57.14%> (+0.11%) ⬆️
test-optimization-cypress-latest-12.0.0-commonJS 47.27% <50.00%> (-0.15%) ⬇️
test-optimization-cypress-latest-12.0.0-esm 48.79% <50.00%> (+0.19%) ⬆️
test-optimization-cypress-latest-14.5.4-commonJS 49.05% <50.00%> (+0.07%) ⬆️
test-optimization-cypress-latest-14.5.4-esm 47.80% <50.00%> (-1.28%) ⬇️
test-optimization-cypress-latest-latest-commonJS 49.59% <50.00%> (+0.20%) ⬆️
test-optimization-cypress-latest-latest-esm 49.48% <50.00%> (+0.83%) ⬆️
test-optimization-cypress-oldest-12.0.0-commonJS 49.34% <50.00%> (+0.69%) ⬆️
test-optimization-cypress-oldest-12.0.0-esm 49.37% <50.00%> (+1.79%) ⬆️
test-optimization-cypress-oldest-14.5.4-commonJS 49.27% <50.00%> (+0.28%) ⬆️
test-optimization-cypress-oldest-14.5.4-esm 49.22% <50.00%> (+0.74%) ⬆️
test-optimization-jest-latest-latest 55.33% <66.00%> (+0.08%) ⬆️
test-optimization-jest-latest-oldest 54.20% <66.00%> (+0.08%) ⬆️
test-optimization-jest-oldest-latest 55.38% <66.00%> (+0.08%) ⬆️
test-optimization-jest-oldest-oldest 54.28% <66.00%> (+0.08%) ⬆️
test-optimization-mocha-latest-latest 53.60% <62.00%> (+0.08%) ⬆️
test-optimization-mocha-latest-oldest 51.18% <62.00%> (+0.08%) ⬆️
test-optimization-mocha-oldest-latest 53.72% <62.00%> (+0.10%) ⬆️
test-optimization-mocha-oldest-oldest 51.17% <62.00%> (?)
test-optimization-playwright-latest-latest-playwright-active-test-span 44.27% <57.14%> (+0.26%) ⬆️
test-optimization-playwright-latest-latest-playwright-atr ?
test-optimization-playwright-latest-latest-playwright-efd 43.50% <50.00%> (+0.08%) ⬆️
test-optimization-playwright-latest-latest-playwright-final-status 43.56% <50.00%> (+0.13%) ⬆️
test-optimization-playwright-latest-latest-playwright-impacted-tests 43.04% <50.00%> (+<0.01%) ⬆️
test-optimization-playwright-latest-latest-playwright-reporting 43.12% <50.00%> (+0.08%) ⬆️
test-optimization-playwright-latest-latest-playwright-test-management 44.54% <50.00%> (+0.07%) ⬆️
test-optimization-playwright-latest-oldest-playwright-active-test-span 44.23% <57.14%> (+0.26%) ⬆️
test-optimization-playwright-latest-oldest-playwright-atr 43.14% <50.00%> (+0.10%) ⬆️
test-optimization-playwright-latest-oldest-playwright-efd 43.44% <50.00%> (+0.09%) ⬆️
test-optimization-playwright-latest-oldest-playwright-final-status 43.48% <50.00%> (+0.10%) ⬆️
test-optimization-playwright-latest-oldest-playwright-impacted-tests 42.97% <50.00%> (+<0.01%) ⬆️
test-optimization-playwright-latest-oldest-playwright-reporting 42.92% <50.00%> (+0.09%) ⬆️
test-optimization-playwright-latest-oldest-playwright-test-management 44.52% <50.00%> (-0.13%) ⬇️
test-optimization-playwright-oldest-latest-playwright-active-test-span 44.50% <57.14%> (+0.09%) ⬆️
test-optimization-playwright-oldest-latest-playwright-atr 43.16% <50.00%> (+0.08%) ⬆️
test-optimization-playwright-oldest-latest-playwright-efd 43.55% <50.00%> (+0.08%) ⬆️
test-optimization-playwright-oldest-latest-playwright-final-status 43.64% <50.00%> (+0.11%) ⬆️
test-optimization-playwright-oldest-latest-playwright-impacted-tests 43.11% <50.00%> (+<0.01%) ⬆️
test-optimization-playwright-oldest-latest-playwright-reporting 43.17% <50.00%> (+0.08%) ⬆️
test-optimization-playwright-oldest-latest-playwright-test-management 44.65% <50.00%> (+0.11%) ⬆️
test-optimization-playwright-oldest-oldest-playwright-active-test-span 44.32% <57.14%> (+0.26%) ⬆️
test-optimization-playwright-oldest-oldest-playwright-atr 43.23% <50.00%> (+0.10%) ⬆️
test-optimization-playwright-oldest-oldest-playwright-efd 43.50% <50.00%> (+0.09%) ⬆️
test-optimization-playwright-oldest-oldest-playwright-final-status 43.59% <50.00%> (+0.13%) ⬆️
test-optimization-playwright-oldest-oldest-playwright-impacted-tests 43.05% <50.00%> (+<0.01%) ⬆️
test-optimization-playwright-oldest-oldest-playwright-reporting 42.98% <50.00%> (+0.09%) ⬆️
test-optimization-playwright-oldest-oldest-playwright-test-management 44.61% <50.00%> (+0.10%) ⬆️
test-optimization-selenium-latest ?
test-optimization-selenium-oldest 45.13% <59.18%> (+0.07%) ⬆️
test-optimization-testopt-active 48.25% <58.97%> (+0.13%) ⬆️
test-optimization-testopt-latest 48.24% <58.97%> (+0.13%) ⬆️
test-optimization-testopt-maintenance 48.13% <58.97%> (+0.14%) ⬆️
test-optimization-testopt-oldest 49.43% <58.97%> (+0.10%) ⬆️
test-optimization-vitest-latest 49.90% <57.14%> (-0.95%) ⬇️
test-optimization-vitest-oldest 48.21% <57.14%> (+0.31%) ⬆️

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

☔ View full report in Codecov by Harness.
📢 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.

@BridgeAR
BridgeAR marked this pull request as ready for review June 19, 2026 16:39
@BridgeAR
BridgeAR requested review from a team as code owners June 19, 2026 16:39
@BridgeAR
BridgeAR requested review from crysmags and khanayan123 and removed request for a team June 19, 2026 16:39
bengl
bengl previously approved these changes Jun 24, 2026

@bengl bengl left a comment

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I'd like @rochdev to review as well, but this seems fine.

@BridgeAR
BridgeAR force-pushed the BridgeAR/2026-06-16-prune-internal-property-name-all branch from b66d304 to 78ff229 Compare June 25, 2026 19:58
BridgeAR added 8 commits June 26, 2026 18:17
A `namespace` nests a configuration's canonical env name under a property
path (`telemetry.DD_TELEMETRY_DEBUG`), so the public config object groups
env-named leaves without the bespoke full paths `internalPropertyName`
carried. It takes precedence over `configurationNames` when resolving the
runtime property path and coexists with `internalPropertyName` so entries
migrate one group at a time.
…mespace

The runtime path moves from `remoteConfig.enabled` to
`remoteConfig.DD_REMOTE_CONFIGURATION_ENABLED`. Telemetry still reports the
canonical `DD_REMOTE_CONFIGURATION_ENABLED` name, since the canonical name is
unaffected by how the property path is derived.
…spaces

`appsec.apiSecurity.*` and `appsec.sca.enabled` move to the
`appsec.apiSecurity`/`appsec.sca` namespaces, so the leaf becomes the canonical
env name (`appsec.apiSecurity.DD_API_SECURITY_SAMPLE_DELAY`). The public
`appsec.apiSecurity.enabled` key is unaffected.
The seven `telemetry.*` configs move to the `telemetry` namespace, so each leaf
becomes its canonical env name (`telemetry.DD_TELEMETRY_HEARTBEAT_INTERVAL`).
The telemetry protocol's own `heartbeatInterval` message field is unrelated and
keeps its name.
…quire

The integration-test fixture apps require('dd-trace') the way a customer
does, so dd-trace is never in their own manifest. The rule stayed silent
on a clean install where dd-trace is unresolvable, but fired the moment
dd-trace became resolvable locally (yarn link), unlike CI. Disabling it
alongside the import/no-extraneous-dependencies rule already off for these
files mirrors the existing Next.js fixture exemption.
…amespaces

The langchain/openai/vertexai span-char-limit and prompt-completion
sample-rate configs now nest under their integration namespace, keyed by
the canonical env-var name. makeUtilities derives those leaf names from
the integration name, so the name passed in must match the env-var
prefix (langchain -> DD_LANGCHAIN_*).
…namespace

DD_API_SECURITY_MAX_DOWNSTREAM_BODY_BYTES was the only api-security entry
still keyed by its legacy property name; nest it under the appsec.apiSecurity
namespace like its siblings. The namespace object is always created from the
defaults, so the optional chaining and the `?? 0` fallback on these accesses
guarded a state that cannot occur; drop them.
…aces

DD_PROFILING_ENABLED and DD_TRACE_STATS_COMPUTATION_ENABLED were stored under
the legacy property names profiling.enabled and stats.enabled. Move them under
their single-level namespaces so the canonical name is the key, like the other
migrated groups. The programmatic `profiling` / `stats` options still route to
these paths via configurationNames, so the public option surface is unchanged.

span_stats.js reads the stats toggle via destructuring, so that consumer (and
its fixtures) move with it.

Restore the optional chaining on the api-security endpoint-collection accesses
in telemetry/endpoints.js: those entries are not part of this migration, and
the telemetry tests legitimately drive them with configs that omit appsec.
BridgeAR added 11 commits June 26, 2026 18:17
DD_LLMOBS_ENABLED was stored as llmobs.enabled; move it under the llmobs
namespace so the canonical name is the key. The deprecated programmatic
llmobs.enable()/disable() paths flip the same property and move with it.

Left untouched: llmobs/telemetry.js still reads config._env['llmobs.enabled'],
but config._env is never assigned on Config, so that read is already dead and
its key is moot. Flagged for a separate cleanup rather than widening this diff.
…mespace

DD_IAST_SECURITY_CONTROLS_CONFIGURATION was stored as
iast.securityControlsConfiguration. Move it under the iast namespace so the
canonical name is the key.

v5 still exposes this through the (experimental) iast.* programmatic API, which
major-overrides.js wires up. Keep the namespace in both majors and point the v5
configurationNames at the same canonical property, so the resolved path is
iast.DD_IAST_SECURITY_CONTROLS_CONFIGURATION regardless of major and the
consumer reads one key. The programmatic input names (which v6 rejects as
unknown options) are unchanged.
Three readers still used the pre-namespace leaf names after the toggles moved
under their namespace objects:

1. span_processor read `config.stats.enabled` instead of
   `stats.DD_TRACE_STATS_COMPUTATION_ENABLED`, so trace-stats computation never
   started once the property was renamed.
2. startup-log read `config.profiling.enabled` instead of
   `profiling.DD_PROFILING_ENABLED`, so `profiling_enabled` in the startup log
   was always false.
3. the profiling event serializer read `config.profiling.enabled` to derive the
   reported `activation`, so every profile reported `unknown` once the property
   was renamed; its near-OOM subprocess exporter built the same leaf and moves
   with it.

Redundant optional chaining on these and the telemetry namespace reads is also
dropped: a namespace object and its defaulted leaves are always present, so the
guards only papered over test fixtures that built partial configs.
The disabled-path waf/rasp metric tests passed a partial `{ telemetry: {...} }`
literal, the same hand-built shape that drifted from the config and hid the
renamed-key regressions. Build them from `getConfig()` and flip the toggle under
test, matching the enabled-path beforeEach in the same files, so the fixtures
track the config's real shape instead of a duplicate of it.
endpoints.start now reads config.appsec.apiSecurity.endpointCollectionEnabled
directly, after the optional chaining that only papered over partial test
fixtures was dropped. The telemetry-logs fixture still built appsec without
apiSecurity, so telemetry.start threw a TypeError and aborted the whole AppSec
suite. Build it from a realistic config with endpoint collection disabled,
matching the fixtures already migrated in the parent commit.
api-security and sca values now sit directly under `appsec` with their
canonical env-name leaves rather than nested `apiSecurity`/`sca` objects.
The three api-security entries keep their `configurationNames` so the
public `appsec.apiSecurity.*` options still resolve after the runtime
path moves to `config.appsec.DD_API_SECURITY_*`.
…al key

This makes the format-with-stats variant exercise stats again. SpanProcessor
reads config.stats.DD_TRACE_STATS_COMPUTATION_ENABLED since the toggle moved
under its namespace, so the hand-built `stats: { enabled }` left the
SpanStatsProcessor uncreated and the variant silently measured the no-stats
path -- an A/B "improvement" that was really lost coverage. The empty appsec
object is required too, since the same guard now reads config.appsec.standalone
without optional chaining.

Drive-by fix:

* Align llmobs-span-processor's config literal with the renamed DD_LLMOBS_ENABLED leaf.
…namespaces

config.remoteConfig and config.iast are populated from defaults on every
Config, so the `remoteConfig?.` guard in the express/fastify code-origin
plugins and the `iastConfig?.` guard in the IAST security-controls reader only
tolerated hand-built partial configs in tests. Read the namespace directly; the
optional value leaf (DD_IAST_SECURITY_CONTROLS_CONFIGURATION) keeps its check.
… stats

The preflight only checked that the 30-span chunk was exported, so a renamed
stats toggle silently downgraded format-with-stats to the no-stats path and the
loss surfaced as a spurious A/B improvement rather than a failure. Assert the
stats processor presence matches WITH_STATS so config drift fails the bench
instead of quietly changing what it measures.
Keep the benchmarks compatible while the config rename is in flight so they pass against either side of the nested-name transition.
…g keys

The telemetry refactor renamed config.telemetry.enabled and
config.telemetry.metrics to DD_INSTRUMENTATION_TELEMETRY_ENABLED and
DD_TELEMETRY_METRICS_ENABLED. The sibling specs (rasp, waf, user) were
updated but api_security.spec.js was missed, so enable() always received
falsy flags and the count stub was never called.
@BridgeAR
BridgeAR force-pushed the BridgeAR/2026-06-16-prune-internal-property-name-all branch from 780f8c7 to d85ba85 Compare June 26, 2026 16:17
@BridgeAR
BridgeAR merged commit de13899 into master Jun 26, 2026
806 checks passed
@BridgeAR
BridgeAR deleted the BridgeAR/2026-06-16-prune-internal-property-name-all branch June 26, 2026 21:10
@BridgeAR

Copy link
Copy Markdown
Member Author

As discussed: if there are any other requests to change things, we can follow up afterwards

pabloerhard pushed a commit that referenced this pull request Jun 26, 2026
The sampling tests in #9030 build their own taggers with `{ llmobs:
{ enabled: true } }`, and #8943 renamed that config key to
`DD_LLMOBS_ENABLED` everywhere it could see. The two landed in parallel,
so #8943 normalized the rest of the file but never saw these four
fixtures. On master the tagger now reads `DD_LLMOBS_ENABLED`, finds it
undefined, and returns before registering the span; `Tagger.tagMap.get`
then yields undefined and the "DROPPED at sampleRate 0" test throws
synchronously, aborting the whole `test:llmobs:sdk:ci` run with exit 7.

Fixes: https://github.com/DataDog/dd-trace-js/actions/runs/28265509637/job/83751636644
dd-octo-sts Bot pushed a commit that referenced this pull request Jun 29, 2026
…lPropertyName (#8943)

`internalPropertyName` carried a hand-maintained full property path
(`telemetry.debug`, `remoteConfig.enabled`) that diverged from the canonical
env name, so the same configuration was named twice and the two could drift.

A new `namespace` field nests the canonical env name under a property path
(`telemetry.DD_TELEMETRY_DEBUG`), so the runtime path is derived from the
canonical name plus a namespace with no separate alias to maintain. It takes
precedence over `configurationNames` and `internalPropertyName` when resolving
the path, in the eslint sync rule, and in the type generator. Every group of
entries (remoteConfig, telemetry, appsec api-security and sca, profiling,
stats, llmobs, iast security-controls, the per-integration llm span limits)
moves onto it, and their runtime consumers are updated to the renamed keys.

The canonical name telemetry reports is unchanged: the rename only affects how
the property path is derived, not which env name is sent. The namespace object
is always built from the defaults, so the optional chaining and `?? 0`
fallbacks on the api-security accesses guarded a state that cannot occur and
are dropped.

Drive-by fix:

* Exempt integration-test fixture apps from `n/no-extraneous-require`: they
  `require('dd-trace')` as a customer does, so the rule fired once dd-trace
  became locally resolvable (yarn link) but stayed silent on a clean install.
dd-octo-sts Bot pushed a commit that referenced this pull request Jun 29, 2026
The sampling tests in #9030 build their own taggers with `{ llmobs:
{ enabled: true } }`, and #8943 renamed that config key to
`DD_LLMOBS_ENABLED` everywhere it could see. The two landed in parallel,
so #8943 normalized the rest of the file but never saw these four
fixtures. On master the tagger now reads `DD_LLMOBS_ENABLED`, finds it
undefined, and returns before registering the span; `Tagger.tagMap.get`
then yields undefined and the "DROPPED at sampleRate 0" test throws
synchronously, aborting the whole `test:llmobs:sdk:ci` run with exit 7.

Fixes: https://github.com/DataDog/dd-trace-js/actions/runs/28265509637/job/83751636644
This was referenced Jun 29, 2026
rochdev pushed a commit that referenced this pull request Jul 2, 2026
…lPropertyName (#8943)

`internalPropertyName` carried a hand-maintained full property path
(`telemetry.debug`, `remoteConfig.enabled`) that diverged from the canonical
env name, so the same configuration was named twice and the two could drift.

A new `namespace` field nests the canonical env name under a property path
(`telemetry.DD_TELEMETRY_DEBUG`), so the runtime path is derived from the
canonical name plus a namespace with no separate alias to maintain. It takes
precedence over `configurationNames` and `internalPropertyName` when resolving
the path, in the eslint sync rule, and in the type generator. Every group of
entries (remoteConfig, telemetry, appsec api-security and sca, profiling,
stats, llmobs, iast security-controls, the per-integration llm span limits)
moves onto it, and their runtime consumers are updated to the renamed keys.

The canonical name telemetry reports is unchanged: the rename only affects how
the property path is derived, not which env name is sent. The namespace object
is always built from the defaults, so the optional chaining and `?? 0`
fallbacks on the api-security accesses guarded a state that cannot occur and
are dropped.

Drive-by fix:

* Exempt integration-test fixture apps from `n/no-extraneous-require`: they
  `require('dd-trace')` as a customer does, so the rule fired once dd-trace
  became locally resolvable (yarn link) but stayed silent on a clean install.
rochdev pushed a commit that referenced this pull request Jul 2, 2026
The sampling tests in #9030 build their own taggers with `{ llmobs:
{ enabled: true } }`, and #8943 renamed that config key to
`DD_LLMOBS_ENABLED` everywhere it could see. The two landed in parallel,
so #8943 normalized the rest of the file but never saw these four
fixtures. On master the tagger now reads `DD_LLMOBS_ENABLED`, finds it
undefined, and returns before registering the span; `Tagger.tagMap.get`
then yields undefined and the "DROPPED at sampleRate 0" test throws
synchronously, aborting the whole `test:llmobs:sdk:ci` run with exit 7.

Fixes: https://github.com/DataDog/dd-trace-js/actions/runs/28265509637/job/83751636644
rochdev pushed a commit that referenced this pull request Jul 2, 2026
…lPropertyName (#8943)

`internalPropertyName` carried a hand-maintained full property path
(`telemetry.debug`, `remoteConfig.enabled`) that diverged from the canonical
env name, so the same configuration was named twice and the two could drift.

A new `namespace` field nests the canonical env name under a property path
(`telemetry.DD_TELEMETRY_DEBUG`), so the runtime path is derived from the
canonical name plus a namespace with no separate alias to maintain. It takes
precedence over `configurationNames` and `internalPropertyName` when resolving
the path, in the eslint sync rule, and in the type generator. Every group of
entries (remoteConfig, telemetry, appsec api-security and sca, profiling,
stats, llmobs, iast security-controls, the per-integration llm span limits)
moves onto it, and their runtime consumers are updated to the renamed keys.

The canonical name telemetry reports is unchanged: the rename only affects how
the property path is derived, not which env name is sent. The namespace object
is always built from the defaults, so the optional chaining and `?? 0`
fallbacks on the api-security accesses guarded a state that cannot occur and
are dropped.

Drive-by fix:

* Exempt integration-test fixture apps from `n/no-extraneous-require`: they
  `require('dd-trace')` as a customer does, so the rule fired once dd-trace
  became locally resolvable (yarn link) but stayed silent on a clean install.
rochdev pushed a commit that referenced this pull request Jul 2, 2026
The sampling tests in #9030 build their own taggers with `{ llmobs:
{ enabled: true } }`, and #8943 renamed that config key to
`DD_LLMOBS_ENABLED` everywhere it could see. The two landed in parallel,
so #8943 normalized the rest of the file but never saw these four
fixtures. On master the tagger now reads `DD_LLMOBS_ENABLED`, finds it
undefined, and returns before registering the span; `Tagger.tagMap.get`
then yields undefined and the "DROPPED at sampleRate 0" test throws
synchronously, aborting the whole `test:llmobs:sdk:ci` run with exit 7.

Fixes: https://github.com/DataDog/dd-trace-js/actions/runs/28265509637/job/83751636644
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.

2 participants