Skip to content

Treat soft plugin repair warnings as nonfatal#84431

Merged
steipete merged 2 commits into
openclaw:mainfrom
TurboTheTurtle:fix/plugin-convergence-soft-warnings-83889
Jun 2, 2026
Merged

Treat soft plugin repair warnings as nonfatal#84431
steipete merged 2 commits into
openclaw:mainfrom
TurboTheTurtle:fix/plugin-convergence-soft-warnings-83889

Conversation

@TurboTheTurtle

@TurboTheTurtle TurboTheTurtle commented May 20, 2026

Copy link
Copy Markdown
Contributor

Summary

  • keep post-core plugin convergence warnings visible without making every warning fatal
  • only block restart when repair reports failed plugin ids or payload smoke checks fail
  • add regression coverage for soft repair warnings and failed repair ids

Fixes #83889.

Real behavior proof

Behavior or issue addressed:
Post-core plugin convergence treated any repair warning as errored: true, so a soft repair warning such as a beta fallback note could make the post-core update path report error even when no plugin repair failed and payload smoke checks passed.

Real environment tested:
Local OpenClaw worktree on macOS, Node from the Codex bundled runtime (v24.14.0). The runtime proof uses a standalone convergence harness that executes this PR's runPostCorePluginConvergence implementation with controlled repair/smoke inputs, so it exercises the post-core convergence decision path outside the Vitest runner.

Exact steps or command run after this patch:

PATH=/Users/andy/.cache/codex-runtimes/codex-primary-runtime/dependencies/node/bin:$PATH node node_modules/tsx/dist/cli.mjs /private/tmp/openclaw-84431-proof/current/proof.ts
PATH=/Users/andy/.cache/codex-runtimes/codex-primary-runtime/dependencies/node/bin:$PATH node scripts/run-vitest.mjs src/cli/update-cli/post-core-plugin-convergence.test.ts
PATH=/Users/andy/.cache/codex-runtimes/codex-primary-runtime/dependencies/node/bin:$PATH node scripts/run-vitest.mjs src/commands/doctor/shared/missing-configured-plugin-install.test.ts src/plugins/update.test.ts
git diff --check

Evidence after fix:

scenario=soft
warnings=1
warning0=Plugin "demo" has no beta npm release for @openclaw/demo@beta; using @openclaw/demo instead. Core update can still complete.
smokeFailures=0
convergenceErrored=false
foldedErrored=false
wouldPostUpdateStatus=warning
---
scenario=hard
warnings=1
warning0=Failed to install missing configured plugin "demo" from @openclaw/demo: network unavailable.
smokeFailures=0
convergenceErrored=true
foldedErrored=true
wouldPostUpdateStatus=error
---

src/cli/update-cli/post-core-plugin-convergence.test.ts: Test Files 1 passed (1), Tests 15 passed (15)
src/commands/doctor/shared/missing-configured-plugin-install.test.ts src/plugins/update.test.ts: Test Files 2 passed (2), Tests 137 passed (137)
git diff --check: passed with no output

Observed result after fix:
A convergence run with only a nonfatal repair warning now preserves the warning but returns convergenceErrored=false, folds to foldedErrored=false, and would surface post-update plugin status as warning rather than error. A convergence run with failedPluginIds still returns convergenceErrored=true, folds to foldedErrored=true, and would surface status as error. Payload smoke-check failures remain fatal through the existing smoke-failure branch and tests.

What was not tested:
No live package-manager update, package swap, or gateway restart was performed; this proof verifies the post-core convergence decision behavior that controls whether warnings block the restart path.

@openclaw-barnacle openclaw-barnacle Bot added cli CLI command changes size: XS proof: supplied External PR includes structured after-fix real behavior proof. labels May 20, 2026
@clawsweeper

clawsweeper Bot commented May 20, 2026

Copy link
Copy Markdown
Contributor

Codex review: needs maintainer review before merge. Reviewed May 31, 2026, 4:16 PM ET / 20:16 UTC.

Summary
The PR changes post-core plugin convergence to keep repair warnings visible while only failed repair IDs or payload smoke failures make convergence errored, and adds focused tests.

PR surface: Source 0, Tests +23. Total +23 across 2 files.

Reproducibility: yes. Current main still keys convergence failure off warnings.length > 0, and a focused mocked convergence path with repair warnings but no failedPluginIds or smoke failures reproduces the bad error state from source.

Review metrics: none identified.

Merge readiness
Overall: 🐚 platinum hermit
Proof: 🦞 diamond lobster
Patch quality: 🐚 platinum hermit
Result: ready for maintainer review.

Overall follows the weaker of proof and patch quality, so missing proof can cap an otherwise strong patch.

Rank-up moves:

  • [P2] Maintainers should either accept the convergence-only proof gap or request one live package-manager update plus gateway restart smoke before merge.

Risk before merge

  • [P1] No live package-manager update plus gateway restart proof was supplied; the proof exercises the convergence decision path directly rather than the full upgrade path.
  • [P1] After merge, repair warnings without failedPluginIds or payload smoke failures will no longer block restart, so maintainers should explicitly accept that those two hard-failure signals cover the unsafe restart cases.

Maintainer options:

  1. Accept Targeted Convergence Proof (recommended)
    Merge after current-head required checks if maintainers accept that the supplied proof covers the convergence decision path rather than a live package swap and gateway restart.
  2. Request Live Update Smoke
    Ask for one live package-manager update plus gateway restart proof showing a soft fallback warning reports warning status while failed repair IDs or smoke failures still block.

Next step before merge

  • [P2] No repair lane is needed; the focused branch is reviewable and the remaining action is maintainer acceptance or additional live upgrade proof.

Security
Cleared: The diff only changes a convergence boolean and colocated tests; it does not touch dependencies, workflows, credentials, package resolution, or other security-sensitive surfaces.

Review details

Best possible solution:

Merge the scoped convergence gate and regression tests once maintainers are satisfied that soft fallback warnings remain warning-only and hard repair or payload failures still block restart.

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

Yes. Current main still keys convergence failure off warnings.length > 0, and a focused mocked convergence path with repair warnings but no failedPluginIds or smoke failures reproduces the bad error state from source.

Is this the best way to solve the issue?

Yes. The narrowest maintainable fix is to use the existing failedPluginIds repair contract plus payload smoke failures as the fatal signals, while leaving soft warnings visible to the caller.

AGENTS.md: found and applied where relevant.

Codex review notes: model gpt-5.5, reasoning high; reviewed against 80b7f5660354.

Label changes

Label changes:

  • add proof: sufficient: Contributor real behavior proof is sufficient. The PR body provides after-fix live output from a standalone convergence harness plus targeted test output for soft and hard scenarios; the remaining full upgrade/restart gap is tracked as merge risk, not missing proof.

Label justifications:

  • P2: This is a normal-priority CLI/plugin update bugfix with limited blast radius but real post-update restart impact.
  • merge-risk: 🚨 availability: The PR changes when post-core plugin convergence blocks restart, so a missed hard-failure classification could affect gateway availability after update.
  • rating: 🐚 platinum hermit: Overall readiness is 🐚 platinum hermit; proof is 🦞 diamond lobster and patch quality is 🐚 platinum hermit.
  • status: 👀 ready for maintainer look: ClawSweeper has no concrete contributor-facing blocker left for this PR. Sufficient (live_output): The PR body provides after-fix live output from a standalone convergence harness plus targeted test output for soft and hard scenarios; the remaining full upgrade/restart gap is tracked as merge risk, not missing proof.
  • proof: sufficient: Contributor real behavior proof is sufficient. The PR body provides after-fix live output from a standalone convergence harness plus targeted test output for soft and hard scenarios; the remaining full upgrade/restart gap is tracked as merge risk, not missing proof.
Evidence reviewed

PR surface:

Source 0, Tests +23. Total +23 across 2 files.

View PR surface stats
Area Files Added Removed Net
Source 1 1 1 0
Tests 1 24 1 +23
Docs 0 0 0 0
Config 0 0 0 0
Generated 0 0 0 0
Other 0 0 0 0
Total 2 25 2 +23

What I checked:

Likely related people:

  • steipete: git blame and file history attribute the current post-core convergence implementation and failedPluginIds contract to Peter Steinberger's 3bac0bc commit. (role: introduced current convergence path; confidence: high; commits: 3bac0bcbfb20; files: src/cli/update-cli/post-core-plugin-convergence.ts, src/commands/doctor/shared/missing-configured-plugin-install.ts, src/cli/update-cli/update-command.ts)
  • vincentkoc: Recent history for the update-cli surface includes Vincent Koc's a24af49 commit on post-update plugin refresh behavior, which is adjacent to this convergence gate. (role: recent adjacent update-cli contributor; confidence: medium; commits: a24af4910018; files: src/cli/update-cli/update-command.ts)
What the crustacean ranks mean
  • 🦀 challenger crab: rare, exceptional readiness with strong proof, clean implementation, and convincing validation.
  • 🦞 diamond lobster: very strong readiness with only minor maintainer review expected.
  • 🐚 platinum hermit: good normal PR, likely mergeable with ordinary maintainer review.
  • 🦐 gold shrimp: useful signal, but proof or patch confidence is still limited.
  • 🦪 silver shellfish: thin signal; proof, validation, or implementation needs work.
  • 🧂 unranked krab: not merge-ready because proof is missing/unusable or there are serious correctness or safety concerns.
  • 🌊 off-meta tidepool: rating does not apply to this item.

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.

How this review workflow works
  • 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.

@clawsweeper clawsweeper Bot added rating: 🦪 silver shellfish Thin PR readiness signal; proof, validation, or implementation needs work. status: 📣 needs proof The PR needs real behavior proof before ClawSweeper can clear the contributor ask. P2 Normal backlog priority with limited blast radius. labels May 20, 2026
@clawsweeper

clawsweeper Bot commented May 20, 2026

Copy link
Copy Markdown
Contributor

ClawSweeper PR egg

✨ Hatched: 💎 rare Brave Shellbean

Hatch command

Comment @clawsweeper hatch when this PR is hatchable.

Hatchability rules:

  • Merged PRs are hatchable.
  • Open PRs are hatchable when they are status: 👀 ready for maintainer look, status: 🚀 automerge armed, or labeled clawsweeper:automerge.
  • Closed unmerged PRs are hatchable only when one of those hatchable labels is still present in the durable record.

Rarity: 💎 rare.
Trait: sparkles near resolved comments.
Image traits: location review cove; accessory shell-shaped keyboard; palette amber, ink, and glacier blue; mood curious; pose peeking out from the egg shell; shell soft speckled shell; lighting soft studio lighting; background gentle dashboard dots.
Share on X: post this hatch
Copy: My PR egg hatched a 💎 rare Brave Shellbean in ClawSweeper.

What is this egg doing here?
  • Eggs appear after the PR passes real-behavior proof. It is here for vibes, not verdicts: it does not change labels, ratings, merge decisions, or automation.
  • The shell reacts to review momentum: open follow-up work warms it up, re-review makes it wobble, and a clean final review lets it hatch.
  • Hatchability usually comes from sufficient real-behavior proof, no blocking P0/P1/P2 findings, no security attention needed, and clean correctness. A merged PR is already final, so merge makes the egg hatchable independently.
  • The hatch is seeded from this repository and PR number, so the same PR keeps the same creature; the reviewed head SHA can only change safe visual details.
  • Rarity is just collectible sparkle: 🥚 common, 🌱 uncommon, 💎 rare, ✨ glimmer, and 🌈 legendary.

Copy link
Copy Markdown
Contributor Author

Added a standalone convergence runtime proof to the PR body.

It runs this PR's runPostCorePluginConvergence implementation outside the Vitest runner and shows:

scenario=soft
warnings=1
smokeFailures=0
convergenceErrored=false
foldedErrored=false
wouldPostUpdateStatus=warning
---
scenario=hard
warnings=1
smokeFailures=0
convergenceErrored=true
foldedErrored=true
wouldPostUpdateStatus=error

So warning-only convergence stays visible as a warning without blocking, while failedPluginIds still blocks as an error.

@clawsweeper re-review

@clawsweeper

clawsweeper Bot commented May 20, 2026

Copy link
Copy Markdown
Contributor

🦞🧹
ClawSweeper re-review requested.

I asked ClawSweeper to review this item again.
Action: item re-review queued (workflow sweep.yml, event repository_dispatch).
Result: the existing ClawSweeper review comment will be edited in place when the review finishes.

Re-review progress:

@clawsweeper clawsweeper Bot added proof: sufficient ClawSweeper judged the real behavior proof convincing. 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: 🦪 silver shellfish Thin PR readiness signal; proof, validation, or implementation needs work. status: 📣 needs proof The PR needs real behavior proof before ClawSweeper can clear the contributor ask. labels May 20, 2026
@TurboTheTurtle TurboTheTurtle force-pushed the fix/plugin-convergence-soft-warnings-83889 branch from 6edbbb4 to 2fee6bc Compare May 22, 2026 02:50
@openclaw-barnacle openclaw-barnacle Bot removed the proof: sufficient ClawSweeper judged the real behavior proof convincing. label May 22, 2026
@TurboTheTurtle

Copy link
Copy Markdown
Contributor Author

Rebased this branch onto current upstream/main to resolve the merge conflict.\n\nConflict resolution: kept the upstream stale bundled-plugin shadow pruning coverage and preserved this PR's warning-only/nonfatal convergence behavior plus failedPluginIds hard-failure coverage.\n\nValidation:\n- npm run test -- src/cli/update-cli/post-core-plugin-convergence.test.ts\n- git diff --check\n\nAuthor check before push:\n\ntext\n2fee6bc2fd Andy Ye <35905412+TurboTheTurtle@users.noreply.github.com> Treat soft plugin repair warnings as nonfatal\n\n\nRaw Pulls API still reports maintainer_can_modify: true.\n\n@clawsweeper re-review

@clawsweeper clawsweeper Bot added the proof: sufficient ClawSweeper judged the real behavior proof convincing. label May 22, 2026
@RomneyDa

Copy link
Copy Markdown
Member

Heads up: this PR needs to be updated against current main before the new required Dependency Guard check can pass.

@TurboTheTurtle TurboTheTurtle force-pushed the fix/plugin-convergence-soft-warnings-83889 branch from 2fee6bc to c25cba7 Compare May 29, 2026 16:19
@openclaw-barnacle openclaw-barnacle Bot removed the proof: sufficient ClawSweeper judged the real behavior proof convincing. label May 29, 2026
@clawsweeper clawsweeper Bot added proof: sufficient ClawSweeper judged the real behavior proof convincing. 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. labels May 29, 2026
@TurboTheTurtle TurboTheTurtle force-pushed the fix/plugin-convergence-soft-warnings-83889 branch from c25cba7 to 04ba542 Compare May 29, 2026 16:37
@openclaw-barnacle openclaw-barnacle Bot removed the proof: sufficient ClawSweeper judged the real behavior proof convincing. label May 29, 2026
@clawsweeper clawsweeper Bot added the proof: sufficient ClawSweeper judged the real behavior proof convincing. label May 29, 2026
@TurboTheTurtle TurboTheTurtle force-pushed the fix/plugin-convergence-soft-warnings-83889 branch from 04ba542 to 88d0737 Compare May 29, 2026 16:50
@openclaw-barnacle openclaw-barnacle Bot removed the proof: sufficient ClawSweeper judged the real behavior proof convincing. label May 29, 2026
@clawsweeper clawsweeper Bot added proof: sufficient ClawSweeper judged the real behavior proof convincing. rating: 🐚 platinum hermit Good normal PR readiness with ordinary maintainer review expected. merge-risk: 🚨 availability 🚨 May cause crashes, hangs, restart loops, stalls, or process outages. and removed rating: 🦞 diamond lobster Very strong PR readiness with only minor maintainer review expected. labels May 29, 2026
@TurboTheTurtle TurboTheTurtle force-pushed the fix/plugin-convergence-soft-warnings-83889 branch from 88d0737 to 73c80fd Compare May 31, 2026 19:45
@openclaw-barnacle openclaw-barnacle Bot removed the proof: sufficient ClawSweeper judged the real behavior proof convincing. label May 31, 2026
@clawsweeper clawsweeper Bot added the proof: sufficient ClawSweeper judged the real behavior proof convincing. label May 31, 2026
@TurboTheTurtle TurboTheTurtle force-pushed the fix/plugin-convergence-soft-warnings-83889 branch from 73c80fd to a8aee1b Compare May 31, 2026 20:09
@openclaw-barnacle openclaw-barnacle Bot removed the proof: sufficient ClawSweeper judged the real behavior proof convincing. label May 31, 2026
@clawsweeper clawsweeper Bot added the proof: sufficient ClawSweeper judged the real behavior proof convincing. label May 31, 2026
@steipete steipete self-assigned this Jun 2, 2026
@steipete steipete force-pushed the fix/plugin-convergence-soft-warnings-83889 branch from a8aee1b to eb64f3c Compare June 2, 2026 10:46

@steipete steipete left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Reviewed and reworked for current main.

Proof:

  • Rebased onto current main and pushed exact head eb64f3c.
  • Focused local test: node scripts/run-vitest.mjs src/cli/update-cli/post-core-plugin-convergence.test.ts src/commands/doctor/shared/missing-configured-plugin-install.test.ts
  • Autoreview: /Users/steipete/Projects/agent-scripts/skills/autoreview/scripts/autoreview --mode auto --base origin/main; clean after fixing the accepted finding.
  • GitHub CI on exact head: 131 passing checks including build-artifacts, check-prod-types, check-test-types, check-lint, check-shrinkwrap, plugin boundary lanes, CodeQL high-signal lanes, Real behavior proof, and dependency guard.

Best-fix verdict: best. The update path now treats repair warnings as nonfatal, but still blocks failures for active/effective/trusted plugin records that the gateway can actually load.

@steipete steipete merged commit 1db2c2a into openclaw:main Jun 2, 2026
167 of 169 checks passed
@TurboTheTurtle TurboTheTurtle deleted the fix/plugin-convergence-soft-warnings-83889 branch June 2, 2026 14:43
github-actions Bot pushed a commit to Desicool/openclaw that referenced this pull request Jun 3, 2026
* Treat soft plugin repair warnings as nonfatal

* fix: scope plugin repair convergence failures

---------

Co-authored-by: Peter Steinberger <steipete@gmail.com>
SYU8384 pushed a commit to SYU8384/openclaw that referenced this pull request Jun 3, 2026
* Treat soft plugin repair warnings as nonfatal

* fix: scope plugin repair convergence failures

---------

Co-authored-by: Peter Steinberger <steipete@gmail.com>
sablehead pushed a commit to sablehead/openclaw that referenced this pull request Jun 10, 2026
* Treat soft plugin repair warnings as nonfatal

* fix: scope plugin repair convergence failures

---------

Co-authored-by: Peter Steinberger <steipete@gmail.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

cli CLI command changes merge-risk: 🚨 availability 🚨 May cause crashes, hangs, restart loops, stalls, or process outages. P2 Normal backlog priority with limited blast radius. proof: sufficient ClawSweeper judged the real behavior proof convincing. proof: supplied External PR includes structured after-fix real behavior proof. rating: 🐚 platinum hermit Good normal PR readiness with ordinary maintainer review expected. size: S 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.

All repair warnings treated as fatal convergence errors even when non-blocking

3 participants