Skip to content

Keep TCP stop commands responsive during synchronous runs - #18

Merged
oznetmaster merged 4 commits into
nunit:mainfrom
oznetmaster:fix/tcp-stop-dispatch
Oct 21, 2026
Merged

oznetmaster merged 4 commits into
nunit:mainfrom
oznetmaster:fix/tcp-stop-dispatch

Conversation

@oznetmaster

@oznetmaster oznetmaster commented Oct 16, 2026 •

Copy link
Copy Markdown
Contributor

The synchronous TCP run blocks the command reader, preventing it from processing a cooperative stop until the run returns. Dispatch execution on a dedicated worker so the reader can deliver stop requests, serialize concurrent progress frames, and reject conflicting commands without reentering the runner. Support both the legacy boolean-parameter and current parameterless void framework stop APIs.

Updated onto Agent.Core tag 4.0.0-beta.6 (bb42cb55), Engine.Api beta.101 and Extensibility beta.6. The branch includes #17's small constructor cleanup and reference-casing correction, plus an explicit NUnit.Common beta.5 pin in place of the release source's unavailable-on-NuGet.org beta.4.16 minimum. These remain identifiable commits.

Validation:

  • Fresh Windows builds have zero warnings/errors; complete suites pass 61 with one existing skip on .NET 8 and 95 with two existing skips on CLR.
  • Actual Linux Mono passes all 14 focused startup, TCP stop/progress and framework-stop-signature regressions.
  • Combined beta.5 Console/agent validation passes 13 scenarios per desktop OS and five active-execution/recovery scenarios per OS using NUnit 4 and NUnit 5.1.0-alpha.0.19. The ordinary local controls pass with the remote extension absent and loaded-but-unselected.
  • Native macOS/Linux checks execute portable Windows-built managed payloads; they are not fresh native source-build claims.

Regressions use real loopback TCP for stop delivery during a blocked runner, both stop signatures, 64 concurrent progress frames, conflicting commands and failures without fabricated results. Substituted-runner protocol tests are separate from real-framework lifecycle validation.

Command/worker failures log and close the connection. This draft does not add a wire error frame, promise a nonzero process exit, redesign wire RunAsync, or implement engine ForcedStop/terminal-event synthesis. The now-resolved API beta.100 package incompatibility is not attributed to beta.101.

Acknowledgments: investigated, implemented and validated jointly by Neil Colvin (@oznetmaster) and OpenAI Codex.

Dispatch synchronous execution on a worker, serialize complete frames, reject conflicting commands and support both void framework stop signatures. Add thirteen focused regressions. Developed and validated jointly with OpenAI Codex.
@CharliePoole
CharliePoole self-requested a review October 17, 2026 06:22
@CharliePoole

Copy link
Copy Markdown
Member

Holding till after beta release

@CharliePoole CharliePoole 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.

Ready to go. I like that you strengthened what we're doing and made it more robust before we move into extending what we do.

@oznetmaster
oznetmaster marked this pull request as ready for review October 21, 2026 05:14
@oznetmaster
oznetmaster merged commit ef10527 into nunit:main Oct 21, 2026
3 checks passed
@CharliePoole CharliePoole added the enhancement New feature or request label Oct 21, 2026
@oznetmaster
oznetmaster deleted the fix/tcp-stop-dispatch branch October 21, 2026 11:03
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

enhancement New feature or request

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants