feat(remote-config): add an agentless fetcher constructor - #2456
Conversation
Consumers that require agentless remote config should not have to express that invariant through an optional mode flag. The generic constructor also keeps the agent path reachable in builds that never use it. Add a constructor that accepts validated agentless configuration directly while sharing the common fetcher state. Request-level tests pin endpoint selection for both the dedicated and generic constructors.
📚 Documentation Check Results📦
|
🔒 Cargo Deny Results📦
|
|
✅ All CI checks and tests passed. 🎉 All green!🧪 All tests passed 🎯 Code Coverage (details) 🔗 Commit SHA: 3bb89cf | Docs | View more details | Give us feedback! |
BenchmarksComparisonBenchmark execution time: 2026-09-03 11:41:04 Comparing candidate commit 3bb89cf in PR branch Found 0 performance improvements and 0 performance regressions! Performance is the same for 14 metrics, 0 unstable metrics.
|
| cpu_model | git_commit_sha | git_commit_date | git_branch |
|---|---|---|---|
| Intel(R) Xeon(R) Platinum 8259CL CPU @ 2.50GHz | 3bb89cf | 1788405086 | BridgeAR/2026-09-03-wasm-remote-agentless |
| scenario | metric | min | mean ± sd | median ± mad | p75 | p95 | p99 | max | peak_to_median_ratio | skewness | kurtosis | cv | sem | runs | sample_size |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| flagevaluation_evp/payloads/scale/2500flags_500users_20fields | execution_time | 21.548ms | 21.624ms ± 0.032ms | 21.622ms ± 0.021ms | 21.648ms | 21.677ms | 21.685ms | 21.692ms | 0.32% | -0.115 | -0.572 | 0.15% | 0.002ms | 1 | 200 |
| flagevaluation_evp/payloads/scale/2500flags_500users_20fields | throughput | 115247.893op/s | 115612.446op/s ± 171.432op/s | 115621.890op/s ± 112.386op/s | 115726.210op/s | 115916.679op/s | 115976.719op/s | 116017.722op/s | 0.34% | 0.122 | -0.569 | 0.15% | 12.122op/s | 1 | 200 |
| flagevaluation_evp/payloads/stress/10flags_1000users_250fields | execution_time | 102.328ms | 102.998ms ± 0.216ms | 102.968ms ± 0.054ms | 103.030ms | 103.417ms | 103.532ms | 105.037ms | 2.01% | 4.871 | 40.405 | 0.21% | 0.015ms | 1 | 200 |
| flagevaluation_evp/payloads/stress/10flags_1000users_250fields | throughput | 9520.445op/s | 9708.958op/s ± 20.185op/s | 9711.797op/s ± 5.131op/s | 9716.103op/s | 9729.203op/s | 9735.295op/s | 9772.526op/s | 0.63% | -4.755 | 39.015 | 0.21% | 1.427op/s | 1 | 200 |
| flagevaluation_evp/payloads/typical/100flags_50users_10fields | execution_time | 595.280µs | 596.998µs ± 0.865µs | 596.965µs ± 0.632µs | 597.636µs | 598.375µs | 599.103µs | 599.351µs | 0.40% | 0.281 | -0.505 | 0.14% | 0.061µs | 1 | 200 |
| flagevaluation_evp/payloads/typical/100flags_50users_10fields | throughput | 166847.194op/s | 167505.154op/s ± 242.688op/s | 167513.943op/s ± 177.396op/s | 167676.413op/s | 167880.274op/s | 167949.446op/s | 167988.222op/s | 0.28% | -0.274 | -0.511 | 0.14% | 17.161op/s | 1 | 200 |
| scenario | metric | 95% CI mean | Shapiro-Wilk pvalue | Ljung-Box pvalue (lag=1) | Dip test pvalue |
|---|---|---|---|---|---|
| flagevaluation_evp/payloads/scale/2500flags_500users_20fields | execution_time | [21.620ms; 21.628ms] or [-0.021%; +0.021%] | None | None | None |
| flagevaluation_evp/payloads/scale/2500flags_500users_20fields | throughput | [115588.687op/s; 115636.204op/s] or [-0.021%; +0.021%] | None | None | None |
| flagevaluation_evp/payloads/stress/10flags_1000users_250fields | execution_time | [102.968ms; 103.028ms] or [-0.029%; +0.029%] | None | None | None |
| flagevaluation_evp/payloads/stress/10flags_1000users_250fields | throughput | [9706.160op/s; 9711.755op/s] or [-0.029%; +0.029%] | None | None | None |
| flagevaluation_evp/payloads/typical/100flags_50users_10fields | execution_time | [596.878µs; 597.118µs] or [-0.020%; +0.020%] | None | None | None |
| flagevaluation_evp/payloads/typical/100flags_50users_10fields | throughput | [167471.520op/s; 167538.788op/s] or [-0.020%; +0.020%] | None | None | None |
Group 2
| cpu_model | git_commit_sha | git_commit_date | git_branch |
|---|---|---|---|
| Intel(R) Xeon(R) Platinum 8259CL CPU @ 2.50GHz | 3bb89cf | 1788405086 | BridgeAR/2026-09-03-wasm-remote-agentless |
| scenario | metric | min | mean ± sd | median ± mad | p75 | p95 | p99 | max | peak_to_median_ratio | skewness | kurtosis | cv | sem | runs | sample_size |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| single_flag_killswitch/rules-based | execution_time | 157.023ns | 160.045ns ± 2.384ns | 159.581ns ± 1.752ns | 161.537ns | 164.511ns | 166.728ns | 171.905ns | 7.72% | 1.212 | 2.508 | 1.49% | 0.169ns | 1 | 200 |
| scenario | metric | 95% CI mean | Shapiro-Wilk pvalue | Ljung-Box pvalue (lag=1) | Dip test pvalue |
|---|---|---|---|---|---|
| single_flag_killswitch/rules-based | execution_time | [159.714ns; 160.375ns] or [-0.206%; +0.206%] | None | None | None |
Group 3
| cpu_model | git_commit_sha | git_commit_date | git_branch |
|---|---|---|---|
| Intel(R) Xeon(R) Platinum 8259CL CPU @ 2.50GHz | 3bb89cf | 1788405086 | BridgeAR/2026-09-03-wasm-remote-agentless |
| scenario | metric | min | mean ± sd | median ± mad | p75 | p95 | p99 | max | peak_to_median_ratio | skewness | kurtosis | cv | sem | runs | sample_size |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| sdk_test_data/rules-based | execution_time | 259.311µs | 265.079µs ± 12.300µs | 262.118µs ± 1.022µs | 263.808µs | 278.122µs | 310.068µs | 393.717µs | 50.21% | 7.191 | 63.900 | 4.63% | 0.870µs | 1 | 200 |
| scenario | metric | 95% CI mean | Shapiro-Wilk pvalue | Ljung-Box pvalue (lag=1) | Dip test pvalue |
|---|---|---|---|---|---|
| sdk_test_data/rules-based | execution_time | [263.375µs; 266.784µs] or [-0.643%; +0.643%] | None | None | None |
Group 4
| cpu_model | git_commit_sha | git_commit_date | git_branch |
|---|---|---|---|
| Intel(R) Xeon(R) Platinum 8259CL CPU @ 2.50GHz | 3bb89cf | 1788405086 | BridgeAR/2026-09-03-wasm-remote-agentless |
| scenario | metric | min | mean ± sd | median ± mad | p75 | p95 | p99 | max | peak_to_median_ratio | skewness | kurtosis | cv | sem | runs | sample_size |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| flagevaluation_evp/coalescer/scale/2500flags_500users_20fields | execution_time | 5.405ms | 5.427ms ± 0.019ms | 5.426ms ± 0.005ms | 5.431ms | 5.439ms | 5.446ms | 5.668ms | 4.46% | 10.982 | 140.248 | 0.34% | 0.001ms | 1 | 200 |
| flagevaluation_evp/coalescer/scale/2500flags_500users_20fields | throughput | 441065.218op/s | 460629.258op/s ± 1517.978op/s | 460739.256op/s ± 407.483op/s | 461130.078op/s | 461686.393op/s | 462216.750op/s | 462566.826op/s | 0.40% | -10.759 | 136.449 | 0.33% | 107.337op/s | 1 | 200 |
| flagevaluation_evp/coalescer/stress/10flags_1000users_250fields | execution_time | 7.948ms | 7.978ms ± 0.009ms | 7.977ms ± 0.005ms | 7.983ms | 7.992ms | 8.008ms | 8.020ms | 0.54% | 0.759 | 3.493 | 0.12% | 0.001ms | 1 | 200 |
| flagevaluation_evp/coalescer/stress/10flags_1000users_250fields | throughput | 124691.067op/s | 125347.128op/s ± 144.706op/s | 125365.967op/s ± 72.624op/s | 125424.579op/s | 125568.642op/s | 125696.486op/s | 125812.186op/s | 0.36% | -0.742 | 3.450 | 0.12% | 10.232op/s | 1 | 200 |
| flagevaluation_evp/coalescer/typical/100flags_50users_10fields | execution_time | 181.384µs | 187.269µs ± 38.926µs | 184.364µs ± 0.374µs | 184.958µs | 185.715µs | 186.568µs | 734.917µs | 298.62% | 14.028 | 194.868 | 20.73% | 2.752µs | 1 | 200 |
| flagevaluation_evp/coalescer/typical/100flags_50users_10fields | throughput | 136069.787op/s | 539935.013op/s ± 28779.901op/s | 542405.939op/s ± 1099.956op/s | 543294.291op/s | 544047.644op/s | 549687.973op/s | 551316.924op/s | 1.64% | -13.920 | 192.845 | 5.32% | 2035.046op/s | 1 | 200 |
| scenario | metric | 95% CI mean | Shapiro-Wilk pvalue | Ljung-Box pvalue (lag=1) | Dip test pvalue |
|---|---|---|---|---|---|
| flagevaluation_evp/coalescer/scale/2500flags_500users_20fields | execution_time | [5.425ms; 5.430ms] or [-0.047%; +0.047%] | None | None | None |
| flagevaluation_evp/coalescer/scale/2500flags_500users_20fields | throughput | [460418.880op/s; 460839.635op/s] or [-0.046%; +0.046%] | None | None | None |
| flagevaluation_evp/coalescer/stress/10flags_1000users_250fields | execution_time | [7.977ms; 7.979ms] or [-0.016%; +0.016%] | None | None | None |
| flagevaluation_evp/coalescer/stress/10flags_1000users_250fields | throughput | [125327.073op/s; 125367.183op/s] or [-0.016%; +0.016%] | None | None | None |
| flagevaluation_evp/coalescer/typical/100flags_50users_10fields | execution_time | [181.874µs; 192.664µs] or [-2.881%; +2.881%] | None | None | None |
| flagevaluation_evp/coalescer/typical/100flags_50users_10fields | throughput | [535946.395op/s; 543923.630op/s] or [-0.739%; +0.739%] | None | None | None |
Baseline
Baseline benchmark details
Group 1
| cpu_model | git_commit_sha | git_commit_date | git_branch |
|---|---|---|---|
| Intel(R) Xeon(R) Platinum 8259CL CPU @ 2.50GHz | efbbf4c | 1788373668 | main |
| scenario | metric | min | mean ± sd | median ± mad | p75 | p95 | p99 | max | peak_to_median_ratio | skewness | kurtosis | cv | sem | runs | sample_size |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| flagevaluation_evp/payloads/scale/2500flags_500users_20fields | execution_time | 21.691ms | 21.846ms ± 0.076ms | 21.846ms ± 0.056ms | 21.902ms | 21.960ms | 22.002ms | 22.024ms | 0.82% | -0.030 | -0.678 | 0.34% | 0.005ms | 1 | 200 |
| flagevaluation_evp/payloads/scale/2500flags_500users_20fields | throughput | 113513.014op/s | 114439.579op/s ± 395.692op/s | 114438.669op/s ± 290.821op/s | 114714.653op/s | 115110.905op/s | 115202.481op/s | 115253.366op/s | 0.71% | 0.044 | -0.680 | 0.34% | 27.980op/s | 1 | 200 |
| flagevaluation_evp/payloads/stress/10flags_1000users_250fields | execution_time | 103.275ms | 103.496ms ± 0.263ms | 103.498ms ± 0.093ms | 103.566ms | 103.622ms | 103.683ms | 106.895ms | 3.28% | 10.893 | 138.815 | 0.25% | 0.019ms | 1 | 200 |
| flagevaluation_evp/payloads/stress/10flags_1000users_250fields | throughput | 9354.952op/s | 9662.225op/s ± 23.861op/s | 9662.059op/s ± 8.638op/s | 9672.561op/s | 9678.827op/s | 9680.192op/s | 9682.856op/s | 0.22% | -10.724 | 135.937 | 0.25% | 1.687op/s | 1 | 200 |
| flagevaluation_evp/payloads/typical/100flags_50users_10fields | execution_time | 594.187µs | 595.242µs ± 0.494µs | 595.219µs ± 0.331µs | 595.579µs | 596.018µs | 596.514µs | 596.699µs | 0.25% | 0.282 | 0.051 | 0.08% | 0.035µs | 1 | 200 |
| flagevaluation_evp/payloads/typical/100flags_50users_10fields | throughput | 167588.567op/s | 167999.029op/s ± 139.408op/s | 168005.514op/s ± 93.354op/s | 168096.214op/s | 168220.168op/s | 168276.881op/s | 168297.303op/s | 0.17% | -0.277 | 0.046 | 0.08% | 9.858op/s | 1 | 200 |
| scenario | metric | 95% CI mean | Shapiro-Wilk pvalue | Ljung-Box pvalue (lag=1) | Dip test pvalue |
|---|---|---|---|---|---|
| flagevaluation_evp/payloads/scale/2500flags_500users_20fields | execution_time | [21.835ms; 21.856ms] or [-0.048%; +0.048%] | None | None | None |
| flagevaluation_evp/payloads/scale/2500flags_500users_20fields | throughput | [114384.740op/s; 114494.419op/s] or [-0.048%; +0.048%] | None | None | None |
| flagevaluation_evp/payloads/stress/10flags_1000users_250fields | execution_time | [103.460ms; 103.533ms] or [-0.035%; +0.035%] | None | None | None |
| flagevaluation_evp/payloads/stress/10flags_1000users_250fields | throughput | [9658.918op/s; 9665.532op/s] or [-0.034%; +0.034%] | None | None | None |
| flagevaluation_evp/payloads/typical/100flags_50users_10fields | execution_time | [595.173µs; 595.310µs] or [-0.012%; +0.012%] | None | None | None |
| flagevaluation_evp/payloads/typical/100flags_50users_10fields | throughput | [167979.709op/s; 168018.350op/s] or [-0.012%; +0.012%] | None | None | None |
Group 2
| cpu_model | git_commit_sha | git_commit_date | git_branch |
|---|---|---|---|
| Intel(R) Xeon(R) Platinum 8259CL CPU @ 2.50GHz | efbbf4c | 1788373668 | main |
| scenario | metric | min | mean ± sd | median ± mad | p75 | p95 | p99 | max | peak_to_median_ratio | skewness | kurtosis | cv | sem | runs | sample_size |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| single_flag_killswitch/rules-based | execution_time | 157.054ns | 159.794ns ± 2.221ns | 159.333ns ± 1.217ns | 160.462ns | 164.328ns | 166.556ns | 169.651ns | 6.48% | 1.493 | 2.746 | 1.39% | 0.157ns | 1 | 200 |
| scenario | metric | 95% CI mean | Shapiro-Wilk pvalue | Ljung-Box pvalue (lag=1) | Dip test pvalue |
|---|---|---|---|---|---|
| single_flag_killswitch/rules-based | execution_time | [159.486ns; 160.102ns] or [-0.193%; +0.193%] | None | None | None |
Group 3
| cpu_model | git_commit_sha | git_commit_date | git_branch |
|---|---|---|---|
| Intel(R) Xeon(R) Platinum 8259CL CPU @ 2.50GHz | efbbf4c | 1788373668 | main |
| scenario | metric | min | mean ± sd | median ± mad | p75 | p95 | p99 | max | peak_to_median_ratio | skewness | kurtosis | cv | sem | runs | sample_size |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| sdk_test_data/rules-based | execution_time | 259.859µs | 265.256µs ± 11.949µs | 262.406µs ± 1.088µs | 263.900µs | 276.633µs | 313.851µs | 388.969µs | 48.23% | 7.112 | 62.068 | 4.49% | 0.845µs | 1 | 200 |
| scenario | metric | 95% CI mean | Shapiro-Wilk pvalue | Ljung-Box pvalue (lag=1) | Dip test pvalue |
|---|---|---|---|---|---|
| sdk_test_data/rules-based | execution_time | [263.600µs; 266.912µs] or [-0.624%; +0.624%] | None | None | None |
Group 4
| cpu_model | git_commit_sha | git_commit_date | git_branch |
|---|---|---|---|
| Intel(R) Xeon(R) Platinum 8259CL CPU @ 2.50GHz | efbbf4c | 1788373668 | main |
| scenario | metric | min | mean ± sd | median ± mad | p75 | p95 | p99 | max | peak_to_median_ratio | skewness | kurtosis | cv | sem | runs | sample_size |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| flagevaluation_evp/coalescer/scale/2500flags_500users_20fields | execution_time | 5.368ms | 5.390ms ± 0.017ms | 5.389ms ± 0.005ms | 5.394ms | 5.400ms | 5.403ms | 5.613ms | 4.15% | 10.904 | 139.230 | 0.32% | 0.001ms | 1 | 200 |
| flagevaluation_evp/coalescer/scale/2500flags_500users_20fields | throughput | 445414.637op/s | 463801.305op/s ± 1428.730op/s | 463897.577op/s ± 439.100op/s | 464294.025op/s | 464873.802op/s | 465275.792op/s | 465760.263op/s | 0.40% | -10.690 | 135.611 | 0.31% | 101.026op/s | 1 | 200 |
| flagevaluation_evp/coalescer/stress/10flags_1000users_250fields | execution_time | 7.945ms | 7.958ms ± 0.007ms | 7.957ms ± 0.004ms | 7.961ms | 7.969ms | 7.981ms | 7.996ms | 0.49% | 1.790 | 6.771 | 0.09% | 0.000ms | 1 | 200 |
| flagevaluation_evp/coalescer/stress/10flags_1000users_250fields | throughput | 125065.868op/s | 125664.050op/s ± 106.941op/s | 125675.348op/s ± 59.636op/s | 125731.694op/s | 125800.264op/s | 125832.409op/s | 125872.876op/s | 0.16% | -1.776 | 6.687 | 0.08% | 7.562op/s | 1 | 200 |
| flagevaluation_evp/coalescer/typical/100flags_50users_10fields | execution_time | 179.211µs | 182.379µs ± 0.752µs | 182.200µs ± 0.398µs | 182.826µs | 183.702µs | 184.620µs | 184.677µs | 1.36% | 0.494 | 1.649 | 0.41% | 0.053µs | 1 | 200 |
| flagevaluation_evp/coalescer/typical/100flags_50users_10fields | throughput | 541486.365op/s | 548316.506op/s ± 2255.123op/s | 548847.631op/s ± 1200.728op/s | 549999.004op/s | 550604.327op/s | 551214.616op/s | 558000.424op/s | 1.67% | -0.451 | 1.721 | 0.41% | 159.461op/s | 1 | 200 |
| scenario | metric | 95% CI mean | Shapiro-Wilk pvalue | Ljung-Box pvalue (lag=1) | Dip test pvalue |
|---|---|---|---|---|---|
| flagevaluation_evp/coalescer/scale/2500flags_500users_20fields | execution_time | [5.388ms; 5.393ms] or [-0.044%; +0.044%] | None | None | None |
| flagevaluation_evp/coalescer/scale/2500flags_500users_20fields | throughput | [463603.297op/s; 463999.313op/s] or [-0.043%; +0.043%] | None | None | None |
| flagevaluation_evp/coalescer/stress/10flags_1000users_250fields | execution_time | [7.957ms; 7.959ms] or [-0.012%; +0.012%] | None | None | None |
| flagevaluation_evp/coalescer/stress/10flags_1000users_250fields | throughput | [125649.229op/s; 125678.871op/s] or [-0.012%; +0.012%] | None | None | None |
| flagevaluation_evp/coalescer/typical/100flags_50users_10fields | execution_time | [182.275µs; 182.484µs] or [-0.057%; +0.057%] | None | None | None |
| flagevaluation_evp/coalescer/typical/100flags_50users_10fields | throughput | [548003.968op/s; 548629.044op/s] or [-0.057%; +0.057%] | None | None | None |
Artifact Size Benchmark Reportaarch64-alpine-linux-musl
aarch64-unknown-linux-gnu
libdatadog-x64-windows
libdatadog-x86-windows
x86_64-alpine-linux-musl
x86_64-unknown-linux-gnu
|
What does this PR do?
Adds an explicit agentless constructor for the single-target remote-config fetcher.
Motivation
Consumers with an agentless-only contract should not express it through an optional mode flag or retain generic transport dispatch.
Additional Notes
The libdatadog-nodejs consumer pins commit
3bb89cfd2ce3c6f4ee3e4009c74a77e4cf89adf8.How to test the change?
Run the remote-config tests, all-feature Clippy, and the no-default-features agentless check.