Skip to content

fix: Test Gateway MSIX host check hangs on GitHub-hosted runners - #107

Merged
paulcam206 merged 1 commit into
mainfrom
paulcam206-gateway-testhost-hang
Sep 23, 2026
Merged

paulcam206 merged 1 commit into
mainfrom
paulcam206-gateway-testhost-hang

Conversation

@paulcam206

@paulcam206 paulcam206 commented Sep 23, 2026 •

Copy link
Copy Markdown
Collaborator

Closes #105

What Problem This Solves

Fixes: the GitHub Actions Test Gateway MSIX host check hangs until the six-hour job limit when it runs on a GitHub-hosted runner, although the suite finishes in seconds locally.

User Impact

User impact: contributors get a Test Gateway MSIX host result in minutes again instead of a six-hour cancellation, and a test that stops making progress now fails the job after three minutes with the unfinished test named and a minidump attached. clawctl output for users is unchanged except under a CI provider such as GitHub Actions or Azure Pipelines, where it now follows clawctl's documented color and interactivity policy instead of Spectre.Console's own CI detection.

Why This Change Was Made

clawctl decides color, interactivity, width, and Unicode itself, but Spectre.Console's default profile enrichers overrode those choices whenever a CI provider variable was set. Disabling the enrichers where clawctl creates its consoles leaves clawctl as the only owner of those decisions. The narration test that waited without a bound for a spinner frame now waits for the reported stage, which every renderer writes, so a lost live display fails its assertion instead of holding the test host open. The workflow's test step now fails after three minutes without test activity and uploads the hang dump.

Root cause
  • On a GitHub-hosted runner, GITHUB_ACTIONS=true makes Spectre's GitHub enricher turn Interactive off and Ansi on, overriding the interactive console clawctl requested. The live status then writes plain stage lines and never draws a spinner frame.
  • GatewayNarrationPreservesUnicodeCapabilityForNonConsoleOutput, added in fix: preserve automatic gateway startup feedback #97, awaited a spinner frame with no bound, so it never finished. xUnit runs a class's tests in sequence, so the five tests after it in ClawCtlConsoleTests never started. That is why CI reported 1101 passing tests instead of 1107.
  • The Unrecognized command or argument '--recovery' text in the abort reason is not a VSTest or Microsoft.Testing.Platform mismatch, and no package versions change here. GatewayServiceRestartRejectsTheRecoveryMarker deliberately parses --recovery, and System.CommandLine wrote the rejection to the test host's real standard error, which VSTest appended to its crash reason when blame killed the host. That test now captures its own output and asserts on the rejected token.

Evidence

Evidence head: cf6b88c6b8bfe06b6b06854100d654ae5d261973, based on 96770f14d73edfcba41964c08cd2f64f39420278. main has since gained #106, which changes none of these files; this PR's CI run tested the merge with it. Local runs were on Windows x64 from the working tree committed as this head.

When it started. The Gateway MSIX workflow on main passed through #102. Every run since #97 added the test has stalled in the Test step:

main commit Run Test step
fc5b15b (#102) 35805996665 ✅ 11 s
092e451 (#97) 35806074818 ❌ cancelled at the job limit (01:26–07:24 UTC)
96770f1 (#101) 35807329585 ❌ cancelled at the job limit (01:44–07:41 UTC)
84092f0 (#106) 35900958829 ⏳ still running at 18:48 UTC, 32 minutes after it started at 18:16 UTC

Before the fix.

  • CI: diagnostic run 35841172733 (diag: temporary blame-hang probe (do not merge) #104, which only added blame flags on this base) aborted after three idle minutes. Its sequence file records 1102 of 1107 test cases started, with GatewayNarrationPreservesUnicodeCapabilityForNonConsoleOutput the only incomplete one. The five that never started are the rest of ClawCtlConsoleTests.
  • Local, with GITHUB_ACTIONS=true: that test alone aborts at the blame timeout, and without the variable it passes in 216 ms. Running it together with GatewayServiceRestartRejectsTheRecoveryMarker reproduces the exact CI line Test host process crashed : Unrecognized command or argument '--recovery'.
  • Spectre.Console 0.57.2 probe using CreateConsole's settings: the default enrichers change Interactive, Ansi, and Links only when GITHUB_ACTIONS or TF_BUILD is set. With the enrichers disabled, every environment reports the requested capabilities, and a live status draws spinner frames again.

Regression proof. With the updated tests and the unfixed console factory under GITHUB_ACTIONS=true, the narration test fails in 184 ms with Assert.Contains() Failure: Filter not matched in collection instead of hanging.

On a GitHub-hosted runner. CI run 35902102316 for this head passed, including the workflow's merge gate:

Job Result
Test Gateway MSIX host ✅ 5.1 min. The Test step took 14 s for 1107/1107 under --blame-hang-timeout 3min, so the hang upload was skipped. 27 NativeAOT scenarios passed.
Build unsigned x64 Gateway MSIX, Build unsigned arm64 Gateway MSIX ✅
Build unsigned multi-architecture Gateway MSIX bundle ✅
Gateway MSIX CI ✅ merge gate

Locally after the fix.

Command Result
dotnet test .\OpenClaw.Gateway.MSIX.slnx --configuration Release --blame-hang-timeout 3min --blame-hang-dump-type mini with GITHUB_ACTIONS=true and CI=true ✅ 1107/1107 in 13 s, exit 0
dotnet test .\OpenClaw.Gateway.MSIX.slnx --configuration Release --no-build without CI variables ✅ 1107/1107
ClawCtlConsoleTests, ClawCtlCommandLineTests, AgentGatewayGuidanceTests, and GatewayAddressTests with TF_BUILD=True ✅ 137/137
The narration test 12 times with and 12 times without GITHUB_ACTIONS and CI ✅ 24/24
.\scripts\Test-DotNetQuality.ps1 -Configuration Release ✅ 0 warnings, 0 errors, formatting and style verified
.\scripts\Test-NativeAotCli.Tests.ps1 -Configuration Release ✅ 27 scenarios; the wrong-name negative check fails as intended
.\scripts\Test-WorkflowSigningConfiguration.ps1, .\scripts\Test-WorkflowPackageVersion.Tests.ps1, .\scripts\Test-PackagingRelevance.Tests.ps1 ✅ passed
.\scripts\Test-DocReferences.ps1; git diff --check ✅ 0 findings; clean

A local ClawSweeper review --local-range of this head reported the patch correct with no review comments, cleared security, and rated the proof sufficient.

Not run: test signing, which this workflow runs only for a manual dispatch in test signing mode; the proof-release identity transition, which runs only for pull requests that change versioning; and ARM64 execution, since no ARM64 host was available and CI only builds ARM64.

CI log before the fix (run 35841172733)
2026-09-23T09:10:25.4400926Z A total of 1 test files matched the specified pattern.
2026-09-23T09:13:37.5408376Z The active test run was aborted. Reason: Test host process crashed : Unrecognized command or argument '--recovery'.
2026-09-23T09:13:37.5587239Z Data collector 'Blame' message: The specified inactivity time of 3 minutes has elapsed. Collecting hang dumps from testhost and its child processes.
2026-09-23T09:13:37.5974205Z Passed!  - Failed:     0, Passed:  1101, Skipped:     0, Total:  1101, Duration: 10 s - OpenClaw.Launcher.Tests.dll (net10.0)
2026-09-23T09:13:37.5974738Z Test Run Aborted.
2026-09-23T09:13:37.6042173Z The active Test Run was aborted because the host process exited unexpectedly. Please inspect the call stack above, if available, to get more information about where the exception originated from.
2026-09-23T09:13:37.6043198Z The test running when the crash occurred: 
2026-09-23T09:13:37.6043965Z OpenClaw.Launcher.Tests.ClawCtlConsoleTests.GatewayNarrationPreservesUnicodeCapabilityForNonConsoleOutput

Tests listed locally but absent from that run's sequence file:

ClawCtlConsoleTests.ColorChangesOnlyTerminalFormatting
ClawCtlConsoleTests.GatewayNarrationUsesKnownInteractiveProcessOutput
ClawCtlConsoleTests.StoppedGatewayOutcomeReportsFailureAndRetry
ClawCtlConsoleTests.StoppingAnAbsentGatewayDoesNotRecommendStartingIt
ClawCtlConsoleTests.WriteSetupResultShowsReadyStateAndNextAction
CI log after the fix (run 35902102316)
2026-09-23T18:26:09.0262318Z ##[group]Run dotnet test .\OpenClaw.Gateway.MSIX.slnx --configuration Release --no-restore --blame-hang-timeout 3min --blame-hang-dump-type mini --results-directory TestResults
2026-09-23T18:26:23.4217932Z Data collector 'Blame' message: All tests finished running, Sequence file will not be generated.
2026-09-23T18:26:23.4715687Z Passed!  - Failed:     0, Passed:  1107, Skipped:     0, Total:  1107, Duration: 9 s - OpenClaw.Launcher.Tests.dll (net10.0)
2026-09-23T18:27:15.2488472Z 27 NativeAOT scenarios passed.
2026-09-23T18:27:16.1428814Z NativeAOT clawctl checks completed successfully.
Local reproduction and regression output

On the base commit, with $env:GITHUB_ACTIONS = 'true':

> dotnet test .\tests\OpenClaw.Launcher.Tests\OpenClaw.Launcher.Tests.csproj --configuration Release --filter "FullyQualifiedName~ClawCtlConsoleTests.GatewayNarrationPreservesUnicodeCapabilityForNonConsoleOutput" --blame-hang-timeout 30s --blame-hang-dump-type none
The active test run was aborted. Reason: Test host process crashed
Data collector 'Blame' message: The specified inactivity time of 30 seconds has elapsed. Collecting hang dumps from testhost and its child processes.
Test Run Aborted.
The test running when the crash occurred:
OpenClaw.Launcher.Tests.ClawCtlConsoleTests.GatewayNarrationPreservesUnicodeCapabilityForNonConsoleOutput

The same command without GITHUB_ACTIONS:

Data collector 'Blame' message: All tests finished running, Sequence file will not be generated.
Passed!  - Failed:     0, Passed:     1, Skipped:     0, Total:     1, Duration: 216 ms - OpenClaw.Launcher.Tests.dll (net10.0)

With GITHUB_ACTIONS=true and the filter widened to FullyQualifiedName~GatewayNarrationPreservesUnicodeCapabilityForNonConsoleOutput|FullyQualifiedName~GatewayServiceRestartRejectsTheRecoveryMarker:

The active test run was aborted. Reason: Test host process crashed : Unrecognized command or argument '--recovery'.
Passed!  - Failed:     0, Passed:     1, Skipped:     0, Total:     1, Duration: 103 ms - OpenClaw.Launcher.Tests.dll (net10.0)
Test Run Aborted.

The updated tests with the unfixed CreateConsole, under GITHUB_ACTIONS=true:

  Failed OpenClaw.Launcher.Tests.ClawCtlConsoleTests.GatewayNarrationPreservesUnicodeCapabilityForNonConsoleOutput [184 ms]
  Error Message:
   Assert.Contains() Failure: Filter not matched in collection
Failed!  - Failed:     1, Passed:     1, Skipped:     0, Total:     2, Duration: 195 ms - OpenClaw.Launcher.Tests.dll (net10.0)
Spectre.Console capability probe

Each console mirrors CreateConsole and varies only the environment and the default enrichers:

$settings = [Spectre.Console.AnsiConsoleSettings]::new()
$settings.Ansi = if ($useColor) { 'Yes' } else { 'No' }
$settings.ColorSystem = if ($useColor) { 'TrueColor' } else { 'NoColors' }
$settings.Interactive = 'Yes'
$settings.Out = [Spectre.Console.AnsiConsoleOutput]::new($writer)
$settings.EnvironmentVariables = $environment   # none, GITHUB_ACTIONS=true, or TF_BUILD=True
$settings.Enrichment.UseDefaultEnrichers = $defaultEnrichers
$console = [Spectre.Console.AnsiConsole]::Create($settings)

Resulting profile capabilities. markupHasEscape records whether [bold]bold[/] plain rendered an escape sequence:

enrich no CI vars           useColor=False -> Interactive=True  Ansi=False Color=NoColors  Legacy=False Links=False markupHasEscape=False
enrich no CI vars           useColor=True  -> Interactive=True  Ansi=True  Color=TrueColor Legacy=False Links=True  markupHasEscape=True
enrich GITHUB_ACTIONS=true  useColor=False -> Interactive=False Ansi=True  Color=NoColors  Legacy=False Links=False markupHasEscape=True
enrich GITHUB_ACTIONS=true  useColor=True  -> Interactive=False Ansi=True  Color=TrueColor Legacy=False Links=False markupHasEscape=True
enrich TF_BUILD=True        useColor=False -> Interactive=False Ansi=True  Color=NoColors  Legacy=False Links=False markupHasEscape=True
enrich TF_BUILD=True        useColor=True  -> Interactive=False Ansi=True  Color=TrueColor Legacy=False Links=False markupHasEscape=True
none   no CI vars           useColor=False -> Interactive=True  Ansi=False Color=NoColors  Legacy=False Links=False markupHasEscape=False
none   no CI vars           useColor=True  -> Interactive=True  Ansi=True  Color=TrueColor Legacy=False Links=True  markupHasEscape=True
none   GITHUB_ACTIONS=true  useColor=False -> Interactive=True  Ansi=False Color=NoColors  Legacy=False Links=False markupHasEscape=False
none   GITHUB_ACTIONS=true  useColor=True  -> Interactive=True  Ansi=True  Color=TrueColor Legacy=False Links=True  markupHasEscape=True
none   TF_BUILD=True        useColor=False -> Interactive=True  Ansi=False Color=NoColors  Legacy=False Links=False markupHasEscape=False
none   TF_BUILD=True        useColor=True  -> Interactive=True  Ansi=True  Color=TrueColor Legacy=False Links=True  markupHasEscape=True

A live status with the Dots spinner, run for 600 ms under GITHUB_ACTIONS=true:

enrichers+GITHUB_ACTIONS Ansi=Yes Interactive=Yes -> spinnerRendered=False statusTextRendered=True
enrichers+GITHUB_ACTIONS Ansi=No  Interactive=Yes -> spinnerRendered=False statusTextRendered=True
no enrichers             Ansi=Yes Interactive=Yes -> spinnerRendered=True  statusTextRendered=True
no enrichers             Ansi=No  Interactive=Yes -> spinnerRendered=False statusTextRendered=True
Local output after the fix

With $env:GITHUB_ACTIONS = 'true' and $env:CI = 'true':

> dotnet test .\OpenClaw.Gateway.MSIX.slnx --configuration Release --blame-hang-timeout 3min --blame-hang-dump-type mini --results-directory <results>
Data collector 'Blame' message: All tests finished running, Sequence file will not be generated.
Passed!  - Failed:     0, Passed:  1107, Skipped:     0, Total:  1107, Duration: 13 s - OpenClaw.Launcher.Tests.dll (net10.0)

Without CI variables:

Passed!  - Failed:     0, Passed:  1107, Skipped:     0, Total:  1107, Duration: 13 s - OpenClaw.Launcher.Tests.dll (net10.0)

With $env:TF_BUILD = 'True', filtered to the console, command-line, gateway guidance, and gateway address tests:

Passed!  - Failed:     0, Passed:   137, Skipped:     0, Total:   137, Duration: 476 ms - OpenClaw.Launcher.Tests.dll (net10.0)

The narration test repeated with --blame-hang-timeout 30s:

plain pass=12 fail=0
gha pass=12 fail=0

Spectre.Console's default profile enrichers re-decide console capabilities
from ambient CI variables. On GitHub-hosted runners, GITHUB_ACTIONS=true
turned Interactive off and Ansi on after ClawCtlConsole.CreateConsole had
requested an interactive, color-cleared console, so the live status fell
back to plain lines and never drew a spinner frame.

GatewayNarrationPreservesUnicodeCapabilityForNonConsoleOutput waited for a
spinner frame without a bound, so the Test Gateway MSIX host job stalled
until the six-hour limit with 1101 of 1107 tests complete. The reported
"Unrecognized command or argument '--recovery'" crash reason was the
expected parse error of GatewayServiceRestartRejectsTheRecoveryMarker,
written to the test host's stderr, not a VSTest incompatibility.

- Disable Spectre's default enrichers in CreateConsole so clawctl's color
  policy and console detection stay the only capability owner.
- Wait for the rendered stage instead of a spinner frame, so a lost live
  display fails the frame assertion instead of hanging.
- Capture the parser test's output and assert on the rejected token.
- Bound the CI test step with blame hang detection and upload the dump.
- Record the ownership rule in the output style guide.

Fixes #105

Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
@clawsweeper

clawsweeper Bot commented Sep 23, 2026 •

Copy link
Copy Markdown

🦞👀
ClawSweeper picked this up.

Pull request received. I will update this pull request when review starts.

ClawSweeper review complete

ClawSweeper finished reviewing this revision. The review result is being finalized.

View the workflow run.

@clawsweeper clawsweeper Bot added P2 Normal priority bug or improvement with limited blast radius. proof: sufficient Contributor real behavior proof is sufficient. rating: 🦞 diamond lobster Very strong PR readiness with only minor maintainer review expected. status: 👀 ready for maintainer look ClawSweeper has no concrete contributor-facing blocker left for this PR. labels Sep 23, 2026
@clawsweeper

clawsweeper Bot commented Sep 23, 2026

Copy link
Copy Markdown

Codex review: needs maintainer review before merge. Reviewed September 23, 2026, 2:26 PM ET / 18:26 UTC.

ClawSweeper review

What this changes

The branch keeps clawctl console capabilities stable under CI variables, makes the gateway spinner test fail instead of hanging when rendering changes, and adds bounded hang diagnostics to the Windows MSIX test workflow.

Regression provenance

Possible regression — probable (reproduction; reviewed change). No predecessor PR is attributed.

Merge readiness

✅ Ready for maintainer review

This PR remains useful: current main still has the CI-sensitive console behavior and unbounded spinner wait. The branch addresses both, and the supplied Windows before-and-after runs support the fix. No introduced defect or unresolved merge concern was found.

Priority: P2
Reviewed head: cf6b88c6b8bfe06b6b06854100d654ae5d261973

Review scores

Measure Result What it means
Overall readiness 🦞 diamond lobster (5/6) Focused changes, a direct failing negative control, and Windows before-and-after results provide strong review evidence.
Proof confidence 🦞 diamond lobster (5/6) Sufficient (terminal): The PR body supplies Windows x64 terminal traces exercising the changed launcher console through the gateway narration test: CI variables reproduced the pre-fix hang, the unfixed negative control failed promptly, and the after-fix suite passed 1107/1107. A GitHub-hosted after-fix run was still in progress; no stored-data contract changes.
Patch quality 🦞 diamond lobster (5/6) No actionable review findings were identified.

Verification

Check Result Evidence
Real behavior Verified Sufficient (terminal): The PR body supplies Windows x64 terminal traces exercising the changed launcher console through the gateway narration test: CI variables reproduced the pre-fix hang, the unfixed negative control failed promptly, and the after-fix suite passed 1107/1107. A GitHub-hosted after-fix run was still in progress; no stored-data contract changes.
Evidence reviewed 6 items Current main still has the reported behavior: The current-main console factory does not disable Spectre's default enrichers, and the gateway narration test waits for a spinner frame.
Console capability owner: The introduced setting disables Spectre's default enrichers after the launcher has selected color, interactivity, width, and Unicode.
Regression test and workflow bound: The test now waits for the reported stage before asserting a Unicode spinner frame; the workflow adds a three-minute inactivity timeout and failure-only diagnostic upload.
Findings None None.
Security None None.

How this fits together

Windows packaging CI runs launcher tests on a hosted Windows worker. The launcher chooses terminal capabilities before Spectre renders gateway progress; the test result feeds the MSIX CI check.

flowchart LR
A[CI environment] --> B[Launcher color policy]
B --> C[Spectre console]
C --> D[Gateway progress]
D --> E[Test observation]
E --> F[MSIX CI result]
F --> G[Hang diagnostics]
Loading

Before merge

None.

Agent review details

Security

None.

Review metrics

Metric Value Why it matters
Code size production +6, tests +2 net The small production addition establishes the console capability decision in its existing owner.

Root-cause cluster

Relationship: fixed_by_candidate
Canonical: #105
Summary: This PR is the candidate fix for the linked open MSIX test-host hang report.

Members:

Proposal only: this assessment does not dispatch repair, suppress jobs, mutate sibling items, close, or merge anything.

Technical review

Best possible solution:

Keep the launcher as the console-capability owner and retain a test that reports missing spinner rendering promptly, with bounded CI diagnostics for future hangs.

Do we have a high-confidence way to reproduce the issue?

Yes. The supplied current-main CI trace identifies the unfinished narration test, and a Windows run reproduces its hang with GITHUB_ACTIONS=true.

Is this the best way to solve the issue?

Yes. The patch changes the existing console factory where capabilities are chosen and preserves a spinner assertion while removing the test's reported unbounded wait.

AGENTS.md: found and applied where relevant.

Codex review notes: model internal, reasoning high; reviewed against 84092f0ffe11.

Labels

Label changes:

  • add P2: The hang delays the Windows packaging check for contributors, while the reported impact is limited to that workflow.
  • add proof: sufficient: Contributor real behavior proof is sufficient. The PR body supplies Windows x64 terminal traces exercising the changed launcher console through the gateway narration test: CI variables reproduced the pre-fix hang, the unfixed negative control failed promptly, and the after-fix suite passed 1107/1107. A GitHub-hosted after-fix run was still in progress; no stored-data contract changes.
  • add rating: 🦞 diamond lobster: Overall readiness is 🦞 diamond lobster; proof is 🦞 diamond lobster and patch quality is 🦞 diamond lobster.
  • add status: 👀 ready for maintainer look: ClawSweeper has no concrete contributor-facing blocker left for this PR. Sufficient (terminal): The PR body supplies Windows x64 terminal traces exercising the changed launcher console through the gateway narration test: CI variables reproduced the pre-fix hang, the unfixed negative control failed promptly, and the after-fix suite passed 1107/1107. A GitHub-hosted after-fix run was still in progress; no stored-data contract changes.

Label justifications:

  • P2: The hang delays the Windows packaging check for contributors, while the reported impact is limited to that workflow.
  • rating: 🦞 diamond lobster: Overall readiness is 🦞 diamond lobster; proof is 🦞 diamond lobster and patch quality is 🦞 diamond lobster.
  • status: 👀 ready for maintainer look: ClawSweeper has no concrete contributor-facing blocker left for this PR. Sufficient (terminal): The PR body supplies Windows x64 terminal traces exercising the changed launcher console through the gateway narration test: CI variables reproduced the pre-fix hang, the unfixed negative control failed promptly, and the after-fix suite passed 1107/1107. A GitHub-hosted after-fix run was still in progress; no stored-data contract changes.
  • proof: sufficient: Contributor real behavior proof is sufficient. The PR body supplies Windows x64 terminal traces exercising the changed launcher console through the gateway narration test: CI variables reproduced the pre-fix hang, the unfixed negative control failed promptly, and the after-fix suite passed 1107/1107. A GitHub-hosted after-fix run was still in progress; no stored-data contract changes.

Evidence

What I checked:

Likely related people:

  • unknown: The claimed source-line change could not be verified from bounded local history. (role: source history unknown; confidence: low)

Rating scale

Score Internal tier Crab rank Meaning
6/6 S 🦀 challenger crab Exceptional readiness
5/6 A 🦞 diamond lobster Very strong readiness
4/6 B 🐚 platinum hermit Good normal PR; ordinary maintainer review
3/6 C 🦐 gold shrimp Useful, but confidence is limited
2/6 D 🦪 silver shellfish Proof or implementation needs work
1/6 F 🧂 unranked krab Not merge-ready
N/A NA 🌊 off-meta tidepool Rating does not apply

Overall follows the weaker of proof and patch quality.
Shiny media proof means a screenshot, video, or linked artifact directly shows the changed behavior. Runtime, network, CSP, and security claims still need visible diagnostics.

Workflow

  • ClawSweeper keeps one durable marker-backed review comment per issue or PR.
  • Re-runs edit this comment so the latest verdict, findings, and automation markers stay together instead of adding duplicate bot comments.
  • A fresh review can be triggered by eligible @clawsweeper re-review comments, exact-item GitHub events, scheduled/background review runs, or manual workflow dispatch.
  • PR/issue authors and users with repository write access can comment @clawsweeper re-review or @clawsweeper re-run on an open PR or issue to request a fresh review only.
  • Maintainers can also comment @clawsweeper review to request a fresh review only.
  • Fresh-review commands do not start repair, autofix, rebase, CI repair, or automerge.
  • Maintainer-only repair and merge flows require explicit commands such as @clawsweeper autofix, @clawsweeper automerge, @clawsweeper fix ci, or @clawsweeper address review.
  • Maintainers can comment @clawsweeper explain to ask for more context, or @clawsweeper stop to stop active automation.

@paulcam206
paulcam206 merged commit 1ca801c into main Sep 23, 2026
20 checks passed
@paulcam206
paulcam206 deleted the paulcam206-gateway-testhost-hang branch September 23, 2026 18:53
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

P2 Normal priority bug or improvement with limited blast radius. proof: sufficient Contributor real behavior proof is sufficient. rating: 🦞 diamond lobster Very strong PR readiness with only minor maintainer review expected. status: 👀 ready for maintainer look ClawSweeper has no concrete contributor-facing blocker left for this PR.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Test Gateway MSIX host: testhost never exits after tests pass (VSTest blame '--recovery' abort)

1 participant