Skip to content

Comments

[Tests][UserEvents] Add diagnostic logging#124678

Open
mdh1418 wants to merge 16 commits intomainfrom
copilot/add-diagnostic-logging
Open

[Tests][UserEvents] Add diagnostic logging#124678
mdh1418 wants to merge 16 commits intomainfrom
copilot/add-diagnostic-logging

Conversation

@mdh1418
Copy link
Member

@mdh1418 mdh1418 commented Feb 20, 2026

Investigating #123442

Copilot AI and others added 6 commits February 20, 2026 20:33
- Add --log-mode verbose and --log-filter * to record-trace invocation
- Set DOTNET_DiagnosticServerDiag=1 on tracee process for runtime logging
- Add fprintf diagnostic logging to ds-server.c (IPC command handling)
- Add fprintf diagnostic logging to ep-session-provider.c (tracepoint registration)
- Add fprintf diagnostic logging to ep-session.c (tracepoint write)

Co-authored-by: mdh1418 <[email protected]>
…/arm64

Disable all CI pipeline jobs in runtime.yml except those needed to run
CoreCLR runtime tests on linux-x64 and linux-arm64 for investigating
flaky userevents tests (issue #123442).

Kept jobs:
- EvaluatePaths stage
- Libraries_CheckedCoreCLR build for linux_arm64
- Libraries_CheckedCoreCLR build for linux_x64
- CoreCLR test build (build-test-job.yml with CoreClrTestBuildHost)
- CoreCLR test execution (run-test-job.yml for linux_x64 and linux_arm64)

All other ~63 job blocks are disabled with condition: false.

Co-authored-by: Copilot <[email protected]>
Per the one-collect commandline.rs API, --log-mode accepts 'disabled',
'console', or 'file', and --log-filter accepts Rust tracing EnvFilter
strings like 'trace', 'debug', 'info'.

Co-authored-by: mdh1418 <[email protected]>
Change traceValidator signature to Func<int, EventPipeEventSource, bool>
to pass the tracee process ID. Each scenario validator now filters events
by ProcessID and logs a count of events from other processes.

Co-authored-by: mdh1418 <[email protected]>
@mdh1418 mdh1418 requested a review from noahfalk as a code owner February 20, 2026 21:30
Copilot AI review requested due to automatic review settings February 20, 2026 21:30
@mdh1418 mdh1418 requested a review from lateralusX as a code owner February 20, 2026 21:30
@mdh1418 mdh1418 added NO-MERGE The PR is not ready for merge yet (see discussion for detailed reasons) NO-REVIEW Experimental/testing PR, do NOT review it and removed area-Tracing-coreclr labels Feb 20, 2026
Copy link
Contributor

Copilot AI left a comment

Choose a reason for hiding this comment

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

Pull request overview

This PR adds additional diagnostic logging to help investigate flakiness in the src/tests/tracing/userevents functional tests (issue #123442), including filtering/annotating expected events by the tracee PID and enabling extra runtime diagnostics during test runs.

Changes:

  • Pass the tracee PID into per-scenario trace validators and ignore events from other processes in the trace validation.
  • Enable extra diagnostic output in the tracee runtime and in record-trace invocation to aid debugging.
  • Add temporary diagnostic logging in native EventPipe/DiagnosticServer code paths, and temporarily alter/disable large parts of the Azure Pipelines runtime matrix for investigation.

Reviewed changes

Copilot reviewed 10 out of 10 changed files in this pull request and generated 7 comments.

Show a summary per file
File Description
src/tests/tracing/userevents/multithread/multithread.cs Filters validation to tracee PID and improves failure diagnostics.
src/tests/tracing/userevents/managedevent/managedevent.cs Filters validation to tracee PID and improves failure diagnostics.
src/tests/tracing/userevents/custommetadata/custommetadata.cs Filters validation to tracee PID and improves failure diagnostics.
src/tests/tracing/userevents/basic/basic.cs Filters validation to tracee PID and improves failure diagnostics.
src/tests/tracing/userevents/activity/activity.cs Filters validation to tracee PID and improves failure diagnostics.
src/tests/tracing/userevents/common/UserEventsTestRunner.cs Updates validator signature, adds record-trace logging args, and enables runtime diag env var for tracee.
src/native/eventpipe/ep-session.c Adds diagnostic logging around user-events tracepoint write path.
src/native/eventpipe/ep-session-provider.c Adds diagnostic logging around tracepoint registration.
src/native/eventpipe/ds-server.c Adds diagnostic logging around diagnostic server IPC handling.
eng/pipelines/runtime.yml Temporarily disables/narrows many CI legs for investigation.

Comment on lines +85 to +86
# TEMPORARY: disabled for userevents diagnostic investigation (https://github.com/dotnet/runtime/issues/123442)
condition: false
Copy link

Copilot AI Feb 20, 2026

Choose a reason for hiding this comment

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

This change sets the job condition to false, effectively disabling this pipeline leg for all PRs/rolling builds. Even if intended for short-term investigation, it will prevent CI from validating unrelated changes in this pipeline and is very risky to merge. Please gate this behind a dedicated variable/parameter (e.g., a temporary feature flag) or revert before merging.

Copilot uses AI. Check for mistakes.
Comment on lines +371 to 372
# TEMPORARY: narrowed to linux_x64 only for userevents diagnostic investigation (https://github.com/dotnet/runtime/issues/123442), was also windows_x64
- linux_x64
Copy link

Copilot AI Feb 20, 2026

Choose a reason for hiding this comment

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

These platform matrix changes remove previously covered OSes (e.g., Windows/macOS) for this leg. That materially reduces test coverage and can hide regressions unrelated to the userevents investigation. Please avoid narrowing platforms in the main pipeline, or gate it behind a temporary variable so normal PR validation coverage is preserved.

Copilot uses AI. Check for mistakes.
Comment on lines +164 to +165
traceeStartInfo.Environment["DOTNET_DiagnosticServerDiag"] = "1";

Copy link

Copilot AI Feb 20, 2026

Choose a reason for hiding this comment

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

DOTNET_DiagnosticServerDiag is being unconditionally enabled for every tracee run. This can significantly increase stderr output and potentially affect timing/behavior of the scenario under test, making results harder to interpret once the investigation is done. Consider enabling it only when a separate opt-in env var/command-line switch is set (or only under Helix/CI) so local/normal runs stay quiet by default.

Suggested change
traceeStartInfo.Environment["DOTNET_DiagnosticServerDiag"] = "1";
// This is opt-in locally via DOTNET_UserEvents_EnableDiagnosticServerDiag=1, and defaults to on under Helix.
bool enableDiagnosticServerDiag =
string.Equals(Environment.GetEnvironmentVariable("DOTNET_UserEvents_EnableDiagnosticServerDiag"), "1", StringComparison.Ordinal) ||
!string.IsNullOrEmpty(Environment.GetEnvironmentVariable("HELIX_WORKITEM_ROOT"));
if (enableDiagnosticServerDiag)
{
traceeStartInfo.Environment["DOTNET_DiagnosticServerDiag"] = "1";
}

Copilot uses AI. Check for mistakes.
Comment on lines +34 to +40
static int ep_sess_diag_enabled = -1; // -1 = uninitialized
static inline int ep_sess_diag_is_enabled (void) {
if (ep_sess_diag_enabled == -1) {
const char *val = getenv ("DOTNET_DiagnosticServerDiag");
ep_sess_diag_enabled = (val != NULL && val[0] == '1') ? 1 : 0;
}
return ep_sess_diag_enabled;
Copy link

Copilot AI Feb 20, 2026

Choose a reason for hiding this comment

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

ep_sess_diag_enabled is lazily initialized without any synchronization. session_tracepoint_write_event can be called from multiple threads, so concurrent first-use can cause a data race/UB in C. Consider using an atomic/once-init pattern (e.g., store the flag in a volatile int64_t and initialize via ep_rt_atomic_compare_exchange_int64_t, or always compute from getenv without caching) to make this thread-safe.

Suggested change
static int ep_sess_diag_enabled = -1; // -1 = uninitialized
static inline int ep_sess_diag_is_enabled (void) {
if (ep_sess_diag_enabled == -1) {
const char *val = getenv ("DOTNET_DiagnosticServerDiag");
ep_sess_diag_enabled = (val != NULL && val[0] == '1') ? 1 : 0;
}
return ep_sess_diag_enabled;
static inline int ep_sess_diag_is_enabled (void) {
const char *val = getenv ("DOTNET_DiagnosticServerDiag");
return (val != NULL && val[0] == '1') ? 1 : 0;

Copilot uses AI. Check for mistakes.
Comment on lines +895 to +899
if (bytes_written == -1) {
EP_SESS_DIAG_LOG ("tracepoint_write_event: writev failed for provider='%s', event_id=%u, fd=%d, errno=%d (%s).\n", ep_provider_get_provider_name (provider), (unsigned)ep_event_get_event_id (ep_event), session->user_events_data_fd, errno, strerror (errno));
} else {
EP_SESS_DIAG_LOG ("tracepoint_write_event: writev success for provider='%s', event_id=%u, bytes_written=%zd.\n", ep_provider_get_provider_name (provider), (unsigned)ep_event_get_event_id (ep_event), bytes_written);
}
Copy link

Copilot AI Feb 20, 2026

Choose a reason for hiding this comment

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

This code calls strerror(errno) but ep-session.c doesn't include the header that declares strerror (typically <string.h>). With warnings-as-errors this can fail the build due to an implicit declaration. Please include the appropriate header (and/or follow the repo’s existing include pattern for strerror).

Copilot uses AI. Check for mistakes.
Comment on lines +20 to +26
static int ep_sp_diag_enabled = -1; // -1 = uninitialized
static inline int ep_sp_diag_is_enabled (void) {
if (ep_sp_diag_enabled == -1) {
const char *val = getenv ("DOTNET_DiagnosticServerDiag");
ep_sp_diag_enabled = (val != NULL && val[0] == '1') ? 1 : 0;
}
return ep_sp_diag_enabled;
Copy link

Copilot AI Feb 20, 2026

Choose a reason for hiding this comment

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

ep_sp_diag_enabled is lazily initialized without synchronization. If this file’s logging is reachable from multiple threads during session setup/teardown, the first-use initialization can race and is undefined behavior in C. Please use an atomic/once-init pattern (or avoid caching) so the env-var check is thread-safe.

Suggested change
static int ep_sp_diag_enabled = -1; // -1 = uninitialized
static inline int ep_sp_diag_is_enabled (void) {
if (ep_sp_diag_enabled == -1) {
const char *val = getenv ("DOTNET_DiagnosticServerDiag");
ep_sp_diag_enabled = (val != NULL && val[0] == '1') ? 1 : 0;
}
return ep_sp_diag_enabled;
static inline int ep_sp_diag_is_enabled (void) {
const char *val = getenv ("DOTNET_DiagnosticServerDiag");
return (val != NULL && val[0] == '1') ? 1 : 0;

Copilot uses AI. Check for mistakes.
Comment on lines +20 to +26
static int ds_diag_enabled = -1; // -1 = uninitialized
static inline int ds_diag_is_enabled (void) {
if (ds_diag_enabled == -1) {
const char *val = getenv ("DOTNET_DiagnosticServerDiag");
ds_diag_enabled = (val != NULL && val[0] == '1') ? 1 : 0;
}
return ds_diag_enabled;
Copy link

Copilot AI Feb 20, 2026

Choose a reason for hiding this comment

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

ds_diag_enabled is lazily initialized without synchronization. If multiple threads can reach this logging (e.g., server loop interactions), the first-use initialization can race and is undefined behavior in C. Please switch to an atomic/once-init pattern (or avoid caching) to make the env-var check thread-safe.

Suggested change
static int ds_diag_enabled = -1; // -1 = uninitialized
static inline int ds_diag_is_enabled (void) {
if (ds_diag_enabled == -1) {
const char *val = getenv ("DOTNET_DiagnosticServerDiag");
ds_diag_enabled = (val != NULL && val[0] == '1') ? 1 : 0;
}
return ds_diag_enabled;
static inline int
ds_diag_is_enabled (void)
{
const char *val = getenv ("DOTNET_DiagnosticServerDiag");
return (val != NULL && val[0] == '1') ? 1 : 0;

Copilot uses AI. Check for mistakes.
The disabled osx_arm64 test run job depends on a Libraries_CheckedCoreCLR
build for osx_arm64 existing. When osx_arm64 was removed from the build
platforms list, Azure Pipelines YAML validation fails because the
dependency cannot be resolved (even though the test job has condition: false).

Co-authored-by: mdh1418 <[email protected]>
Remove osx_arm64 from the Libraries_CheckedCoreCLR build platforms
(only linux-x64 and linux-arm64 needed for userevents investigation).
Also remove the osx_arm64 test job block entirely since setting
condition: false does not skip dependency validation in Azure Pipelines
YAML - the build job must still exist for the dependency to resolve.

Co-authored-by: mdh1418 <[email protected]>
Copilot AI review requested due to automatic review settings February 20, 2026 21:47
@mdh1418 mdh1418 review requested due to automatic review settings February 20, 2026 21:47
- Remove CLRTestTargetUnsupported from userevents Directory.Build.props
  (keep Mono exclusion only)
- Disable PR triggers for runtime-linker-tests, hardware-intrinsics,
  global-build (dev-innerloop), and runtime-diagnostics pipelines
- All browser-wasm jobs in runtime.yml already had condition: false

Co-authored-by: mdh1418 <[email protected]>
Copilot AI review requested due to automatic review settings February 21, 2026 00:27
@mdh1418 mdh1418 review requested due to automatic review settings February 21, 2026 00:27
The diagnostic logging at line 896 calls strerror(errno) but the file
did not include <string.h> which declares strerror. This could cause
an implicit function declaration warning/error depending on compiler
settings.

Co-authored-by: mdh1418 <[email protected]>
Copilot AI review requested due to automatic review settings February 21, 2026 02:34
@mdh1418 mdh1418 review requested due to automatic review settings February 21, 2026 02:34
… wasm legs

- Add [stdout]/[stderr] labels and DateTime.UtcNow:O timestamps to all
  four process output callbacks (record-trace and tracee)
- Add UTC timestamp to the SIGINT log line
- Comment out WebAssembly job blocks that use templates without condition
  parameter support (wasm-library-tests, wasm-coreclr-library-tests,
  wasm-library-aot-tests, browser-wasm-build-tests, wasm-runtime-tests,
  browser-wasm-coreclr-build-tests). These templates silently ignored
  condition: false, causing the jobs to still run.

Co-authored-by: mdh1418 <[email protected]>
Copilot AI review requested due to automatic review settings February 24, 2026 16:47
@mdh1418 mdh1418 review requested due to automatic review settings February 24, 2026 16:47
Copilot AI and others added 5 commits February 24, 2026 17:29
Resolve merge conflicts by rebuilding eng/pipelines/runtime.yml from the
current main branch version, then cleanly re-applying the branch's
intentional changes for the userevents diagnostic investigation
(#123442):

- Add condition: false to most job blocks to disable them
- Comment out wasm template blocks that don't support condition parameter
- Narrow Libraries_CheckedCoreCLR builds to linux_arm64 and linux_x64
- Narrow CoreCLR runtime test runs to linux_x64 and linux_arm64
- Remove osx_arm64 Libraries_CheckedCoreCLR test job block

Co-authored-by: Copilot <[email protected]>
…eanup

- Resolve runtime.yml merge conflict: keep WASM legs commented out per
  diagnostic investigation while incorporating new WasmTestOnFirefox and
  WasmTestOnV8 scenarios from main.
- Handle UnauthorizedAccessException when cleaning up diagnostic sockets
  owned by other users in /tmp, which prevents test crashes in shared
  environments.

Co-authored-by: Copilot <[email protected]>
The [stream] label already identifies the original stream, so routing
everything to Console.WriteLine ensures a single interleaved timeline
of tracee and record-trace events without needing to merge stderr.

Co-authored-by: Copilot <[email protected]>
Copilot AI review requested due to automatic review settings February 24, 2026 18:54
Copy link
Contributor

Copilot AI left a comment

Choose a reason for hiding this comment

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

Pull request overview

Copilot reviewed 15 out of 15 changed files in this pull request and generated 9 comments.

if (!string.IsNullOrEmpty(args.Data))
{
Console.Error.WriteLine($"[record-trace] {args.Data}");
Console.WriteLine($"[record-trace][stderr][{DateTime.UtcNow:O}] {args.Data}");
Copy link

Copilot AI Feb 24, 2026

Choose a reason for hiding this comment

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

The record-trace stderr handler writes to stdout (Console.WriteLine) even though the prefix indicates stderr. This makes it harder to distinguish errors and may break any tooling that relies on stderr. Please write these lines to Console.Error (keeping the timestamp/prefix if desired).

Suggested change
Console.WriteLine($"[record-trace][stderr][{DateTime.UtcNow:O}] {args.Data}");
Console.Error.WriteLine($"[record-trace][stderr][{DateTime.UtcNow:O}] {args.Data}");

Copilot uses AI. Check for mistakes.
Comment on lines +35 to +41
static int ep_sess_diag_enabled = -1; // -1 = uninitialized
static inline int ep_sess_diag_is_enabled (void) {
if (ep_sess_diag_enabled == -1) {
const char *val = getenv ("DOTNET_DiagnosticServerDiag");
ep_sess_diag_enabled = (val != NULL && val[0] == '1') ? 1 : 0;
}
return ep_sess_diag_enabled;
Copy link

Copilot AI Feb 24, 2026

Choose a reason for hiding this comment

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

ep_sess_diag_enabled is a non-atomic static that is lazily initialized from getenv and accessed on the event write path, which can be called from multiple threads. This is a C data race (undefined behavior). Please make the flag initialization thread-safe using the eventpipe runtime volatile/atomic helpers or a one-time init primitive.

Suggested change
static int ep_sess_diag_enabled = -1; // -1 = uninitialized
static inline int ep_sess_diag_is_enabled (void) {
if (ep_sess_diag_enabled == -1) {
const char *val = getenv ("DOTNET_DiagnosticServerDiag");
ep_sess_diag_enabled = (val != NULL && val[0] == '1') ? 1 : 0;
}
return ep_sess_diag_enabled;
// 2 = uninitialized, 0 = disabled, 1 = enabled.
static volatile uint32_t ep_sess_diag_enabled = 2;
static inline int ep_sess_diag_is_enabled (void) {
uint32_t enabled = ep_rt_volatile_load_uint32_t (&ep_sess_diag_enabled);
if (enabled == 2) {
const char *val = getenv ("DOTNET_DiagnosticServerDiag");
uint32_t new_val = (val != NULL && val[0] == '1') ? 1u : 0u;
ep_rt_volatile_store_uint32_t (&ep_sess_diag_enabled, new_val);
enabled = new_val;
}
return (int)enabled;

Copilot uses AI. Check for mistakes.
Comment on lines +18 to +28
// Temporary diagnostic logging for userevents investigation (https://github.com/dotnet/runtime/issues/123442).
// Enabled when DOTNET_DiagnosticServerDiag=1 is set.
static int ep_sp_diag_enabled = -1; // -1 = uninitialized
static inline int ep_sp_diag_is_enabled (void) {
if (ep_sp_diag_enabled == -1) {
const char *val = getenv ("DOTNET_DiagnosticServerDiag");
ep_sp_diag_enabled = (val != NULL && val[0] == '1') ? 1 : 0;
}
return ep_sp_diag_enabled;
}
#define EP_SP_DIAG_LOG(...) do { if (ep_sp_diag_is_enabled ()) { fprintf (stderr, "[EP_SP_DIAG] " __VA_ARGS__); fflush (stderr); } } while (0)
Copy link

Copilot AI Feb 24, 2026

Choose a reason for hiding this comment

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

ep_sp_diag_enabled is a non-atomic static lazily initialized via getenv and can be accessed concurrently during session/provider setup. This is a C data race (undefined behavior). Please switch to a thread-safe initialization (volatile/atomic helper or one-time init) for the diagnostic flag.

Copilot uses AI. Check for mistakes.
Comment on lines 33 to +37
always: true

pr:
branches:
include:
- main
paths:
include:
- eng/pipelines/**
- src/native/managed/cdac/**
- src/coreclr/debug/runtimeinfo/**
# TEMPORARY: disabled for userevents diagnostic investigation (https://github.com/dotnet/runtime/issues/123442)
pr: none
# pr:
Copy link

Copilot AI Feb 24, 2026

Choose a reason for hiding this comment

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

pr: none disables PR validation for this diagnostics pipeline. If this is only for local investigation, it should not be merged as-is; please restore the PR trigger (or gate it behind an opt-in variable) so normal PRs continue to get coverage.

Copilot uses AI. Check for mistakes.
Comment on lines +32 to +50
# TEMPORARY: disabled for userevents diagnostic investigation (https://github.com/dotnet/runtime/issues/123442)
pr: none
# pr:
# branches:
# include:
# - main
# - release/*.*
# paths:
# include:
# - '*'
# exclude:
# - '**.md'
# - eng/Version.Details.xml
# - .devcontainer/*
# - .github/*
# - docs/*
# - LICENSE.TXT
# - PATENTS.TXT
# - THIRD-PARTY-NOTICES.TXT
Copy link

Copilot AI Feb 24, 2026

Choose a reason for hiding this comment

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

pr: none disables PR runs of the linker-tests pipeline. This removes trimming safety validation for PRs and should be reverted before merging.

Suggested change
# TEMPORARY: disabled for userevents diagnostic investigation (https://github.com/dotnet/runtime/issues/123442)
pr: none
# pr:
# branches:
# include:
# - main
# - release/*.*
# paths:
# include:
# - '*'
# exclude:
# - '**.md'
# - eng/Version.Details.xml
# - .devcontainer/*
# - .github/*
# - docs/*
# - LICENSE.TXT
# - PATENTS.TXT
# - THIRD-PARTY-NOTICES.TXT
# PR validation for linker tests.
pr:
branches:
include:
- main
- release/*.*
paths:
include:
- '*'
exclude:
- '**.md'
- eng/Version.Details.xml
- .devcontainer/*
- .github/*
- docs/*
- LICENSE.TXT
- PATENTS.TXT
- THIRD-PARTY-NOTICES.TXT

Copilot uses AI. Check for mistakes.
Comment on lines +2 to +13
# TEMPORARY: disabled for userevents diagnostic investigation (https://github.com/dotnet/runtime/issues/123442)
pr: none
# pr:
# branches:
# include:
# - main
# paths:
# include:
# - eng/pipelines/**
# - src/coreclr/jit/**
# - src/tests/Common/GenerateHWIntrinsicTests/**
# - src/tests/JIT/HardwareIntrinsics/**
Copy link

Copilot AI Feb 24, 2026

Choose a reason for hiding this comment

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

pr: none disables PR validation for the hardware-intrinsics pipeline. This should not be merged; please restore the PR trigger configuration so changes affecting JIT/HW intrinsics continue to get covered on PRs.

Suggested change
# TEMPORARY: disabled for userevents diagnostic investigation (https://github.com/dotnet/runtime/issues/123442)
pr: none
# pr:
# branches:
# include:
# - main
# paths:
# include:
# - eng/pipelines/**
# - src/coreclr/jit/**
# - src/tests/Common/GenerateHWIntrinsicTests/**
# - src/tests/JIT/HardwareIntrinsics/**
pr:
branches:
include:
- main
paths:
include:
- eng/pipelines/**
- src/coreclr/jit/**
- src/tests/Common/GenerateHWIntrinsicTests/**
- src/tests/JIT/HardwareIntrinsics/**

Copilot uses AI. Check for mistakes.
if (!string.IsNullOrEmpty(args.Data))
{
Console.Error.WriteLine($"[tracee] {args.Data}");
Console.WriteLine($"[tracee][stderr][{DateTime.UtcNow:O}] {args.Data}");
Copy link

Copilot AI Feb 24, 2026

Choose a reason for hiding this comment

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

The tracee stderr handler writes to stdout (Console.WriteLine) even though the prefix indicates stderr. Please write these lines to Console.Error so failures are surfaced correctly and stderr remains meaningful in CI logs.

Suggested change
Console.WriteLine($"[tracee][stderr][{DateTime.UtcNow:O}] {args.Data}");
Console.Error.WriteLine($"[tracee][stderr][{DateTime.UtcNow:O}] {args.Data}");

Copilot uses AI. Check for mistakes.
Comment on lines +370 to 371
# TEMPORARY: narrowed to linux_x64 only for userevents diagnostic investigation (https://github.com/dotnet/runtime/issues/123442), was also windows_x64
- linux_x64
Copy link

Copilot AI Feb 24, 2026

Choose a reason for hiding this comment

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

This matrix was narrowed to fewer platforms for investigation purposes. Merging this would permanently reduce PR coverage (e.g., dropping previously covered OS/arch legs) and can let platform-specific breaks slip through. Please revert this narrowing (or gate it behind an opt-in variable) before merging.

Suggested change
# TEMPORARY: narrowed to linux_x64 only for userevents diagnostic investigation (https://github.com/dotnet/runtime/issues/123442), was also windows_x64
- linux_x64
# Build on both linux_x64 and windows_x64 for full coverage (see https://github.com/dotnet/runtime/issues/123442)
- linux_x64
- windows_x64

Copilot uses AI. Check for mistakes.
Comment on lines +7 to +27
# TEMPORARY: disabled for userevents diagnostic investigation (https://github.com/dotnet/runtime/issues/123442)
pr: none
# pr:
# branches:
# include:
# - main
# - release/*.*
# paths:
# include:
# - '*'
# - eng/pipelines/global-build.yml
# exclude:
# - '**.md'
# - .devcontainer/*
# - .github/*
# - docs/*
# - eng/pipelines/coreclr/*.*
# - eng/pipelines/libraries/*.*
# - eng/pipelines/installer/*.*
# - PATENTS.TXT
# - THIRD-PARTY-NOTICES.TXT
Copy link

Copilot AI Feb 24, 2026

Choose a reason for hiding this comment

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

pr: none disables this pipeline for all PRs, removing an important validation signal. Temporary investigation changes like this should not land in mainline; please restore the previous PR trigger configuration before merging.

Suggested change
# TEMPORARY: disabled for userevents diagnostic investigation (https://github.com/dotnet/runtime/issues/123442)
pr: none
# pr:
# branches:
# include:
# - main
# - release/*.*
# paths:
# include:
# - '*'
# - eng/pipelines/global-build.yml
# exclude:
# - '**.md'
# - .devcontainer/*
# - .github/*
# - docs/*
# - eng/pipelines/coreclr/*.*
# - eng/pipelines/libraries/*.*
# - eng/pipelines/installer/*.*
# - PATENTS.TXT
# - THIRD-PARTY-NOTICES.TXT
pr:
branches:
include:
- main
- release/*.*
paths:
include:
- '*'
- eng/pipelines/global-build.yml
exclude:
- '**.md'
- .devcontainer/*
- .github/*
- docs/*
- eng/pipelines/coreclr/*.*
- eng/pipelines/libraries/*.*
- eng/pipelines/installer/*.*
- PATENTS.TXT
- THIRD-PARTY-NOTICES.TXT

Copilot uses AI. Check for mistakes.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

area-Tracing-coreclr NO-MERGE The PR is not ready for merge yet (see discussion for detailed reasons) NO-REVIEW Experimental/testing PR, do NOT review it

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants