Skip to content

test: add shared plugin version resolver#9019

Merged
BridgeAR merged 14 commits into
masterfrom
BridgeAR/2026-06-22-install-concurrency-helper
Jun 24, 2026
Merged

test: add shared plugin version resolver#9019
BridgeAR merged 14 commits into
masterfrom
BridgeAR/2026-06-22-install-concurrency-helper

Conversation

@BridgeAR

@BridgeAR BridgeAR commented Jun 22, 2026

Copy link
Copy Markdown
Member

Summary

withVersions() and the install script each expanded a module's declared
version ranges into the set of versions/<name>@<key> folders to test and
install, and the two computations had drifted — a folder could be installed but
never tested, or tested but never installed. A single resolvePluginVersions
now drives both, so the installed set and the tested set cannot diverge.

Per declared range the resolver pins the lowest supported version exactly, fills
each in-between major with a bounded >=N.0.0 <N+1.0.0 key, and keeps the
declared range itself as the top key. Keying the top by the range (not a bare
major) is what keeps a capped range capped: microgateway-core >=2.1 <=3.0.0
resolves to 3.0.0, not the 3.3.7 a bare-major 3 key would pull in — a version
the instrumentation does not support, which had it emitting web.request
instead of microgateway.request.

Generating the whole versions/ tree is thousands of mkdir/writeFile calls;
an unbounded Promise.all over the tree exhausts file descriptors (EMFILE).
A bounded-concurrency worker pool caps in-flight work, preserves input order, and
stops scheduling once any worker fails. test:scripts runs its spec in CI.

Expanding to every major surfaced real per-major gaps, fixed alongside:

  1. restify runs the 4-6 and 10+ majors with async-only routing gated.
  2. knex 1.x installs the @vscode/sqlite3 fork its dialect needs.
  3. grpc's invalid.proto is proto2 so the required-field decode error survives loadSync.
  4. hapi covers 16.x and 21+ and skips the EOL 19/20 majors that hang CI.
  5. elasticsearch tolerates the util._extend deprecation the legacy client emits.
  6. express-mongo-sanitize pins the <5 express folder it supports.
  7. tedious BulkLoad row-stream listeners run in the caller's span (production fix), with bulkload specs adjusted for the >=13 shards.

The resolver fills in-between majors on its own, so the lodash, ws, and mquery
same-name externals that only re-stated their addHook ranges are dropped. Two
peer-dependency anchors replace them: @apollo/server pins graphql so v5 does
not resolve the 15.x apollo-server v3 drags in, and knex installs the
@vscode/sqlite3 fork.

Test plan

  • yarn test:scripts (resolver + concurrency unit specs).
  • APM Integrations: knex, restify, tedious, elasticsearch, microgateway-core, grpc, hapi, apollo green.

Generating the versions/ workspace tree is thousands of mkdir/writeFile calls;
an unbounded Promise.all over the whole tree exhausts file descriptors (EMFILE).
This adds a reusable worker-pool map that bounds in-flight work while preserving
input order, and wires `test:scripts` so it runs in CI.
@dd-octo-sts

dd-octo-sts Bot commented Jun 22, 2026

Copy link
Copy Markdown
Contributor

Overall package size

Self size: 6.32 MB
Deduped: 7.39 MB
No deduping: 7.39 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

@codecov

codecov Bot commented Jun 22, 2026

Copy link
Copy Markdown

Codecov Report

❌ Patch coverage is 90.90909% with 1 line in your changes missing coverage. Please review.
✅ Project coverage is 93.46%. Comparing base (cdf802a) to head (ad32570).
⚠️ Report is 1 commits behind head on master.

Files with missing lines Patch % Lines
packages/datadog-instrumentations/src/tedious.js 90.90% 1 Missing ⚠️
Additional details and impacted files
@@            Coverage Diff             @@
##           master    #9019      +/-   ##
==========================================
+ Coverage   93.37%   93.46%   +0.08%     
==========================================
  Files         883      883              
  Lines       50523    50534      +11     
  Branches     9944     9947       +3     
==========================================
+ Hits        47176    47230      +54     
+ Misses       3347     3304      -43     
Flag Coverage Δ
aiguard-integration-active 41.76% <ø> (ø)
aiguard-integration-latest 41.77% <ø> (ø)
aiguard-integration-maintenance 41.85% <ø> (+<0.01%) ⬆️
aiguard-macos 34.59% <ø> (-0.08%) ⬇️
aiguard-ubuntu 34.74% <ø> (-0.08%) ⬇️
aiguard-windows 34.42% <ø> (-0.08%) ⬇️
apm-capabilities-tracing-macos 48.23% <ø> (-0.18%) ⬇️
apm-capabilities-tracing-ubuntu-active 48.40% <ø> (+0.17%) ⬆️
apm-capabilities-tracing-ubuntu-latest ?
apm-capabilities-tracing-ubuntu-maintenance ?
apm-capabilities-tracing-ubuntu-oldest 48.45% <ø> (?)
apm-capabilities-tracing-windows 48.21% <ø> (-0.02%) ⬇️
apm-integrations-aerospike-18-gte.5.2.0 33.11% <ø> (-0.08%) ⬇️
apm-integrations-aerospike-20-gte.5.5.0 33.13% <ø> (-0.08%) ⬇️
apm-integrations-aerospike-22-gte.5.12.1 33.14% <ø> (-0.08%) ⬇️
apm-integrations-aerospike-22-gte.6.0.0 33.14% <ø> (-0.08%) ⬇️
apm-integrations-aerospike-eol- 33.04% <ø> (-0.08%) ⬇️
apm-integrations-child-process 34.05% <ø> (-0.08%) ⬇️
apm-integrations-confluentinc-kafka-javascript-18 40.06% <ø> (-0.08%) ⬇️
apm-integrations-confluentinc-kafka-javascript-20 ?
apm-integrations-confluentinc-kafka-javascript-22 40.08% <ø> (-0.08%) ⬇️
apm-integrations-confluentinc-kafka-javascript-24 39.98% <ø> (-0.08%) ⬇️
apm-integrations-couchbase-18 33.39% <ø> (+0.02%) ⬆️
apm-integrations-couchbase-eol 33.17% <ø> (-0.08%) ⬇️
apm-integrations-dns 33.04% <ø> (-0.02%) ⬇️
apm-integrations-elasticsearch 34.17% <ø> (-0.04%) ⬇️
apm-integrations-http-latest 41.89% <ø> (-0.07%) ⬇️
apm-integrations-http-maintenance 41.98% <ø> (-0.07%) ⬇️
apm-integrations-http-oldest 41.91% <ø> (-0.07%) ⬇️
apm-integrations-http2 39.09% <ø> (-0.08%) ⬇️
apm-integrations-kafkajs-latest 40.25% <ø> (-0.04%) ⬇️
apm-integrations-kafkajs-oldest 40.34% <ø> (?)
apm-integrations-net 33.66% <ø> (-0.08%) ⬇️
apm-integrations-next-11.1.4 36.30% <ø> (-0.32%) ⬇️
apm-integrations-next-12.3.7 36.30% <ø> (-0.32%) ⬇️
apm-integrations-next-13.0.0 29.11% <ø> (-0.08%) ⬇️
apm-integrations-next-13.2.0 29.11% <ø> (-0.08%) ⬇️
apm-integrations-next-13.5.11 29.25% <ø> (-0.08%) ⬇️
apm-integrations-next-14.0.0 29.18% <ø> (-0.12%) ⬇️
apm-integrations-next-14.2.35 29.18% <ø> (-0.08%) ⬇️
apm-integrations-next-14.2.6 29.18% <ø> (-0.08%) ⬇️
apm-integrations-next-14.2.7 29.18% <ø> (-0.08%) ⬇️
apm-integrations-next-15.0.0 29.18% <ø> (-0.08%) ⬇️
apm-integrations-next-15.4.0 29.26% <ø> (-0.06%) ⬇️
apm-integrations-next-latest 29.29% <ø> (-0.08%) ⬇️
apm-integrations-oracledb 34.00% <ø> (-0.08%) ⬇️
apm-integrations-prisma-18-gte.6.16.0.and.lt.7.0.0 34.82% <ø> (-0.08%) ⬇️
apm-integrations-prisma-latest-all 34.25% <18.18%> (-0.09%) ⬇️
apm-integrations-restify 35.65% <ø> (+0.36%) ⬆️
apm-integrations-sharedb 32.57% <ø> (+0.02%) ⬆️
apm-integrations-tedious 33.92% <90.90%> (+0.44%) ⬆️
appsec-express 50.94% <ø> (?)
appsec-fastify 47.76% <ø> (-0.04%) ⬇️
appsec-graphql 47.71% <ø> (-0.11%) ⬇️
appsec-integration-active 36.13% <9.09%> (-0.01%) ⬇️
appsec-integration-latest 36.13% <9.09%> (-0.01%) ⬇️
appsec-integration-maintenance 36.19% <9.09%> (-0.01%) ⬇️
appsec-integration-oldest 36.19% <9.09%> (-0.01%) ⬇️
appsec-kafka 40.31% <ø> (-0.07%) ⬇️
appsec-ldapjs 39.83% <ø> (-0.07%) ⬇️
appsec-lodash 39.75% <ø> (-0.07%) ⬇️
appsec-macos 57.09% <ø> (+0.01%) ⬆️
appsec-mongodb-core 43.92% <ø> (-0.06%) ⬇️
appsec-mongoose 44.78% <ø> (-0.05%) ⬇️
appsec-mysql 47.04% <ø> (-0.01%) ⬇️
appsec-next-latest-11.1.4 27.40% <ø> (-0.07%) ⬇️
appsec-next-latest-12.3.7 27.47% <ø> (ø)
appsec-next-latest-13.0.0 29.19% <ø> (-0.08%) ⬇️
appsec-next-latest-13.2.0 29.22% <ø> (-0.08%) ⬇️
appsec-next-latest-13.5.11 29.31% <ø> (-0.08%) ⬇️
appsec-next-latest-14.0.0 29.24% <ø> (-0.08%) ⬇️
appsec-next-latest-14.2.35 29.24% <ø> (-0.08%) ⬇️
appsec-next-latest-14.2.6 29.24% <ø> (-0.08%) ⬇️
appsec-next-latest-14.2.7 29.24% <ø> (-0.08%) ⬇️
appsec-next-latest-15.0.0 29.24% <ø> (-0.08%) ⬇️
appsec-next-latest-latest 29.28% <ø> (-0.08%) ⬇️
appsec-next-oldest-11.1.4 27.45% <ø> (-0.07%) ⬇️
appsec-next-oldest-12.3.7 29.25% <ø> (-0.08%) ⬇️
appsec-next-oldest-13.0.0 29.25% <ø> (-0.08%) ⬇️
appsec-next-oldest-13.2.0 29.52% <ø> (-0.08%) ⬇️
appsec-next-oldest-13.5.11 29.61% <ø> (-0.08%) ⬇️
appsec-next-oldest-14.0.0 29.55% <ø> (-0.08%) ⬇️
appsec-next-oldest-14.2.35 ?
appsec-next-oldest-14.2.6 29.55% <ø> (-0.08%) ⬇️
appsec-next-oldest-14.2.7 29.55% <ø> (-0.08%) ⬇️
appsec-next-oldest-15.0.0 29.55% <ø> (-0.08%) ⬇️
appsec-next-oldest-latest 27.67% <ø> (ø)
appsec-node-serialize 39.04% <ø> (-0.10%) ⬇️
appsec-passport 42.69% <ø> (-0.07%) ⬇️
appsec-postgres 46.85% <ø> (+0.06%) ⬆️
appsec-sourcing 38.51% <ø> (-0.07%) ⬇️
appsec-stripe 40.54% <ø> (-0.07%) ⬇️
appsec-template 39.33% <ø> (-0.07%) ⬇️
appsec-ubuntu 57.13% <ø> (-0.06%) ⬇️
appsec-windows 56.87% <ø> (?)
debugger-ubuntu-active 43.48% <ø> (+0.07%) ⬆️
debugger-ubuntu-latest 43.48% <ø> (ø)
debugger-ubuntu-maintenance 43.60% <ø> (ø)
debugger-ubuntu-oldest 43.91% <ø> (ø)
instrumentations-instrumentation-ai 45.53% <ø> (ø)
instrumentations-instrumentation-aws-sdk 45.11% <ø> (ø)
instrumentations-instrumentation-bluebird 27.63% <ø> (-0.08%) ⬇️
instrumentations-instrumentation-body-parser 35.67% <ø> (-0.08%) ⬇️
instrumentations-instrumentation-child_process 33.34% <ø> (-0.08%) ⬇️
instrumentations-instrumentation-connect 48.51% <ø> (ø)
instrumentations-instrumentation-cookie-parser 29.53% <ø> (-0.08%) ⬇️
instrumentations-instrumentation-couchbase-18 46.23% <ø> (ø)
instrumentations-instrumentation-couchbase-eol 46.23% <ø> (ø)
instrumentations-instrumentation-crypto 27.59% <ø> (?)
instrumentations-instrumentation-express 29.73% <ø> (-0.08%) ⬇️
instrumentations-instrumentation-express-mongo-sanitize 29.64% <ø> (-0.08%) ⬇️
instrumentations-instrumentation-express-multi-version 41.80% <ø> (ø)
instrumentations-instrumentation-express-session 35.49% <ø> (-0.08%) ⬇️
instrumentations-instrumentation-fastify 48.47% <ø> (ø)
instrumentations-instrumentation-fetch 45.21% <ø> (ø)
instrumentations-instrumentation-fs 27.31% <ø> (-0.08%) ⬇️
instrumentations-instrumentation-generic-pool 27.49% <ø> (ø)
instrumentations-instrumentation-hono 28.84% <ø> (-0.08%) ⬇️
instrumentations-instrumentation-http 37.95% <ø> (-0.08%) ⬇️
instrumentations-instrumentation-http-client-options 37.55% <ø> (?)
instrumentations-instrumentation-kafkajs 49.19% <ø> (ø)
instrumentations-instrumentation-knex 27.61% <ø> (-0.08%) ⬇️
instrumentations-instrumentation-koa 46.11% <ø> (ø)
instrumentations-instrumentation-light-my-request 35.31% <ø> (-0.08%) ⬇️
instrumentations-instrumentation-mongoose 28.73% <ø> (-0.08%) ⬇️
instrumentations-instrumentation-multer 35.34% <ø> (-0.08%) ⬇️
instrumentations-instrumentation-mysql2 33.46% <ø> (-0.08%) ⬇️
instrumentations-instrumentation-openai-lifecycle 46.21% <ø> (ø)
instrumentations-instrumentation-otel-sdk-trace 25.46% <ø> (ø)
instrumentations-instrumentation-passport 39.22% <ø> (?)
instrumentations-instrumentation-passport-http 38.92% <ø> (-0.07%) ⬇️
instrumentations-instrumentation-passport-local 39.37% <ø> (-0.07%) ⬇️
instrumentations-instrumentation-pg 33.19% <ø> (-0.08%) ⬇️
instrumentations-instrumentation-promise 27.57% <ø> (-0.08%) ⬇️
instrumentations-instrumentation-promise-js 27.57% <ø> (-0.08%) ⬇️
instrumentations-instrumentation-q 27.60% <ø> (-0.08%) ⬇️
instrumentations-instrumentation-restify 47.75% <ø> (ø)
instrumentations-instrumentation-router 43.64% <ø> (ø)
instrumentations-instrumentation-stripe 28.12% <ø> (-0.08%) ⬇️
instrumentations-instrumentation-url 27.43% <ø> (-0.08%) ⬇️
instrumentations-instrumentation-when 27.59% <ø> (-0.08%) ⬇️
instrumentations-instrumentation-zlib 27.48% <ø> (?)
instrumentations-integration-esbuild-0.16.12-active 24.77% <9.09%> (-0.01%) ⬇️
instrumentations-integration-esbuild-0.16.12-latest 24.77% <9.09%> (-0.01%) ⬇️
instrumentations-integration-esbuild-0.16.12-maintenance 18.81% <9.09%> (-0.01%) ⬇️
instrumentations-integration-esbuild-0.16.12-oldest 18.80% <9.09%> (-0.01%) ⬇️
instrumentations-integration-esbuild-latest-active 24.77% <9.09%> (-0.01%) ⬇️
instrumentations-integration-esbuild-latest-latest 24.77% <9.09%> (-0.01%) ⬇️
instrumentations-integration-esbuild-latest-maintenance 18.81% <9.09%> (-0.01%) ⬇️
instrumentations-integration-esbuild-latest-oldest 18.80% <9.09%> (-0.01%) ⬇️
llmobs-ai 35.12% <ø> (-0.07%) ⬇️
llmobs-anthropic 36.55% <ø> (-0.07%) ⬇️
llmobs-bedrock 36.04% <ø> (-0.07%) ⬇️
llmobs-google-genai 35.98% <ø> (-0.07%) ⬇️
llmobs-langchain 35.48% <ø> (-0.06%) ⬇️
llmobs-openai-latest 39.45% <ø> (-0.07%) ⬇️
llmobs-sdk-active 43.41% <ø> (-0.08%) ⬇️
llmobs-sdk-latest 43.41% <ø> (-0.08%) ⬇️
llmobs-sdk-maintenance 43.51% <ø> (-0.08%) ⬇️
llmobs-sdk-oldest 43.49% <ø> (-0.08%) ⬇️
llmobs-vertex-ai 35.65% <ø> (-0.07%) ⬇️
master-coverage 93.46% <90.90%> (?)
openfeature-macos 37.46% <ø> (-0.06%) ⬇️
openfeature-ubuntu 37.65% <ø> (ø)
openfeature-unit-active 50.00% <ø> (ø)
openfeature-unit-latest 50.00% <ø> (ø)
openfeature-unit-maintenance 50.36% <ø> (ø)
openfeature-unit-oldest 50.36% <ø> (ø)
openfeature-windows 37.39% <ø> (ø)
platform-core 46.47% <ø> (ø)
platform-esbuild 18.74% <9.09%> (-0.01%) ⬇️
platform-instrumentations-misc 29.59% <ø> (ø)
platform-integration-active 47.11% <ø> (ø)
platform-integration-latest 47.10% <ø> (-0.02%) ⬇️
platform-integration-maintenance 47.21% <ø> (+0.04%) ⬆️
platform-integration-oldest 47.37% <ø> (+0.01%) ⬆️
platform-shimmer 47.50% <ø> (ø)
platform-unit-guardrails 44.42% <ø> (ø)
platform-webpack 18.39% <9.09%> (-0.01%) ⬇️
plugins-aws-durable-execution-sdk-js 32.84% <ø> (-0.07%) ⬇️
plugins-axios 35.48% <ø> (ø)
plugins-azure-cosmos 35.98% <ø> (-0.08%) ⬇️
plugins-azure-event-hubs 34.85% <ø> (ø)
plugins-azure-service-bus 35.36% <ø> (ø)
plugins-body-parser 36.45% <ø> (ø)
plugins-bullmq 39.46% <ø> (-0.08%) ⬇️
plugins-cassandra 33.60% <ø> (-0.08%) ⬇️
plugins-cookie 40.72% <ø> (ø)
plugins-cookie-parser 40.55% <ø> (ø)
plugins-crypto 42.71% <ø> (ø)
plugins-dd-trace-api 33.19% <ø> (-0.08%) ⬇️
plugins-express-mongo-sanitize 40.60% <ø> (ø)
plugins-express-session 40.46% <ø> (ø)
plugins-fastify 37.79% <ø> (-0.07%) ⬇️
plugins-fetch 34.55% <ø> (-0.08%) ⬇️
plugins-fs 33.62% <ø> (-0.08%) ⬇️
plugins-generic-pool 40.02% <ø> (ø)
plugins-google-cloud-pubsub 41.35% <ø> (-0.07%) ⬇️
plugins-grpc 36.50% <ø> (-0.07%) ⬇️
plugins-handlebars 40.60% <ø> (ø)
plugins-hapi 35.78% <ø> (+0.14%) ⬆️
plugins-hono 35.90% <ø> (-0.08%) ⬇️
plugins-ioredis 34.26% <ø> (-0.08%) ⬇️
plugins-jest ?
plugins-knex 40.06% <ø> (ø)
plugins-langgraph 32.32% <ø> (-0.08%) ⬇️
plugins-ldapjs 39.02% <ø> (ø)
plugins-light-my-request 40.16% <ø> (ø)
plugins-limitd-client 27.93% <ø> (-0.08%) ⬇️
plugins-lodash 40.21% <ø> (ø)
plugins-mariadb 35.10% <ø> (-0.08%) ⬇️
plugins-memcached 33.65% <ø> (-0.08%) ⬇️
plugins-microgateway-core 34.82% <ø> (+0.01%) ⬆️
plugins-modelcontextprotocol-sdk 32.28% <ø> (-0.08%) ⬇️
plugins-moleculer 36.56% <ø> (-0.08%) ⬇️
plugins-mongodb 35.76% <ø> (-0.08%) ⬇️
plugins-mongodb-core 35.38% <ø> (-0.08%) ⬇️
plugins-mongoose 34.53% <ø> (+0.11%) ⬆️
plugins-multer 40.52% <ø> (ø)
plugins-mysql 34.59% <ø> (-0.08%) ⬇️
plugins-mysql2 34.91% <ø> (-0.08%) ⬇️
plugins-nats 36.28% <ø> (-0.08%) ⬇️
plugins-node-serialize 40.44% <ø> (-0.31%) ⬇️
plugins-opensearch 33.76% <ø> (+0.14%) ⬆️
plugins-passport-http 40.33% <ø> (ø)
plugins-pino ?
plugins-postgres 34.79% <ø> (+0.08%) ⬆️
plugins-process 42.71% <ø> (ø)
plugins-pug 40.72% <ø> (ø)
plugins-redis 34.28% <ø> (-0.02%) ⬇️
plugins-router 38.18% <ø> (+0.08%) ⬆️
plugins-sequelize 39.98% <ø> (ø)
plugins-test-and-upstream-amqp10 33.79% <ø> (-0.08%) ⬇️
plugins-test-and-upstream-amqplib 39.12% <ø> (-0.06%) ⬇️
plugins-test-and-upstream-apollo 34.80% <ø> (-0.07%) ⬇️
plugins-test-and-upstream-avsc 33.68% <ø> (-0.08%) ⬇️
plugins-test-and-upstream-bunyan 29.06% <ø> (-0.08%) ⬇️
plugins-test-and-upstream-connect 36.29% <ø> (-0.08%) ⬇️
plugins-test-and-upstream-graphql 35.77% <ø> (-0.26%) ⬇️
plugins-test-and-upstream-koa 35.84% <ø> (-0.08%) ⬇️
plugins-test-and-upstream-protobufjs 33.91% <ø> (-0.08%) ⬇️
plugins-test-and-upstream-rhea 39.06% <ø> (-0.08%) ⬇️
plugins-undici 34.98% <ø> (-0.07%) ⬇️
plugins-url 42.71% <ø> (ø)
plugins-valkey 33.60% <ø> (-0.22%) ⬇️
plugins-vm 42.71% <ø> (ø)
plugins-winston 29.72% <ø> (-0.08%) ⬇️
plugins-ws 37.04% <ø> (-0.08%) ⬇️
profiling-macos 43.05% <ø> (-0.07%) ⬇️
profiling-ubuntu 43.43% <ø> (-0.07%) ⬇️
profiling-windows 40.90% <ø> (-0.07%) ⬇️
serverless-aws-sdk-latest-aws-sdk ?
serverless-aws-sdk-latest-bedrockruntime 31.93% <ø> (-0.07%) ⬇️
serverless-aws-sdk-latest-client 36.33% <ø> (ø)
serverless-aws-sdk-latest-dynamodb 33.87% <ø> (-0.12%) ⬇️
serverless-aws-sdk-latest-eventbridge 27.11% <ø> (-0.07%) ⬇️
serverless-aws-sdk-latest-kinesis 37.11% <ø> (-0.07%) ⬇️
serverless-aws-sdk-latest-lambda 34.36% <ø> (-0.07%) ⬇️
serverless-aws-sdk-latest-s3 32.31% <ø> (-0.07%) ⬇️
serverless-aws-sdk-latest-serverless-peer-service 39.34% <ø> (+0.01%) ⬆️
serverless-aws-sdk-latest-sns 38.12% <ø> (-0.07%) ⬇️
serverless-aws-sdk-latest-sqs 37.74% <ø> (?)
serverless-aws-sdk-latest-stepfunctions 32.95% <ø> (-0.07%) ⬇️
serverless-aws-sdk-latest-util 46.87% <ø> (ø)
serverless-aws-sdk-oldest-aws-sdk 33.20% <ø> (-0.07%) ⬇️
serverless-aws-sdk-oldest-bedrockruntime 32.02% <ø> (-0.07%) ⬇️
serverless-aws-sdk-oldest-client 36.90% <ø> (ø)
serverless-aws-sdk-oldest-dynamodb 33.97% <ø> (-0.15%) ⬇️
serverless-aws-sdk-oldest-eventbridge 27.19% <ø> (-0.07%) ⬇️
serverless-aws-sdk-oldest-kinesis 37.28% <ø> (-0.07%) ⬇️
serverless-aws-sdk-oldest-lambda 34.46% <ø> (-0.07%) ⬇️
serverless-aws-sdk-oldest-s3 32.45% <ø> (-0.07%) ⬇️
serverless-aws-sdk-oldest-serverless-peer-service 39.43% <ø> (-0.08%) ⬇️
serverless-aws-sdk-oldest-sns ?
serverless-aws-sdk-oldest-sqs 37.82% <ø> (-0.07%) ⬇️
serverless-aws-sdk-oldest-stepfunctions 33.05% <ø> (-0.07%) ⬇️
serverless-aws-sdk-oldest-util 47.64% <ø> (ø)
serverless-azure-durable-functions 36.81% <ø> (-0.16%) ⬇️
serverless-azure-functions-eventhubs 38.40% <ø> (ø)
serverless-azure-functions-servicebus 38.46% <ø> (?)
serverless-lambda 34.32% <ø> (-0.09%) ⬇️
test-optimization-cucumber-latest-7.0.0 49.84% <ø> (+0.11%) ⬆️
test-optimization-cucumber-latest-latest 52.55% <ø> (+0.11%) ⬆️
test-optimization-cucumber-oldest-7.0.0 49.92% <ø> (+0.11%) ⬆️
test-optimization-cypress-latest-12.0.0-commonJS 47.12% <ø> (-1.96%) ⬇️
test-optimization-cypress-latest-12.0.0-esm 48.49% <ø> (-0.61%) ⬇️
test-optimization-cypress-latest-14.5.4-commonJS 47.22% <ø> (-1.32%) ⬇️
test-optimization-cypress-latest-14.5.4-esm 48.89% <ø> (+0.75%) ⬆️
test-optimization-cypress-latest-latest-commonJS 49.48% <ø> (+0.13%) ⬆️
test-optimization-cypress-latest-latest-esm 47.47% <ø> (-1.35%) ⬇️
test-optimization-cypress-oldest-12.0.0-commonJS 47.43% <ø> (-0.33%) ⬇️
test-optimization-cypress-oldest-12.0.0-esm 49.26% <ø> (+0.38%) ⬆️
test-optimization-cypress-oldest-14.5.4-commonJS 49.08% <ø> (+0.07%) ⬆️
test-optimization-cypress-oldest-14.5.4-esm 49.11% <ø> (+0.10%) ⬆️
test-optimization-jest-latest-latest 55.24% <ø> (+0.07%) ⬆️
test-optimization-jest-latest-oldest 53.54% <ø> (-0.56%) ⬇️
test-optimization-jest-oldest-latest 55.29% <ø> (+0.07%) ⬆️
test-optimization-jest-oldest-oldest 54.18% <ø> (+0.08%) ⬆️
test-optimization-mocha-latest-latest 53.50% <ø> (+0.08%) ⬆️
test-optimization-mocha-latest-oldest 51.08% <ø> (+0.08%) ⬆️
test-optimization-mocha-oldest-latest 53.61% <ø> (+0.08%) ⬆️
test-optimization-mocha-oldest-oldest 51.06% <ø> (+0.08%) ⬆️
test-optimization-playwright-latest-latest-playwright-active-test-span 44.28% <ø> (+0.40%) ⬆️
test-optimization-playwright-latest-latest-playwright-atr 42.94% <ø> (+0.10%) ⬆️
test-optimization-playwright-latest-latest-playwright-efd 43.34% <ø> (+0.06%) ⬆️
test-optimization-playwright-latest-latest-playwright-final-status 43.40% <ø> (+0.10%) ⬆️
test-optimization-playwright-latest-latest-playwright-impacted-tests 42.90% <ø> (ø)
test-optimization-playwright-latest-latest-playwright-reporting 42.98% <ø> (+0.08%) ⬆️
test-optimization-playwright-latest-latest-playwright-test-management 44.43% <ø> (+0.10%) ⬆️
test-optimization-playwright-latest-oldest-playwright-active-test-span 44.10% <ø> (+0.26%) ⬆️
test-optimization-playwright-latest-oldest-playwright-atr 43.00% <ø> (+0.10%) ⬆️
test-optimization-playwright-latest-oldest-playwright-efd 43.30% <ø> (+0.09%) ⬆️
test-optimization-playwright-latest-oldest-playwright-final-status 43.36% <ø> (+0.13%) ⬆️
test-optimization-playwright-latest-oldest-playwright-impacted-tests 42.82% <ø> (ø)
test-optimization-playwright-latest-oldest-playwright-reporting 42.78% <ø> (?)
test-optimization-playwright-latest-oldest-playwright-test-management 44.39% <ø> (+0.10%) ⬆️
test-optimization-playwright-oldest-latest-playwright-active-test-span 44.36% <ø> (+0.08%) ⬆️
test-optimization-playwright-oldest-latest-playwright-atr 43.02% <ø> (+0.08%) ⬆️
test-optimization-playwright-oldest-latest-playwright-efd 43.42% <ø> (+0.08%) ⬆️
test-optimization-playwright-oldest-latest-playwright-final-status 43.50% <ø> (+0.08%) ⬆️
test-optimization-playwright-oldest-latest-playwright-impacted-tests 42.97% <ø> (?)
test-optimization-playwright-oldest-latest-playwright-reporting 43.04% <ø> (+0.08%) ⬆️
test-optimization-playwright-oldest-latest-playwright-test-management 44.52% <ø> (+0.11%) ⬆️
test-optimization-playwright-oldest-oldest-playwright-active-test-span 44.18% <ø> (+0.26%) ⬆️
test-optimization-playwright-oldest-oldest-playwright-atr 43.09% <ø> (+0.10%) ⬆️
test-optimization-playwright-oldest-oldest-playwright-efd 43.36% <ø> (+0.09%) ⬆️
test-optimization-playwright-oldest-oldest-playwright-final-status 43.42% <ø> (+0.10%) ⬆️
test-optimization-playwright-oldest-oldest-playwright-impacted-tests 42.91% <ø> (ø)
test-optimization-playwright-oldest-oldest-playwright-reporting 42.84% <ø> (?)
test-optimization-playwright-oldest-oldest-playwright-test-management 44.47% <ø> (+0.10%) ⬆️
test-optimization-selenium-latest 45.26% <ø> (+0.06%) ⬆️
test-optimization-selenium-oldest 45.11% <ø> (+0.33%) ⬆️
test-optimization-testopt-active 48.25% <ø> (+0.12%) ⬆️
test-optimization-testopt-latest 48.25% <ø> (+0.12%) ⬆️
test-optimization-testopt-maintenance 48.24% <ø> (+0.13%) ⬆️
test-optimization-testopt-oldest 49.33% <ø> (+0.10%) ⬆️
test-optimization-vitest-latest 50.72% <ø> (+0.10%) ⬆️
test-optimization-vitest-oldest 48.08% <ø> (+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.

@pr-commenter

pr-commenter Bot commented Jun 22, 2026

Copy link
Copy Markdown

Benchmarks

Benchmark execution time: 2026-06-24 20:09:00

Comparing candidate commit ad32570 in PR branch BridgeAR/2026-06-22-install-concurrency-helper with baseline commit cdf802a in branch master.

📊 Benchmarking dashboard

Found 0 performance improvements and 0 performance regressions! Performance is the same for 1952 metrics, 13 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 [-153033.787µs; +152712.420µs] or [-5.880%; +5.868%]

scenario:appsec-appsec-enabled-26

  • unstable execution_time [-173379.184µs; +173465.551µs] or [-6.985%; +6.989%]

scenario:appsec-control-20

  • unstable execution_time [-123.225ms; +135.115ms] or [-7.220%; +7.917%]

scenario:appsec-control-24

  • unstable execution_time [-90.904ms; +85.283ms] or [-7.604%; +7.134%]

scenario:appsec-control-26

  • unstable execution_time [-97.380ms; +100.678ms] or [-8.214%; +8.492%]

scenario:dogstatsd-with-tags-20

  • unstable cpu_user_time [-327.906ms; +383.873ms] or [-6.907%; +8.085%]
  • unstable execution_time [-328.338ms; +387.348ms] or [-6.809%; +8.032%]

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

  • unstable cpu_user_time [-269.474ms; +343.647ms] or [-6.236%; +7.952%]
  • unstable execution_time [-297.595ms; +364.849ms] or [-6.476%; +7.939%]
  • unstable max_rss_usage [-41.893MB; +39.149MB] or [-8.036%; +7.510%]

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

  • unstable max_rss_usage [-7.476MB; +12.790MB] or [-5.172%; +8.847%]

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

  • unstable max_rss_usage [-44.931MB; -13.236MB] or [-24.072%; -7.091%]

scenario:test-optimization-large-suite-20

  • unstable max_rss_usage [-6631.240KB; +4866.906KB] or [-8.067%; +5.920%]

@BridgeAR
BridgeAR marked this pull request as ready for review June 22, 2026 20:05
@BridgeAR
BridgeAR requested a review from a team as a code owner June 22, 2026 20:05

@chatgpt-codex-connector chatgpt-codex-connector Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: 54c1fd2fa2

ℹ️ About Codex in GitHub

Codex has been enabled to automatically review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

When you sign up for Codex through ChatGPT, Codex can also answer questions or update the PR, like "@codex address that feedback".

Comment thread scripts/helpers/concurrency.js Outdated
With concurrency > 1, a worker already in flight kept looping and taking new
items after a sibling worker rejected, so the helper scheduled further writes
while the returned promise had already rejected. A caller that catches the
rejection and starts cleanup or retry then races those writes. A shared failure
flag now gates the worker loop, so no worker takes a new item once any worker
fails.
@datadog-official

datadog-official Bot commented Jun 23, 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: ad32570 | Docs | Datadog PR Page | Give us feedback!

@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.

This seems to not be used anywhere yet?

@BridgeAR

BridgeAR commented Jun 23, 2026

Copy link
Copy Markdown
Member Author

@bengl that is correct. I have PRs stacked on top. I can also merge it into the first PR that uses it. I guess I would normally rather have a user.

E.g., #9021

withVersions() and the install script each expand a module's declared versions
into the set of folders to test/install, and the two computations drifted, so a
folder could be installed but never tested (or the reverse). This adds a single
resolvePluginVersions/getVersionList that both consume: per declared range it
pins the lowest supported version exactly and adds the newest of every major the
range spans, keyed by the bare major. Covering each major (not the raw range,
which only resolves to the newest of the whole range) makes sure the floor
major's latest is tested too. `*` collapses to the latest major, and an empty or
unparseable entry throws instead of being skipped.
@BridgeAR
BridgeAR requested a review from a team as a code owner June 24, 2026 18:15
@BridgeAR
BridgeAR requested review from crysmags and removed request for a team June 24, 2026 18:15
@BridgeAR BridgeAR changed the title test(scripts): add bounded-concurrency map helper test: add shared plugin version resolver Jun 24, 2026
…9022)

* test: add shared plugin version resolver

withVersions() and the install script each expand a module's declared versions
into the set of folders to test/install, and the two computations drifted, so a
folder could be installed but never tested (or the reverse). This adds a single
resolvePluginVersions/getVersionList that both consume: per declared range it
pins the lowest supported version exactly and adds the newest of every major the
range spans, keyed by the bare major. Covering each major (not the raw range,
which only resolves to the newest of the whole range) makes sure the floor
major's latest is tested too. `*` collapses to the latest major, and an empty or
unparseable entry throws instead of being skipped.

* test: drive install script and withVersions from the shared resolver

Both call sites now consume resolvePluginVersions, so the generated versions/
folders and the folders withVersions() iterates derive from one place and can no
longer drift. The generator caps its mkdir/writeFile fan-out through the
concurrency helper to avoid EMFILE.

The resolver fills every in-between major on its own, so the lodash, ws, and
mquery same-name externals that only re-stated their addHook ranges are dropped.
Two peer-dependency anchors are added in their place: @apollo/server pins graphql
so v5 does not resolve the 15.x that apollo-server v3 drags in, and knex installs
the @vscode/sqlite3 fork its 1.x dialect requires.
bengl
bengl previously approved these changes Jun 24, 2026
BridgeAR added 7 commits June 24, 2026 21:52
…apped

Expanding a declared range to bare-major keys made the top key resolve to the
package.json pin regardless of the range's upper bound: microgateway-core
`>=2.1 <=3.0.0` produced key `3`, which installs 3.3.7 — a version the
instrumentation does not support — so traced operations emitted `web.request`
instead of `microgateway.request`. The top key is now the declared range
itself and in-between majors are keyed by a bounded `>=N.0.0 <N+1.0.0` range,
so a version above the declared ceiling is never installed or tested.
…ror survives loadSync

(cherry picked from commit 19989f1)
BridgeAR added 2 commits June 24, 2026 21:55
Listeners the caller registers on `bulkLoad.getRowStream()` ran in whatever
async context emitted the stream event, so the span active at registration was
lost once the tracer moved to AsyncLocalStorage; `'finish'`/`'error'`/`'data'`
handlers were traced under the wrong (or no) span. Each caller-registered
listener is now bound to its registration context. tedious' own internal
listeners attach before `getRowStream` returns, so only caller listeners are
bound.

The bulkload specs are adjusted for the majors the version-range expansion now
exercises (the >=13 shards) and read the DBM comment from the executed query.
@BridgeAR
BridgeAR merged commit ea50dc6 into master Jun 24, 2026
1076 of 1078 checks passed
@BridgeAR
BridgeAR deleted the BridgeAR/2026-06-22-install-concurrency-helper branch June 24, 2026 20:43
dd-octo-sts Bot pushed a commit that referenced this pull request Jun 25, 2026
…9019

withVersions() and the install script each expanded a module's declared version
ranges into the set of versions/<name>@<key> folders to test and install, and the
two computations had drifted — a folder could be installed but never tested, or
tested but never installed. A single resolvePluginVersions now drives both, so the
installed set and the tested set cannot diverge.

Per declared range the resolver pins the lowest supported version exactly, fills
each in-between major with a bounded >=N.0.0 <N+1.0.0 key, and keeps the declared
range itself as the top key. Keying the top by the range (not a bare major) is what
keeps a capped range capped: microgateway-core >=2.1 <=3.0.0 resolves to 3.0.0, not
the 3.3.7 a bare-major 3 key would pull in — a version the instrumentation does not
support, which had it emitting web.request instead of microgateway.request.

Generating the whole versions/ tree is thousands of mkdir/writeFile calls; an
unbounded Promise.all over the tree exhausts file descriptors (EMFILE). A
bounded-concurrency worker pool caps in-flight work, preserves input order, and
stops scheduling once any worker fails.

Expanding to every major surfaced real per-major gaps, fixed alongside:

1. restify runs the 4-6 and 10+ majors with async-only routing gated.
2. knex 1.x installs the @vscode/sqlite3 fork its dialect needs.
3. grpc's invalid.proto is proto2 so the required-field decode error survives loadSync.
4. hapi covers 16.x and 21+ and skips the EOL 19/20 majors that hang CI.
5. elasticsearch tolerates the util._extend deprecation the legacy client emits.
6. express-mongo-sanitize pins the <5 express folder it supports.
7. tedious BulkLoad row-stream listeners run in the caller's span, with bulkload specs adjusted for the >=13 shards.

The resolver fills in-between majors on its own, so the lodash, ws, and mquery
same-name externals that only re-stated their addHook ranges are dropped. Two
peer-dependency anchors replace them: @apollo/server pins graphql so v5 does not
resolve the 15.x apollo-server v3 drags in, and knex installs the @vscode/sqlite3
fork.
This was referenced Jun 25, 2026
pabloerhard pushed a commit that referenced this pull request Jun 26, 2026
…9019

withVersions() and the install script each expanded a module's declared version
ranges into the set of versions/<name>@<key> folders to test and install, and the
two computations had drifted — a folder could be installed but never tested, or
tested but never installed. A single resolvePluginVersions now drives both, so the
installed set and the tested set cannot diverge.

Per declared range the resolver pins the lowest supported version exactly, fills
each in-between major with a bounded >=N.0.0 <N+1.0.0 key, and keeps the declared
range itself as the top key. Keying the top by the range (not a bare major) is what
keeps a capped range capped: microgateway-core >=2.1 <=3.0.0 resolves to 3.0.0, not
the 3.3.7 a bare-major 3 key would pull in — a version the instrumentation does not
support, which had it emitting web.request instead of microgateway.request.

Generating the whole versions/ tree is thousands of mkdir/writeFile calls; an
unbounded Promise.all over the tree exhausts file descriptors (EMFILE). A
bounded-concurrency worker pool caps in-flight work, preserves input order, and
stops scheduling once any worker fails.

Expanding to every major surfaced real per-major gaps, fixed alongside:

1. restify runs the 4-6 and 10+ majors with async-only routing gated.
2. knex 1.x installs the @vscode/sqlite3 fork its dialect needs.
3. grpc's invalid.proto is proto2 so the required-field decode error survives loadSync.
4. hapi covers 16.x and 21+ and skips the EOL 19/20 majors that hang CI.
5. elasticsearch tolerates the util._extend deprecation the legacy client emits.
6. express-mongo-sanitize pins the <5 express folder it supports.
7. tedious BulkLoad row-stream listeners run in the caller's span, with bulkload specs adjusted for the >=13 shards.

The resolver fills in-between majors on its own, so the lodash, ws, and mquery
same-name externals that only re-stated their addHook ranges are dropped. Two
peer-dependency anchors replace them: @apollo/server pins graphql so v5 does not
resolve the 15.x apollo-server v3 drags in, and knex installs the @vscode/sqlite3
fork.
BridgeAR added a commit that referenced this pull request Jun 26, 2026
Key each expanded major by its bare major (`versions/mongodb@3`) instead of a
bounded range (`versions/mongodb@>=3.0.0 <4.0.0`). The bare major reads cleanly
as a folder name and covers each major's latest, including the floor major's,
which the range form dropped. Follows the shared resolver from #9019.

Widening the matrix to every major's latest surfaced several latent failures:

1. A bare-major key resolves to that major's newest version, so a range ending
   inside its top major overshoots: microgateway-core `>=2.1 <=3.0.0` keyed `3`
   installed 3.3.7 and the span came back `web.request` instead of
   `microgateway.request`. The top major keeps the declared range whenever it
   stops short of the major's ceiling; fully-spanned and lower majors stay bare.
2. `versions/ai@4` and `@langchain/core@0` resolve to versions that have no VCR
   cassette and would hit the live API (401). A central `brokenVersions`
   registry drops a matching resolved version and surfaces the reason as a
   pending test, each entry a stop-gap carrying a TODO.
3. A manifest carrying a `workspace:` protocol dependency was copied verbatim
   into a generated workspace, so yarn failed with "Couldn't find any versions
   for X that matches workspace:*". Fall back to the pinned compatible version.
4. The Apollo fetch-failure test gated the error span on `version > '2.3.0'`, a
   lexicographic compare that breaks once the key is bare (`'2' > '2.3.0'` is
   false). Compare the resolved version with `semver.gt`.
5. Single-digit keying renames folders that several specs hard-code by range
   (express, langchain, bedrock runtime, aws-sdk). The bedrock require threw
   after `agent.load` with no `agent.close`, leaving the Remote Config poll
   running and hanging the job to the 45-minute timeout; the others silently
   skipped suites. Point the requires at the renamed folders.
rochdev pushed a commit that referenced this pull request Jul 2, 2026
Key each expanded major by its bare major (`versions/mongodb@3`) instead of a
bounded range (`versions/mongodb@>=3.0.0 <4.0.0`). The bare major reads cleanly
as a folder name and covers each major's latest, including the floor major's,
which the range form dropped. Follows the shared resolver from #9019.

Widening the matrix to every major's latest surfaced several latent failures:

1. A bare-major key resolves to that major's newest version, so a range ending
   inside its top major overshoots: microgateway-core `>=2.1 <=3.0.0` keyed `3`
   installed 3.3.7 and the span came back `web.request` instead of
   `microgateway.request`. The top major keeps the declared range whenever it
   stops short of the major's ceiling; fully-spanned and lower majors stay bare.
2. `versions/ai@4` and `@langchain/core@0` resolve to versions that have no VCR
   cassette and would hit the live API (401). A central `brokenVersions`
   registry drops a matching resolved version and surfaces the reason as a
   pending test, each entry a stop-gap carrying a TODO.
3. A manifest carrying a `workspace:` protocol dependency was copied verbatim
   into a generated workspace, so yarn failed with "Couldn't find any versions
   for X that matches workspace:*". Fall back to the pinned compatible version.
4. The Apollo fetch-failure test gated the error span on `version > '2.3.0'`, a
   lexicographic compare that breaks once the key is bare (`'2' > '2.3.0'` is
   false). Compare the resolved version with `semver.gt`.
5. Single-digit keying renames folders that several specs hard-code by range
   (express, langchain, bedrock runtime, aws-sdk). The bedrock require threw
   after `agent.load` with no `agent.close`, leaving the Remote Config poll
   running and hanging the job to the 45-minute timeout; the others silently
   skipped suites. Point the requires at the renamed folders.
rochdev pushed a commit that referenced this pull request Jul 2, 2026
Key each expanded major by its bare major (`versions/mongodb@3`) instead of a
bounded range (`versions/mongodb@>=3.0.0 <4.0.0`). The bare major reads cleanly
as a folder name and covers each major's latest, including the floor major's,
which the range form dropped. Follows the shared resolver from #9019.

Widening the matrix to every major's latest surfaced several latent failures:

1. A bare-major key resolves to that major's newest version, so a range ending
   inside its top major overshoots: microgateway-core `>=2.1 <=3.0.0` keyed `3`
   installed 3.3.7 and the span came back `web.request` instead of
   `microgateway.request`. The top major keeps the declared range whenever it
   stops short of the major's ceiling; fully-spanned and lower majors stay bare.
2. `versions/ai@4` and `@langchain/core@0` resolve to versions that have no VCR
   cassette and would hit the live API (401). A central `brokenVersions`
   registry drops a matching resolved version and surfaces the reason as a
   pending test, each entry a stop-gap carrying a TODO.
3. A manifest carrying a `workspace:` protocol dependency was copied verbatim
   into a generated workspace, so yarn failed with "Couldn't find any versions
   for X that matches workspace:*". Fall back to the pinned compatible version.
4. The Apollo fetch-failure test gated the error span on `version > '2.3.0'`, a
   lexicographic compare that breaks once the key is bare (`'2' > '2.3.0'` is
   false). Compare the resolved version with `semver.gt`.
5. Single-digit keying renames folders that several specs hard-code by range
   (express, langchain, bedrock runtime, aws-sdk). The bedrock require threw
   after `agent.load` with no `agent.close`, leaving the Remote Config poll
   running and hanging the job to the 45-minute timeout; the others silently
   skipped suites. Point the requires at the renamed folders.
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