feat: add plugin verify evidence endpoint#2411
Conversation
|
Someone is attempting to deploy a commit to the Amantus Machina Team on Vercel. A member of the Team first needs to authorize it. |
|
Codex review: needs real behavior proof before merge. Reviewed June 20, 2026, 1:57 AM ET / 05:57 UTC. Summary Reproducibility: not applicable. this is a feature/API proposal, not a report of broken current-main behavior. The available output is mocked handler evidence, not a live backend reproduction path. Review metrics: 2 noteworthy metrics.
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 findings
Review detailsBest possible solution: Keep the endpoint proposal open, separate release-scoped evidence from current package configuration, and land it only after maintainer trust-contract approval plus real HTTP proof. Do we have a high-confidence way to reproduce the issue? Not applicable: this is a feature/API proposal, not a report of broken current-main behavior. The available output is mocked handler evidence, not a live backend reproduction path. Is this the best way to solve the issue? No. A plugin verify endpoint is a plausible layer, but this shape still mixes current package trusted-publisher configuration into a version-scoped provenance envelope. Full review comments:
Overall correctness: patch is incorrect AGENTS.md: found and applied where relevant. Codex review notes: model internal, reasoning high; reviewed against 6f28659e7bfb. Label changesLabel justifications:
Evidence reviewedSecurity concerns:
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 PR egg 🎁 Pass real behavior proof to wake the egg and unlock a hatchable treat. Where did the egg go?
|
|
@clawsweeper re-review |
|
🦞🧹 I asked ClawSweeper to review this item again. Re-review progress:
|
|
This pull request has been automatically marked as stale due to inactivity. |
|
Hey @dylanzhangzx , is this still something you're interested in getting merged? If so just reply and I'll take a look. Thanks for opening! |
|
Yes, still interested. The goal is to provide a plugin-side evidence surface that can support the broader plugin trust/review discussion in #2272, without implying official endorsement. I agree the trustedPublisher/provenance semantics need care. I’m happy to revise the response shape so release-scoped evidence is separated from current package-level trusted publisher configuration, and add real HTTP proof against a running setup before moving this out of draft. |
Summary
This PR adds a plugin-side verification evidence endpoint:
GET /api/v1/plugins/{name}/verifyThis is intended as a small incremental evidence surface for plugin trust review. It does not add a vetted-community badge, does not change official status semantics, and does not introduce a generated
plugin-card.mdartifact yet.Why
#2272 discusses a public review path for vetted community plugins. Before ClawHub can decide whether to expose a future plugin trust tier or badge, users and maintainers need a stable version-scoped evidence surface for plugin releases.
Skills now have Skill Card / verify surfaces. Plugins already expose package security, artifact, readiness, source-linked metadata, and trusted publisher data through separate surfaces. This endpoint collects the plugin-specific evidence into one machine-readable envelope without making any endorsement decision.
Shape
A successful response includes:
schema: "clawhub.plugin.verify.v1"ok,decision, andreasonsofficialorunreviewed-community)Trust semantics
The endpoint is documented in
specs/plugin-verify.md.review.status: "unreviewed-community"unless they are already official.ok: trueonly means the selected release is not blocked, has an effectively clean ClawScan status, and does not have a stale trust summary.ok: truedoes not mean the plugin is official, endorsed, manually reviewed, or safe for every deployment.ok.Real behavior proof
Local handler request against a mocked package release:
Response excerpt:
{ "schema": "clawhub.plugin.verify.v1", "ok": true, "decision": "pass", "reasons": [], "name": "@openclaw/example-plugin", "displayName": "Example Plugin", "family": "code-plugin", "publisherHandle": "example", "version": "1.0.5", "resolvedFrom": "version", "review": { "status": "unreviewed-community", "isOfficial": false, "channel": "community" }, "artifact": { "kind": "npm-pack", "sha256": "cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc", "format": "tgz", "files": [ { "path": "openclaw.plugin.json", "contentType": "application/json" } ] }, "provenance": { "tier": "source-linked", "scope": "artifact-only", "sourceRepo": "openclaw/example-plugin", "sourceCommit": "4d515c", "hasProvenance": true, "trustedOpenClawPlugin": false, "trustedPublisher": { "provider": "github-actions", "repository": "openclaw/example-plugin", "workflowFilename": "publish.yml" }, "source": "source-linked-release" }, "security": { "status": "clean", "blockedFromDownload": false, "pending": false, "stale": false }, "compatibility": { "pluginApiRange": ">=2026.3.24", "builtWithOpenClawVersion": "2026.5.24" }, "capabilities": { "executesCode": true, "hooks": ["before_dispatch"], "capabilityTags": ["security", "hook:before-dispatch"] }, "signature": { "status": "unsigned" } }Observed result: the endpoint returns version-scoped plugin evidence, keeps the community plugin explicitly unreviewed, preserves source/provenance fields, and does not imply an official endorsement.
What was not tested: a live production ClawHub deployment, UI rendering, signed verification documents, or a future vetted-community review tier.
Tests
bunx vitest run convex/httpApiV1.handlers.test.ts --testNamePattern "plugin verify|package security endpoint returns exact release trust"bun run format:checkbunx tsc -p packages/schema/tsconfig.json --noEmitbunx tsc --noEmitbun run lint