From da44c78b32531c75f679e4dc5d644f745effc1a0 Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Fri, 30 Jan 2026 16:45:58 +0000 Subject: [PATCH 1/5] Initial plan From c5fa427020e7ee999b7d6db2be708ec4c0adbc49 Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Fri, 30 Jan 2026 16:50:20 +0000 Subject: [PATCH 2/5] Fix intermittent race condition in AutomaticInputRequiredStatusTests Co-authored-by: ericstj <8918108+ericstj@users.noreply.github.com> --- .../Server/AutomaticInputRequiredStatusTests.cs | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/tests/ModelContextProtocol.Tests/Server/AutomaticInputRequiredStatusTests.cs b/tests/ModelContextProtocol.Tests/Server/AutomaticInputRequiredStatusTests.cs index 788e56c50..0476335b4 100644 --- a/tests/ModelContextProtocol.Tests/Server/AutomaticInputRequiredStatusTests.cs +++ b/tests/ModelContextProtocol.Tests/Server/AutomaticInputRequiredStatusTests.cs @@ -119,7 +119,7 @@ public async Task TaskStatus_TransitionsToInputRequired_DuringSampleAsync() finalStatus = await taskStore.GetTaskAsync(mcpTask.TaskId, cancellationToken: TestContext.Current.CancellationToken); maxAttempts--; } - while (finalStatus?.Status == McpTaskStatus.Working && maxAttempts > 0); + while ((finalStatus?.Status == McpTaskStatus.Working || finalStatus?.Status == McpTaskStatus.InputRequired) && maxAttempts > 0); // Assert - Status should have been InputRequired during sampling Assert.Contains(McpTaskStatus.InputRequired, statusesDuringSampling); @@ -218,7 +218,7 @@ public async Task TaskStatus_TransitionsToInputRequired_DuringElicitAsync() finalStatus = await taskStore.GetTaskAsync(mcpTask.TaskId, cancellationToken: TestContext.Current.CancellationToken); maxAttempts--; } - while (finalStatus?.Status == McpTaskStatus.Working && maxAttempts > 0); + while ((finalStatus?.Status == McpTaskStatus.Working || finalStatus?.Status == McpTaskStatus.InputRequired) && maxAttempts > 0); // Assert - Status should have been InputRequired during elicitation Assert.Contains(McpTaskStatus.InputRequired, statusesDuringElicitation); From 3a10c5987c49e449d1b569c29f206bca5bf74312 Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Fri, 30 Jan 2026 17:46:34 +0000 Subject: [PATCH 3/5] Use pattern matching syntax for status checks Co-authored-by: stephentoub <2642209+stephentoub@users.noreply.github.com> --- .../Server/AutomaticInputRequiredStatusTests.cs | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/tests/ModelContextProtocol.Tests/Server/AutomaticInputRequiredStatusTests.cs b/tests/ModelContextProtocol.Tests/Server/AutomaticInputRequiredStatusTests.cs index 0476335b4..2250ee8fc 100644 --- a/tests/ModelContextProtocol.Tests/Server/AutomaticInputRequiredStatusTests.cs +++ b/tests/ModelContextProtocol.Tests/Server/AutomaticInputRequiredStatusTests.cs @@ -119,7 +119,7 @@ public async Task TaskStatus_TransitionsToInputRequired_DuringSampleAsync() finalStatus = await taskStore.GetTaskAsync(mcpTask.TaskId, cancellationToken: TestContext.Current.CancellationToken); maxAttempts--; } - while ((finalStatus?.Status == McpTaskStatus.Working || finalStatus?.Status == McpTaskStatus.InputRequired) && maxAttempts > 0); + while (finalStatus?.Status is McpTaskStatus.Working or McpTaskStatus.InputRequired && maxAttempts > 0); // Assert - Status should have been InputRequired during sampling Assert.Contains(McpTaskStatus.InputRequired, statusesDuringSampling); @@ -218,7 +218,7 @@ public async Task TaskStatus_TransitionsToInputRequired_DuringElicitAsync() finalStatus = await taskStore.GetTaskAsync(mcpTask.TaskId, cancellationToken: TestContext.Current.CancellationToken); maxAttempts--; } - while ((finalStatus?.Status == McpTaskStatus.Working || finalStatus?.Status == McpTaskStatus.InputRequired) && maxAttempts > 0); + while (finalStatus?.Status is McpTaskStatus.Working or McpTaskStatus.InputRequired && maxAttempts > 0); // Assert - Status should have been InputRequired during elicitation Assert.Contains(McpTaskStatus.InputRequired, statusesDuringElicitation); From bbd4a9f493d4cd55fd72a810c7dcee987c7e51c1 Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Fri, 30 Jan 2026 17:49:00 +0000 Subject: [PATCH 4/5] Add parentheses for clarity in pattern matching conditions Co-authored-by: stephentoub <2642209+stephentoub@users.noreply.github.com> --- .../Server/AutomaticInputRequiredStatusTests.cs | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/tests/ModelContextProtocol.Tests/Server/AutomaticInputRequiredStatusTests.cs b/tests/ModelContextProtocol.Tests/Server/AutomaticInputRequiredStatusTests.cs index 2250ee8fc..f7f55c88b 100644 --- a/tests/ModelContextProtocol.Tests/Server/AutomaticInputRequiredStatusTests.cs +++ b/tests/ModelContextProtocol.Tests/Server/AutomaticInputRequiredStatusTests.cs @@ -119,7 +119,7 @@ public async Task TaskStatus_TransitionsToInputRequired_DuringSampleAsync() finalStatus = await taskStore.GetTaskAsync(mcpTask.TaskId, cancellationToken: TestContext.Current.CancellationToken); maxAttempts--; } - while (finalStatus?.Status is McpTaskStatus.Working or McpTaskStatus.InputRequired && maxAttempts > 0); + while ((finalStatus?.Status is McpTaskStatus.Working or McpTaskStatus.InputRequired) && maxAttempts > 0); // Assert - Status should have been InputRequired during sampling Assert.Contains(McpTaskStatus.InputRequired, statusesDuringSampling); @@ -218,7 +218,7 @@ public async Task TaskStatus_TransitionsToInputRequired_DuringElicitAsync() finalStatus = await taskStore.GetTaskAsync(mcpTask.TaskId, cancellationToken: TestContext.Current.CancellationToken); maxAttempts--; } - while (finalStatus?.Status is McpTaskStatus.Working or McpTaskStatus.InputRequired && maxAttempts > 0); + while ((finalStatus?.Status is McpTaskStatus.Working or McpTaskStatus.InputRequired) && maxAttempts > 0); // Assert - Status should have been InputRequired during elicitation Assert.Contains(McpTaskStatus.InputRequired, statusesDuringElicitation); From b4541f86e27616570677ca110e19673477f699e7 Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Fri, 30 Jan 2026 17:55:46 +0000 Subject: [PATCH 5/5] Simplify polling condition to check for not completed Co-authored-by: stephentoub <2642209+stephentoub@users.noreply.github.com> --- .../Server/AutomaticInputRequiredStatusTests.cs | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/tests/ModelContextProtocol.Tests/Server/AutomaticInputRequiredStatusTests.cs b/tests/ModelContextProtocol.Tests/Server/AutomaticInputRequiredStatusTests.cs index f7f55c88b..1f5c51c6c 100644 --- a/tests/ModelContextProtocol.Tests/Server/AutomaticInputRequiredStatusTests.cs +++ b/tests/ModelContextProtocol.Tests/Server/AutomaticInputRequiredStatusTests.cs @@ -119,7 +119,7 @@ public async Task TaskStatus_TransitionsToInputRequired_DuringSampleAsync() finalStatus = await taskStore.GetTaskAsync(mcpTask.TaskId, cancellationToken: TestContext.Current.CancellationToken); maxAttempts--; } - while ((finalStatus?.Status is McpTaskStatus.Working or McpTaskStatus.InputRequired) && maxAttempts > 0); + while (finalStatus?.Status is not McpTaskStatus.Completed && maxAttempts > 0); // Assert - Status should have been InputRequired during sampling Assert.Contains(McpTaskStatus.InputRequired, statusesDuringSampling); @@ -218,7 +218,7 @@ public async Task TaskStatus_TransitionsToInputRequired_DuringElicitAsync() finalStatus = await taskStore.GetTaskAsync(mcpTask.TaskId, cancellationToken: TestContext.Current.CancellationToken); maxAttempts--; } - while ((finalStatus?.Status is McpTaskStatus.Working or McpTaskStatus.InputRequired) && maxAttempts > 0); + while (finalStatus?.Status is not McpTaskStatus.Completed && maxAttempts > 0); // Assert - Status should have been InputRequired during elicitation Assert.Contains(McpTaskStatus.InputRequired, statusesDuringElicitation);