fix: preserve load-path plugins with installed index#100325
fix: preserve load-path plugins with installed index#100325qingminglong wants to merge 4 commits into
Conversation
|
Codex review: needs real behavior proof before merge. Reviewed July 5, 2026, 12:00 PM ET / 16:00 UTC. Summary PR surface: Source +171, Tests +161. Total +332 across 6 files. Reproducibility: yes. at source level: current main can build the installed-index manifest registry without current Review metrics: none identified. Stored data model Root-cause cluster Members:
Proposal only: this assessment does not dispatch repair, suppress jobs, mutate sibling items, close, or merge anything. Merge readiness Overall follows the weaker of proof and patch quality, so missing proof can cap an otherwise strong patch. Rank-up moves:
Proof guidance:
Risk before merge
Maintainer options:
Next step before merge
Security Review detailsBest possible solution: Land this after a redacted live CLI or gateway run proves a managed npm plugin and a configured load-path workspace plugin are both present without stale-config warnings. Do we have a high-confidence way to reproduce the issue? Yes at source level: current main can build the installed-index manifest registry without current Is this the best way to solve the issue? Yes for the code shape: merging configured load-path candidates into installed-index reconstruction preserves the fast path and fixes the owner-boundary issue without adding runtime shims. The merge gate should still require real behavior proof for the reported upgrade/startup scenario. AGENTS.md: found and applied where relevant. Codex review notes: model internal, reasoning high; reviewed against 286d0b9fb340. Label changesLabel changes:
Label justifications:
Evidence reviewedPR surface: Source +171, Tests +161. Total +332 across 6 files. View PR surface stats
What I checked:
Likely related people:
What the crustacean ranks mean
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
Review history (1 earlier review cycle)
|
|
@clawsweeper re-review PR body Evidence has been refreshed for current head |
|
🦞🧹 I asked ClawSweeper to review this item again. |
|
Superseded by #99196, which landed the canonical fix at 0f01930. The landed change fixes this at the persisted plugin-index owner boundary: stale indexes are rejected and rebuilt when configured Thank you for the useful sibling-path analysis and regression coverage here; it helped verify the broader consumer surface before landing #99196. |
Closes #99185
What Problem This Solves
Fixes an issue where users with managed installed plugins would lose workspace plugins configured through
plugins.load.pathswhen plugin metadata rebuilt from the installed-plugin index, causing staleplugin not foundconfig warnings even though the workspace plugin files still existed.Why This Change Was Made
The installed-index manifest registry reconstruction now also discovers the current explicit
plugins.load.pathscandidates and merges them with installed-index candidates. Scoped contribution and current-snapshot registry reuse now keep enabled load-path plugins that are present in the manifest registry even when they are not recorded in the installed index. The merge keeps the existing installed-index fast path while preserving plugin-id scoping, disabled-plugin filtering, and required-plugin diagnostics that know about already indexed plugins.User Impact
Operators can keep managed npm plugins and explicit workspace load-path plugins enabled together. Workspace plugins configured in
plugins.entriesorplugins.allowno longer disappear from config validation or contribution owner resolution solely because a managed plugin index exists.Evidence
Current head:
a1af1391966e0076c9328a9f4631fa1d3c6926fd.plugins.load.pathsplugins; scoped contribution/current-snapshot registry paths keep enabled load-path plugins outside the installed index; scoped requirements and disabled configured plugins remain covered.src/plugins/manifest-registry-installed.test.tsnow covers an installed managed-plugin index plus a configured load-path plugin and asserts bothinstalledandconfiguredare present with no diagnostics.src/plugins/plugin-registry-contributions.current-snapshot.test.tsnow covers current metadata reuse so a load-path plugin outside the installed index still contributes provider ownership.src/plugins/manifest-registry-installed.tsmerges installed-index candidates with discoveredplugins.load.pathscandidates before config validation sees the registry, which is the path that previously produced the staleplugin not foundwarning.node scripts/run-tsgo.mjs -p tsconfig.core.json --incremental --tsBuildInfoFile .artifacts/tsgo-cache/core-pr100325.tsbuildinfo --pretty false- passed on this PR head.node scripts/run-vitest.mjs src/plugins/manifest-registry-installed.test.ts src/plugins/plugin-registry-contributions.current-snapshot.test.ts src/commands/channel-setup/plugin-install.test.ts- passed on this PR head, 3 Vitest shards, 50 passed / 1 skipped.28742921375for this head: plugin-relevant lanes passed, includingcheck-prod-types,check-lint,check-test-types,checks-fast-contracts-plugins-a,checks-fast-contracts-plugins-b,Critical Quality (plugin-boundary), andbuild-artifacts.Real behavior proofrun28742991218passed the external-PR proof/context gate for this PR.git diff --check upstream/main...HEAD- passed locally in a clean PR worktree.@openclaw/llama-cpp-providerplus the reporter's workspace plugin set; the source-level installed-index path and contribution paths are covered by focused tests instead.node_modulesis absent; per repo policy I did not runpnpm installlocally just to reconcile a Codex worktree.checks-node-compact-small-5failed insrc/gateway/server.chat.gateway-server-chat-b.test.ts(chat.send does not recreate a session deleted while admission waits). The failure is outside this PR's changed plugin files and the single-job rerun was not permitted by GitHub.