Skip to content

[Dynamic Instrumentation] DEBUG-4142 Subscribe to settings change in the debugger manager#8048

Merged
dudikeleti merged 2 commits intomasterfrom
dudik/subscribe-settings-update
Jan 15, 2026
Merged

[Dynamic Instrumentation] DEBUG-4142 Subscribe to settings change in the debugger manager#8048
dudikeleti merged 2 commits intomasterfrom
dudik/subscribe-settings-update

Conversation

@dudikeleti
Copy link
Contributor

Reason for change

Dynamic Instrumentation (and other debugger products) previously used the tracer’s initial/fallback service name when the user didn’t set DD_SERVICE via environment/config, even if the user later set the service name in code. This caused debugger payloads (snapshots/diagnostics) to be attributed to the wrong service.
This change ensures debugger products track the current tracer service name and behave consistently with the tracer configuration.

Implementation details

DebuggerManager subscribes to TracerSettings.SettingsManager.SubscribeToChanges(...) and updates ServiceName whenever MutableSettings changes.
Debugger components that need the service name use a Func provider so they read the latest value when emitting data.

Test coverage

Added a debugger integration test validating service-name updates via code:
New sample test-run: ChangeServiceNameInCodeTest emits one snapshot before and one snapshot after calling Tracer.Configure(...) with a new ServiceName.
New integration test: ServiceNameChangedInCode_IsReflectedInSnapshots installs two probes, collects two snapshots, and asserts:
the “before” snapshot has a default service name (exe name)
the “after” snapshot has service from code

Other details

Not supported in this PR
DogStatsD / metric probes: service name updates are not currently propagated to the DogStatsD client used by debugger metric probes.

Symbol uploader: the symbol uploader intentionally captures the service name on first use and keeps it fixed for the uploader’s lifetime to avoid mixing symbols across services. Supporting service name changes there would require stopping/recreating the uploader (expensive) and is deferred until there’s an explicit requirement.

@dudikeleti dudikeleti requested a review from a team as a code owner January 12, 2026 14:53
@dudikeleti dudikeleti requested a review from andrewlock January 12, 2026 14:53
Copy link

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

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: fdbdf39f8e

ℹ️ About Codex in GitHub

Your team has set up Codex to 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 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

Comment on lines +56 to 59
var next = new ProbeStatus(_serviceNameProvider(), probeId, status, probeVersion, exception, errorMessage);
var timedMessage = new TimedMessage
{
LastEmit = Clock.UtcNow,

Choose a reason for hiding this comment

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

P2 Badge Refresh diagnostics service name on re-emit

When the service name changes at runtime (e.g., Tracer.Configure(...)), AddProbeStatus captures the service name once and stores the ProbeStatus in _diagnostics, but GetDiagnostics later re-emits the cached ProbeStatus without refreshing the service field. That means probes installed before a service-name change will keep sending diagnostic statuses under the old service indefinitely unless a new status is generated, which is inconsistent with the stated goal of tracking the current tracer service name. Consider updating cached entries on service-name change or rebuilding the ProbeStatus on each emission.

Useful? React with 👍 / 👎.

@datadog-datadog-prod-us1

This comment has been minimized.

@dd-trace-dotnet-ci-bot
Copy link

dd-trace-dotnet-ci-bot bot commented Jan 12, 2026

Execution-Time Benchmarks Report ⏱️

Execution-time results for samples comparing This PR (8048) and master.

✅ No regressions detected - check the details below

Full Metrics Comparison

FakeDbCommand

Metric Master (Mean ± 95% CI) Current (Mean ± 95% CI) Change Status
.NET Framework 4.8 - Baseline
duration68.24 ± (68.26 - 68.48) ms68.53 ± (68.57 - 68.81) ms+0.4%✅⬆️
.NET Framework 4.8 - Bailout
duration72.24 ± (72.14 - 72.39) ms72.30 ± (72.23 - 72.46) ms+0.1%✅⬆️
.NET Framework 4.8 - CallTarget+Inlining+NGEN
duration996.61 ± (1002.81 - 1012.49) ms1001.27 ± (1008.31 - 1018.52) ms+0.5%✅⬆️
.NET Core 3.1 - Baseline
process.internal_duration_ms21.89 ± (21.86 - 21.91) ms22.04 ± (22.00 - 22.08) ms+0.7%✅⬆️
process.time_to_main_ms78.35 ± (78.20 - 78.51) ms78.80 ± (78.65 - 78.96) ms+0.6%✅⬆️
runtime.dotnet.exceptions.count0 ± (0 - 0)0 ± (0 - 0)+0.0%
runtime.dotnet.mem.committed10.90 ± (10.89 - 10.90) MB10.89 ± (10.89 - 10.90) MB-0.0%
runtime.dotnet.threads.count12 ± (12 - 12)12 ± (12 - 12)+0.0%
.NET Core 3.1 - Bailout
process.internal_duration_ms21.76 ± (21.74 - 21.78) ms22.03 ± (22.00 - 22.05) ms+1.2%✅⬆️
process.time_to_main_ms79.61 ± (79.51 - 79.71) ms79.68 ± (79.59 - 79.77) ms+0.1%✅⬆️
runtime.dotnet.exceptions.count0 ± (0 - 0)0 ± (0 - 0)+0.0%
runtime.dotnet.mem.committed10.93 ± (10.92 - 10.93) MB10.93 ± (10.92 - 10.93) MB+0.0%✅⬆️
runtime.dotnet.threads.count13 ± (13 - 13)13 ± (13 - 13)+0.0%
.NET Core 3.1 - CallTarget+Inlining+NGEN
process.internal_duration_ms255.09 ± (252.74 - 257.43) ms252.54 ± (249.39 - 255.70) ms-1.0%
process.time_to_main_ms466.42 ± (466.00 - 466.84) ms470.88 ± (470.21 - 471.55) ms+1.0%✅⬆️
runtime.dotnet.exceptions.count0 ± (0 - 0)0 ± (0 - 0)+0.0%
runtime.dotnet.mem.committed48.35 ± (48.33 - 48.38) MB48.39 ± (48.37 - 48.41) MB+0.1%✅⬆️
runtime.dotnet.threads.count28 ± (28 - 28)28 ± (28 - 28)+0.1%✅⬆️
.NET 6 - Baseline
process.internal_duration_ms20.59 ± (20.56 - 20.61) ms20.55 ± (20.52 - 20.58) ms-0.2%
process.time_to_main_ms68.05 ± (67.94 - 68.16) ms68.13 ± (67.98 - 68.28) ms+0.1%✅⬆️
runtime.dotnet.exceptions.count0 ± (0 - 0)0 ± (0 - 0)+0.0%
runtime.dotnet.mem.committed10.63 ± (10.62 - 10.63) MB10.63 ± (10.63 - 10.63) MB+0.0%✅⬆️
runtime.dotnet.threads.count10 ± (10 - 10)10 ± (10 - 10)+0.0%
.NET 6 - Bailout
process.internal_duration_ms20.43 ± (20.41 - 20.46) ms20.47 ± (20.45 - 20.49) ms+0.2%✅⬆️
process.time_to_main_ms68.74 ± (68.68 - 68.80) ms68.90 ± (68.85 - 68.95) ms+0.2%✅⬆️
runtime.dotnet.exceptions.count0 ± (0 - 0)0 ± (0 - 0)+0.0%
runtime.dotnet.mem.committed10.67 ± (10.66 - 10.67) MB10.74 ± (10.73 - 10.76) MB+0.7%✅⬆️
runtime.dotnet.threads.count11 ± (11 - 11)11 ± (11 - 11)+0.0%
.NET 6 - CallTarget+Inlining+NGEN
process.internal_duration_ms248.57 ± (247.20 - 249.95) ms248.58 ± (247.04 - 250.13) ms+0.0%✅⬆️
process.time_to_main_ms443.30 ± (442.93 - 443.68) ms444.07 ± (443.63 - 444.51) ms+0.2%✅⬆️
runtime.dotnet.exceptions.count0 ± (0 - 0)0 ± (0 - 0)+0.0%
runtime.dotnet.mem.committed49.16 ± (49.13 - 49.19) MB49.11 ± (49.08 - 49.14) MB-0.1%
runtime.dotnet.threads.count28 ± (28 - 28)28 ± (28 - 28)-0.1%
.NET 8 - Baseline
process.internal_duration_ms18.75 ± (18.72 - 18.78) ms18.82 ± (18.80 - 18.85) ms+0.4%✅⬆️
process.time_to_main_ms66.96 ± (66.84 - 67.08) ms67.21 ± (67.11 - 67.32) ms+0.4%✅⬆️
runtime.dotnet.exceptions.count0 ± (0 - 0)0 ± (0 - 0)+0.0%
runtime.dotnet.mem.committed7.66 ± (7.65 - 7.67) MB7.68 ± (7.67 - 7.69) MB+0.3%✅⬆️
runtime.dotnet.threads.count10 ± (10 - 10)10 ± (10 - 10)+0.0%
.NET 8 - Bailout
process.internal_duration_ms18.74 ± (18.72 - 18.76) ms18.87 ± (18.84 - 18.89) ms+0.7%✅⬆️
process.time_to_main_ms68.20 ± (68.14 - 68.26) ms68.25 ± (68.18 - 68.32) ms+0.1%✅⬆️
runtime.dotnet.exceptions.count0 ± (0 - 0)0 ± (0 - 0)+0.0%
runtime.dotnet.mem.committed7.75 ± (7.74 - 7.77) MB7.72 ± (7.71 - 7.73) MB-0.5%
runtime.dotnet.threads.count11 ± (11 - 11)11 ± (11 - 11)+0.0%
.NET 8 - CallTarget+Inlining+NGEN
process.internal_duration_ms178.23 ± (177.38 - 179.08) ms176.71 ± (175.83 - 177.59) ms-0.9%
process.time_to_main_ms427.13 ± (426.52 - 427.74) ms429.21 ± (428.56 - 429.87) ms+0.5%✅⬆️
runtime.dotnet.exceptions.count0 ± (0 - 0)0 ± (0 - 0)+0.0%
runtime.dotnet.mem.committed36.55 ± (36.52 - 36.57) MB36.58 ± (36.55 - 36.61) MB+0.1%✅⬆️
runtime.dotnet.threads.count27 ± (27 - 27)27 ± (27 - 27)+0.1%✅⬆️

HttpMessageHandler

Metric Master (Mean ± 95% CI) Current (Mean ± 95% CI) Change Status
.NET Framework 4.8 - Baseline
duration193.61 ± (193.56 - 194.43) ms192.27 ± (192.39 - 193.20) ms-0.7%
.NET Framework 4.8 - Bailout
duration197.45 ± (197.34 - 198.18) ms196.54 ± (196.34 - 196.81) ms-0.5%
.NET Framework 4.8 - CallTarget+Inlining+NGEN
duration1118.85 ± (1121.18 - 1129.14) ms1118.44 ± (1121.74 - 1130.50) ms-0.0%
.NET Core 3.1 - Baseline
process.internal_duration_ms187.74 ± (187.34 - 188.14) ms187.92 ± (187.60 - 188.24) ms+0.1%✅⬆️
process.time_to_main_ms80.96 ± (80.75 - 81.17) ms81.23 ± (80.98 - 81.48) ms+0.3%✅⬆️
runtime.dotnet.exceptions.count3 ± (3 - 3)3 ± (3 - 3)+0.0%
runtime.dotnet.mem.committed16.07 ± (16.05 - 16.10) MB16.18 ± (16.15 - 16.22) MB+0.7%✅⬆️
runtime.dotnet.threads.count20 ± (19 - 20)20 ± (19 - 20)+0.3%✅⬆️
.NET Core 3.1 - Bailout
process.internal_duration_ms186.06 ± (185.75 - 186.37) ms187.25 ± (186.87 - 187.62) ms+0.6%✅⬆️
process.time_to_main_ms82.30 ± (82.16 - 82.45) ms82.27 ± (82.11 - 82.42) ms-0.0%
runtime.dotnet.exceptions.count3 ± (3 - 3)3 ± (3 - 3)+0.0%
runtime.dotnet.mem.committed16.13 ± (16.11 - 16.16) MB16.16 ± (16.14 - 16.18) MB+0.2%✅⬆️
runtime.dotnet.threads.count21 ± (21 - 21)21 ± (20 - 21)-0.2%
.NET Core 3.1 - CallTarget+Inlining+NGEN
process.internal_duration_ms436.15 ± (433.19 - 439.11) ms435.09 ± (432.43 - 437.75) ms-0.2%
process.time_to_main_ms473.25 ± (472.71 - 473.78) ms472.49 ± (471.89 - 473.09) ms-0.2%
runtime.dotnet.exceptions.count3 ± (3 - 3)3 ± (3 - 3)+0.0%
runtime.dotnet.mem.committed58.70 ± (58.59 - 58.81) MB58.73 ± (58.61 - 58.85) MB+0.1%✅⬆️
runtime.dotnet.threads.count29 ± (29 - 29)29 ± (29 - 29)+0.1%✅⬆️
.NET 6 - Baseline
process.internal_duration_ms191.92 ± (191.52 - 192.31) ms191.95 ± (191.62 - 192.27) ms+0.0%✅⬆️
process.time_to_main_ms70.07 ± (69.90 - 70.24) ms69.86 ± (69.65 - 70.07) ms-0.3%
runtime.dotnet.exceptions.count4 ± (4 - 4)4 ± (4 - 4)+0.0%
runtime.dotnet.mem.committed16.28 ± (16.17 - 16.38) MB16.39 ± (16.36 - 16.42) MB+0.7%✅⬆️
runtime.dotnet.threads.count18 ± (18 - 18)19 ± (19 - 19)+3.8%✅⬆️
.NET 6 - Bailout
process.internal_duration_ms191.12 ± (190.84 - 191.40) ms190.72 ± (190.37 - 191.06) ms-0.2%
process.time_to_main_ms71.06 ± (70.95 - 71.17) ms70.77 ± (70.64 - 70.91) ms-0.4%
runtime.dotnet.exceptions.count4 ± (4 - 4)4 ± (4 - 4)+0.0%
runtime.dotnet.mem.committed16.07 ± (15.92 - 16.22) MB15.91 ± (15.73 - 16.08) MB-1.0%
runtime.dotnet.threads.count19 ± (19 - 19)19 ± (19 - 19)-0.4%
.NET 6 - CallTarget+Inlining+NGEN
process.internal_duration_ms449.12 ± (446.33 - 451.91) ms446.55 ± (443.28 - 449.83) ms-0.6%
process.time_to_main_ms450.50 ± (450.01 - 450.99) ms450.29 ± (449.79 - 450.78) ms-0.0%
runtime.dotnet.exceptions.count4 ± (4 - 4)4 ± (4 - 4)+0.0%
runtime.dotnet.mem.committed58.75 ± (58.64 - 58.87) MB58.71 ± (58.57 - 58.85) MB-0.1%
runtime.dotnet.threads.count29 ± (29 - 29)29 ± (29 - 29)+0.2%✅⬆️
.NET 8 - Baseline
process.internal_duration_ms189.85 ± (189.47 - 190.22) ms189.97 ± (189.60 - 190.35) ms+0.1%✅⬆️
process.time_to_main_ms69.73 ± (69.55 - 69.92) ms69.77 ± (69.58 - 69.97) ms+0.1%✅⬆️
runtime.dotnet.exceptions.count4 ± (4 - 4)4 ± (4 - 4)+0.0%
runtime.dotnet.mem.committed11.81 ± (11.78 - 11.83) MB11.75 ± (11.73 - 11.78) MB-0.5%
runtime.dotnet.threads.count18 ± (18 - 18)18 ± (18 - 18)+0.6%✅⬆️
.NET 8 - Bailout
process.internal_duration_ms189.18 ± (188.95 - 189.42) ms188.69 ± (188.40 - 188.98) ms-0.3%
process.time_to_main_ms71.07 ± (70.92 - 71.21) ms70.69 ± (70.57 - 70.80) ms-0.5%
runtime.dotnet.exceptions.count4 ± (4 - 4)4 ± (4 - 4)+0.0%
runtime.dotnet.mem.committed11.91 ± (11.86 - 11.97) MB11.84 ± (11.80 - 11.88) MB-0.6%
runtime.dotnet.threads.count19 ± (19 - 19)19 ± (19 - 19)+0.3%✅⬆️
.NET 8 - CallTarget+Inlining+NGEN
process.internal_duration_ms364.75 ± (363.12 - 366.39) ms367.72 ± (366.30 - 369.15) ms+0.8%✅⬆️
process.time_to_main_ms433.95 ± (433.20 - 434.71) ms435.34 ± (434.73 - 435.95) ms+0.3%✅⬆️
runtime.dotnet.exceptions.count4 ± (4 - 4)4 ± (4 - 4)+0.0%
runtime.dotnet.mem.committed48.16 ± (48.11 - 48.21) MB48.14 ± (48.09 - 48.18) MB-0.0%
runtime.dotnet.threads.count29 ± (29 - 29)29 ± (29 - 29)-0.6%
Comparison explanation

Execution-time benchmarks measure the whole time it takes to execute a program, and are intended to measure the one-off costs. Cases where the execution time results for the PR are worse than latest master results are highlighted in **red**. The following thresholds were used for comparing the execution times:

  • Welch test with statistical test for significance of 5%
  • Only results indicating a difference greater than 5% and 5 ms are considered.

Note that these results are based on a single point-in-time result for each branch. For full results, see the dashboard.

Graphs show the p99 interval based on the mean and StdDev of the test run, as well as the mean value of the run (shown as a diamond below the graph).

Duration charts
FakeDbCommand (.NET Framework 4.8)
gantt
    title Execution time (ms) FakeDbCommand (.NET Framework 4.8)
    dateFormat  x
    axisFormat %Q
    todayMarker off
    section Baseline
    This PR (8048) - mean (69ms)  : 67, 70
    master - mean (68ms)  : 67, 70

    section Bailout
    This PR (8048) - mean (72ms)  : 71, 73
    master - mean (72ms)  : 71, 73

    section CallTarget+Inlining+NGEN
    This PR (8048) - mean (1,013ms)  : 941, 1086
    master - mean (1,008ms)  : 937, 1078

Loading
FakeDbCommand (.NET Core 3.1)
gantt
    title Execution time (ms) FakeDbCommand (.NET Core 3.1)
    dateFormat  x
    axisFormat %Q
    todayMarker off
    section Baseline
    This PR (8048) - mean (106ms)  : 104, 109
    master - mean (105ms)  : 103, 108

    section Bailout
    This PR (8048) - mean (107ms)  : 105, 108
    master - mean (106ms)  : 105, 108

    section CallTarget+Inlining+NGEN
    This PR (8048) - mean (747ms)  : 697, 798
    master - mean (744ms)  : 704, 784

Loading
FakeDbCommand (.NET 6)
gantt
    title Execution time (ms) FakeDbCommand (.NET 6)
    dateFormat  x
    axisFormat %Q
    todayMarker off
    section Baseline
    This PR (8048) - mean (93ms)  : 91, 96
    master - mean (93ms)  : 91, 96

    section Bailout
    This PR (8048) - mean (94ms)  : 93, 95
    master - mean (94ms)  : 93, 95

    section CallTarget+Inlining+NGEN
    This PR (8048) - mean (717ms)  : 691, 744
    master - mean (714ms)  : 687, 742

Loading
FakeDbCommand (.NET 8)
gantt
    title Execution time (ms) FakeDbCommand (.NET 8)
    dateFormat  x
    axisFormat %Q
    todayMarker off
    section Baseline
    This PR (8048) - mean (92ms)  : 90, 94
    master - mean (92ms)  : 89, 94

    section Bailout
    This PR (8048) - mean (93ms)  : 92, 94
    master - mean (93ms)  : 92, 94

    section CallTarget+Inlining+NGEN
    This PR (8048) - mean (632ms)  : 619, 646
    master - mean (633ms)  : 619, 647

Loading
HttpMessageHandler (.NET Framework 4.8)
gantt
    title Execution time (ms) HttpMessageHandler (.NET Framework 4.8)
    dateFormat  x
    axisFormat %Q
    todayMarker off
    section Baseline
    This PR (8048) - mean (193ms)  : 189, 197
    master - mean (194ms)  : 189, 199

    section Bailout
    This PR (8048) - mean (197ms)  : 194, 199
    master - mean (198ms)  : 194, 202

    section CallTarget+Inlining+NGEN
    This PR (8048) - mean (1,126ms)  : 1061, 1191
    master - mean (1,125ms)  : 1067, 1183

Loading
HttpMessageHandler (.NET Core 3.1)
gantt
    title Execution time (ms) HttpMessageHandler (.NET Core 3.1)
    dateFormat  x
    axisFormat %Q
    todayMarker off
    section Baseline
    This PR (8048) - mean (277ms)  : 272, 283
    master - mean (277ms)  : 271, 283

    section Bailout
    This PR (8048) - mean (278ms)  : 273, 282
    master - mean (277ms)  : 273, 280

    section CallTarget+Inlining+NGEN
    This PR (8048) - mean (936ms)  : 897, 975
    master - mean (936ms)  : 894, 979

Loading
HttpMessageHandler (.NET 6)
gantt
    title Execution time (ms) HttpMessageHandler (.NET 6)
    dateFormat  x
    axisFormat %Q
    todayMarker off
    section Baseline
    This PR (8048) - mean (270ms)  : 265, 275
    master - mean (271ms)  : 262, 279

    section Bailout
    This PR (8048) - mean (269ms)  : 266, 273
    master - mean (270ms)  : 266, 275

    section CallTarget+Inlining+NGEN
    This PR (8048) - mean (926ms)  : 879, 972
    master - mean (928ms)  : 883, 973

Loading
HttpMessageHandler (.NET 8)
gantt
    title Execution time (ms) HttpMessageHandler (.NET 8)
    dateFormat  x
    axisFormat %Q
    todayMarker off
    section Baseline
    This PR (8048) - mean (270ms)  : 262, 278
    master - mean (269ms)  : 263, 275

    section Bailout
    This PR (8048) - mean (269ms)  : 265, 272
    master - mean (270ms)  : 265, 274

    section CallTarget+Inlining+NGEN
    This PR (8048) - mean (832ms)  : 814, 849
    master - mean (830ms)  : 811, 849

Loading

Copy link
Member

@andrewlock andrewlock left a comment

Choose a reason for hiding this comment

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

LGTM overall, I expected a much bigger refactor to be required, but this sidesteps it quite well AFAICT 👍

Comment on lines 59 to +60
{
// Capture service name on first use, and keep it fixed for the lifetime of this API instance
Copy link
Member

Choose a reason for hiding this comment

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

How long does the API instance last? Is it recreated when the settings change? If not, won't it send the wrong settings? And if so, we probably don't need to use a Func<string>?

Copy link
Contributor Author

@dudikeleti dudikeleti Jan 15, 2026

Choose a reason for hiding this comment

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

we probably don't need to use a Func

That is to delay the service name evaluation as much as possible, so we have the highest chance of using the updated value.


<ItemGroup>
<ProjectReference Include="..\Samples.Probes.External\Samples.Probes.External.csproj" />
<ProjectReference Include="..\..\..\..\..\src\Datadog.Trace.Manual\Datadog.Trace.Manual.csproj" />
Copy link
Member

Choose a reason for hiding this comment

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

I'm not sure, this might cause issues in CI, but hopefully not 🤔

private volatile DynamicInstrumentation? _dynamicInstrumentation;
private int _diState; // 0 = disabled, 1 = initializing, 2 = initialized
private TracerSettings.SettingsManager? _subscribedSettingsManager;
private IDisposable? _tracerSettingsSubscription;
Copy link
Member

Choose a reason for hiding this comment

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

DebuggerManager lives for the lifetime of the app, right? If so this is fine, but if not, you should make sure to dispose this when DebuggerManager is disposed (it only really matters for tests so that we don't leak perf issues 🙂 )

Comment on lines +249 to +252
// Note: `SymbolsUploader` captures the service name on first use (symbol extraction/upload) and then keeps it fixed for its lifetime,
// to avoid mixing symbols across services. If the service name changes after that point, the correct behavior would be to stop and
// recreate the uploader, but that is expensive (symbol extraction/upload) and is intentionally deferred until we have an explicit
// requirement.
Copy link
Contributor

Choose a reason for hiding this comment

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

Let's raise that in the team

@dudikeleti dudikeleti force-pushed the dudik/subscribe-settings-update branch from fdbdf39 to 27fd749 Compare January 15, 2026 10:49
@dudikeleti dudikeleti merged commit 4876d80 into master Jan 15, 2026
74 of 76 checks passed
@dudikeleti dudikeleti deleted the dudik/subscribe-settings-update branch January 15, 2026 17:40
@github-actions github-actions bot added this to the vNext-v3 milestone Jan 15, 2026
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.

3 participants