Skip to content

fix(setup): fresh WSL setup removes the distro when the post-install list times out - #1548

Open
SebTardif wants to merge 2 commits into
openclaw:mainfrom
SebTardif:fix/wsl-create-list-retry
Open

SebTardif wants to merge 2 commits into
openclaw:mainfrom
SebTardif:fix/wsl-create-list-retry

Conversation

@SebTardif

@SebTardif SebTardif commented Sep 29, 2026 •

Copy link
Copy Markdown
Contributor

Related: #1479

What Problem This Solves

Fixes: fresh WSL setup reports that the new distro did not register, then unregisters it, when wsl --list --quiet times out or fails after wsl --install already exited 0.

User Impact

User impact: a slow or failed distro list after a successful install no longer removes a distro whose registration could not be checked. That attempt still fails. The default config sets CleanBeforeRun to true, so the next setup runs stale-distro cleanup before create. A leftover that is not proven app-owned stops in that cleanup and stays registered. Headless recovery is --confirm-destructive. The create step's "still exists after cleanup" refusal runs only when that cleanup is skipped.

Why This Change Was Made

The post-install list is retried only when it times out or exits non-zero (15 seconds, then 30, then 60). A completed list that omits the name still fails immediately as "did not register". When every list attempt fails, cleanup leaves the distro and the app-owned install path in place, even if a later list then shows the name. Failed-step rollback reuses that same decision, so the second cleanup does not unregister the distro. Install-failure cleanup still attempts unregister. A completed list that omitted the name still unregisters during rollback.

#1479 also edits CreateWslInstanceStep.cs and the setup step tests. That pull limits unregister to a distro the current install created. This pull does not change that install-failure path. The two will conflict if both land.

Evidence

A completed list that omits the name still stops with "did not register" and does not ask again.

A list that times out, then a later list that contains the name, continues to the WSL2 check and the root probe. Unregister is not called.

When the list never completes, the step says it could not list distros after installing, leaves the distro registered, and skips deleting the install path. The install command still includes --no-launch.

With rollback enabled, that same exhausted list still leaves the distro and the install path in place after SetupPipeline runs failed-step rollback. The rollback list can print the distro name. Unregister and terminate are not called.

A completed list that omits the name, followed by a rollback list that prints the name, still calls --terminate and --unregister.

Live install on this machine, same arguments as WslInstallSupport.BuildDirectInstallArgs, name OpenClawE2E-ocwn1548, location under the temp directory, --no-launch --web-download. Exit 0. The installer printed Downloading: Ubuntu 24.04 LTS, Installing: Ubuntu 24.04 LTS, and Distribution successfully installed.

Post-install wsl --list --quiet:

Ubuntu-24.04
OpenClawGateway
OpenClawE2E-ocwn1548

The next default cleanup is CleanupStaleDistroStep with CleanBeforeRun true, so CanSkip is false. This run used an isolated data directory, no ownership marker, port 19041, headless, and ConfirmDestructive false. It did not target Ubuntu-24.04 or OpenClawGateway.

skip=False distro=OpenClawE2E-ocwn1548 port=19041
Found WSL distros: [Ubuntu-24.04, OpenClawGateway, OpenClawE2E-ocwn1548]
decision: Existing WSL distro or data 'OpenClawE2E-ocwn1548' is not proven app-owned: No durable OpenClaw ownership evidence matches the distro name. preserve existing data
outcome=FailedTerminal
message=Existing WSL distro or data for 'OpenClawE2E-ocwn1548' is not proven to be managed by OpenClaw and was preserved. Rerun SetupEngine with --confirm-destructive to delete it.

wsl --list --quiet after that cleanup was unchanged. The list that followed the live install completed in 58 ms, so that run did not force the timeout-preserve path.

A later run on the same head used SetupPipeline with CreateWslInstanceStep and rollback enabled. The disposable name was OpenClawE2E-ocwn1548b. The production install arguments exited 0 in about 18 seconds, and the ownership marker was written before install.

The three post-install checks were real C:\Windows\System32\wsl.exe --list --quiet processes. Each was suspended by the same user so it could not finish, and CommandRunner hit its own timeout and killed it. The waits were 15 seconds, 30 seconds, and 60 seconds, each with exit -1. The step logged that the registration list was not ready and retried. This was not a substitute command runner. The rollback list was not suspended.

attempt 1/3 exit -1 after 15023ms
attempt 2/3 exit -1 after 30040ms
attempt 3/3 exit -1 after 60033ms
Leaving WSL distro 'OpenClawE2E-ocwn1548b' in place because the post-install distro list did not complete.
skipped deleting the app-owned install path
SetupPipeline: Step 'wsl-create' failed
Attempting cleanup for failed step: Create WSL instance
rollback list exit 0 in 45ms
Leaving WSL distro 'OpenClawE2E-ocwn1548b' in place
Cleanup failed for failed step wsl-create: Refusing unsafe WSL rollback cleanup

That rollback error is the preserve path. Cleanup reports that the distro was left registered, and RollbackAsync treats that text as a failed cleanup instead of deleting the distro or its files. Ubuntu-24.04 and OpenClawGateway stayed registered.

The next call was CleanupStaleDistroStep in the same data directory. CleanBeforeRun was true, so CanSkip was false. It matched the ownership marker and the registration path, terminated and unregistered only OpenClawE2E-ocwn1548b, and deleted the empty wsl parent.

nextSkip=False
Found WSL distros: [Ubuntu-24.04, OpenClawGateway, OpenClawE2E-ocwn1548b]
decision: Found existing distro 'OpenClawE2E-ocwn1548b' terminating and unregistering
nextOutcome=Success
nextMessage=Unregistered stale distro 'OpenClawE2E-ocwn1548b'

A following wsl --list --quiet showed only Ubuntu-24.04 and OpenClawGateway.

Change Type

  • Bug fix
  • Feature
  • Refactor
  • Docs or instructions
  • Tests or validation
  • Security hardening
  • Chore or infrastructure

Scope

  • Tray or WinUI UX
  • Windows node capability
  • Local MCP or winnode
  • Gateway, connection, or pairing
  • Setup or onboarding
  • Permissions, privacy, or security
  • Tests, CI, or docs

Required proof pools

  • windows-wsl-gateway-e2e: product WSL setup registration after install. A live wsl --install and wsl --list --quiet were collected. The full gateway setup in this pool was not run.

Validation

  • ./build.ps1: exit 0 (Shared, Cli, WinNodeCli, SetupEngine, WinUI)
  • dotnet test ./tests/OpenClaw.Shared.Tests/OpenClaw.Shared.Tests.csproj: Failed 0, Passed 4169, Skipped 33, Total 4202
  • dotnet test ./tests/OpenClaw.Tray.Tests/OpenClaw.Tray.Tests.csproj: Failed 0, Passed 3184, Skipped 0, Total 3184
  • dotnet test ./tests/OpenClaw.SetupEngine.Tests/OpenClaw.SetupEngine.Tests.csproj --filter FullyQualifiedName~CreateWslInstance: Failed 0, Passed 18, Skipped 0, Total 18
  • SetupPipeline_PreservesFreshDistroWhenPostInstallListFailsAndRollbackRuns and SetupPipeline_UnregistersDistroOnRollbackWhenPostInstallListCompleted: Failed 0, Passed 2

Before the product change, the timeout scenario failed with "did not register" and then called --unregister. The exhausted-list scenario did not contain "could not list distros after installing".

Real behavior proof

  • Behavior or issue addressed: After wsl --install exits 0, a post-install wsl --list --quiet that times out or exits non-zero was reported as "did not register", and cleanup unregistered the distro.
  • Real environment tested: Windows 11, worktree fix/wsl-create-list-retry at f7f2ce9a3d8419feb1e59f1dcaa538cfe13f0112. Live wsl --install of OpenClawE2E-ocwn1548 exited 0.
  • Exact steps or command run after this patch: Drive CreateWslInstanceStep with a command stand-in. The first post-install --list --quiet times out. The next list prints OpenClawGateway. The WSL2 verbose list and the root probe both exit 0.
  • Evidence after fix: terminal output from that step:
Created clean WSL2 distro 'OpenClawGateway' at '<install path>'
quiet list timeouts: 15s, 15s, 30s
unregister: absent
terminate: absent
install arguments include --no-launch

When every post-install list fails, and a later cleanup list prints the name:

Fresh WSL install could not list distros after installing 'OpenClawGateway'.
left distro 'OpenClawGateway' registered because the post-install distro list did not complete
skipped deleting app-owned install path
unregister: absent

The same exhausted-list stand-in, run through SetupPipeline with rollback enabled, then a cleanup list that prints OpenClawGateway:

pipeline outcome: Failed
failed step: wsl-create
left distro 'OpenClawGateway' registered
install path file remains
unregister: absent
terminate: absent
quiet lists: 6
  • Observed result after fix: A timed-out list is asked again, and a later list that contains the name continues setup without unregister. When no list completes, the distro and the install path stay, including after failed-step rollback.
  • What was not tested: The post-install list hang was produced by suspending the real wsl.exe process until CommandRunner timed out. WSL itself answered a later list in 45 ms. A full windows-wsl-gateway-e2e gateway setup was not run.
  • PR head or commit tested: f7f2ce9a3d8419feb1e59f1dcaa538cfe13f0112
  • Screenshot or artifact links verified? N/A
  • Not verified or blocked: full windows-wsl-gateway-e2e gateway setup. The timeout was a suspended real wsl.exe --list --quiet, not a WSL service failure.

Security Impact

  • New permissions or capabilities? (No)
  • Secrets or tokens handling changed? (No)
  • New or changed network calls? (No)
  • Command or tool execution surface changed? (No)
  • Data access scope changed? (No)
  • If any answer is Yes, explain the risk and mitigation: n/a

Compatibility and Migration

  • Backward compatible? (Yes)
  • Config or environment changes? (No)
  • Migration needed? (No)
  • If yes, list the exact upgrade steps: n/a

Review Conversations

  • I replied to or resolved every bot review conversation addressed by this PR.
  • I left unresolved only conversations that still need maintainer judgment.

…ot finish

A timed-out or failed wsl --list --quiet after a successful install was
treated as an unregistered distro. Cleanup then unregistered a distro
that terminate and unregister both accepted. Retry that list on timeout
or a non-zero exit, and leave the distro registered when every attempt
fails. A completed list that omits the name still reports that the
distro did not register.

Install-failure cleanup and rollback still attempt unregister.

Signed-off-by: Sebastien Tardif <SebTardif@ncf.ca>
@clawsweeper

clawsweeper Bot commented Sep 29, 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 P0 Emergency: data loss, security bypass, crash loop, or unusable core runtime. merge-risk: 🚨 compatibility 🚨 Merging this PR could break existing users, config, migrations, defaults, or upgrades. merge-risk: 🚨 security-boundary 🚨 Merging this PR could weaken sandboxing, authorization, credentials, or sensitive data. rating: 🧂 unranked krab Not merge-ready due to missing proof or serious correctness/safety concerns. status: 📣 needs proof The PR needs real behavior proof before ClawSweeper can clear the contributor ask. labels Sep 29, 2026
@clawsweeper

clawsweeper Bot commented Sep 29, 2026 •

Copy link
Copy Markdown

Codex review: needs maintainer review before merge. Reviewed October 6, 2026, 3:09 AM ET / 07:09 UTC (Revision 4).

ClawSweeper review

What this changes

The PR retries failed checks for a newly installed WSL Linux distribution and preserves its registration and files through setup rollback when those checks remain inconclusive.

Merge readiness

✅ Ready for maintainer review

This PR remains necessary: main and the latest release retain the destructive timeout behavior. The updated real Windows trace resolves the previous proof blockers, and no introduced blocking defect was found.

Likely related people: shanselman and Barbara Kudiess are routing candidates based on merged setup work; exact introduction attribution remains unverified.

Priority: P1
Reviewed head: f7f2ce9a3d8419feb1e59f1dcaa538cfe13f0112

Review scores

Measure Result What it means
Overall readiness 🐚 platinum hermit (4/6) A focused repair with relevant real fault-injection and recovery evidence, regression coverage, and no blocking findings.
Proof confidence 🐚 platinum hermit (4/6) Sufficient (terminal): At the exact head, Windows 11 SetupPipeline exercised CreateWslInstanceStep with real WSL installation and three suspended real list processes timed out by production CommandRunner. The trace shows preservation through rollback and subsequent ownership-checked cleanup of only the disposable distribution, resolving both prior proof requests. Full Gateway E2E remains unverified; no stored-data contract changes.
Patch quality 🐚 platinum hermit (4/6) No actionable review findings were identified.

Verification

Check Result Evidence
Real behavior Verified Sufficient (terminal): At the exact head, Windows 11 SetupPipeline exercised CreateWslInstanceStep with real WSL installation and three suspended real list processes timed out by production CommandRunner. The trace shows preservation through rollback and subsequent ownership-checked cleanup of only the disposable distribution, resolving both prior proof requests. Full Gateway E2E remains unverified; no stored-data contract changes.
Evidence reviewed 9 items Pinned introduced change: The verified merge-base-to-head delta changes only the WSL creation step and its tests. Production changes add bounded registration checks and carry the preservation decision into failed-step rollback.
Still necessary on main: Current main performs one post-install quiet list, treats a failed list as missing registration, and invokes cleanup without the new preservation decision.
Latest release check: The supplied latest release, v2026.9.4, also contains the single-check implementation and lacks timeout-preserving rollback.
Findings None None.
Security None None.

How this fits together

Windows setup creates a WSL Linux distribution to host the OpenClaw Gateway. Installation results and registration checks determine whether setup continues or cleans up the new distribution.

flowchart TD
  A[Windows setup] --> B[Install Linux distribution]
  B --> C[Check registration with retries]
  C --> D{Check completed}
  D -->|Yes| E[Verify distribution and continue]
  D -->|No| F[Preserve distribution through rollback]
  F --> G[Ownership checked cleanup on next setup]
Loading

Before merge

None.

Agent review details

Security

None.

Review metrics

Metric Value Why it matters
Production and test delta production +88/-19, tests +248/-0 Production growth implements bounded checks and rollback preservation, supported by five focused regression cases.

Technical review

Best possible solution:

Keep registration uncertainty separate from confirmed installation failure, preserving the new distribution until ownership-checked recovery can safely clean it up.

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

Yes, source provides a clear path: successful WSL installation followed by a failed quiet list enters destructive cleanup on main. This review did not execute a failing main build; the contributor supplied current-head real fault-injection evidence.

Is this the best way to solve the issue?

Yes, bounded retries and a preservation decision shared with rollback are a focused repair. Existing ownership-checked next-run cleanup handles the retained distribution without a new recovery mechanism.

AGENTS.md: found and applied where relevant.

Codex review notes: model internal, reasoning medium; reviewed against 4895ed50e39e.

Labels

Label changes:

  • add proof: sufficient: Contributor real behavior proof is sufficient. At the exact head, Windows 11 SetupPipeline exercised CreateWslInstanceStep with real WSL installation and three suspended real list processes timed out by production CommandRunner. The trace shows preservation through rollback and subsequent ownership-checked cleanup of only the disposable distribution, resolving both prior proof requests. Full Gateway E2E remains unverified; no stored-data contract changes.
  • add rating: 🐚 platinum hermit: Overall readiness is 🐚 platinum hermit; proof is 🐚 platinum hermit and patch quality is 🐚 platinum hermit.
  • add status: 👀 ready for maintainer look: ClawSweeper has no concrete contributor-facing blocker left for this PR. Sufficient (terminal): At the exact head, Windows 11 SetupPipeline exercised CreateWslInstanceStep with real WSL installation and three suspended real list processes timed out by production CommandRunner. The trace shows preservation through rollback and subsequent ownership-checked cleanup of only the disposable distribution, resolving both prior proof requests. Full Gateway E2E remains unverified; no stored-data contract changes.
  • remove status: 📣 needs proof: Current PR status label is status: 👀 ready for maintainer look.
  • remove rating: 🦪 silver shellfish: Current PR rating is rating: 🐚 platinum hermit, so this older rating label is no longer current.
  • remove merge-risk: 🚨 compatibility: Current PR review selected no merge-risk labels.

Label justifications:

  • P1: A failed registration check can currently destroy a successfully installed distribution and interrupt the Gateway setup workflow.
  • rating: 🐚 platinum hermit: Overall readiness is 🐚 platinum hermit; proof is 🐚 platinum hermit and patch quality is 🐚 platinum hermit.
  • status: 👀 ready for maintainer look: ClawSweeper has no concrete contributor-facing blocker left for this PR. Sufficient (terminal): At the exact head, Windows 11 SetupPipeline exercised CreateWslInstanceStep with real WSL installation and three suspended real list processes timed out by production CommandRunner. The trace shows preservation through rollback and subsequent ownership-checked cleanup of only the disposable distribution, resolving both prior proof requests. Full Gateway E2E remains unverified; no stored-data contract changes.
  • proof: sufficient: Contributor real behavior proof is sufficient. At the exact head, Windows 11 SetupPipeline exercised CreateWslInstanceStep with real WSL installation and three suspended real list processes timed out by production CommandRunner. The trace shows preservation through rollback and subsequent ownership-checked cleanup of only the disposable distribution, resolving both prior proof requests. Full Gateway E2E remains unverified; no stored-data contract changes.

Evidence

What I checked:

  • Pinned introduced change: The verified merge-base-to-head delta changes only the WSL creation step and its tests. Production changes add bounded registration checks and carry the preservation decision into failed-step rollback. (src/OpenClaw.SetupEngine/CreateWslInstanceStep.cs:148, f7f2ce9a3d84)
  • Still necessary on main: Current main performs one post-install quiet list, treats a failed list as missing registration, and invokes cleanup without the new preservation decision. (src/OpenClaw.SetupEngine/CreateWslInstanceStep.cs, 4895ed50e39e)
  • Latest release check: The supplied latest release, v2026.9.4, also contains the single-check implementation and lacks timeout-preserving rollback. (src/OpenClaw.SetupEngine/CreateWslInstanceStep.cs, 3c43751b2bac)
  • Current-head real timeout and recovery proof: The captured PR body at source revision 2b4f0a69ff9d7c8e11b34f16d3a345ae23d36c01668ec1f576ec102b152fb669 reports Windows 11 execution at the exact head through SetupPipeline and CreateWslInstanceStep. Three real wsl.exe list processes were suspended; production CommandRunner timed them out after approximately 15, 30, and 60 seconds. Rollback's subsequent successful list did not cause unregister or file deletion. Next-run CleanupStaleDistroStep matched the ownership marker and registration path and removed only the disposable distribution. This directly addresses both previous rank-up requests. Full Gateway setup remains explicitly unverified. (f7f2ce9a3d84)
  • Rollback and recovery boundaries: The preservation flag reaches CleanupPartialInstall during failed-step rollback. Default pipeline ordering runs stale-distribution cleanup before creation; that cleanup requires durable ownership and matching live registration unless destructive consent is explicit. The PR does not change these authorization checks or stored marker formats. (src/OpenClaw.SetupEngine/CreateWslInstanceStep.cs:355, f7f2ce9a3d84)
  • Regression coverage and reported validation: Five added tests cover timeout recovery, exhausted checks, pipeline rollback preservation, completed-list rollback cleanup, and a completed list omitting the distribution. The body reports a successful full build, 4,169 Shared passes with 33 skips, 3,184 Tray passes, and focused setup passes. These commands were not rerun during this read-only review. (tests/OpenClaw.SetupEngine.Tests/SetupStepsTests.cs:3309, f7f2ce9a3d84)

Likely related people:

  • shanselman: Suggested for follow-up; no historical authorship or introduction is verified. (role: unverified routing candidate; confidence: low)
  • Barbara Kudiess: Suggested for follow-up; no historical authorship or introduction is verified. (role: unverified routing candidate; 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.

History

Review history (3 earlier review cycles)
  • reviewed 2026-09-29T20:51:08.995Z sha 54d2dd6 :: needs real behavior proof before merge. :: [P1] Carry preservation into failed-step rollback
  • reviewed 2026-09-30T20:41:35.816Z sha f7f2ce9 :: needs real behavior proof before merge. :: none
  • reviewed 2026-10-06T06:49:21.413Z sha f7f2ce9 :: needs real behavior proof before merge. :: none

When every post-install list fails, immediate cleanup leaves the
distro registered. End-user setup then rolls that step back, and the
second cleanup unregistered it. Rollback now reuses the same
preservation decision.

A completed list that omits the name still unregisters on rollback.
SetupPipeline_PreservesFreshDistroWhenPostInstallListFailsAndRollbackRuns
and SetupPipeline_UnregistersDistroOnRollbackWhenPostInstallListCompleted
cover both paths.

Validation: ./build.ps1 exit 0. Shared 4169 passed, 33 skipped.
Tray 3184 passed. CreateWslInstance 18 passed.

Signed-off-by: Sebastien Tardif <SebTardif@ncf.ca>
@clawsweeper clawsweeper Bot added P1 Urgent regression or broken agent/channel workflow affecting real users now. rating: 🦪 silver shellfish Thin PR readiness signal; proof, validation, or implementation needs work. proof: sufficient Contributor real behavior proof is sufficient. rating: 🐚 platinum hermit Good normal PR readiness with ordinary maintainer review expected. status: 👀 ready for maintainer look ClawSweeper has no concrete contributor-facing blocker left for this PR. and removed rating: 🧂 unranked krab Not merge-ready due to missing proof or serious correctness/safety concerns. merge-risk: 🚨 security-boundary 🚨 Merging this PR could weaken sandboxing, authorization, credentials, or sensitive data. P0 Emergency: data loss, security bypass, crash loop, or unusable core runtime. status: 📣 needs proof The PR needs real behavior proof before ClawSweeper can clear the contributor ask. rating: 🦪 silver shellfish Thin PR readiness signal; proof, validation, or implementation needs work. merge-risk: 🚨 compatibility 🚨 Merging this PR could break existing users, config, migrations, defaults, or upgrades. labels Sep 30, 2026
@karkarl

karkarl commented Oct 9, 2026

Copy link
Copy Markdown
Collaborator

Global triage: NEEDS_HUMAN_TEST. Take confidence 55%; recommendation confidence 97%; effort small; risk high.

Reviewed exact head f7f2ce9a3d84. GitHub currently reports CLEAN with 28 passing, 0 failing, and 0 pending checks. proof label is sufficient. Durable automated signal: Codex review: needs maintainer review before merge..

Maintainer or proof-pool owner: run every declared Windows proof pool at this exact head and replace blocked or historical evidence with current-head results.

This is a triage classification, not a merge action. No branch changes were made.

@bkudiess

Copy link
Copy Markdown
Collaborator

Thanks for working on this. Reviewed head: f7f2ce9a3d8419feb1e59f1dcaa538cfe13f0112.

This is partially superseded by #1719, but the preservation behavior is still useful. Current main already retries post-install registration checks, including completed lists that temporarily omit the distro. It still lacks this PR's protection against removing the distro when every registration check fails, including during failed-step rollback.

Could you update this PR against current main and narrow it to that remaining preservation behavior? Please retain main's retry policy and GatewayPackageCleanup.RegisterAsync hook, and adjust the timeout/list-count tests to match the combined behavior rather than restoring the older retry loop.

After resolving the conflict, please rerun the focused creation/rollback tests and refresh the timeout-preservation and ownership-checked recovery evidence at the new head. The existing-head results don't cover the integration changes.

This branch has not been deployed

No deployments
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

P1 Urgent regression or broken agent/channel workflow affecting real users now. proof: sufficient Contributor real behavior proof is sufficient. rating: 🐚 platinum hermit Good normal PR readiness with ordinary 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.

3 participants