Repository navigation
fix(setup): stop console flashes when Gateway cleanup runs - #1782
paulcam206 wants to merge 9 commits into
Conversation
|
🦞👀 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. |
|
Codex review: needs real behavior proof before merge. What this changesThis PR launches scheduled Gateway cleanup through a durable windowless helper and signs that helper before embedding it in release builds. Example: The Gateway cleanup task starts at its one-minute interval.
Review scores
ProductKind: Bug fix · Worth it: Yes · Fix scope: Complete Merge readiness⛔ Blocked before merge - 1 item remains Keep open: current main still launches cleanup through PowerShell directly, and this PR provides a useful fix with no actionable code findings. Priority: P2 Before merge
FindingsNone. Tests
Agent review detailsHow this fits togetherSetupEngine deploys cleanup resources outside the Companion package and registers a limited current-user scheduled task; the helper invokes the existing ownership-checked cleanup worker and returns its result to Task Scheduler. flowchart LR
A[Companion startup] --> B[SetupEngine deployment]
B --> C[Durable cleanup resources]
B --> D[Current-user scheduled task]
D --> E[Windowless helper]
C --> E
E --> F[PowerShell cleanup worker]
F --> G[Ownership-checked Gateway removal]
Technical reviewBest possible solution: Land the focused windowless launcher with sign-before-embed integrity and the existing cleanup ownership safeguards preserved. Do we have a high-confidence way to reproduce the issue? Current-main source retains direct PowerShell task execution, and supplied before traces detect a visible launch; this read-only review did not execute the application. Is this the best way to solve the issue? A small GUI-subsystem helper addresses console creation at process startup, survives package removal, and avoids introducing WSH/JScript dependence; the new build-only properties support the existing release-signing contract. AGENTS.md: found and applied where relevant. Codex review notes: model internal, reasoning medium; reviewed against fb45902950fd. Provenance checked
TestingProof path: shipped entry point. SecurityNone. EvidenceWhat I checked:
Likely related people:
Review metrics
LabelsLabel changes: No label changes. Label justifications:
Rating scale6/6 🦀 challenger crab · 5/6 🦞 diamond lobster · 4/6 🐚 platinum hermit · 3/6 🦐 gold shrimp · 2/6 🦪 silver shellfish · 1/6 🧂 unranked krab. Overall follows the weaker of proof and patch quality; ✨ marks media proof (a screenshot, video, or linked artifact) that directly shows the changed behavior. WorkflowClawSweeper edits this one comment on every review. Comment HistoryReview history (5 earlier review cycles)
Reviewed October 23, 2026, 2:08 PM ET / 18:08 UTC (Revision 6). |
|
@clawsweeper re-review |
|
🦞👀 Re-review progress:
|
|
@clawsweeper re-review |
|
🦞👀 Re-review progress:
|
|
@clawsweeper re-review |
|
🦞👀 Re-review progress:
|
|
@clawsweeper re-review |
|
🦞👀 Re-review progress:
|
Record actual nullable native exits and window sample gaps on failure. Require observer release, retain startup observations, and qualify the scheduled signed host parent by executable path and creation identity. Add native AppLocker capture with explicit callback errors, record-boundary replay, policy-applied gating, and exact provider/channel/SID/rule evidence. Add a proof worker that records handshake failures and handles successful PowerShell workers without requiring a populated LASTEXITCODE. Validation: 24/24 pure behavior cases; Framework native compilation; four PowerShell parsers; full build.ps1 passed. Shared: 4485 passed, 1 failed, 35 skipped. Failure is the MXC shell PATH readonly-grant expectation under the current isolated host work path. No assertions or budgets were relaxed. Pending: isolated Tray tests, worker process integration, fresh native AppLocker event qualification, signed-resource enforcing acceptance, and actual uninstall-window proof. Event-loss cause remains unproven. Local checkpoint only; all pushes held.
Keep exact event identity and unchanged observation deadlines. Reconcile readable records when live subscription notifications do not arrive, deduplicate replay, and propagate query failures. Native guest diagnosis showed readable 8001 records despite live waits expiring; parser and historical replay worked. Owned-path diagnostic later correlated 8001, 8002 and 8004. Final deadline guard is fail closed after reader I/O. Host validation: 27 focused cases passed; Framework native compile and full build passed; Shared 4486 passed, 35 skipped. Preserve earlier transient Shared fixture pending-outcome failure separately. Full current-head guest, Tray, signed cleanup and uninstall proof remain pending. Local only, all pushes held.
|
@clawsweeper re-review |
|
🦞👀 Re-review progress:
|
|
@clawsweeper re-review |
|
🦞👀 Re-review progress:
|
What Problem This Solves
Fixes: the Gateway cleanup scheduled task briefly shows a console or taskbar entry when its once-per-minute action starts.
User Impact
User impact: automatic Gateway cleanup continues without interrupting the desktop. The cleanup cadence, current-user identity and cleanup policy remain unchanged. This ships with Companion, not Gateway-only repackaging.
Why This Change Was Made
The task currently launches Windows PowerShell directly with
-WindowStyle Hidden. A console can be created before PowerShell handles that option.The task instead starts a small .NET Framework 4.8 GUI-subsystem helper. It launches the existing PowerShell worker with creation-time
CreateNoWindow, drains output, records failure diagnostics and returns the worker exit code. The hash-versioned helper and worker are copied outside the Companion package. Natural cleanup after real bundle removal is now verified for the qualified combined candidate below; uninstall window-event collection remains blocked.Both this helper (A) and the evaluated JScript prototype met the measured visible-window/taskbar contract. A avoids adding WSH/JScript/COM policy dependence. It does add a small custom executable and build wiring; that executable can itself be blocked by application control. The JScript prototype is not included in this PR.
The signing follow-up signs the cleanup EXE through the existing Azure Artifact Signing identity before x64, ARM64 and Store/Dev MSIX builds embed it. Signing the outer SetupEngine DLL cannot sign an embedded EXE. Non-dev Release builds now require signed input by default; unsigned Debug/Dev builds and explicitly non-published PR smoke builds remain supported. Pre-embed signature checks, post-build resource byte/signature checks and final payload verification prevent an unsigned or substituted nested helper from silently reaching a signed release.
Evidence
Current-head signed native acceptance:
9c521dd8e0e1e0f5397148f4d30935f80f5db1faThe three commits after
d3a9bc46correct tests/observers only; the sign-before-embed product implementation is unchanged. This exact head now passes actual signed-helper execution, correlated enforcing-policy controls and finalized uninstall visibility in a disposable native x64 guest. These results supersede the corresponding earlier proof blockers below, without rewriting failed attempts as passes.Provider/target/mode: Hyper-V / Windows / normal, lease
cbx_0bada2c7f851. No hosted run URL exists for this local Hyper-V run. Proof CLI pin6bd7156a, executable SHA25602E320F040005AE40C6F4445FECB3948F4FF762B2B7786FCAE29A9B80B4C2F40. Actual release helper was built, signed with a guest-only test signer, then embedded throughOpenClawSignedCleanupHostPathandRequireSignedCleanupHost=true. The shipped verifier and an independent extraction verified the actual named resource: Authenticode Valid and byte-identical signed/extracted SHA2563925A87C6912C405DA84D4A5FDC9081DAD9EDD3A1B2EDACC26F1C752C203F02B. Release SetupEngine SHA25607DC4F9CEA1EB412DA26272F120807E8394E4973CD4CD9109D7D5E37AC7EA08A. This is not Azure production signing or Store signing.AppLocker ENFORCE: policy application was qualified with event 8001 and a record-ID boundary. The actual extracted signed helper returned 37, produced its intended fixture effect and correlated to event 8002. Unsigned and wrong-signer controls both failed with native 1260, produced no forbidden effect and correlated to distinct 8004 events. Records were reconciled from the EXE and DLL channel by exact provider, path, target user, rule and process identity; no requirement or timeout was relaxed. All three controls passed. Original policy was restored.
Real uninstall lifecycle: production deployment and actual Task Scheduler invoked the signed resource after real disposable MSIX removal. An adjacent wrapper synchronized entry; the untouched production cleanup worker then ran. Actual GUI helper parent and worker were observed through final release/exit, helper native exit 0, production complete marker present, task retired. Finalized observer: 294 window samples, 15 taskbar samples, zero visible-console/taskbar observations, zero observer errors, 9.368 seconds. Maximum measured gaps: window 674.04 ms, taskbar 1234.25 ms. This is bounded sampled no-flash proof, not a guarantee against every shorter transient or a full Store Companion settings-migration pass.
The proof owner copied current-head receipts/TRX and restored guest policy, removed owned tasks/packages/processes, and released the exact lease (stop exit 0, nonexpired); no host/shared Gateway state was changed. Receipt manifest binds the final evidence JSON to SHA256
5069093D48C53DC177DCB0DF07647775E9E53E2E4514D413AC11789F8AFB393D. Raw archives remain private; only sanitized copied outcomes are published here.Limits: Smart App Control reputation is not covered. Native ARM64 validation is in progress via the validation package. Official-signed install/upgrade/uninstall will run on the first prerelease containing this change, before stable promotion. Broader AV/EDR diversity and the historical reporter-build/settings-migration limitations remain; no blanket proof-pool completion is claimed.
Historical signing fix:
d3a9bc46d10f4177dd9ad5d1b0fcfe32ffc315deAddresses the real P2 from the preceding
4947736ereview (3/3/3). Five actual-build regression cases pass: unsigned development resource allowed; default non-dev Release without signing input rejected; unsigned supplied input rejected; a valid existing OS-signed fixture embedded byte-for-byte with its signature retained; mismatched resource/input rejected. These build the actual SetupEngine project and inspect the actual compiled resource, not implementation text. No certificate, trust or installed runtime change was made.The existing protected Azure signing account/profile signs the AnyCPU helper once, before every release consumer compiles SetupEngine. CI release tags/promotions require that artifact, including Store submissions whose outer package is unsigned. Expected OpenClaw signer identity is also checked before artifact upload and again in final release-payload verification.
Limits: Azure production signing was not executed locally. The OS-signed fixture proves the build/resource boundary, not production cleanup-host execution or signed AppLocker acceptance. Historical runtime and guest proof below retains its original source scope; references to "current-head" in that retained history mean
4947736e, not this signing-fix head. Native ARM64, signed-policy acceptance and uninstall window-event finalization remain open. PR stays ready, not asserted merge-ready.Expanded disposable Windows-host execution, 2026-10-22
This later authorized execution supersedes the acquisition-only limits of the earlier attempt below, not its recorded failure. Provider/target/mode: Hyper-V / windows / normal; lease
cbx_ea5b9ce73e93, VMID490cc5f9-83b8-40e0-a733-5d03db32f1f6, guestWIN-A65IQ651TA1, x64 Windows10.0.29683. No hosted run URL exists for this local Hyper-V run. Pinned Crabbox sourcedb7687e5, executable SHA256587884DFACC22196889B7EFF5D593A080EAFE1730D4771A627F8E5CD11D6D5D3. The previously live-qualified1f79f365desktop route was retained; the verified product difference to this pin was the Direct-readiness budget changing from five to ten minutes. Actualwarmup --desktopsucceeded in 296 seconds against the verified read-only differencing parent. Actual passive observation qualified session 1, WinSta0 Default/input Default with input-desktop access.Official hash-verified portable .NET SDK
10.0.402and PowerShell7.6.7were staged only in the disposable guest, under explicit authority. SDK first-use generated a guest development certificate; subsequent runs disabled that generation. No host installation, host certificate/policy, shared Gateway or parent-VHDX change occurred. All 54 transferred guest evidence files matched their guest SHA256. Outcomes below are sanitized copied receipts retained privately, not publicly downloadable local-path links.Supported invocation vectors used, with the exact script selected per receipt:
Both used the trusted lease controller and pinned CLI, not an unsupported execution route. These are recorded command vectors, not instructions to replay expired authorization.
1782 result at
4947736e6819c965107eb21a60cc0b9a6dbfb033: actual enforced denial established; signed acceptance blocked. The exact cleanup-host project and four owner/collector files were acquired from full-SHA public URLs with source/hash bindings. The actual project built x64 withLangVersion=latest, retaining PE version metadata. A nonexportable guest-local test signer signed the actual host and adjacent original worker/task scripts; source bindings, pre/post hashes and actual signatures were retained. Signing and trust were guest-only test preparation, not production signing or reputation proof.A real ENFORCING AppLocker Exe collection, starting from actually empty baseline XML, scoped denial to the task restricted executables except the actual test publisher while allowing other execution. Effective policy was unchanged across the recorded second control. Actual unsigned start failed with native error 1260, a real matching 8004 event identified the exact unsigned path and deny rule, and no forbidden sentinel effect occurred. The failed immediate-event collection and fresh 15-second subscription remain failures. A later finalizer attempted event reconciliation and signed-host launch, but transport expired: signed acceptance remains UNVERIFIED, not inferred from a valid signature.
This closes only the actual unsigned-denial observation, not the acceptance pair, full application-control diversity or any complete proof pool. No native uninstall scenario or finalized uninstall-window receipt was produced in this guest. Earlier Scheduler and qualified combined installed evidence remain separate. The PR remains READY (not draft); this evidence update does not declare it merge-ready.
Transport and disposal: the signed-acceptance finalizer and read-only desktop-actor probe each expired at 120 seconds; the final read-only normal
run --no-syncrecovery expired at 660 seconds. No output established their execution point. No further retries occurred. Final guest process/desktop cleanup before disposal is unverified. Parent exact-ID release completed at2026-10-22T07:04:47.9589568Z, exit 0, nonexpired. IndependentGet-VMconfirmed this exact VM absent; parent-template length and last-write UTC ticks were unchanged. No task-owned VM remains. VM disposal is not a claim that pre-teardown process cleanup passed.Overnight native-host proof attempt, 2026-10-22
This is an infrastructure preflight failure, not a product test failure or pass. The source head is unchanged. An authorized, unelevated native Windows Hyper-V desktop lease was requested from the approved read-only differencing parent. No managed/SDK/native application controls ran because the guest never reached readiness.
hyperv, nativewindows, modenormal, desktop requested.cbx_dd88578c30c0.1a23239012e0906ecb82acb173f9855f6f53aa36, Go1.27.3; local executable SHA-256F2036C256DB744AF00403D24193FECBDD09EA260696D2AF2D4752C1DBB13A69B. This is an identified local interim build, not a claimed published Crabbox release.Exact acquisition command (the CLI's normal credential handling was used; no credential value was read or printed):
Copied acquisition result:
The cause beyond that PowerShell Direct/readiness failure remains unknown. It is not attributed to these PR changes, CPU load, credentials or desktop support without further evidence. No load-based start gate, elevation, checkpoint or unsupported
execcommand was used.Exact cleanup command and independently checked outcome:
No other lease was stopped. The parent image was not hashed or modified. This evidence establishes the attempted environment and cleanup only; it does not qualify an interactive desktop, native startup behavior, signed execution or enforcement.
At the earlier acquisition-only stop, finalized signed-artifact uninstall-window observation and actual enforcing application-control execution were unverified; no policy or certificate was changed in that attempt. The later explicitly authorized guest-only signer/policy preparation and actual denial evidence above supersede that application-control acquisition limit; signed acceptance and uninstall-window proof remain unverified. Native ARM64 is unavailable. Existing current-head x64 Scheduler and separately labeled combined installed evidence retain their original scope; the failed host acquisition does not complete those missing cases.
Current-head hosted checks refreshed 2026-10-22T03:14:06.1175377Z: 11 skipped, 24 success. Existing per-test CI classifications elsewhere in this body remain unchanged; this preflight ran no product tests.
Current-head Windows x64 tests detect a deliberately visible classic console through WinEvent, periodic window enumeration and taskbar UI Automation. Helper A produces no visible-window or taskbar observations for worker exits 0 and 37; missing/throwing workers, complex paths and registration refresh are covered.
An additional current-head run used one uniquely named disposable Task Scheduler task, production helper deployment and production action registration/refresh, with a harmless event-synchronized worker. It detected the original direct PowerShell launch and observed no visible replacement launch. The copied output is below. This is actual Scheduler proof, not installed-package or post-uninstall proof.
Earlier three-run comparisons, including bounded light load, detected the original action and found zero visible-window/taskbar observations for A and a JScript prototype. Those comparisons are historical, not rerun JScript evidence on this head. A avoids adding WSH/JScript/COM policy dependencies.
Finite sampling cannot exclude every arbitrarily short transient. A desktop capture attempt did not reliably capture the console compositor surface, so no screenshot is presented as evidence of absence. The current-head behavioral observer and positive calibration are the supporting evidence.
Read-only rubber-duck review found no remaining correctness findings. ClawSweeper's review of the earlier
d9e30f17head found no actionable code findings (patch quality 4/6), but requested installed/upgrade/uninstall, ARM64 and application-control proof before merge (readiness 2/6). Installed task refresh, natural AFTER comparison, natural uninstall cleanup and fresh-agent restoration now have qualified combined-build evidence below. Uninstall window-event finalization, complete Hub-settings migration, native ARM64 and application-control gaps remain; before this bounded proof update, a new-head review had not been manually requested. One exact@clawsweeper re-reviewis authorized after body verification; draft state and reviewers remain unchanged.Change Type
Scope
winnodeRequired proof pools
windows-clean-installer-upgrade: the official-signed install/upgrade/uninstall lane requires an official signed artifact. The CI release-signing environment signs onv*release tags (and the explicit alpha-promotion path), not ordinary PR builds. Verify this lane on the first prerelease containing this change, before promotion to stable. Current-head disposable test-signed uninstall and earlier qualified combined-build refresh evidence remain below.windows-winui-interactive: visible-window and taskbar regression proof. Local process and disposable Scheduler proof passed; this does not claim full isolated-app pool completion.windows-11-arm64: native ARM64 validation is in progress through a carryable Release validation package from exact head9c521dd8; results will be added after execution on native ARM64 Windows 11 hardware.Validation
Current-head corrective validation:
9c521dd8e0e1e0f5397148f4d30935f80f5db1faExecuted in the disposable native Windows guest, exact clean source head. Final copied TRX outcomes:
.\build.ps1dotnet test .\tests\OpenClaw.Shared.Tests\OpenClaw.Shared.Tests.csproj --no-restoredotnet test .\tests\OpenClaw.Tray.Tests\OpenClaw.Tray.Tests.csproj --no-restoredotnet test .\tests\OpenClaw.SetupEngine.Tests\OpenClaw.SetupEngine.Tests.csproj --no-restore --filter 'FullyQualifiedName~CleanupAppLockerEvidenceTests|FullyQualifiedName~CleanupVisibilityRunStateTests'dotnet test .\tests\OpenClaw.SetupEngine.Tests\OpenClaw.SetupEngine.Tests.csproj --no-restore -p:OpenClawSignedCleanupHostPath=<actual guest signed helper> -p:RequireSignedCleanupHost=true --filter 'FullyQualifiedName~GatewayCleanupTaskTests|FullyQualifiedName~CleanupProofWorkerTests'An earlier full Tray run had 4303 passes and one failure in
OpenClawChatDataProviderTests.CompactAuthoritativeReload_RetriesAfterTransientFailureWhenHistoryWasLoaded. Its request-entry count can reach three before reload application completes. Test/provider/loader source blobs are identical to the publishedd3a9bc46baseline, supporting a pre-existing asynchronous synchronization defect; failure on a baseline binary was not reproduced. One focused rerun passed, then the entire required block above passed. No chat source/assertion changes, sleep or deadline increases were made in this PR. Earlier failed guest attempts and their limits remain in the historical record. These guest outcomes do not imply newly queued hosted CI has passed.Historical signing-fix validation
Validated source:
d3a9bc46d10f4177dd9ad5d1b0fcfe32ffc315de. Test data/results were isolated. Tray and SetupEngine used the existing private-desktop runner, with nonzero TRX execution and verified native exit/desktop receipts; no shared app, package, Gateway or profile operations..\build.ps1dotnet test .\tests\OpenClaw.Shared.Tests\OpenClaw.Shared.Tests.csproj --no-restorepwsh -NoProfile -File Invoke-PrivateProof.ps1 -Repository <this checkout> -Evidence <new owned output> -Project .\tests\OpenClaw.Tray.Tests\OpenClaw.Tray.Tests.csproj -Report traypwsh -NoProfile -File Invoke-PrivateProof.ps1 -Repository <this checkout> -Evidence <new owned output> -Project .\tests\OpenClaw.SetupEngine.Tests\OpenClaw.SetupEngine.Tests.csproj -Report setup.\scripts\test-cleanup-host-signing.ps1.\scripts\test-ci-workflow-contract.ps1.\scripts\validate-agent-skills.ps1git diff --checkAn earlier Shared run had one fixture WebSocket teardown cancellation. Its exact targeted rerun and subsequent full runs passed without code/test changes. Read-only rubber-duck review of the sign-before-embed implementation found no findings; the final default-Release guard additionally passed the actual missing-input build regression. Hosted checks for this new head are not inferred from the historical results below.
Historical pre-signing validation
Validated commit:
4947736e6819c965107eb21a60cc0b9a6dbfb033, based on upstream main431bd8f9. Isolated test data roots were used for full suites.OPENCLAW_REPO_ROOTselected this worktree;OPENCLAW_RUN_INTEGRATION=1enabled desktop proof..\build.ps1dotnet test .\tests\OpenClaw.Shared.Tests\OpenClaw.Shared.Tests.csproj --no-restoredotnet test .\tests\OpenClaw.Tray.Tests\OpenClaw.Tray.Tests.csproj --no-restoredotnet test .\tests\OpenClaw.SetupEngine.Tests\OpenClaw.SetupEngine.Tests.csproj --no-restoredotnet test .\tests\OpenClaw.SetupEngine.Tests\OpenClaw.SetupEngine.Tests.csproj --no-restore --filter 'FullyQualifiedName~GatewayCleanup|FullyQualifiedName~PackageCleanup'.\scripts\validate-docs.ps1.\scripts\validate-agent-skills.ps1git diff --checkHosted CI refreshed for current head
4947736e6819c965107eb21a60cc0b9a6dbfb033: 21 successful checks, 7 skipped, no failing conclusions. The previous-head failures are not the current check state. Configured CI skips do not close the separate installed-package, ARM64 or policy proof lanes below.Prior Release/ARM64 compilation is supporting evidence only, not current-head native ARM64 execution.
Real Behavior Proof
Historical signing-build boundary
d3a9bc46d10f4177dd9ad5d1b0fcfe32ffc315de..\scripts\test-cleanup-host-signing.ps1.Valid; default Release missing-input, unsigned-input and mismatch cases failed as required. Unsigned development build succeeded.Historical runtime proof
4947736e6819c965107eb21a60cc0b9a6dbfb033.pwsh -NoProfile -File current-head-cleanup-task-proof.ps1(local disposable harness:GatewayPackageCleanup.DeployAsync, productioncleanup-task.ps1,Start-ScheduledTask, native visibility observer,Get-ScheduledTaskInfo). Only its nonce-named scratch task/folder and harmless worker were used, not the installed cleanup task or package/profile state.2026.10.401.0performed normal setup with Gateway genuinely absent, installed Store Gateway2026.10.400.0, and created its own production ownership receipt and original PowerShell PT1M task. No ownership receipt was fabricated and no task was manually triggered or edited.WindowsTerminal.exe, classCASCADIA_HOSTING_WINDOW_CLASS, correlated with those launches. Five foreground receipts additionally satisfy on-monitor and noncloaked checks, spanning all four launches. LastTaskResult was 0. Seven title-masked window-only rendered snapshots were retained privately; these are not desktop video or a flash-duration measurement.Win32_ProcessStartTracewas denied without elevation and the Scheduler Operational log was disabled. Process creation times/ancestry were read only in response to native console/Terminal window events, not periodic window/process polling. The earlier process-owned polling/UIA capture missed flashes that the developer saw; its taskbar UIA probe errored and it is not absence-of-flash proof.0x80073CF3before staging/registration commit; the old working baseline was recovered. The original Store install is bundle-distributed. A standard signed bundle succeeded on the one coordinated retry without force/removal/reset/trust changes or UAC. Bundle SHA2560ACB55DFB2043562630B41A71AB9288B1E7C08953840C836255349D0031171F5; source63a8130977fa091647226b553857f418d9d7007d, not a pure PR1782 binary. Cleanup source matches this PR except an equivalent home-name constant. Independent comparison found all 1,068 non-signing files byte-identical; only catalog/signature envelopes changed during bundling. No precise deployment subreason beyond the generic CF3 was established.cleanup-host-4ADA4355ECB4C527A707E6C0FC62770B4274816396E6C1B25D4D0EBE9DA19FEB.exe; its on-disk hash matches the candidate's embedded helper. Gateway400 is running, Hub402 has a main window, and the real agent's Coproxilot route and exact configuration hash match the fresh stopped backup. These establish installed refresh and agent-config preservation, not complete Hub-settings migration.completemarker postdated the removal request. The durable helper remained present with unchanged4ADA4355...hash. Self-unregistration means no final task result is inferred..openclawdata from the immutable stopped POST-REPAIR export. Explicit reviewed-source-root rebasing changed exactly three canonicalagents.entriesworkspace/agentDir paths. Source immutability, exact expected transformed configuration hash and preserved provider/primary route were verified; date-looking strings stayed strings. No old Gateway LocalState/session/setup records were replayed. The agent transfer is an opaque overlay, not a whole-tree mirror.RESTORE_OK, visibly rendered and privately captured. Final settings were MCP=true, Node=true, AutoStart=false; route/model remained unchanged. This proves a working recovered runtime, not complete Hub-settings migration, node.invoke execution or absence of an uninstall flash.Security Impact
Yes, explain the risk and mitigation: task entry point changes to a copied GUI helper; fixed system PowerShell path, validated package-family argument, unchanged current-user Interactive/Limited principal and unchanged cleanup policy. No elevation, new logon type or new runtime download.Compatibility and Migration
Cleanup storage formats, ownership receipts/sentinels and destructive-cleanup policy are unchanged. The worker diff extracts task registration and changes the launch action; behavioral cleanup-policy coverage still runs. ClawSweeper's generic data-model compatibility request identifies no specific changed schema or demonstrated incompatibility. Real installed task refresh and exact agent-config preservation are verified for the qualified combined build; full Hub-settings migration is not claimed.
Review Conversations