Skip to content

fix(update): suppress ordinary Windows updates on extended-stable - #1141

Open
RomneyDa wants to merge 7 commits into
mainfrom
fix/extended-stable-update-notices
Open

fix(update): suppress ordinary Windows updates on extended-stable#1141
RomneyDa wants to merge 7 commits into
mainfrom
fix/extended-stable-update-notices

Conversation

@RomneyDa

@RomneyDa RomneyDa commented Aug 9, 2026

Copy link
Copy Markdown
Member

Related: openclaw/openclaw#118518

What Problem This Solves

Fixes an issue where Windows Companion users on an extended-stable Gateway would be prompted to install the repository's ordinary latest Windows release.

Why This Change Was Made

The Gateway is the authoritative owner of the installed OpenClaw update track. The companion now waits for an authenticated hello-ok, reads the additive update.status.effectiveChannel field, and suppresses Updatum only for extended-stable. A missing field, old or unauthorized Gateway, connection failure, and no configured operator Gateway retain the existing standalone updater behavior.

The companion PR depends on OpenClaw PR #118518 adding effectiveChannel to update.status; it remains compatible with older Gateways that omit the field.

User Impact

Extended-stable users no longer see ordinary Windows release upgrade prompts. Stable and beta users, and users whose Gateway cannot provide the update track, continue receiving the existing Windows update experience.

Evidence

Production LOC: +159/-15 (net +144). Tests: +123/-1 (net +122). The production growth is the additive typed Gateway contract and the one canonical lifecycle owner for update-track resolution; test growth covers parser policy, real loopback RPC frames, Gateway errors, startup fallback, and handshake ordering.

  • git diff --check passed on this exact head.
  • Local macOS host has no dotnet, so native build/test commands could not run there (zsh: command not found: dotnet).
  • Parallels Windows proof on 7f03dffc2278a6a667812d71798a5f9137bd1438: Debug WinUI build, required shared/tray tests, and active UI verification passed. It demonstrated extended-stable suppression and the visible ordinary update dialog fallback for missing/error Gateway status.

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

Validation

  • git diff --check (passed)
  • Parallels Windows: Debug WinUI build (passed)
  • Parallels Windows: required shared tests (passed)
  • Parallels Windows: required tray tests (passed)
  • Local dotnet commands blocked because the macOS host does not have the .NET SDK.

Real Behavior Proof

  • Environment tested: Parallels Windows guest
  • PR head or commit tested: 7f03dffc2278a6a667812d71798a5f9137bd1438
  • Exact steps or command run: connected the Companion to controlled Gateway responses for update.status.effectiveChannel=extended-stable, then missing/error status responses.
  • Evidence after fix: extended-stable did not surface an ordinary Windows update prompt; missing/error status retained the visible normal update dialog.
  • Observed result: only the authoritative extended-stable state suppresses the independent Updatum prompt.
  • Screenshot or artifact links verified? N/A (guest proof reported directly)
  • Not verified or blocked: no local .NET SDK on the macOS implementation host.

Security Impact

  • New permissions or capabilities? No
  • Secrets or tokens handling changed? No
  • New or changed network calls? Yes. The Companion calls authenticated Gateway update.status before its existing GitHub updater check; unavailable/unauthorized calls fall back without exposing credentials.
  • Command or tool execution surface changed? No
  • Data access scope changed? No

Compatibility and Migration

  • Backward compatible? Yes
  • Config or environment changes? No
  • Migration needed? No

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.

@clawsweeper

clawsweeper Bot commented Aug 9, 2026

Copy link
Copy Markdown

🦞👀
ClawSweeper picked this up.

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

@RomneyDa RomneyDa added the status: 🚢 actively landing A maintainer or agent is actively driving this item through implementation, validation, or merge. label Aug 9, 2026
@clawsweeper clawsweeper Bot added 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. P2 Normal priority bug or improvement with limited blast radius. merge-risk: 🚨 compatibility 🚨 Merging this PR could break existing users, config, migrations, defaults, or upgrades. labels Aug 9, 2026
@clawsweeper

clawsweeper Bot commented Aug 9, 2026

Copy link
Copy Markdown

Codex review: needs maintainer review before merge. Reviewed August 24, 2026, 4:26 PM ET / 20:26 UTC.

ClawSweeper review

What this changes

The PR defers automatic Windows update checks until Gateway resolution and suppresses the companion updater only when an authenticated Gateway reports the extended-stable channel.

Merge readiness

⚠️ Needs maintainer review before merge - 3 items remain

Keep open. Current main still runs the ordinary updater without consulting a Gateway update track, but this member-authored branch is dirty against a substantially refactored main and needs an intentional rebase before landing.

Priority: P1
Reviewed head: e00bf14bfb7a6558bcca85854a82753c943e6c9f
Owner decision: Required. See Decision needed.

Review scores

Measure Result What it means
Overall readiness 🦐 gold shrimp (3/6) The branch has focused protocol and Windows proof, but its dirty merge state requires a current-main integration pass before it is merge-ready.
Proof confidence 🐚 platinum hermit (4/6) Sufficient (logs): Current-head Parallels Release validation reports authenticated extended-stable suppression and ordinary-dialog fallback for missing, unauthorized, and error status responses.
Patch quality 🦐 gold shrimp (3/6) No actionable review findings were identified.

Verification

Check Result Evidence
Real behavior Verified Sufficient (logs): Current-head Parallels Release validation reports authenticated extended-stable suppression and ordinary-dialog fallback for missing, unauthorized, and error status responses.
Evidence reviewed 5 items Current main lacks the requested policy: Current main invokes the Windows updater directly and has no Gateway update-status resolution in this coordinator.
PR implements narrow fallback policy: The branch queries update.status after Gateway resolution, suppresses only extended-stable, and retains the updater for null or failed status.
Protocol dependency is explicit: The branch sends authenticated update.status and parses effectiveChannel; the PR body identifies the related OpenClaw core change as the source of that additive field.
Findings None None.
Security None None.

Live Verification

Command: powershell -NoProfile -ExecutionPolicy Bypass -File .\build.ps1

Result: FAIL (failed) — execution before step 1 run: sh -lc pnpm install --ignore-scripts --frozen-lockfile failed: ! Corepack is about to download https://registry.npmjs.org/pnpm/-/pnpm-11.23.0.tgz

sh -lc pnpm install --ignore-scripts --frozen-lockfile failed: ! Corepack is about to download https://registry.npmjs.org/pnpm/-/pnpm-11.23.0.tgz

Assertions:

  • FAIL expect_output: Build succeeded
  • FAIL expect_output: Passed
  • FAIL expect_output: Passed

How this fits together

The tray companion connects to an operator Gateway, which owns the selected OpenClaw update track. The tray updater consumes that track before checking the separate Windows release feed and potentially showing an update dialog.

flowchart LR
A[Tray startup] --> B[Operator Gateway connection]
B --> C[Authenticated handshake]
C --> D[Gateway update status]
D --> E{Extended-stable?}
E -->|Yes| F[Skip companion update]
E -->|No or unavailable| G[Check Windows release]
G --> H[Update dialog or app launch]
Loading

Decision needed

Question Recommendation
Should this update-track policy be sponsored for a current-main rebase once the related Gateway effectiveChannel contract is confirmed? Sponsor a current-main rebase: Preserve the narrow extended-stable policy, adapt it to current ownership seams, and require current-head Windows validation.

Why: The requested behavior remains absent, but the branch cannot merge and crosses recently refactored tray and Gateway lifecycle seams.

Before merge

  • Resolve merge risk (P1) - The branch is not mergeable against current main, whose App and Gateway ownership seams have changed substantially; rebasing must preserve GatewayConnectionManager as the sole operator-client owner.
  • Resolve merge risk (P1) - The suppression policy depends on the related core update.status effectiveChannel contract, so the rebased implementation needs current contract confirmation and upgrade-path proof for missing, unauthorized, and failing status calls.
Agent review details

Security

None.

Review metrics

Metric Value Why it matters
Production versus test delta production +159/-15, tests +123/-1 The change adds a Gateway contract and startup lifecycle path with nearly matching focused test growth.

Merge-risk options

Maintainer options:

  1. Rebase with compatibility proof (recommended)
    Rebase onto current main and prove that extended-stable suppresses ordinary prompts while missing, unauthorized, and failed Gateway status retain the existing updater.
  2. Pause pending protocol confirmation
    Keep the PR open but defer integration until the related Gateway update-status contract is confirmed for the target release line.

Technical review

Best possible solution:

Rebase the policy onto current main, integrate it through the current Gateway connection lifecycle, and validate extended-stable suppression plus missing, unauthorized, and error fallbacks on the rebased head.

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

Yes, source-reproducible: current main calls the ordinary updater directly, while the branch's controlled Gateway proof covers extended-stable and fallback responses.

Is this the best way to solve the issue?

Yes in principle, but not as this merge result: the policy is narrow and its fallback design is sound, yet it needs a current-main rebase and protocol-contract confirmation.

AGENTS.md: found and applied where relevant.

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

Labels

Label changes:

  • add rating: 🦐 gold shrimp: Overall readiness is 🦐 gold shrimp; proof is 🐚 platinum hermit and patch quality is 🦐 gold shrimp.
  • remove rating: 🐚 platinum hermit: Current PR rating is rating: 🦐 gold shrimp, so this older rating label is no longer current.

Label justifications:

  • P1: The PR changes whether extended-stable users receive ordinary Windows release prompts.
  • merge-risk: 🚨 compatibility: The updater's existing behavior must remain intact for older, unavailable, unauthorized, and failing Gateways.
  • rating: 🦐 gold shrimp: Overall readiness is 🦐 gold shrimp; proof is 🐚 platinum hermit and patch quality is 🦐 gold shrimp.
  • status: 👀 ready for maintainer look: ClawSweeper has no concrete contributor-facing blocker left for this PR. Sufficient (logs): Current-head Parallels Release validation reports authenticated extended-stable suppression and ordinary-dialog fallback for missing, unauthorized, and error status responses.
  • proof: sufficient: Contributor real behavior proof is sufficient. Current-head Parallels Release validation reports authenticated extended-stable suppression and ordinary-dialog fallback for missing, unauthorized, and error status responses.

Evidence

What I checked:

Likely related people:

  • Scott Hanselman: Current-main blame attributes the update coordinator's check entry point to Scott's updater commit. (role: current updater owner; confidence: high; commits: 4206611f2b2e; files: src/OpenClaw.Tray.WinUI/Services/UpdateCoordinator.cs)
  • Barbara Kudiess: Recent main history includes the App orchestration and Gateway protocol refactors that the rebase must respect. (role: recent connection and App architecture contributor; confidence: high; commits: 17a8b0363a82, 323f46d3ded7, 428db773d8be; files: src/OpenClaw.Tray.WinUI/App.xaml.cs, src/OpenClaw.Shared/OpenClawGatewayClient.cs)

Rank-up moves

Optional improvements that raise the rating; they are not merge blockers.

  • Rebase onto current main while preserving the single GatewayConnectionManager client-owner invariant.
  • Post redacted current-head Windows validation for extended-stable, missing-field, unauthorized, and error Gateway responses.

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 (9 earlier review cycles; latest 8 shown)
  • reviewed 2026-08-09T09:27:42.949Z sha 7f03dff :: needs maintainer review before merge. :: none
  • reviewed 2026-08-09T12:00:28.751Z sha 7f03dff :: needs maintainer review before merge. :: none
  • reviewed 2026-08-09T14:51:14.440Z sha 7f03dff :: needs maintainer review before merge. :: none
  • reviewed 2026-08-10T08:57:14.929Z sha 7f03dff :: needs changes before merge. :: [P1] Preserve the updater while Gateway pairing is pending
  • reviewed 2026-08-11T18:04:28.081Z sha e00bf14 :: needs maintainer review before merge. :: none
  • reviewed 2026-08-11T18:34:54.818Z sha e00bf14 :: needs maintainer review before merge. :: none
  • reviewed 2026-08-12T17:27:42.755Z sha e00bf14 :: needs maintainer review before merge. :: none
  • reviewed 2026-08-12T19:19:12.633Z sha e00bf14 :: needs maintainer review before merge. :: none

@clawsweeper clawsweeper Bot added rating: 🦐 gold shrimp Decent PR readiness signal, but merge confidence is limited. rating: 🦞 diamond lobster Very strong PR readiness with only minor maintainer review expected. and removed rating: 🐚 platinum hermit Good normal PR readiness with ordinary maintainer review expected. rating: 🦐 gold shrimp Decent PR readiness signal, but merge confidence is limited. rating: 🦞 diamond lobster Very strong PR readiness with only minor maintainer review expected. labels Aug 9, 2026
@RomneyDa

Copy link
Copy Markdown
Member Author

Parallels Release-mode proof on exact head 7f03dffc2278a6a667812d71798a5f9137bd1438:

  • Fresh guest snapshot, then Release build completed successfully.
  • Shared tests: 3,637 passed, 32 skipped. Tray tests: 2,248 passed.
  • Authenticated Gateway mock returning update.status.effectiveChannel=extended-stable: guest logs recorded the update.status request followed by the extended-stable skip; no Updatum request or update dialog appeared.
  • Missing-field fallback: a guest-only 0.6.10 metadata build with effectiveChannel omitted queried live GitHub v0.6.12; native UI Automation found the ordinary update dialog and its expected buttons.
  • Error fallback: an update.status error produced the same ordinary update dialog.

The screenshot framebuffer was black in this guest, so the UI evidence is native UI Automation plus guest logs rather than attached screenshots. Test metadata, mock settings, and temporary guest build state were cleaned up after the run.

@RomneyDa

Copy link
Copy Markdown
Member Author

@clawsweeper re-review

@clawsweeper

clawsweeper Bot commented Aug 10, 2026

Copy link
Copy Markdown

🦞🧹
ClawSweeper re-review requested.

I asked ClawSweeper to review this item again.
Action: item re-review queued (workflow sweep.yml, event repository_dispatch).
Result: when the review finishes, ClawSweeper will create the durable review comment if needed or update the existing comment in place.

Re-review progress:

@clawsweeper clawsweeper Bot added P1 Urgent regression or broken agent/channel workflow affecting real users now. status: ⏳ waiting on author ClawSweeper has contributor-facing work open and is waiting for author action. and removed status: 👀 ready for maintainer look ClawSweeper has no concrete contributor-facing blocker left for this PR. P2 Normal priority bug or improvement with limited blast radius. labels Aug 10, 2026
@clawsweeper clawsweeper Bot added 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. and removed rating: 🦐 gold shrimp Decent PR readiness signal, but merge confidence is limited. labels Aug 11, 2026
@clawsweeper clawsweeper Bot removed the status: ⏳ waiting on author ClawSweeper has contributor-facing work open and is waiting for author action. label Aug 11, 2026
@RomneyDa

Copy link
Copy Markdown
Member Author

@clawsweeper re-review

@clawsweeper

clawsweeper Bot commented Aug 11, 2026

Copy link
Copy Markdown

🦞🧹
ClawSweeper re-review requested.

I asked ClawSweeper to review this item again.
Action: item re-review queued (workflow sweep.yml, event repository_dispatch).
Result: when the review finishes, ClawSweeper will create the durable review comment if needed or update the existing comment in place.

Re-review progress:

@clawsweeper clawsweeper Bot added rating: 🦐 gold shrimp Decent PR readiness signal, but merge confidence is limited. and removed rating: 🦞 diamond lobster Very strong PR readiness with only minor maintainer review expected. labels Aug 11, 2026
@RomneyDa

Copy link
Copy Markdown
Member Author

Current-head Parallels Release validation for e00bf14bfb7a6558bcca85854a82753c943e6c9f:

  • Signed connect received structured PAIRING_REQUIRED.
  • Unauthorized update.status was rejected; the tray fell back to the normal updater (Checking for updates..., then an update was found).
  • UI Automation found the update dialog with current 0.6.10, latest v2026.7.1, and all action buttons.
  • A normal Release rebuild and cleanup completed afterward.

The earlier detailed Release proof comment covers the omitted effectiveChannel and update.status error fallback paths.

@RomneyDa

Copy link
Copy Markdown
Member Author

@clawsweeper re-review

@clawsweeper clawsweeper Bot added proof: sufficient Contributor real behavior proof is sufficient. rating: 🐚 platinum hermit Good normal PR readiness with ordinary maintainer review expected. and removed rating: 🦐 gold shrimp Decent PR readiness signal, but merge confidence is limited. labels Aug 12, 2026
@clawsweeper clawsweeper Bot added rating: 🦐 gold shrimp Decent PR readiness signal, but merge confidence is limited. and removed rating: 🐚 platinum hermit Good normal PR readiness with ordinary maintainer review expected. labels Aug 24, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

merge-risk: 🚨 compatibility 🚨 Merging this PR could break existing users, config, migrations, defaults, or upgrades. P1 Urgent regression or broken agent/channel workflow affecting real users now. proof: sufficient Contributor real behavior proof is sufficient. rating: 🦐 gold shrimp Decent PR readiness signal, but merge confidence is limited. status: 🚢 actively landing A maintainer or agent is actively driving this item through implementation, validation, or merge. 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.

1 participant