fix(doctor): repair allow-only official plugins#77573
Conversation
|
Codex review: needs maintainer review before merge. Summary Reproducibility: yes. Source inspection on current main shows allow-only official plugin ids are omitted from the release repair set, while stale cleanup can remove missing Next step before merge Security Review detailsBest possible solution: Land the narrow doctor repair after current required checks or a fresh changed gate are green, preserving passive allowlist behavior for unofficial ids. Do we have a high-confidence way to reproduce the issue? Yes. Source inspection on current main shows allow-only official plugin ids are omitted from the release repair set, while stale cleanup can remove missing Is this the best way to solve the issue? Yes. The PR takes the narrow maintainable path by adding only official external catalog matches from Acceptance criteria:
What I checked:
Likely related people:
Remaining risk / open question:
Codex review notes: model gpt-5.5, reasoning high; reviewed against ab032675ce09. |
Summary
plugins.allowids that had no materialplugins.entriesentry, then stale cleanup could remove official external plugins such aslobster.Change Type (select all)
Scope (select all touched areas)
Linked Issue/PR
Root Cause (if applicable)
collectReleaseConfiguredPluginIdscollected material plugin entries and configured surfaces, but not allow-only official external plugin ids.Regression Test Plan (if applicable)
src/commands/doctor/shared/release-configured-plugin-installs.test.tsUser-visible / Behavior Changes
openclaw doctor --fixpreserves configured allow-only official external plugins during the release repair path by installing them before stale cleanup can remove them.Diagram (if applicable)
Security Impact (required)
Yes, explain risk + mitigation: N/ARepro + Verification
Environment
plugins.allow: ["lobster", "unofficial-custom"]Steps
lobster.lobsteris included only because it is in the official external plugin catalog.Expected
Actual
Evidence
pnpm exec oxfmt --check --threads=1 CHANGELOG.md src/commands/doctor/shared/release-configured-plugin-installs.ts src/commands/doctor/shared/release-configured-plugin-installs.test.tspnpm test:serial src/commands/doctor/shared/release-configured-plugin-installs.test.ts— 12 passedpnpm test:serial src/commands/doctor/shared/release-configured-plugin-installs.test.ts src/commands/doctor/shared/missing-configured-plugin-install.test.ts src/commands/doctor/shared/stale-plugin-config.test.ts— 62 passedpnpm check:changed— passed on https://github.com/openclaw/openclaw/actions/runs/25348393861 before the final clean rebase; final rebase had no conflicts and the branch diff is materially unchangedgit diff --checkafter final rebaseHuman Verification (required)