Doctor: expose configured plugin install findings#96171
Conversation
|
@clawsweeper review Please review PR #96171 at head |
|
🦞🧹 I asked ClawSweeper to review this item again. |
|
Codex review: needs maintainer review before merge. Reviewed June 27, 2026, 4:44 PM ET / 20:44 UTC. Summary PR surface: Source +485, Tests +162. Total +647 across 4 files. Reproducibility: not applicable. as a bug reproduction; this is a feature/diagnostic PR. Source inspection, focused tests, and terminal-style CLI proof cover the new opt-in lint path rather than a failing current-main behavior. Review metrics: 1 noteworthy metric.
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:
Risk before merge
Maintainer options:
Next step before merge
Security Review detailsBest possible solution: Keep the check default-disabled and non-mutating, then merge only after a maintainer accepts the explicit lint behavior and repair-effect policy. Do we have a high-confidence way to reproduce the issue? Not applicable as a bug reproduction; this is a feature/diagnostic PR. Source inspection, focused tests, and terminal-style CLI proof cover the new opt-in lint path rather than a failing current-main behavior. Is this the best way to solve the issue? Yes, for this slice: the PR follows the merged structured Doctor pattern while preserving the existing configured-plugin repair owner for package mutation. The remaining question is maintainer acceptance of the opt-in lint surface, not a narrower code repair. AGENTS.md: found and applied where relevant. Codex review notes: model internal, reasoning high; reviewed against c29e1fe764f3. Label changesLabel justifications:
Evidence reviewedPR surface: Source +485, Tests +162. Total +647 across 4 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
|
|
@clawsweeper re-review Current head |
0a7f3e9 to
312da11
Compare
|
@clawsweeper re-review Refreshed after rebase onto current main. Changes since prior sweep:
|
|
🦞🧹 I asked ClawSweeper to review this item again. |
galiniliev
left a comment
There was a problem hiding this comment.
This PR adds a default-disabled structured Doctor lint check for configured plugin install state. It matters because doctor --lint --all and explicit --only core/doctor/configured-plugin-installs can now report missing install records, missing package payloads, deferred package repairs, stale runtime packages, and repairable metadata while leaving actual package mutation in the legacy Doctor repair path.
No blocking findings.
LOC: +639/-0 (4 files)
By: Gio Della-Libera (@giodl73-repo, acct 2025-09-30) | OpenClaw: 187 PRs, 14 issues, 138 commits/12mo | GitHub: 54 repos, 6437 commits, 221 PRs, 29 issues, 17 reviews/12mo
Bug/behavior: no current-main bug fix; this exposes an opt-in structured diagnostic/dry-run-effect surface for the existing configured-plugin install repair owner.
Affected surface: src/commands/doctor/shared/missing-configured-plugin-install.ts:1408 and src/flows/doctor-health-contributions.ts:1260.
Provenance: N/A; feature/diagnostic slice split from #96169.
Best-fix verdict: best. The PR keeps package install/update mutation in the existing legacy configured-plugin repair path and registers only a read-only, default-disabled structured check, which is the right owner boundary for a lint/dry-run preview slice.
Alternatives considered:
- Put package mutation in the structured
repair()path: rejected becauserunReleaseConfiguredPluginInstallsHealthandrepairMissingConfiguredPluginInstallsalready own the package repair ordering and update-phase behavior. - Add only a generic finding without dry-run effects: rejected because the existing health repair contract already carries package effects, and the PR maps each repairable issue to that contract.
- Enable it by default in lint: rejected because configured plugin package state can affect automation exit codes;
defaultEnabled: falsekeeps the default lint gate stable.
Evidence map:
- Changed surface: structured issue detection/mapping in
src/commands/doctor/shared/missing-configured-plugin-install.ts:1408, health-check registration insrc/flows/doctor-health-contributions.ts:1263. - Runtime entry point:
openclaw doctor --lint --only core/doctor/configured-plugin-installsviasrc/commands/doctor-lint.ts:84andsrc/flows/doctor-lint-flow.ts:38. - Owner boundary: package mutation remains in
repairMissingConfiguredPluginInstalls/repairMissingPluginInstallsatsrc/commands/doctor/shared/missing-configured-plugin-install.ts:1781andsrc/commands/doctor/shared/missing-configured-plugin-install.ts:1840. - Caller/callee: contribution registration calls
detectConfiguredPluginInstallHealthIssues; the detector reuses the same catalog, records, bundled plugin, update-channel, and deferred-repair helpers used by the legacy repair path. - Sibling checks: compared against the adjacent structured session transcript/snapshot/config-audit patterns in
src/flows/doctor-health-contributions.ts:1336,src/flows/doctor-health-contributions.ts:1368, andsrc/flows/doctor-health-contributions.ts:1406. - Current main behavior: current
origin/mainhas the legacydoctor:release-configured-plugin-installscontribution but nocore/doctor/configured-plugin-installsstructured check. - Dependency/Codex contracts: no dependency or Codex runtime contract is changed by this PR; no upstream API/default claim is needed for the verdict.
Validation run locally:
pnpm install --frozen-lockfile(needed becausenode_moduleswas missing before focused test proof)node scripts/run-vitest.mjs run src/commands/doctor/shared/missing-configured-plugin-install.test.ts src/flows/doctor-health-contributions.test.ts --reporter=verbose(130 passed)git diff --check origin/main...HEAD
Live PR checks seen at head 312da117138d03c93c7ba4b0d816eb5a53cf3b88: Real behavior proof success, runner-admission success, workflow sanity actionlint/no-tabs success; broader matrix jobs are mostly skipped for this slice.
Remaining uncertainty: I did not rerun a packaged/update E2E lane with a real broken plugin install tree. The focused source tests and PR-posted CLI proof cover the changed structured-check behavior; maintainer acceptance is still needed because the PR is draft and has the protected maintainer label.
312da11 to
582502d
Compare
|
@clawsweeper re-review Current head Contract remains unchanged: Validation refreshed:
|
|
🦞🧹 I asked ClawSweeper to review this item again. |
|
Merged via squash.
|
* feat(doctor): expose configured plugin install findings * fix(doctor): satisfy configured plugin mapper lint
* feat(doctor): expose configured plugin install findings * fix(doctor): satisfy configured plugin mapper lint
* feat(doctor): expose configured plugin install findings * fix(doctor): satisfy configured plugin mapper lint
* feat(doctor): expose configured plugin install findings * fix(doctor): satisfy configured plugin mapper lint
Summary
core/doctor/configured-plugin-installsfindings for configured plugins that are missing install records, missing package payloads, deferred during package update, stale version-bound runtime packages, or repairable package metadataContract
core/doctor/configured-plugin-installshasdefaultEnabled: falseand is reached through explicit lint selection, e.g.doctor --lint --only core/doctor/configured-plugin-installsordoctor --lint --all.Validation
582502d0fd90a98a6320605beb95fc4ed1243649node scripts/run-vitest.mjs run src/commands/doctor/shared/missing-configured-plugin-install.test.ts src/flows/doctor-health-contributions.test.ts --reporter=dot(132 passed)pnpm exec oxfmt --check src/commands/doctor/shared/missing-configured-plugin-install.ts src/commands/doctor/shared/missing-configured-plugin-install.test.ts src/flows/doctor-health-contributions.ts src/flows/doctor-health-contributions.test.tspnpm exec oxlint src/commands/doctor/shared/missing-configured-plugin-install.ts src/commands/doctor/shared/missing-configured-plugin-install.test.ts src/flows/doctor-health-contributions.ts src/flows/doctor-health-contributions.test.tspnpm tsgo:corenode scripts/run-tsgo.mjs -p test/tsconfig/tsconfig.test.src.json --incremental --tsBuildInfoFile .artifacts/tsgo-cache/test-src.tsbuildinfonode scripts/plugin-sdk-surface-report.mjs --checkgit diff --check origin/main...HEADSource Proof
defaultEnabled: falseand does not enter the default Doctor set.doctor --lint --json --only core/doctor/configured-plugin-installscompleted withok: true,checksRun: 1, and no findings; current bundled/default state did not recreate the missing external package scenario, so the branch relies on the focused source tests for the failing cases.No dry-run preview consumer is included in this slice; real package install/update mutation remains in the existing configured plugin install repair path.