Fix StartAndForget_StartsProcessAndReturnsValidPid by mapping ProcessStartInfo.Arguments for the string+args overload - #127116

Merged
adamsitnik merged 7 commits into
mainfrom
copilot/fix-flaky-test-starts-process
Apr 20, 2026
Merged

Fix StartAndForget_StartsProcessAndReturnsValidPid by mapping ProcessStartInfo.Arguments for the string+args overload#127116
adamsitnik merged 7 commits into
mainfrom
copilot/fix-flaky-test-starts-process

Conversation

CopilotAI commented Apr 19, 2026

Copy link
Copy Markdown
Contributor

StartAndForget_StartsProcessAndReturnsValidPid was failing intermittently for useProcessStartInfo: false because the test passed template.StartInfo.ArgumentList, while RemoteExecutor populates Arguments. This could launch dotnet with effectively empty/incorrect arguments and exit early.

  • What changed

    • Reverted the prior SIGKILL-based liveness workaround and restored the original HasExited assertion path and cleanup.
    • Updated the useProcessStartInfo: false branch to map template.StartInfo.Arguments into List<string> and pass that list to Process.StartAndForget(string, IList<string>?).
    • Added a local argument parsing helper in StartAndForget.cs (based on the referenced logic from PR Add new process management APIs to SafeProcessHandle #124375) to split the Arguments string into a list.
    • Inlined MapToArgumentList(template.StartInfo) directly in the StartAndForget call so mapping is only computed when useProcessStartInfo is false.
    • Added a clarifying comment above MapToArgumentList explaining why this helper is needed in this test (RemoteExecutor uses Arguments, while this overload requires a list).
  • Code shape

usingProcesstemplate=CreateSleepProcess((int)TimeSpan.FromHours(1).TotalMilliseconds);intpid=useProcessStartInfo?Process.StartAndForget(template.StartInfo):Process.StartAndForget(template.StartInfo.FileName,MapToArgumentList(template.StartInfo));usingProcesslaunched=Process.GetProcessById(pid);try{Assert.False(launched.HasExited);}finally{launched.Kill();launched.WaitForExit();}
  • Validation
    • Ran targeted System.Diagnostics.Process tests for this area with no failures.

@dotnet-policy-service

Copy link
Copy Markdown
Contributor

Tagging subscribers to this area: @dotnet/area-system-diagnostics-process
See info in area-owners.md if you want to be subscribed.

Agent-Logs-Url: https://github.com/dotnet/runtime/sessions/c84ad3a6-2269-49a1-be61-284e675daa50
Co-authored-by: adamsitnik <6011991+adamsitnik@users.noreply.github.com>
CopilotAI requested review from Copilot and removed request for CopilotApril 19, 2026 11:32
CopilotAI requested review from Copilot and removed request for CopilotApril 19, 2026 11:37
CopilotAI changed the title [WIP] Fix flaky test failure in StartAndForget_StartsProcessAndReturnsValidPidStabilize StartAndForget_StartsProcessAndReturnsValidPid by replacing flaky HasExited checkApr 19, 2026
CopilotAI requested a review from adamsitnikApril 19, 2026 11:38

@adamsitnikadamsitnik left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

@copilot address my feedback

Comment threadsrc/libraries/System.Diagnostics.Process/tests/StartAndForget.cs Outdated
Comment threadsrc/libraries/System.Diagnostics.Process/tests/StartAndForget.cs Outdated
CopilotAI requested review from Copilot and removed request for CopilotApril 19, 2026 12:19

CopilotAI commented Apr 19, 2026

Copy link
Copy Markdown
ContributorAuthor

@copilot address my feedback

Addressed in b4ecac2. I applied the requested feedback to StartAndForget.cs and pushed the update.

@adamsitnikadamsitnik left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

From the logs:

System.Diagnostics.Tests.StartAndForgetTests.StartAndForget_StartsProcessAndReturnsValidPid(useProcessStartInfo: False) [FAIL]
Assert.True() Failure
Expected: True
Actual: False
Stack Trace:
/_/src/libraries/System.Diagnostics.Process/tests/StartAndForget.cs(30,0): at System.Diagnostics.Tests.StartAndForgetTests.StartAndForget_StartsProcessAndReturnsValidPid(Boolean useProcessStartInfo)
at System.Object.InvokeStub_StartAndForgetTests.StartAndForget_StartsProcessAndReturnsValidPid(Object, Span`1)
/_/src/libraries/System.Private.CoreLib/src/System/Reflection/MethodBaseInvoker.cs(95,0): at System.Reflection.MethodBaseInvoker.InvokeWithOneArg(Object obj, BindingFlags invokeAttr, Binder binder, Object[] parameters, CultureInfo culture)

It fails when useProcessStartInfo: False and I think I know why. RemoteExecutor is using dotnet to invoke the process using Arguments, not ArgumentsList. When we pass the ArgumentsList here:

:Process.StartAndForget(template.StartInfo.FileName,template.StartInfo.ArgumentList);

we pass an empty string, and invoke dotnet which prints sth like this:

PS C:\Users\adsitnik> dotnet
Usage: dotnet [path-to-application]
Usage: dotnet [commands]
path-to-application:
The path to an application .dll file to execute.
commands:
-h|--help Display help.
--info Display .NET information.
--list-runtimes [--arch <arch>] Display the installed runtimes matching the host or specified architecture. Example architectures: arm64, x64, x86.
--list-sdks [--arch <arch>] Display the installed SDKs matching the host or specified architecture. Example architectures: arm64, x64, x86.

And exits. That is why the process is sometimes gone when we get to HasExited check.

@copilot please do the following:

  • revert all the changes you have done here in this PR so far
  • take this logic from #124375 and simply map template.StartInfo to List<string> and pass them to StartAndForget

CopilotAI review requested due to automatic review settings April 19, 2026 20:55

@adamsitnikadamsitnik left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

LGTM

CopilotAI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Pull request overview

Fixes intermittent failures in StartAndForget_StartsProcessAndReturnsValidPid by ensuring the string + args overload receives arguments derived from ProcessStartInfo.Arguments (which RemoteExecutor populates), rather than relying on ArgumentList (which may be empty).

Changes:

  • Maps ProcessStartInfo.Arguments into a List<string> for the Process.StartAndForget(string, IList<string>?) path.
  • Adds a local helper to split the Arguments string into an argument list for the test.

Comment threadsrc/libraries/System.Diagnostics.Process/tests/StartAndForget.cs Outdated
auto-merge was automatically disabled April 20, 2026 16:14

Head branch was pushed to by a user without write access

CopilotAI requested a review from jkotasApril 20, 2026 16:15
CopilotAI requested review from Copilot and removed request for CopilotApril 20, 2026 16:54
@adamsitnik
adamsitnik enabled auto-merge (squash) April 20, 2026 18:56
@adamsitnik
adamsitnik merged commit a8579d5 into mainApr 20, 2026
93 of 97 checks passed
@adamsitnik
adamsitnik deleted the copilot/fix-flaky-test-starts-process branch April 20, 2026 20:26
@adamsitnikadamsitnik added this to the 11.0.0 milestone Apr 20, 2026
@github-actionsgithub-actionsBot locked and limited conversation to collaborators May 21, 2026
Sign up for freeto subscribe to this conversation on GitHub. Already have an account? Sign in.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Flaky test failure in at StartAndForget_StartsProcessAndReturnsValidPid

5 participants

@adamsitnik@danmoseley@jkotas
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Add copy buttons to all
 blocks\n(function() {\n function addCopyButtons() {\n document.querySelectorAll('pre code').forEach(function(codeBlock) {\n if (codeBlock.parentElement.hasAttribute('data-copy-added')) return;\n codeBlock.parentElement.setAttribute('data-copy-added', 'true');\n \n var btn = document.createElement('button');\n btn.textContent = 'Copy';\n btn.style.cssText = 'position:absolute;top:4px;right:4px;padding:2px 8px;font-size:11px;background:#4ecdc4;border:none;border-radius:4px;color:#1a1a2e;cursor:pointer;opacity:0.7;transition:opacity 0.2s;';\n btn.onmouseover = function() { this.style.opacity = '1'; };\n btn.onmouseout = function() { this.style.opacity = '0.7'; };\n btn.onclick = function() {\n navigator.clipboard.writeText(codeBlock.textContent).then(function() {\n btn.textContent = 'Copied!';\n setTimeout(function() { btn.textContent = 'Copy'; }, 1500);\n });\n };\n codeBlock.parentElement.style.position = 'relative';\n codeBlock.parentElement.appendChild(btn);\n });\n }\n \n addCopyButtons();\n \n // Re-run on dynamic content\n var observer = new MutationObserver(addCopyButtons);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Add Copy Buttons to Code Blocks");
}
} catch(__e) { console.warn('[Userscript:Add Copy Buttons to Code Blocks]', __e); }
})();
(function(){
try {
var __m = "github.com";
var __re = new RegExp('^' + "github\\.com" + '
Skip to content

Fix StartAndForget_StartsProcessAndReturnsValidPid by mapping ProcessStartInfo.Arguments for the string+args overload - #127116

Merged
adamsitnik merged 7 commits into
mainfrom
copilot/fix-flaky-test-starts-process
Apr 20, 2026
Merged

Fix StartAndForget_StartsProcessAndReturnsValidPid by mapping ProcessStartInfo.Arguments for the string+args overload#127116
adamsitnik merged 7 commits into
mainfrom
copilot/fix-flaky-test-starts-process

Conversation

CopilotAI commented Apr 19, 2026

Copy link
Copy Markdown
Contributor

StartAndForget_StartsProcessAndReturnsValidPid was failing intermittently for useProcessStartInfo: false because the test passed template.StartInfo.ArgumentList, while RemoteExecutor populates Arguments. This could launch dotnet with effectively empty/incorrect arguments and exit early.

  • What changed

    • Reverted the prior SIGKILL-based liveness workaround and restored the original HasExited assertion path and cleanup.
    • Updated the useProcessStartInfo: false branch to map template.StartInfo.Arguments into List&lt;string&gt; and pass that list to Process.StartAndForget(string, IList&lt;string&gt;?).
    • Added a local argument parsing helper in StartAndForget.cs (based on the referenced logic from PR Add new process management APIs to SafeProcessHandle #124375) to split the Arguments string into a list.
    • Inlined MapToArgumentList(template.StartInfo) directly in the StartAndForget call so mapping is only computed when useProcessStartInfo is false.
    • Added a clarifying comment above MapToArgumentList explaining why this helper is needed in this test (RemoteExecutor uses Arguments, while this overload requires a list).
  • Code shape

usingProcesstemplate=CreateSleepProcess((int)TimeSpan.FromHours(1).TotalMilliseconds);intpid=useProcessStartInfo?Process.StartAndForget(template.StartInfo):Process.StartAndForget(template.StartInfo.FileName,MapToArgumentList(template.StartInfo));usingProcesslaunched=Process.GetProcessById(pid);try{Assert.False(launched.HasExited);}finally{launched.Kill();launched.WaitForExit();}
  • Validation
    • Ran targeted System.Diagnostics.Process tests for this area with no failures.

@dotnet-policy-service

Copy link
Copy Markdown
Contributor

Tagging subscribers to this area: @dotnet/area-system-diagnostics-process
See info in area-owners.md if you want to be subscribed.

Agent-Logs-Url: https://github.com/dotnet/runtime/sessions/c84ad3a6-2269-49a1-be61-284e675daa50
Co-authored-by: adamsitnik <6011991+adamsitnik@users.noreply.github.com>
CopilotAI requested review from Copilot and removed request for CopilotApril 19, 2026 11:32
CopilotAI requested review from Copilot and removed request for CopilotApril 19, 2026 11:37
CopilotAI changed the title [WIP] Fix flaky test failure in StartAndForget_StartsProcessAndReturnsValidPidStabilize StartAndForget_StartsProcessAndReturnsValidPid by replacing flaky HasExited checkApr 19, 2026
CopilotAI requested a review from adamsitnikApril 19, 2026 11:38

@adamsitnikadamsitnik left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

@copilot address my feedback

Comment threadsrc/libraries/System.Diagnostics.Process/tests/StartAndForget.cs Outdated
Comment threadsrc/libraries/System.Diagnostics.Process/tests/StartAndForget.cs Outdated
CopilotAI requested review from Copilot and removed request for CopilotApril 19, 2026 12:19

CopilotAI commented Apr 19, 2026

Copy link
Copy Markdown
ContributorAuthor

@copilot address my feedback

Addressed in b4ecac2. I applied the requested feedback to StartAndForget.cs and pushed the update.

@adamsitnikadamsitnik left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

From the logs:

System.Diagnostics.Tests.StartAndForgetTests.StartAndForget_StartsProcessAndReturnsValidPid(useProcessStartInfo: False) [FAIL]
Assert.True() Failure
Expected: True
Actual: False
Stack Trace:
/_/src/libraries/System.Diagnostics.Process/tests/StartAndForget.cs(30,0): at System.Diagnostics.Tests.StartAndForgetTests.StartAndForget_StartsProcessAndReturnsValidPid(Boolean useProcessStartInfo)
at System.Object.InvokeStub_StartAndForgetTests.StartAndForget_StartsProcessAndReturnsValidPid(Object, Span`1)
/_/src/libraries/System.Private.CoreLib/src/System/Reflection/MethodBaseInvoker.cs(95,0): at System.Reflection.MethodBaseInvoker.InvokeWithOneArg(Object obj, BindingFlags invokeAttr, Binder binder, Object[] parameters, CultureInfo culture)

It fails when useProcessStartInfo: False and I think I know why. RemoteExecutor is using dotnet to invoke the process using Arguments, not ArgumentsList. When we pass the ArgumentsList here:

:Process.StartAndForget(template.StartInfo.FileName,template.StartInfo.ArgumentList);

we pass an empty string, and invoke dotnet which prints sth like this:

PS C:\Users\adsitnik> dotnet
Usage: dotnet [path-to-application]
Usage: dotnet [commands]
path-to-application:
The path to an application .dll file to execute.
commands:
-h|--help Display help.
--info Display .NET information.
--list-runtimes [--arch <arch>] Display the installed runtimes matching the host or specified architecture. Example architectures: arm64, x64, x86.
--list-sdks [--arch <arch>] Display the installed SDKs matching the host or specified architecture. Example architectures: arm64, x64, x86.

And exits. That is why the process is sometimes gone when we get to HasExited check.

@copilot please do the following:

  • revert all the changes you have done here in this PR so far
  • take this logic from #124375 and simply map template.StartInfo to List<string> and pass them to StartAndForget

CopilotAI review requested due to automatic review settings April 19, 2026 20:55

@adamsitnikadamsitnik left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

LGTM

CopilotAI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Pull request overview

Fixes intermittent failures in StartAndForget_StartsProcessAndReturnsValidPid by ensuring the string + args overload receives arguments derived from ProcessStartInfo.Arguments (which RemoteExecutor populates), rather than relying on ArgumentList (which may be empty).

Changes:

  • Maps ProcessStartInfo.Arguments into a List<string> for the Process.StartAndForget(string, IList<string>?) path.
  • Adds a local helper to split the Arguments string into an argument list for the test.

Comment threadsrc/libraries/System.Diagnostics.Process/tests/StartAndForget.cs Outdated
auto-merge was automatically disabled April 20, 2026 16:14

Head branch was pushed to by a user without write access

CopilotAI requested a review from jkotasApril 20, 2026 16:15
CopilotAI requested review from Copilot and removed request for CopilotApril 20, 2026 16:54
@adamsitnik
adamsitnik enabled auto-merge (squash) April 20, 2026 18:56
@adamsitnik
adamsitnik merged commit a8579d5 into mainApr 20, 2026
93 of 97 checks passed
@adamsitnik
adamsitnik deleted the copilot/fix-flaky-test-starts-process branch April 20, 2026 20:26
@adamsitnikadamsitnik added this to the 11.0.0 milestone Apr 20, 2026
@github-actionsgithub-actionsBot locked and limited conversation to collaborators May 21, 2026
Sign up for freeto subscribe to this conversation on GitHub. Already have an account? Sign in.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Flaky test failure in at StartAndForget_StartsProcessAndReturnsValidPid

5 participants

@adamsitnik@danmoseley@jkotas
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Force GitHub README to respect dark mode\n(function() {\n var style = document.createElement('style');\n style.textContent = '\n .markdown-body {\n color-scheme: dark light;\n }\n .markdown-body pre { background: #161b22 !important; }\n .markdown-body code { background: rgba(110, 118, 129, 0.4) !important; }\n .markdown-body table th, .markdown-body table td { border-color: #30363d !important; }\n .markdown-body img { background: #0d1117; }\n .markdown-body blockquote { border-left-color: #8b949e; }\n .markdown-body hr { border-color: #30363d; }\n ';\n document.head.appendChild(style);\n})();", "GitHub Dark Mode README Fix"); } } catch(__e) { console.warn('[Userscript:GitHub Dark Mode README Fix]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Fix StartAndForget_StartsProcessAndReturnsValidPid by mapping ProcessStartInfo.Arguments for the string+args overload - #127116

Merged
adamsitnik merged 7 commits into
mainfrom
copilot/fix-flaky-test-starts-process
Apr 20, 2026
Merged

Fix StartAndForget_StartsProcessAndReturnsValidPid by mapping ProcessStartInfo.Arguments for the string+args overload#127116
adamsitnik merged 7 commits into
mainfrom
copilot/fix-flaky-test-starts-process

Conversation

CopilotAI commented Apr 19, 2026

Copy link
Copy Markdown
Contributor

StartAndForget_StartsProcessAndReturnsValidPid was failing intermittently for useProcessStartInfo: false because the test passed template.StartInfo.ArgumentList, while RemoteExecutor populates Arguments. This could launch dotnet with effectively empty/incorrect arguments and exit early.

  • What changed

    • Reverted the prior SIGKILL-based liveness workaround and restored the original HasExited assertion path and cleanup.
    • Updated the useProcessStartInfo: false branch to map template.StartInfo.Arguments into List&lt;string&gt; and pass that list to Process.StartAndForget(string, IList&lt;string&gt;?).
    • Added a local argument parsing helper in StartAndForget.cs (based on the referenced logic from PR Add new process management APIs to SafeProcessHandle #124375) to split the Arguments string into a list.
    • Inlined MapToArgumentList(template.StartInfo) directly in the StartAndForget call so mapping is only computed when useProcessStartInfo is false.
    • Added a clarifying comment above MapToArgumentList explaining why this helper is needed in this test (RemoteExecutor uses Arguments, while this overload requires a list).
  • Code shape

usingProcesstemplate=CreateSleepProcess((int)TimeSpan.FromHours(1).TotalMilliseconds);intpid=useProcessStartInfo?Process.StartAndForget(template.StartInfo):Process.StartAndForget(template.StartInfo.FileName,MapToArgumentList(template.StartInfo));usingProcesslaunched=Process.GetProcessById(pid);try{Assert.False(launched.HasExited);}finally{launched.Kill();launched.WaitForExit();}
  • Validation
    • Ran targeted System.Diagnostics.Process tests for this area with no failures.

@dotnet-policy-service

Copy link
Copy Markdown
Contributor

Tagging subscribers to this area: @dotnet/area-system-diagnostics-process
See info in area-owners.md if you want to be subscribed.

Agent-Logs-Url: https://github.com/dotnet/runtime/sessions/c84ad3a6-2269-49a1-be61-284e675daa50
Co-authored-by: adamsitnik <6011991+adamsitnik@users.noreply.github.com>
CopilotAI requested review from Copilot and removed request for CopilotApril 19, 2026 11:32
CopilotAI requested review from Copilot and removed request for CopilotApril 19, 2026 11:37
CopilotAI changed the title [WIP] Fix flaky test failure in StartAndForget_StartsProcessAndReturnsValidPidStabilize StartAndForget_StartsProcessAndReturnsValidPid by replacing flaky HasExited checkApr 19, 2026
CopilotAI requested a review from adamsitnikApril 19, 2026 11:38

@adamsitnikadamsitnik left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

@copilot address my feedback

Comment threadsrc/libraries/System.Diagnostics.Process/tests/StartAndForget.cs Outdated
Comment threadsrc/libraries/System.Diagnostics.Process/tests/StartAndForget.cs Outdated
CopilotAI requested review from Copilot and removed request for CopilotApril 19, 2026 12:19

CopilotAI commented Apr 19, 2026

Copy link
Copy Markdown
ContributorAuthor

@copilot address my feedback

Addressed in b4ecac2. I applied the requested feedback to StartAndForget.cs and pushed the update.

@adamsitnikadamsitnik left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

From the logs:

System.Diagnostics.Tests.StartAndForgetTests.StartAndForget_StartsProcessAndReturnsValidPid(useProcessStartInfo: False) [FAIL]
Assert.True() Failure
Expected: True
Actual: False
Stack Trace:
/_/src/libraries/System.Diagnostics.Process/tests/StartAndForget.cs(30,0): at System.Diagnostics.Tests.StartAndForgetTests.StartAndForget_StartsProcessAndReturnsValidPid(Boolean useProcessStartInfo)
at System.Object.InvokeStub_StartAndForgetTests.StartAndForget_StartsProcessAndReturnsValidPid(Object, Span`1)
/_/src/libraries/System.Private.CoreLib/src/System/Reflection/MethodBaseInvoker.cs(95,0): at System.Reflection.MethodBaseInvoker.InvokeWithOneArg(Object obj, BindingFlags invokeAttr, Binder binder, Object[] parameters, CultureInfo culture)

It fails when useProcessStartInfo: False and I think I know why. RemoteExecutor is using dotnet to invoke the process using Arguments, not ArgumentsList. When we pass the ArgumentsList here:

:Process.StartAndForget(template.StartInfo.FileName,template.StartInfo.ArgumentList);

we pass an empty string, and invoke dotnet which prints sth like this:

PS C:\Users\adsitnik> dotnet
Usage: dotnet [path-to-application]
Usage: dotnet [commands]
path-to-application:
The path to an application .dll file to execute.
commands:
-h|--help Display help.
--info Display .NET information.
--list-runtimes [--arch <arch>] Display the installed runtimes matching the host or specified architecture. Example architectures: arm64, x64, x86.
--list-sdks [--arch <arch>] Display the installed SDKs matching the host or specified architecture. Example architectures: arm64, x64, x86.

And exits. That is why the process is sometimes gone when we get to HasExited check.

@copilot please do the following:

  • revert all the changes you have done here in this PR so far
  • take this logic from #124375 and simply map template.StartInfo to List<string> and pass them to StartAndForget

CopilotAI review requested due to automatic review settings April 19, 2026 20:55

@adamsitnikadamsitnik left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

LGTM

CopilotAI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Pull request overview

Fixes intermittent failures in StartAndForget_StartsProcessAndReturnsValidPid by ensuring the string + args overload receives arguments derived from ProcessStartInfo.Arguments (which RemoteExecutor populates), rather than relying on ArgumentList (which may be empty).

Changes:

  • Maps ProcessStartInfo.Arguments into a List<string> for the Process.StartAndForget(string, IList<string>?) path.
  • Adds a local helper to split the Arguments string into an argument list for the test.

Comment threadsrc/libraries/System.Diagnostics.Process/tests/StartAndForget.cs Outdated
auto-merge was automatically disabled April 20, 2026 16:14

Head branch was pushed to by a user without write access

CopilotAI requested a review from jkotasApril 20, 2026 16:15
CopilotAI requested review from Copilot and removed request for CopilotApril 20, 2026 16:54
@adamsitnik
adamsitnik enabled auto-merge (squash) April 20, 2026 18:56
@adamsitnik
adamsitnik merged commit a8579d5 into mainApr 20, 2026
93 of 97 checks passed
@adamsitnik
adamsitnik deleted the copilot/fix-flaky-test-starts-process branch April 20, 2026 20:26
@adamsitnikadamsitnik added this to the 11.0.0 milestone Apr 20, 2026
@github-actionsgithub-actionsBot locked and limited conversation to collaborators May 21, 2026
Sign up for freeto subscribe to this conversation on GitHub. Already have an account? Sign in.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Flaky test failure in at StartAndForget_StartsProcessAndReturnsValidPid

5 participants

@adamsitnik@danmoseley@jkotas
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Highlight search terms from Google/DuckDuckGo/Bing referrer\n(function() {\n var ref = document.referrer;\n var terms = [];\n \n if (ref.includes('google.com') || ref.includes('duckduckgo.com') || ref.includes('bing.com')) {\n var url = new URL(ref);\n var q = url.searchParams.get('q') || url.searchParams.get('p');\n if (q) {\n terms = q.split(/\\s+/).filter(function(t) { return t.length > 2; });\n }\n }\n \n if (terms.length === 0) return;\n \n var style = document.createElement('style');\n style.textContent = '.userscript-highlight { background: #fbbf24; color: #1a1a2e; padding: 1px 3px; border-radius: 2px; }';\n document.head.appendChild(style);\n \n function highlight(node) {\n if (node.nodeType === 3) { // text node\n var text = node.textContent;\n var found = false;\n terms.forEach(function(term) {\n var regex = new RegExp('(' + term.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\') + ')', 'gi');\n if (regex.test(text)) {\n found = true;\n var frag = document.createDocumentFragment();\n var parts = text.split(regex);\n parts.forEach(function(part, i) {\n if (i % 2 === 0) {\n frag.appendChild(document.createTextNode(part));\n } else {\n var span = document.createElement('span');\n span.className = 'userscript-highlight';\n span.textContent = part;\n frag.appendChild(span);\n }\n });\n node.parentNode.replaceChild(frag, node);\n }\n });\n } else if (node.nodeType === 1 && node.childNodes) { // element\n var skipTags = ['SCRIPT', 'STYLE', 'NOSCRIPT', 'TEXTAREA', 'INPUT', 'SELECT'];\n if (!skipTags.includes(node.tagName)) {\n Array.from(node.childNodes).forEach(highlight);\n }\n }\n }\n \n highlight(document.body);\n \n // Re-highlight on dynamic content\n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1 || node.nodeType === 3) highlight(node);\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Highlight Search Terms"); } } catch(__e) { console.warn('[Userscript:Highlight Search Terms]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Fix StartAndForget_StartsProcessAndReturnsValidPid by mapping ProcessStartInfo.Arguments for the string+args overload - #127116

Merged
adamsitnik merged 7 commits into
mainfrom
copilot/fix-flaky-test-starts-process
Apr 20, 2026
Merged

Fix StartAndForget_StartsProcessAndReturnsValidPid by mapping ProcessStartInfo.Arguments for the string+args overload#127116
adamsitnik merged 7 commits into
mainfrom
copilot/fix-flaky-test-starts-process

Conversation

CopilotAI commented Apr 19, 2026

Copy link
Copy Markdown
Contributor

StartAndForget_StartsProcessAndReturnsValidPid was failing intermittently for useProcessStartInfo: false because the test passed template.StartInfo.ArgumentList, while RemoteExecutor populates Arguments. This could launch dotnet with effectively empty/incorrect arguments and exit early.

  • What changed

    • Reverted the prior SIGKILL-based liveness workaround and restored the original HasExited assertion path and cleanup.
    • Updated the useProcessStartInfo: false branch to map template.StartInfo.Arguments into List&lt;string&gt; and pass that list to Process.StartAndForget(string, IList&lt;string&gt;?).
    • Added a local argument parsing helper in StartAndForget.cs (based on the referenced logic from PR Add new process management APIs to SafeProcessHandle #124375) to split the Arguments string into a list.
    • Inlined MapToArgumentList(template.StartInfo) directly in the StartAndForget call so mapping is only computed when useProcessStartInfo is false.
    • Added a clarifying comment above MapToArgumentList explaining why this helper is needed in this test (RemoteExecutor uses Arguments, while this overload requires a list).
  • Code shape

usingProcesstemplate=CreateSleepProcess((int)TimeSpan.FromHours(1).TotalMilliseconds);intpid=useProcessStartInfo?Process.StartAndForget(template.StartInfo):Process.StartAndForget(template.StartInfo.FileName,MapToArgumentList(template.StartInfo));usingProcesslaunched=Process.GetProcessById(pid);try{Assert.False(launched.HasExited);}finally{launched.Kill();launched.WaitForExit();}
  • Validation
    • Ran targeted System.Diagnostics.Process tests for this area with no failures.

@dotnet-policy-service

Copy link
Copy Markdown
Contributor

Tagging subscribers to this area: @dotnet/area-system-diagnostics-process
See info in area-owners.md if you want to be subscribed.

Agent-Logs-Url: https://github.com/dotnet/runtime/sessions/c84ad3a6-2269-49a1-be61-284e675daa50
Co-authored-by: adamsitnik <6011991+adamsitnik@users.noreply.github.com>
CopilotAI requested review from Copilot and removed request for CopilotApril 19, 2026 11:32
CopilotAI requested review from Copilot and removed request for CopilotApril 19, 2026 11:37
CopilotAI changed the title [WIP] Fix flaky test failure in StartAndForget_StartsProcessAndReturnsValidPidStabilize StartAndForget_StartsProcessAndReturnsValidPid by replacing flaky HasExited checkApr 19, 2026
CopilotAI requested a review from adamsitnikApril 19, 2026 11:38

@adamsitnikadamsitnik left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

@copilot address my feedback

Comment threadsrc/libraries/System.Diagnostics.Process/tests/StartAndForget.cs Outdated
Comment threadsrc/libraries/System.Diagnostics.Process/tests/StartAndForget.cs Outdated
CopilotAI requested review from Copilot and removed request for CopilotApril 19, 2026 12:19

CopilotAI commented Apr 19, 2026

Copy link
Copy Markdown
ContributorAuthor

@copilot address my feedback

Addressed in b4ecac2. I applied the requested feedback to StartAndForget.cs and pushed the update.

@adamsitnikadamsitnik left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

From the logs:

System.Diagnostics.Tests.StartAndForgetTests.StartAndForget_StartsProcessAndReturnsValidPid(useProcessStartInfo: False) [FAIL]
Assert.True() Failure
Expected: True
Actual: False
Stack Trace:
/_/src/libraries/System.Diagnostics.Process/tests/StartAndForget.cs(30,0): at System.Diagnostics.Tests.StartAndForgetTests.StartAndForget_StartsProcessAndReturnsValidPid(Boolean useProcessStartInfo)
at System.Object.InvokeStub_StartAndForgetTests.StartAndForget_StartsProcessAndReturnsValidPid(Object, Span`1)
/_/src/libraries/System.Private.CoreLib/src/System/Reflection/MethodBaseInvoker.cs(95,0): at System.Reflection.MethodBaseInvoker.InvokeWithOneArg(Object obj, BindingFlags invokeAttr, Binder binder, Object[] parameters, CultureInfo culture)

It fails when useProcessStartInfo: False and I think I know why. RemoteExecutor is using dotnet to invoke the process using Arguments, not ArgumentsList. When we pass the ArgumentsList here:

:Process.StartAndForget(template.StartInfo.FileName,template.StartInfo.ArgumentList);

we pass an empty string, and invoke dotnet which prints sth like this:

PS C:\Users\adsitnik> dotnet
Usage: dotnet [path-to-application]
Usage: dotnet [commands]
path-to-application:
The path to an application .dll file to execute.
commands:
-h|--help Display help.
--info Display .NET information.
--list-runtimes [--arch <arch>] Display the installed runtimes matching the host or specified architecture. Example architectures: arm64, x64, x86.
--list-sdks [--arch <arch>] Display the installed SDKs matching the host or specified architecture. Example architectures: arm64, x64, x86.

And exits. That is why the process is sometimes gone when we get to HasExited check.

@copilot please do the following:

  • revert all the changes you have done here in this PR so far
  • take this logic from #124375 and simply map template.StartInfo to List<string> and pass them to StartAndForget

CopilotAI review requested due to automatic review settings April 19, 2026 20:55

@adamsitnikadamsitnik left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

LGTM

CopilotAI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Pull request overview

Fixes intermittent failures in StartAndForget_StartsProcessAndReturnsValidPid by ensuring the string + args overload receives arguments derived from ProcessStartInfo.Arguments (which RemoteExecutor populates), rather than relying on ArgumentList (which may be empty).

Changes:

  • Maps ProcessStartInfo.Arguments into a List<string> for the Process.StartAndForget(string, IList<string>?) path.
  • Adds a local helper to split the Arguments string into an argument list for the test.

Comment threadsrc/libraries/System.Diagnostics.Process/tests/StartAndForget.cs Outdated
auto-merge was automatically disabled April 20, 2026 16:14

Head branch was pushed to by a user without write access

CopilotAI requested a review from jkotasApril 20, 2026 16:15
CopilotAI requested review from Copilot and removed request for CopilotApril 20, 2026 16:54
@adamsitnik
adamsitnik enabled auto-merge (squash) April 20, 2026 18:56
@adamsitnik
adamsitnik merged commit a8579d5 into mainApr 20, 2026
93 of 97 checks passed
@adamsitnik
adamsitnik deleted the copilot/fix-flaky-test-starts-process branch April 20, 2026 20:26
@adamsitnikadamsitnik added this to the 11.0.0 milestone Apr 20, 2026
@github-actionsgithub-actionsBot locked and limited conversation to collaborators May 21, 2026
Sign up for freeto subscribe to this conversation on GitHub. Already have an account? Sign in.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Flaky test failure in at StartAndForget_StartsProcessAndReturnsValidPid

5 participants

@adamsitnik@danmoseley@jkotas
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Strip utm_, fbclid, gclid, etc. from all links on page\n(function() {\n var trackingParams = ['utm_source', 'utm_medium', 'utm_campaign', 'utm_term', 'utm_content',\n 'fbclid', 'gclid', 'dclid', 'msclkid', 'yclid',\n 'ref', 'ref_src', 'source', 'medium', 'campaign'];\n \n function cleanUrl(url) {\n try {\n var u = new URL(url, window.location.origin);\n var changed = false;\n trackingParams.forEach(function(p) {\n if (u.searchParams.has(p)) {\n u.searchParams.delete(p);\n changed = true;\n }\n });\n return changed ? u.toString() : url;\n } catch (e) {\n return url;\n }\n }\n \n function cleanLinks() {\n document.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n \n cleanLinks();\n \n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1) {\n if (node.tagName === 'A') cleanLinks();\n node.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Remove Tracking Parameters from Links"); } } catch(__e) { console.warn('[Userscript:Remove Tracking Parameters from Links]', __e); } })(); (function(){ try { var __m = "youtube.com"; var __re = new RegExp('^' + "youtube\\.com" + '
Skip to content

Fix StartAndForget_StartsProcessAndReturnsValidPid by mapping ProcessStartInfo.Arguments for the string+args overload - #127116

Merged
adamsitnik merged 7 commits into
mainfrom
copilot/fix-flaky-test-starts-process
Apr 20, 2026
Merged

Fix StartAndForget_StartsProcessAndReturnsValidPid by mapping ProcessStartInfo.Arguments for the string+args overload#127116
adamsitnik merged 7 commits into
mainfrom
copilot/fix-flaky-test-starts-process

Conversation

CopilotAI commented Apr 19, 2026

Copy link
Copy Markdown
Contributor

StartAndForget_StartsProcessAndReturnsValidPid was failing intermittently for useProcessStartInfo: false because the test passed template.StartInfo.ArgumentList, while RemoteExecutor populates Arguments. This could launch dotnet with effectively empty/incorrect arguments and exit early.

  • What changed

    • Reverted the prior SIGKILL-based liveness workaround and restored the original HasExited assertion path and cleanup.
    • Updated the useProcessStartInfo: false branch to map template.StartInfo.Arguments into List&lt;string&gt; and pass that list to Process.StartAndForget(string, IList&lt;string&gt;?).
    • Added a local argument parsing helper in StartAndForget.cs (based on the referenced logic from PR Add new process management APIs to SafeProcessHandle #124375) to split the Arguments string into a list.
    • Inlined MapToArgumentList(template.StartInfo) directly in the StartAndForget call so mapping is only computed when useProcessStartInfo is false.
    • Added a clarifying comment above MapToArgumentList explaining why this helper is needed in this test (RemoteExecutor uses Arguments, while this overload requires a list).
  • Code shape

usingProcesstemplate=CreateSleepProcess((int)TimeSpan.FromHours(1).TotalMilliseconds);intpid=useProcessStartInfo?Process.StartAndForget(template.StartInfo):Process.StartAndForget(template.StartInfo.FileName,MapToArgumentList(template.StartInfo));usingProcesslaunched=Process.GetProcessById(pid);try{Assert.False(launched.HasExited);}finally{launched.Kill();launched.WaitForExit();}
  • Validation
    • Ran targeted System.Diagnostics.Process tests for this area with no failures.

@dotnet-policy-service

Copy link
Copy Markdown
Contributor

Tagging subscribers to this area: @dotnet/area-system-diagnostics-process
See info in area-owners.md if you want to be subscribed.

Agent-Logs-Url: https://github.com/dotnet/runtime/sessions/c84ad3a6-2269-49a1-be61-284e675daa50
Co-authored-by: adamsitnik <6011991+adamsitnik@users.noreply.github.com>
CopilotAI requested review from Copilot and removed request for CopilotApril 19, 2026 11:32
CopilotAI requested review from Copilot and removed request for CopilotApril 19, 2026 11:37
CopilotAI changed the title [WIP] Fix flaky test failure in StartAndForget_StartsProcessAndReturnsValidPidStabilize StartAndForget_StartsProcessAndReturnsValidPid by replacing flaky HasExited checkApr 19, 2026
CopilotAI requested a review from adamsitnikApril 19, 2026 11:38

@adamsitnikadamsitnik left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

@copilot address my feedback

Comment threadsrc/libraries/System.Diagnostics.Process/tests/StartAndForget.cs Outdated
Comment threadsrc/libraries/System.Diagnostics.Process/tests/StartAndForget.cs Outdated
CopilotAI requested review from Copilot and removed request for CopilotApril 19, 2026 12:19

CopilotAI commented Apr 19, 2026

Copy link
Copy Markdown
ContributorAuthor

@copilot address my feedback

Addressed in b4ecac2. I applied the requested feedback to StartAndForget.cs and pushed the update.

@adamsitnikadamsitnik left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

From the logs:

System.Diagnostics.Tests.StartAndForgetTests.StartAndForget_StartsProcessAndReturnsValidPid(useProcessStartInfo: False) [FAIL]
Assert.True() Failure
Expected: True
Actual: False
Stack Trace:
/_/src/libraries/System.Diagnostics.Process/tests/StartAndForget.cs(30,0): at System.Diagnostics.Tests.StartAndForgetTests.StartAndForget_StartsProcessAndReturnsValidPid(Boolean useProcessStartInfo)
at System.Object.InvokeStub_StartAndForgetTests.StartAndForget_StartsProcessAndReturnsValidPid(Object, Span`1)
/_/src/libraries/System.Private.CoreLib/src/System/Reflection/MethodBaseInvoker.cs(95,0): at System.Reflection.MethodBaseInvoker.InvokeWithOneArg(Object obj, BindingFlags invokeAttr, Binder binder, Object[] parameters, CultureInfo culture)

It fails when useProcessStartInfo: False and I think I know why. RemoteExecutor is using dotnet to invoke the process using Arguments, not ArgumentsList. When we pass the ArgumentsList here:

:Process.StartAndForget(template.StartInfo.FileName,template.StartInfo.ArgumentList);

we pass an empty string, and invoke dotnet which prints sth like this:

PS C:\Users\adsitnik> dotnet
Usage: dotnet [path-to-application]
Usage: dotnet [commands]
path-to-application:
The path to an application .dll file to execute.
commands:
-h|--help Display help.
--info Display .NET information.
--list-runtimes [--arch <arch>] Display the installed runtimes matching the host or specified architecture. Example architectures: arm64, x64, x86.
--list-sdks [--arch <arch>] Display the installed SDKs matching the host or specified architecture. Example architectures: arm64, x64, x86.

And exits. That is why the process is sometimes gone when we get to HasExited check.

@copilot please do the following:

  • revert all the changes you have done here in this PR so far
  • take this logic from #124375 and simply map template.StartInfo to List<string> and pass them to StartAndForget

CopilotAI review requested due to automatic review settings April 19, 2026 20:55

@adamsitnikadamsitnik left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

LGTM

CopilotAI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Pull request overview

Fixes intermittent failures in StartAndForget_StartsProcessAndReturnsValidPid by ensuring the string + args overload receives arguments derived from ProcessStartInfo.Arguments (which RemoteExecutor populates), rather than relying on ArgumentList (which may be empty).

Changes:

  • Maps ProcessStartInfo.Arguments into a List<string> for the Process.StartAndForget(string, IList<string>?) path.
  • Adds a local helper to split the Arguments string into an argument list for the test.

Comment threadsrc/libraries/System.Diagnostics.Process/tests/StartAndForget.cs Outdated
auto-merge was automatically disabled April 20, 2026 16:14

Head branch was pushed to by a user without write access

CopilotAI requested a review from jkotasApril 20, 2026 16:15
CopilotAI requested review from Copilot and removed request for CopilotApril 20, 2026 16:54
@adamsitnik
adamsitnik enabled auto-merge (squash) April 20, 2026 18:56
@adamsitnik
adamsitnik merged commit a8579d5 into mainApr 20, 2026
93 of 97 checks passed
@adamsitnik
adamsitnik deleted the copilot/fix-flaky-test-starts-process branch April 20, 2026 20:26
@adamsitnikadamsitnik added this to the 11.0.0 milestone Apr 20, 2026
@github-actionsgithub-actionsBot locked and limited conversation to collaborators May 21, 2026
Sign up for freeto subscribe to this conversation on GitHub. Already have an account? Sign in.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Flaky test failure in at StartAndForget_StartsProcessAndReturnsValidPid

5 participants

@adamsitnik@danmoseley@jkotas
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Auto-enable theater mode on YouTube\n(function() {\n function tryTheater() {\n var btn = document.querySelector('button[aria-label=\"Theater mode\"], ytd-player #player button[title=\"Theater mode\"]');\n if (btn && !btn.classList.contains('activated')) {\n btn.click();\n }\n }\n \n // Try immediately\n tryTheater();\n \n // Try after navigation (SPA)\n var lastUrl = location.href;\n setInterval(function() {\n if (location.href !== lastUrl) {\n lastUrl = location.href;\n setTimeout(tryTheater, 500);\n }\n }, 1000);\n \n // Also try on player load\n var observer = new MutationObserver(tryTheater);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "YouTube Theater Mode Default"); } } catch(__e) { console.warn('[Userscript:YouTube Theater Mode Default]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Fix StartAndForget_StartsProcessAndReturnsValidPid by mapping ProcessStartInfo.Arguments for the string+args overload - #127116

Merged
adamsitnik merged 7 commits into
mainfrom
copilot/fix-flaky-test-starts-process
Apr 20, 2026
Merged

Fix StartAndForget_StartsProcessAndReturnsValidPid by mapping ProcessStartInfo.Arguments for the string+args overload#127116
adamsitnik merged 7 commits into
mainfrom
copilot/fix-flaky-test-starts-process

Conversation

CopilotAI commented Apr 19, 2026

Copy link
Copy Markdown
Contributor

StartAndForget_StartsProcessAndReturnsValidPid was failing intermittently for useProcessStartInfo: false because the test passed template.StartInfo.ArgumentList, while RemoteExecutor populates Arguments. This could launch dotnet with effectively empty/incorrect arguments and exit early.

  • What changed

    • Reverted the prior SIGKILL-based liveness workaround and restored the original HasExited assertion path and cleanup.
    • Updated the useProcessStartInfo: false branch to map template.StartInfo.Arguments into List&lt;string&gt; and pass that list to Process.StartAndForget(string, IList&lt;string&gt;?).
    • Added a local argument parsing helper in StartAndForget.cs (based on the referenced logic from PR Add new process management APIs to SafeProcessHandle #124375) to split the Arguments string into a list.
    • Inlined MapToArgumentList(template.StartInfo) directly in the StartAndForget call so mapping is only computed when useProcessStartInfo is false.
    • Added a clarifying comment above MapToArgumentList explaining why this helper is needed in this test (RemoteExecutor uses Arguments, while this overload requires a list).
  • Code shape

usingProcesstemplate=CreateSleepProcess((int)TimeSpan.FromHours(1).TotalMilliseconds);intpid=useProcessStartInfo?Process.StartAndForget(template.StartInfo):Process.StartAndForget(template.StartInfo.FileName,MapToArgumentList(template.StartInfo));usingProcesslaunched=Process.GetProcessById(pid);try{Assert.False(launched.HasExited);}finally{launched.Kill();launched.WaitForExit();}
  • Validation
    • Ran targeted System.Diagnostics.Process tests for this area with no failures.

@dotnet-policy-service

Copy link
Copy Markdown
Contributor

Tagging subscribers to this area: @dotnet/area-system-diagnostics-process
See info in area-owners.md if you want to be subscribed.

Agent-Logs-Url: https://github.com/dotnet/runtime/sessions/c84ad3a6-2269-49a1-be61-284e675daa50
Co-authored-by: adamsitnik <6011991+adamsitnik@users.noreply.github.com>
CopilotAI requested review from Copilot and removed request for CopilotApril 19, 2026 11:32
CopilotAI requested review from Copilot and removed request for CopilotApril 19, 2026 11:37
CopilotAI changed the title [WIP] Fix flaky test failure in StartAndForget_StartsProcessAndReturnsValidPidStabilize StartAndForget_StartsProcessAndReturnsValidPid by replacing flaky HasExited checkApr 19, 2026
CopilotAI requested a review from adamsitnikApril 19, 2026 11:38

@adamsitnikadamsitnik left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

@copilot address my feedback

Comment threadsrc/libraries/System.Diagnostics.Process/tests/StartAndForget.cs Outdated
Comment threadsrc/libraries/System.Diagnostics.Process/tests/StartAndForget.cs Outdated
CopilotAI requested review from Copilot and removed request for CopilotApril 19, 2026 12:19

CopilotAI commented Apr 19, 2026

Copy link
Copy Markdown
ContributorAuthor

@copilot address my feedback

Addressed in b4ecac2. I applied the requested feedback to StartAndForget.cs and pushed the update.

@adamsitnikadamsitnik left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

From the logs:

System.Diagnostics.Tests.StartAndForgetTests.StartAndForget_StartsProcessAndReturnsValidPid(useProcessStartInfo: False) [FAIL]
Assert.True() Failure
Expected: True
Actual: False
Stack Trace:
/_/src/libraries/System.Diagnostics.Process/tests/StartAndForget.cs(30,0): at System.Diagnostics.Tests.StartAndForgetTests.StartAndForget_StartsProcessAndReturnsValidPid(Boolean useProcessStartInfo)
at System.Object.InvokeStub_StartAndForgetTests.StartAndForget_StartsProcessAndReturnsValidPid(Object, Span`1)
/_/src/libraries/System.Private.CoreLib/src/System/Reflection/MethodBaseInvoker.cs(95,0): at System.Reflection.MethodBaseInvoker.InvokeWithOneArg(Object obj, BindingFlags invokeAttr, Binder binder, Object[] parameters, CultureInfo culture)

It fails when useProcessStartInfo: False and I think I know why. RemoteExecutor is using dotnet to invoke the process using Arguments, not ArgumentsList. When we pass the ArgumentsList here:

:Process.StartAndForget(template.StartInfo.FileName,template.StartInfo.ArgumentList);

we pass an empty string, and invoke dotnet which prints sth like this:

PS C:\Users\adsitnik> dotnet
Usage: dotnet [path-to-application]
Usage: dotnet [commands]
path-to-application:
The path to an application .dll file to execute.
commands:
-h|--help Display help.
--info Display .NET information.
--list-runtimes [--arch <arch>] Display the installed runtimes matching the host or specified architecture. Example architectures: arm64, x64, x86.
--list-sdks [--arch <arch>] Display the installed SDKs matching the host or specified architecture. Example architectures: arm64, x64, x86.

And exits. That is why the process is sometimes gone when we get to HasExited check.

@copilot please do the following:

  • revert all the changes you have done here in this PR so far
  • take this logic from #124375 and simply map template.StartInfo to List<string> and pass them to StartAndForget

CopilotAI review requested due to automatic review settings April 19, 2026 20:55

@adamsitnikadamsitnik left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

LGTM

CopilotAI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Pull request overview

Fixes intermittent failures in StartAndForget_StartsProcessAndReturnsValidPid by ensuring the string + args overload receives arguments derived from ProcessStartInfo.Arguments (which RemoteExecutor populates), rather than relying on ArgumentList (which may be empty).

Changes:

  • Maps ProcessStartInfo.Arguments into a List<string> for the Process.StartAndForget(string, IList<string>?) path.
  • Adds a local helper to split the Arguments string into an argument list for the test.

Comment threadsrc/libraries/System.Diagnostics.Process/tests/StartAndForget.cs Outdated
auto-merge was automatically disabled April 20, 2026 16:14

Head branch was pushed to by a user without write access

CopilotAI requested a review from jkotasApril 20, 2026 16:15
CopilotAI requested review from Copilot and removed request for CopilotApril 20, 2026 16:54
@adamsitnik
adamsitnik enabled auto-merge (squash) April 20, 2026 18:56
@adamsitnik
adamsitnik merged commit a8579d5 into mainApr 20, 2026
93 of 97 checks passed
@adamsitnik
adamsitnik deleted the copilot/fix-flaky-test-starts-process branch April 20, 2026 20:26
@adamsitnikadamsitnik added this to the 11.0.0 milestone Apr 20, 2026
@github-actionsgithub-actionsBot locked and limited conversation to collaborators May 21, 2026
Sign up for freeto subscribe to this conversation on GitHub. Already have an account? Sign in.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Flaky test failure in at StartAndForget_StartsProcessAndReturnsValidPid

5 participants

@adamsitnik@danmoseley@jkotas
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Remove or un-stick sticky/fixed headers that block content\n(function() {\n function unstick() {\n document.querySelectorAll('header, nav, [role=\"banner\"], .header, .navbar, .sticky, .fixed-top, [style*=\"position: fixed\"], [style*=\"position:sticky\"]').forEach(function(el) {\n if (el.style.position === 'fixed' || el.style.position === 'sticky' || \n getComputedStyle(el).position === 'fixed' || getComputedStyle(el).position === 'sticky') {\n el.style.position = 'static';\n el.style.top = 'auto';\n el.style.zIndex = 'auto';\n }\n });\n }\n \n unstick();\n \n var observer = new MutationObserver(unstick);\n observer.observe(document.body, { childList: true, subtree: true, attributes: true, attributeFilter: ['style', 'class'] });\n})();", "Kill Sticky Headers"); } } catch(__e) { console.warn('[Userscript:Kill Sticky Headers]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Fix StartAndForget_StartsProcessAndReturnsValidPid by mapping ProcessStartInfo.Arguments for the string+args overload - #127116

Merged
adamsitnik merged 7 commits into
mainfrom
copilot/fix-flaky-test-starts-process
Apr 20, 2026
Merged

Fix StartAndForget_StartsProcessAndReturnsValidPid by mapping ProcessStartInfo.Arguments for the string+args overload#127116
adamsitnik merged 7 commits into
mainfrom
copilot/fix-flaky-test-starts-process

Conversation

CopilotAI commented Apr 19, 2026

Copy link
Copy Markdown
Contributor

StartAndForget_StartsProcessAndReturnsValidPid was failing intermittently for useProcessStartInfo: false because the test passed template.StartInfo.ArgumentList, while RemoteExecutor populates Arguments. This could launch dotnet with effectively empty/incorrect arguments and exit early.

  • What changed

    • Reverted the prior SIGKILL-based liveness workaround and restored the original HasExited assertion path and cleanup.
    • Updated the useProcessStartInfo: false branch to map template.StartInfo.Arguments into List&lt;string&gt; and pass that list to Process.StartAndForget(string, IList&lt;string&gt;?).
    • Added a local argument parsing helper in StartAndForget.cs (based on the referenced logic from PR Add new process management APIs to SafeProcessHandle #124375) to split the Arguments string into a list.
    • Inlined MapToArgumentList(template.StartInfo) directly in the StartAndForget call so mapping is only computed when useProcessStartInfo is false.
    • Added a clarifying comment above MapToArgumentList explaining why this helper is needed in this test (RemoteExecutor uses Arguments, while this overload requires a list).
  • Code shape

usingProcesstemplate=CreateSleepProcess((int)TimeSpan.FromHours(1).TotalMilliseconds);intpid=useProcessStartInfo?Process.StartAndForget(template.StartInfo):Process.StartAndForget(template.StartInfo.FileName,MapToArgumentList(template.StartInfo));usingProcesslaunched=Process.GetProcessById(pid);try{Assert.False(launched.HasExited);}finally{launched.Kill();launched.WaitForExit();}
  • Validation
    • Ran targeted System.Diagnostics.Process tests for this area with no failures.

@dotnet-policy-service

Copy link
Copy Markdown
Contributor

Tagging subscribers to this area: @dotnet/area-system-diagnostics-process
See info in area-owners.md if you want to be subscribed.

Agent-Logs-Url: https://github.com/dotnet/runtime/sessions/c84ad3a6-2269-49a1-be61-284e675daa50
Co-authored-by: adamsitnik <6011991+adamsitnik@users.noreply.github.com>
CopilotAI requested review from Copilot and removed request for CopilotApril 19, 2026 11:32
CopilotAI requested review from Copilot and removed request for CopilotApril 19, 2026 11:37
CopilotAI changed the title [WIP] Fix flaky test failure in StartAndForget_StartsProcessAndReturnsValidPidStabilize StartAndForget_StartsProcessAndReturnsValidPid by replacing flaky HasExited checkApr 19, 2026
CopilotAI requested a review from adamsitnikApril 19, 2026 11:38

@adamsitnikadamsitnik left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

@copilot address my feedback

Comment threadsrc/libraries/System.Diagnostics.Process/tests/StartAndForget.cs Outdated
Comment threadsrc/libraries/System.Diagnostics.Process/tests/StartAndForget.cs Outdated
CopilotAI requested review from Copilot and removed request for CopilotApril 19, 2026 12:19

CopilotAI commented Apr 19, 2026

Copy link
Copy Markdown
ContributorAuthor

@copilot address my feedback

Addressed in b4ecac2. I applied the requested feedback to StartAndForget.cs and pushed the update.

@adamsitnikadamsitnik left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

From the logs:

System.Diagnostics.Tests.StartAndForgetTests.StartAndForget_StartsProcessAndReturnsValidPid(useProcessStartInfo: False) [FAIL]
Assert.True() Failure
Expected: True
Actual: False
Stack Trace:
/_/src/libraries/System.Diagnostics.Process/tests/StartAndForget.cs(30,0): at System.Diagnostics.Tests.StartAndForgetTests.StartAndForget_StartsProcessAndReturnsValidPid(Boolean useProcessStartInfo)
at System.Object.InvokeStub_StartAndForgetTests.StartAndForget_StartsProcessAndReturnsValidPid(Object, Span`1)
/_/src/libraries/System.Private.CoreLib/src/System/Reflection/MethodBaseInvoker.cs(95,0): at System.Reflection.MethodBaseInvoker.InvokeWithOneArg(Object obj, BindingFlags invokeAttr, Binder binder, Object[] parameters, CultureInfo culture)

It fails when useProcessStartInfo: False and I think I know why. RemoteExecutor is using dotnet to invoke the process using Arguments, not ArgumentsList. When we pass the ArgumentsList here:

:Process.StartAndForget(template.StartInfo.FileName,template.StartInfo.ArgumentList);

we pass an empty string, and invoke dotnet which prints sth like this:

PS C:\Users\adsitnik> dotnet
Usage: dotnet [path-to-application]
Usage: dotnet [commands]
path-to-application:
The path to an application .dll file to execute.
commands:
-h|--help Display help.
--info Display .NET information.
--list-runtimes [--arch <arch>] Display the installed runtimes matching the host or specified architecture. Example architectures: arm64, x64, x86.
--list-sdks [--arch <arch>] Display the installed SDKs matching the host or specified architecture. Example architectures: arm64, x64, x86.

And exits. That is why the process is sometimes gone when we get to HasExited check.

@copilot please do the following:

  • revert all the changes you have done here in this PR so far
  • take this logic from #124375 and simply map template.StartInfo to List<string> and pass them to StartAndForget

CopilotAI review requested due to automatic review settings April 19, 2026 20:55

@adamsitnikadamsitnik left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

LGTM

CopilotAI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Pull request overview

Fixes intermittent failures in StartAndForget_StartsProcessAndReturnsValidPid by ensuring the string + args overload receives arguments derived from ProcessStartInfo.Arguments (which RemoteExecutor populates), rather than relying on ArgumentList (which may be empty).

Changes:

  • Maps ProcessStartInfo.Arguments into a List<string> for the Process.StartAndForget(string, IList<string>?) path.
  • Adds a local helper to split the Arguments string into an argument list for the test.

Comment threadsrc/libraries/System.Diagnostics.Process/tests/StartAndForget.cs Outdated
auto-merge was automatically disabled April 20, 2026 16:14

Head branch was pushed to by a user without write access

CopilotAI requested a review from jkotasApril 20, 2026 16:15
CopilotAI requested review from Copilot and removed request for CopilotApril 20, 2026 16:54
@adamsitnik
adamsitnik enabled auto-merge (squash) April 20, 2026 18:56
@adamsitnik
adamsitnik merged commit a8579d5 into mainApr 20, 2026
93 of 97 checks passed
@adamsitnik
adamsitnik deleted the copilot/fix-flaky-test-starts-process branch April 20, 2026 20:26
@adamsitnikadamsitnik added this to the 11.0.0 milestone Apr 20, 2026
@github-actionsgithub-actionsBot locked and limited conversation to collaborators May 21, 2026
Sign up for freeto subscribe to this conversation on GitHub. Already have an account? Sign in.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Flaky test failure in at StartAndForget_StartsProcessAndReturnsValidPid

5 participants

@adamsitnik@danmoseley@jkotas
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Universal Dark Mode - works on any site\n(function() {\n var enabled = true;\n \n function applyDarkMode() {\n if (!enabled) return;\n \n // Create style element if it doesn't exist\n var style = document.getElementById('universal-dark-mode-style');\n if (!style) {\n style = document.createElement('style');\n style.id = 'universal-dark-mode-style';\n document.head.appendChild(style);\n }\n \n // Dark mode CSS - inverts colors but preserves images/video\n style.textContent = '\n /* Invert everything except media */\n html {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #1a1a2e !important;\n }\n \n /* Restore images, videos, iframes, canvas */\n img, video, iframe, canvas, svg, picture, [style*=\"background-image\"] {\n filter: invert(1) hue-rotate(180deg) !important;\n }\n \n /* Preserve specific elements that should not be inverted */\n .no-dark-mode, .no-dark-mode *,\n [data-theme=\"light\"], [data-theme=\"light\"],\n .ace_editor, .ace_editor *,\n .CodeMirror, .CodeMirror *,\n .monaco-editor, .monaco-editor *,\n .markdown-body pre, .markdown-body pre *,\n .highlight, .highlight *,\n pre code, pre code * {\n filter: none !important;\n }\n \n /* Fix common UI elements */\n .modal, .popup, .dropdown-menu, .tooltip, .popover {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #2d2d44 !important;\n border-color: #444 !important;\n }\n \n /* Scrollbars */\n ::-webkit-scrollbar { background: #1a1a2e !important; }\n ::-webkit-scrollbar-thumb { background: #444 !important; }\n ::-webkit-scrollbar-thumb:hover { background: #555 !important; }\n \n /* Selection */\n ::selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ::-moz-selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ';\n }\n \n function removeDarkMode() {\n var style = document.getElementById('universal-dark-mode-style');\n if (style) style.remove();\n }\n \n // Toggle with Alt+Shift+D\n document.addEventListener('keydown', function(e) {\n if (e.altKey && e.shiftKey && e.key === 'D') {\n e.preventDefault();\n enabled = !enabled;\n if (enabled) {\n applyDarkMode();\n console.log('[Universal Dark Mode] Enabled');\n } else {\n removeDarkMode();\n console.log('[Universal Dark Mode] Disabled');\n }\n }\n });\n \n // Apply on load\n applyDarkMode();\n \n // Re-apply on dynamic content\n var observer = new MutationObserver(function(mutations) {\n if (enabled && !document.getElementById('universal-dark-mode-style')) {\n applyDarkMode();\n }\n });\n observer.observe(document.head, { childList: true });\n \n console.log('[Universal Dark Mode] Loaded - Press Alt+Shift+D to toggle');\n})();", "Universal Dark Mode"); } } catch(__e) { console.warn('[Userscript:Universal Dark Mode]', __e); } })(); })();
Skip to content

Fix StartAndForget_StartsProcessAndReturnsValidPid by mapping ProcessStartInfo.Arguments for the string+args overload - #127116

Merged
adamsitnik merged 7 commits into
mainfrom
copilot/fix-flaky-test-starts-process
Apr 20, 2026
Merged

Fix StartAndForget_StartsProcessAndReturnsValidPid by mapping ProcessStartInfo.Arguments for the string+args overload#127116
adamsitnik merged 7 commits into
mainfrom
copilot/fix-flaky-test-starts-process

Conversation

CopilotAI commented Apr 19, 2026

Copy link
Copy Markdown
Contributor

StartAndForget_StartsProcessAndReturnsValidPid was failing intermittently for useProcessStartInfo: false because the test passed template.StartInfo.ArgumentList, while RemoteExecutor populates Arguments. This could launch dotnet with effectively empty/incorrect arguments and exit early.

  • What changed

    • Reverted the prior SIGKILL-based liveness workaround and restored the original HasExited assertion path and cleanup.
    • Updated the useProcessStartInfo: false branch to map template.StartInfo.Arguments into List&lt;string&gt; and pass that list to Process.StartAndForget(string, IList&lt;string&gt;?).
    • Added a local argument parsing helper in StartAndForget.cs (based on the referenced logic from PR Add new process management APIs to SafeProcessHandle #124375) to split the Arguments string into a list.
    • Inlined MapToArgumentList(template.StartInfo) directly in the StartAndForget call so mapping is only computed when useProcessStartInfo is false.
    • Added a clarifying comment above MapToArgumentList explaining why this helper is needed in this test (RemoteExecutor uses Arguments, while this overload requires a list).
  • Code shape

usingProcesstemplate=CreateSleepProcess((int)TimeSpan.FromHours(1).TotalMilliseconds);intpid=useProcessStartInfo?Process.StartAndForget(template.StartInfo):Process.StartAndForget(template.StartInfo.FileName,MapToArgumentList(template.StartInfo));usingProcesslaunched=Process.GetProcessById(pid);try{Assert.False(launched.HasExited);}finally{launched.Kill();launched.WaitForExit();}
  • Validation
    • Ran targeted System.Diagnostics.Process tests for this area with no failures.

@dotnet-policy-service

Copy link
Copy Markdown
Contributor

Tagging subscribers to this area: @dotnet/area-system-diagnostics-process
See info in area-owners.md if you want to be subscribed.

Agent-Logs-Url: https://github.com/dotnet/runtime/sessions/c84ad3a6-2269-49a1-be61-284e675daa50
Co-authored-by: adamsitnik <6011991+adamsitnik@users.noreply.github.com>
CopilotAI requested review from Copilot and removed request for CopilotApril 19, 2026 11:32
CopilotAI requested review from Copilot and removed request for CopilotApril 19, 2026 11:37
CopilotAI changed the title [WIP] Fix flaky test failure in StartAndForget_StartsProcessAndReturnsValidPidStabilize StartAndForget_StartsProcessAndReturnsValidPid by replacing flaky HasExited checkApr 19, 2026
CopilotAI requested a review from adamsitnikApril 19, 2026 11:38

@adamsitnikadamsitnik left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

@copilot address my feedback

Comment threadsrc/libraries/System.Diagnostics.Process/tests/StartAndForget.cs Outdated
Comment threadsrc/libraries/System.Diagnostics.Process/tests/StartAndForget.cs Outdated
CopilotAI requested review from Copilot and removed request for CopilotApril 19, 2026 12:19

CopilotAI commented Apr 19, 2026

Copy link
Copy Markdown
ContributorAuthor

@copilot address my feedback

Addressed in b4ecac2. I applied the requested feedback to StartAndForget.cs and pushed the update.

@adamsitnikadamsitnik left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

From the logs:

System.Diagnostics.Tests.StartAndForgetTests.StartAndForget_StartsProcessAndReturnsValidPid(useProcessStartInfo: False) [FAIL]
Assert.True() Failure
Expected: True
Actual: False
Stack Trace:
/_/src/libraries/System.Diagnostics.Process/tests/StartAndForget.cs(30,0): at System.Diagnostics.Tests.StartAndForgetTests.StartAndForget_StartsProcessAndReturnsValidPid(Boolean useProcessStartInfo)
at System.Object.InvokeStub_StartAndForgetTests.StartAndForget_StartsProcessAndReturnsValidPid(Object, Span`1)
/_/src/libraries/System.Private.CoreLib/src/System/Reflection/MethodBaseInvoker.cs(95,0): at System.Reflection.MethodBaseInvoker.InvokeWithOneArg(Object obj, BindingFlags invokeAttr, Binder binder, Object[] parameters, CultureInfo culture)

It fails when useProcessStartInfo: False and I think I know why. RemoteExecutor is using dotnet to invoke the process using Arguments, not ArgumentsList. When we pass the ArgumentsList here:

:Process.StartAndForget(template.StartInfo.FileName,template.StartInfo.ArgumentList);

we pass an empty string, and invoke dotnet which prints sth like this:

PS C:\Users\adsitnik> dotnet
Usage: dotnet [path-to-application]
Usage: dotnet [commands]
path-to-application:
The path to an application .dll file to execute.
commands:
-h|--help Display help.
--info Display .NET information.
--list-runtimes [--arch <arch>] Display the installed runtimes matching the host or specified architecture. Example architectures: arm64, x64, x86.
--list-sdks [--arch <arch>] Display the installed SDKs matching the host or specified architecture. Example architectures: arm64, x64, x86.

And exits. That is why the process is sometimes gone when we get to HasExited check.

@copilot please do the following:

  • revert all the changes you have done here in this PR so far
  • take this logic from #124375 and simply map template.StartInfo to List<string> and pass them to StartAndForget

CopilotAI review requested due to automatic review settings April 19, 2026 20:55

@adamsitnikadamsitnik left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

LGTM

CopilotAI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Pull request overview

Fixes intermittent failures in StartAndForget_StartsProcessAndReturnsValidPid by ensuring the string + args overload receives arguments derived from ProcessStartInfo.Arguments (which RemoteExecutor populates), rather than relying on ArgumentList (which may be empty).

Changes:

  • Maps ProcessStartInfo.Arguments into a List<string> for the Process.StartAndForget(string, IList<string>?) path.
  • Adds a local helper to split the Arguments string into an argument list for the test.

Comment threadsrc/libraries/System.Diagnostics.Process/tests/StartAndForget.cs Outdated
auto-merge was automatically disabled April 20, 2026 16:14

Head branch was pushed to by a user without write access

CopilotAI requested a review from jkotasApril 20, 2026 16:15
CopilotAI requested review from Copilot and removed request for CopilotApril 20, 2026 16:54
@adamsitnik
adamsitnik enabled auto-merge (squash) April 20, 2026 18:56
@adamsitnik
adamsitnik merged commit a8579d5 into mainApr 20, 2026
93 of 97 checks passed
@adamsitnik
adamsitnik deleted the copilot/fix-flaky-test-starts-process branch April 20, 2026 20:26
@adamsitnikadamsitnik added this to the 11.0.0 milestone Apr 20, 2026
@github-actionsgithub-actionsBot locked and limited conversation to collaborators May 21, 2026
Sign up for freeto subscribe to this conversation on GitHub. Already have an account? Sign in.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Flaky test failure in at StartAndForget_StartsProcessAndReturnsValidPid

5 participants

@adamsitnik@danmoseley@jkotas