Conversation
Extract the guarded serving-owner recovery from a6190ba in PR #1447 (feat(setup): guide native Gateway installation and onboarding), onto main 273b018. Production recovery is unchanged. Omit native-package documentation and fixture isolation already present on main via fb8b9e7. Retain focused tests and setup documentation; add a coordinator-contention non-retry case and clarify provenance limitations. Related to #1498. Restart-intent coordinator contention remains unresolved. No guard bypass or broader retry policy. Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com> Copilot-Session: b57fee8a-96bb-4dd3-8352-588f901fffa8
|
Codex review: needs changes before merge. Reviewed September 25, 2026, 1:33 AM ET / 05:33 UTC (Revision 3). ClawSweeper reviewWhat this changesAfter the WSL setup wizard restores Gateway reload mode, the branch rechecks managed endpoint ownership and retries the guarded Gateway CLI restart once for a specific serving-owner refusal, with tests and setup documentation. Regression provenancePossible regression — probable (reproduction; reviewed change). No predecessor PR is attributed. Merge readiness⛔ Needs changes before merge - 2 items remain Keep this PR open. Current main still lacks the recovery, and the PR reports a successful current-head run against Gateway 2026.9.6. The prior documentation finding remains: it presents an unobserved owner-lease condition as fact. A maintainer has accepted the narrow retry policy, but the PR body still withholds merge authorization while GitHub marks it ready. Priority: P0 Review scores
Verification
How this fits togetherThe Windows Setup Engine runs the Gateway wizard inside an app-managed WSL installation. After the wizard, it restores reload settings, asks the Gateway CLI to restart the service, verifies the endpoint, and then lets setup continue or fail. flowchart LR
A[Wizard completes] --> B[Restore reload mode]
B --> C{Guarded restart result}
C -->|Specific owner refusal| D[Check managed endpoint]
D --> E[Retry guarded restart once]
C -->|Other result| F[Setup outcome]
E --> F
Before merge
Findings
Agent review detailsSecurityNone. Review metrics
Root-cause clusterRelationship: Members:
Proposal only: this assessment does not dispatch repair, suppress jobs, mutate sibling items, close, or merge anything. Technical reviewBest possible solution: Keep the bounded guarded CLI recovery, qualify the unobserved lease explanation in the documentation, and track the separate coordinator-contention failure in #1498. Do we have a high-confidence way to reproduce the issue? Yes. Exact-main Windows/WSL setup runs and a disposable local fixture reproduced the specific post-wizard serving-owner refusal with Gateway 2026.9.6; the PR reports one successful current-head recovery of that refusal. Is this the best way to solve the issue? Yes for the code path: one endpoint-checked repeat through the existing guarded CLI is a narrow recovery for the observed refusal. The documentation must stop presenting the unexposed lease predicate as an established cause. Full review comments:
Overall correctness: patch is incorrect AGENTS.md: found and applied where relevant. Codex review notes: model internal, reasoning high; reviewed against 273b0182745a. LabelsLabel changes: No label changes. Label justifications:
EvidenceWhat I checked:
Likely related people:
Rank-up movesOptional improvements that raise the rating; they are not merge blockers.
Rating scale
Overall follows the weaker of proof and patch quality. Workflow
History |
|
🦞👀 Pull request received. I will update this pull request when review starts. ClawSweeper review completeClawSweeper finished reviewing this revision. The review result is being finalized. |
|
Hi Karen, Copilot here. Thanks for extracting this narrow recovery and for the current-head official Gateway 2026.9.6 proof: the changed warning appeared once, the guarded CLI retry completed setup, and strict Gateway/MXC ran 17 passed, 0 skipped. The separate One concrete wording fix before readiness: Scott explicitly accepts one repeat through the normal guarded Gateway CLI after the exact serving-owner refusal and managed-endpoint recheck, provided both attempts keep Gateway owner/intent admission and other refusals (especially typed contention) fail closed. This is a policy disposition, not merge approval: your PR body currently says “Draft pending” / “No merge is authorized,” although GitHub marks the PR non-draft. Do you intend #1515 to remain a draft while you finish the documentation/review, or is it ready for a maintainer to reassess once those are aligned? I stopped without committing or pushing any changes. Local supplemental check, not new-head proof: the full ARM64 build passed. One Shared-suite run failed the unrelated intermittent MCP disposal test; its exact focused rerun passed. I did not call the full required floor green or waive it after stopping at your draft/no-merge wording. |
|
Global triage: HOLD_FOR_AUTHOR. Take confidence 65%; recommendation confidence 98%; effort extra-small; risk medium. The production retry remains narrowly bounded and guarded, and current-head proof is strong: build, Shared, Tray, SetupEngine, strict Gateway setup, and One documentation finding remains. Also reconcile the PR body's draft/no-merge wording with GitHub's non-draft ready state before maintainer reassessment. This is a policy and author-intent hold, not a request to broaden the accepted one-retry behavior. Restart-intent coordinator contention correctly remains outside this fix. |
Summary
Related to #1498. This is a user-authorized, focused extraction from
a6190ba0935d20c97ecaf69bdc4f0871ebb63589in #1447 (feat(setup): guide native Gateway installation and onboarding), based directly on main273b0182745a3093c0e09f306ca8a1fff6ef3c5a. It does not include the native onboarding feature history. #1447 and its branch are unchanged. Do not close #1498: restart-intent coordinator contention remains unresolved.After reload-mode restoration,
SetupWizardRunner.RestoreReloadModeAsyncrecognizes only the exact diagnostic:It reuses
VerifyExpectedManagedGatewayAsync, then makes one recovery call to the same guarded Gateway CLI restart. The existing provenance wait allows up to 30 one-second retry delays, plus probe duration, forNoListenerorUnknownListenerspecifically taggedListenerSnapshotChanged. Other unknown/conflicting listeners, other restart errors, and repeated refusal fail closed.There is no direct systemd restart fallback, lock deletion, arbitrary signaling, silent downgrade, or ownership bypass.
SetupWizardRunnerremains the orchestration owner; the existing provenance policy and upstream Gateway admission retain their responsibilities. Listener provenance is not proof of owner-lease or coordinator readiness.Extraction provenance and deviations
Head:
77b7e4bb295e2c32df587c17e4e1a35ab0a2f428. Three files, 122 added lines.a6190ba0.StateDatabaseCoordinatorContentionError/ restart-intent-recording refusal. Seven restart regression cases pass.docs/TEST_COVERAGE.mdand native onboarding context from the setup-document conflict.E2ESetupFixture.cs,SetupAndConnectTestsUninstallIsolation.cs, orAppRefactorContractTests.cs: they are already on main throughfb8b9e736f7473705ea14d8e97f6117bcbaddf68.Required proof pools
windows-wsl-gateway-e2e: post-wizard managed Gateway restart and setup recovery. Fresh local strict fixture exercised the changed recovery on official Gateway 2026.9.6.windows-wsl-mxc: required strict gateway setup/connect closeout, including real Gateway -> Windows node ->system.runcontainment. All 17 tests passed without skips.No new UI surface, node capability, or MCP command contract is introduced.
Validation
Fresh validation of this extracted source on local Windows ARM64, build 26694.
OPENCLAW_REPO_ROOTpointed to this worktree; tray data and runtime TEMP/TMP were task-owned and isolated.$proofbelow is the session-owned results directory. Fresh-worktree tests intentionally allowed restore rather than risking a--no-restoreno-op..\build.ps1dotnet test .\tests\OpenClaw.Shared.Tests\OpenClaw.Shared.Tests.csproj --logger "trx;LogFileName=Shared.trx" --results-directory $proofdotnet test .\tests\OpenClaw.Tray.Tests\OpenClaw.Tray.Tests.csproj --logger "trx;LogFileName=Tray.trx" --results-directory $proofdotnet test .\tests\OpenClaw.SetupEngine.Tests\OpenClaw.SetupEngine.Tests.csproj --logger "trx;LogFileName=SetupEngine.trx" --results-directory $proof$env:OPENCLAW_E2E_GATEWAY_VERSION='2026.9.6'; pwsh -NoProfile -File .\scripts\validate-mxc-e2e.ps1 -NoBuild -ResultsDirectory "$proof\mxc-results"-NoBuildreused the completed full ARM64 app build; the script always rebuilt the E2E project. No-AllowSkip.git diff --cached --checkbefore commitReal behavior proof
Current-source strict local fixture, head
77b7e4bb:Gateway restart owner was unavailable after restoring reload. Rechecking managed ownership before one restart retry.MirroredWslSafeGatewayPort_IsListeningAndRecorded,RealGateway_SystemRun_ExecutesThroughWindowsNodeMxcSandbox, andRealGateway_SystemRun_BlocksWritesToTrayDataDirectoryInMxcSandbox.Historical source evidence, not validation of this extracted head
Run 36055236206 at original
a6190ba0exercised the classified retry once in each Gateway 2026.9.6 shard: setup/connect 40 passed and 6 MXC skips, revocation 1 passed, network 2 passed. SetupEngine was 1,353 passed / 1 skipped; Tray was 3,097 passed. The overall run failed: Shared had 4,167 passed, 2 failed, 1 skipped. The failures wereBoundedProcessWaitTests.WaitAsync_CancellationDoesNotWaitForInheritedPipeHandles(3,053 ms against a <3-second limit) andPiperVoiceExtractionTests.ExtractTarBz2Async_CancellationIsBoundedAndKillsExtractor(extractor still running). They are not attributed to #1498 or declared harmless flakes. These historical counts do not replace the fresh results above.Review and remaining gates
Draft pending structured autoreview and security-sensitive maintainer review. No merge is authorized.
python .agents\skills\autoreview\scripts\autoreview --mode local --prompt <focused-extraction-context> --output <session-report> --json-output <session-json>. Not verified / blocked: its secret-like-content guard rejected expanded diff context before the model ran. The scanner was not bypassed or weakened. This is not a clean autoreview result.clawsweeper:needs-security-reviewrequirement visible and preserveclawsweeper:no-new-fix-pr; the separate focused PR was explicitly authorized by the user, not spawned as an automated repair.StateDatabaseCoordinatorContentionError/ approximately 5,011 ms state-lifecycle admission failure occurs before owner resolution. It remains a separate, untreated intent-recording failure.