openclaw - 💡(How to fix) Fix All repair warnings treated as fatal convergence errors even when non-blocking [1 comments, 2 participants]

Official PRs (…)
ON THIS PAGE

Recommended Tools

×6

Utilities matched from this issue’s tags and category — try them while you read without losing context.

GitHub issue graph ai analysis

Paste a GitHub issue URL. We fetch that issue, discover linked issues from bodies/comments/timeline, collect linked pull requests, and produce a structured English report.

The report is written in English Markdown for sharing and archival.

Helpful · Quick feedback

Loading…
GitHub stats
openclaw/openclaw#83889Fetched 2026-05-20 03:47:29
View on GitHub
Comments
1
Participants
2
Timeline
9
Reactions
1
Timeline (top)
labeled ×6commented ×1mentioned ×1subscribed ×1

Error Message

repairMissingConfiguredPluginInstalls can emit informational warnings (e.g. a plugin that was already up-to-date, a no-op repair). All such messages are appended to warnings before the smoke failures, and errored: warnings.length > 0 fires on ANY non-empty warning list. This means a purely informational repair observation blocks the gateway restart. The downstream convergenceWarningsToOutcomes propagates errored to set the plugin update status: 'error', which the outer caller uses for exit 1. The confidence is medium because the contract of repair.warnings from repairMissingConfiguredPluginInstalls cannot be fully verified from these files alone — if repair.warnings are always actionable, this is correct.

Root Cause

Reasoning

repairMissingConfiguredPluginInstalls can emit informational warnings (e.g. a plugin that was already up-to-date, a no-op repair). All such messages are appended to warnings before the smoke failures, and errored: warnings.length > 0 fires on ANY non-empty warning list. This means a purely informational repair observation blocks the gateway restart. The downstream convergenceWarningsToOutcomes propagates errored to set the plugin update status: 'error', which the outer caller uses for exit 1. The confidence is medium because the contract of repair.warnings from repairMissingConfiguredPluginInstalls cannot be fully verified from these files alone — if repair.warnings are always actionable, this is correct.

Fix Action

Fix / Workaround

Severity: low / Confidence: medium / Category: api-contract Triage: contract-mismatch Detected against: openclaw v2026.5.18 (latest stable at time of scan, 2026-05-18) Tooling: clawpatch 0.3.0 + acpx/claude-sonnet-4-5 via Brad Mills protocol


Standardized clawpatch finding. Persistent in v2026.5.18 (not resolved by upgrading from v2026.5.12). Finding ID: fnd_sig-feat-cli-command-0e1f16a0ce-_3cbd805bec.

Code Example

const warnings: PostCoreConvergenceWarning[] = repair.warnings.map((message) => ({
    reason: message,
    message,
    guidance: [REPAIR_GUIDANCE],
  }));
  ...
  return {
    changes: repair.changes,
    warnings,
    errored: warnings.length > 0,
    smokeFailures: smoke.failures,
    installRecords: records,
  };
RAW_BUFFERClick to expand / collapse

Severity: low / Confidence: medium / Category: api-contract Triage: contract-mismatch Detected against: openclaw v2026.5.18 (latest stable at time of scan, 2026-05-18) Tooling: clawpatch 0.3.0 + acpx/claude-sonnet-4-5 via Brad Mills protocol

Evidence

  • src/cli/update-cli/post-core-plugin-convergence.ts:60-85 (runPostCorePluginConvergence)
const warnings: PostCoreConvergenceWarning[] = repair.warnings.map((message) => ({
    reason: message,
    message,
    guidance: [REPAIR_GUIDANCE],
  }));
  ...
  return {
    changes: repair.changes,
    warnings,
    errored: warnings.length > 0,
    smokeFailures: smoke.failures,
    installRecords: records,
  };

Reasoning

repairMissingConfiguredPluginInstalls can emit informational warnings (e.g. a plugin that was already up-to-date, a no-op repair). All such messages are appended to warnings before the smoke failures, and errored: warnings.length > 0 fires on ANY non-empty warning list. This means a purely informational repair observation blocks the gateway restart. The downstream convergenceWarningsToOutcomes propagates errored to set the plugin update status: 'error', which the outer caller uses for exit 1. The confidence is medium because the contract of repair.warnings from repairMissingConfiguredPluginInstalls cannot be fully verified from these files alone — if repair.warnings are always actionable, this is correct.

Reproduction

Trigger a repair run that emits a warning that is not a hard failure (e.g. a plugin repair that partially succeeds with a note). The update will refuse to restart.

Recommendation

Distinguish fatal convergence failures from soft repair observations. Either: (a) have repairMissingConfiguredPluginInstalls return a structured result with errors vs warnings, or (b) set errored: smoke.failures.length > 0 || repair.errors?.length > 0 rather than keying off total warning count. Document in PostCoreConvergenceResult whether errored is set only on hard failures.

Why existing tests miss this

No tests exist for runPostCorePluginConvergence.

Suggested regression test

it('errored is false when only soft repair warnings exist and smoke passes', async () => { /* mock repairMissingConfiguredPluginInstalls to return warnings:['note'] and runPluginPayloadSmokeCheck to return no failures */ const result = await runPostCorePluginConvergence(...); expect(result.errored).toBe(false); });

Minimum fix scope

Clarify the contract of repair.warnings and key errored only on genuine hard failures (smoke failures + repair errors), not soft warnings.


Standardized clawpatch finding. Persistent in v2026.5.18 (not resolved by upgrading from v2026.5.12). Finding ID: fnd_sig-feat-cli-command-0e1f16a0ce-_3cbd805bec.

Vote matrix · Quick signals

Works
Did the solution work? Tap to confirm.
Easy Fix
Was it a quick fix?
Time Saver
Did it save you time?
Blocking
Was it severely blocking?
Common Issue
Are others likely hitting this too?
Flaky / Intermittent
Is it intermittent?
Verified / Reproducible
Can you reproduce it reliably?
Loading…

Still need to ship something?

×6

Another batch ranked right after the header list — different links, same matching logic.

Back to top recommendations

TRENDING

openclaw - 💡(How to fix) Fix All repair warnings treated as fatal convergence errors even when non-blocking [1 comments, 2 participants]