Skip to content

fix(channel): harden local setup trust#92175

Merged
clawsweeper[bot] merged 14 commits into
mainfrom
clawsweeper/automerge-openclaw-openclaw-89456
Jun 11, 2026
Merged

fix(channel): harden local setup trust#92175
clawsweeper[bot] merged 14 commits into
mainfrom
clawsweeper/automerge-openclaw-openclaw-89456

Conversation

@clawsweeper

@clawsweeper clawsweeper Bot commented Jun 11, 2026

Copy link
Copy Markdown
Contributor

Makes #89456 merge-ready for the ClawSweeper automerge loop.
The edit pass should inspect the live PR diff, review comments, and failing checks; rebase if needed; keep the contributor branch credited; and stop only when validation is green or an external blocker is proven.
Known failing checks:

ClawSweeper 🐠 replacement reef notes:

  • Repair fallback: GitHub rejected the repair branch push because it updates workflow files and the ClawSweeper app token does not have workflows permission

Co-author credit kept:

fish notes: reasoning high; reviewed against bf86d9f.

@clawsweeper clawsweeper Bot added scripts Repository scripts commands Command implementations docker Docker and sandbox tooling maintainer Maintainer-authored PR clawsweeper:automerge Maintainer opted this PR into bounded ClawSweeper-reviewed automerge labels Jun 11, 2026
@clawsweeper clawsweeper Bot added the clawsweeper Tracked by ClawSweeper automation label Jun 11, 2026
@clawsweeper clawsweeper Bot mentioned this pull request Jun 11, 2026
13 tasks
@clawsweeper

clawsweeper Bot commented Jun 11, 2026

Copy link
Copy Markdown
Contributor Author

Codex review: passed. Reviewed June 11, 2026, 9:44 AM ET / 13:44 UTC.

Summary
The PR extends channel setup trust enforcement and trusted catalog fallback from workspace-origin plugins to config/global local origins, threads configured load paths into catalog discovery, and adds focused regression plus Docker/package proof coverage.

PR surface: Source +190, Tests +892, Other +324. Total +1406 across 13 files.

Reproducibility: yes. The source PR provides a concrete clean-main Docker/package path where an explicitly trusted plugins.load.paths channel remains unresolved, while the patched package resolves it and still blocks untrusted module and setup execution.

Review metrics: 1 noteworthy metric.

  • Local trust coverage: 2 additional origins gated. Config and global channel plugins now follow the workspace setup trust boundary, which is the central compatibility and security decision before merge.

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:

  • none.

Risk before merge

  • [P1] Existing config/global local channel plugins that relied on setup-only execution without plugins.allow or plugins.entries.<id>.enabled: true will now fail closed until operators explicitly trust them.
  • [P1] This changes a plugin code-execution boundary; future edits must keep catalog filtering and loader enforcement aligned or setup may either hide trusted plugins or import untrusted code.

Maintainer options:

  1. Land the explicit trust boundary (recommended)
    Accept the intentional upgrade behavior and merge once the exact-head checks finish, preserving both catalog and loader enforcement plus the package proof.
  2. Pause for compatibility policy
    Pause only if maintainers want existing config/global local plugins to retain implicit setup execution, which requires an explicit alternative trust or migration policy.

Next step before merge

  • [P2] No repair lane is needed; this open automerge implementation has no concrete patch finding, and final handling is exact-head check completion plus maintainer acceptance of the documented trust compatibility change.

Security
Cleared: No concrete security or supply-chain regression was found; the patch tightens local plugin execution trust, adds no dependency source, workflow permission, secret access, or downloaded executable path, and keeps enforcement at both selection and import boundaries.

Review details

Best possible solution:

Land one canonical local-plugin trust rule across catalog selection and scoped loader imports, preserving explicit trusted setup and origin-aware safe fallback while clearly accepting the fail-closed upgrade behavior.

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

Yes. The source PR provides a concrete clean-main Docker/package path where an explicitly trusted plugins.load.paths channel remains unresolved, while the patched package resolves it and still blocks untrusted module and setup execution.

Is this the best way to solve the issue?

Yes. The patch uses the existing manifest-owner policy at both catalog and loader owner boundaries, threads the existing load-path configuration into discovery, and narrows fallback exclusion to the rejected origin/plugin pair instead of adding a competing trust mechanism.

AGENTS.md: found and applied where relevant.

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

Label changes

Label justifications:

  • P2: This fixes a bounded channel setup regression and local-plugin trust inconsistency with limited affected scope.
  • merge-risk: 🚨 compatibility: Existing implicitly trusted config/global local channel plugins can stop loading during setup after merge.
  • merge-risk: 🚨 security-boundary: The patch changes whether locally discovered plugin modules may execute in setup-only flows.
  • rating: 🐚 platinum hermit: Overall readiness is 🐚 platinum hermit; proof is 🦞 diamond lobster and patch quality is 🐚 platinum hermit.
  • status: 🚀 automerge armed: This PR is in ClawSweeper's automerge lane. Sufficient (logs): The linked source contribution includes after-fix Docker/package and black-box marker evidence for trusted and untrusted load-path behavior, and this replacement head retains that runtime proof while exact-head validation reports the focused checks passing.
  • proof: sufficient: Contributor real behavior proof is sufficient. The linked source contribution includes after-fix Docker/package and black-box marker evidence for trusted and untrusted load-path behavior, and this replacement head retains that runtime proof while exact-head validation reports the focused checks passing.
Evidence reviewed

PR surface:

Source +190, Tests +892, Other +324. Total +1406 across 13 files.

View PR surface stats
Area Files Added Removed Net
Source 4 217 27 +190
Tests 8 1055 163 +892
Docs 0 0 0 0
Config 0 0 0 0
Generated 0 0 0 0
Other 1 324 0 +324
Total 13 1596 190 +1406

What I checked:

  • Current-main gap: Current main's trusted catalog logic recognizes only workspace-origin local entries and falls back by excluding the entire workspace origin, so explicitly trusted plugins.load.paths channels are not covered by the same resolution path. (src/commands/channel-setup/trusted-catalog.ts:49, 047785eb30c0)
  • Unified trust decision: The PR classifies workspace, config, and global as local origins, applies existing manifest-owner base policy and explicit-trust helpers, and permits the existing workspace auto-enable exception without inventing a parallel trust source. (src/commands/channel-setup/trusted-catalog.ts:49, eabee04d5459)
  • Origin-aware fallback: Rejected local candidates are excluded by {pluginId, origin} and retried through the catalog, allowing a safe bundled copy with the same id to remain eligible instead of suppressing all copies. (src/commands/channel-setup/trusted-catalog.ts:85, eabee04d5459)
  • Loader enforcement: Scoped setup-only loads reapply the same base-policy and explicit-trust checks before importing non-bundled channel plugin code, closing the execution path rather than relying only on catalog filtering. (src/plugins/loader.ts:2074, eabee04d5459)
  • Real behavior proof: The source contribution records a clean-main Docker/package failure for an explicitly trusted load-path channel and an after-fix pass for trusted and untrusted cases; this head retains a package-installed Docker script that asserts module import and setup registration marker behavior. (scripts/e2e/channel-plugin-trust-docker.sh:215, eabee04d5459)
  • Exact-head checks: GitHub reported 93 successful checks, five skipped, one neutral, and only an unrelated in-progress control-plane shard at inspection time; the previously failing core-runtime and core-models shards succeeded on the exact head. (eabee04d5459)

Likely related people:

  • hxy91819: Introduced the merged workspace setup-only trust boundary in PR fix(plugins): block untrusted workspace setup-only channel loads #86953 and authored the original config/global follow-up branch and proof. (role: feature owner; confidence: high; commits: 004835f4c7f4, d797c403b24f, 0f3964cf9f19; files: src/plugins/loader.ts, src/commands/channel-setup/trusted-catalog.ts, scripts/e2e/channel-plugin-trust-docker.sh)
  • steipete: Recent history shows repeated ownership of plugin loader behavior, diagnostics, lazy runtime surfaces, and plugin edge-case hardening around the affected loader path. (role: recent adjacent contributor; confidence: medium; commits: 5b79e8156962, ccb50f89dacf, fe91ada73017; files: src/plugins/loader.ts)
  • brokemac79: Recently changed trusted installed-plugin policy contracts in the same loader and manifest-owner policy area, making them relevant to trust-policy consistency review. (role: recent adjacent owner; confidence: medium; commits: de4b8d8ebf73; files: src/plugins/loader.ts, src/plugins/manifest-owner-policy.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 commented Jun 11, 2026

Copy link
Copy Markdown
Contributor Author

🦞✅
ClawSweeper merged this PR after the passing review.

Source: clawsweeper[bot]
Feedback: structured ClawSweeper verdict: pass (sha=eabee04d54596790a16a70d56b97b51eddd87791)
Merge status: merged by ClawSweeper automerge
Merged at: 2026-06-11T13:48:42Z
Merge commit: 2bec2caf0c69

What merged:

  • The PR extends channel setup trust enforcement and trusted catalog fallback from workspace-origin plugins to ... nfigured load paths into catalog discovery, and adds focused regression plus Docker/package proof coverage.
  • PR surface: Source +190, Tests +892, Other +324. Total +1406 across 13 files.
  • Reproducibility: yes. The source PR provides a concrete clean-main Docker/package path where an explicitly t ... ns unresolved, while the patched package resolves it and still blocks untrusted module and setup execution.

Automerge notes:

  • PR branch already contained follow-up commit before automerge: fix(channel): stabilize trusted catalog dts typing
  • PR branch already contained follow-up commit before automerge: fix(channel): repair trusted catalog exclusions typing
  • PR branch already contained follow-up commit before automerge: test(channel): cover local channel plugin trust
  • PR branch already contained follow-up commit before automerge: chore(deps): refresh plugin shrinkwraps
  • PR branch already contained follow-up commit before automerge: test(channel): route trust regression in command shard
  • PR branch already contained follow-up commit before automerge: test(channel): remove e2e-named trust regression

The automerge loop is complete.

Automerge progress:

  • 2026-06-11 12:59:13 UTC review queued bf86d9f5c035 (queued)
  • 2026-06-11 13:10:21 UTC review passed bf86d9f5c035 (structured ClawSweeper verdict: pass (sha=bf86d9f5c035dac859a73ccc4f023174e1dc7...)
  • 2026-06-11 13:38:30 UTC review queued eabee04d5459 (after repair)
  • 2026-06-11 13:45:00 UTC review passed eabee04d5459 (structured ClawSweeper verdict: pass (sha=eabee04d54596790a16a70d56b97b51eddd87...)
  • 2026-06-11 13:48:45 UTC merged eabee04d5459 (merged by ClawSweeper automerge)

@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: 🚀 automerge armed This PR is in ClawSweeper's automerge lane. P2 Normal backlog priority with limited blast radius. merge-risk: 🚨 compatibility 🚨 May break existing users, config, migrations, defaults, or upgrade paths. merge-risk: 🚨 security-boundary 🚨 May affect sandboxing, authorization, credentials, or sensitive data. labels Jun 11, 2026
@clawsweeper clawsweeper Bot force-pushed the clawsweeper/automerge-openclaw-openclaw-89456 branch from bf86d9f to eabee04 Compare June 11, 2026 13:38
@clawsweeper clawsweeper Bot merged commit 2bec2ca into main Jun 11, 2026
160 checks passed
@clawsweeper clawsweeper Bot deleted the clawsweeper/automerge-openclaw-openclaw-89456 branch June 11, 2026 13:48
wangmiao0668000666 pushed a commit to wangmiao0668000666/openclaw that referenced this pull request Jun 12, 2026
Summary:
- The PR extends channel setup trust enforcement and trusted catalog fallback from workspace-origin plugins to ... nfigured load paths into catalog discovery, and adds focused regression plus Docker/package proof coverage.
- PR surface: Source +190, Tests +892, Other +324. Total +1406 across 13 files.
- Reproducibility: yes. The source PR provides a concrete clean-main Docker/package path where an explicitly t ... ns unresolved, while the patched package resolves it and still blocks untrusted module and setup execution.

Automerge notes:
- PR branch already contained follow-up commit before automerge: fix(channel): stabilize trusted catalog dts typing
- PR branch already contained follow-up commit before automerge: fix(channel): repair trusted catalog exclusions typing
- PR branch already contained follow-up commit before automerge: test(channel): cover local channel plugin trust
- PR branch already contained follow-up commit before automerge: chore(deps): refresh plugin shrinkwraps
- PR branch already contained follow-up commit before automerge: test(channel): route trust regression in command shard
- PR branch already contained follow-up commit before automerge: test(channel): remove e2e-named trust regression

Validation:
- ClawSweeper review passed for head eabee04.
- Required merge gates passed before the squash merge.

Prepared head SHA: eabee04
Review: openclaw#92175 (comment)

Co-authored-by: Mason Huang <masonxhuang@tencent.com>
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Co-authored-by: clawsweeper <274271284+clawsweeper[bot]@users.noreply.github.com>
Co-authored-by: clawsweeper[bot] <274271284+clawsweeper[bot]@users.noreply.github.com>
Approved-by: hxy91819
Co-authored-by: hxy91819 <8814856+hxy91819@users.noreply.github.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

clawsweeper:automerge Maintainer opted this PR into bounded ClawSweeper-reviewed automerge clawsweeper Tracked by ClawSweeper automation commands Command implementations docker Docker and sandbox tooling maintainer Maintainer-authored PR merge-risk: 🚨 compatibility 🚨 May break existing users, config, migrations, defaults, or upgrade paths. merge-risk: 🚨 security-boundary 🚨 May affect sandboxing, authorization, credentials, or sensitive data. P2 Normal backlog priority with limited blast radius. proof: sufficient ClawSweeper judged the real behavior proof convincing. rating: 🐚 platinum hermit Good normal PR readiness with ordinary maintainer review expected. scripts Repository scripts size: XL status: 🚀 automerge armed This PR is in ClawSweeper's automerge lane.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant