Skip to content

fix(openclaw): restore contract-driven tool registration - #281

Merged
linfangw merged 2 commits into
mainfrom
linfangw/issue-272-openclaw-contracts
Jul 30, 2026
Merged

fix(openclaw): restore contract-driven tool registration#281
linfangw merged 2 commits into
mainfrom
linfangw/issue-272-openclaw-contracts

Conversation

@linfangw

@linfangw linfangw commented Jul 30, 2026

Copy link
Copy Markdown
Member

Summary

  • declare qveris_discover, qveris_call, and qveris_inspect in contracts.tools
  • add explicit startup activation and auth/config availability metadata required by current OpenClaw hosts
  • mark read-only Discover/Inspect replay-safe while keeping paid Call replay-unsafe
  • prepare @qverisai/qveris 2026.7.30 and update its changelog, troubleshooting guidance, and release notes
  • lock the three public tool names and OpenClaw compatibility metadata as independent test oracles
  • validate compiled-factory output for config, environment, and missing-credential cases
  • add isolated source and packed-package runtime checks with installed-package provenance assertions

Root cause

OpenClaw >=2026.6.11 rejects agent-tool registrations unless the manifest declares ownership in contracts.tools. Version 2026.7.15 registered the three runtime names but omitted that manifest contract, so the plugin loaded with toolNames: [] and emitted plugin must declare contracts.tools before registering agent tools.

The issue was reproduced against an isolated OpenClaw state directory before the fix. The same inspection now reports all three registered tools with no error diagnostics. A separate compiled-factory check verifies that all three concrete tool descriptors are produced when either supported credential path is configured, and that the factory returns null when credentials are absent.

Deep-review corrections

  • corrected the original test assumption that plugins inspect --runtime proves concrete factory instantiation; tools[].names is registration metadata even when the factory returns null
  • restored an independent literal oracle for the public three-tool contract, so synchronously deleting a tool from the manifest and runtime cannot make tests pass
  • made qveris_call explicitly replaySafe: false and now checks exact auth/config/replay metadata
  • verifies the packed check loads from the fresh isolated install root rather than accidentally discovering the source working directory
  • runs OpenClaw from the isolated state directory and verifies plugin version, runtime contracts, source/install root, bounded output, and actionable process errors
  • increased the install timeout to five minutes to avoid false release failures on a slow npm registry

Compatibility matrix

OpenClaw host Source runtime Packed install
2026.6.11 minimum pass pass
2026.6.33 extended stable pass covered by source contract
2026.7.1-2 current stable pass pass

Runtime checks use a synthetic key and do not call the QVeris API.

Validation

  • full monorepo tests: pass (CLI 134, MCP 181, JS SDK 67, plugin 79, Python SDK 183 with 1 skipped, release checks 42)
  • plugin coverage: pass
  • monorepo typecheck: pass
  • JavaScript/TypeScript and Python lint/format: pass
  • monorepo build: pass
  • package contents and compiled manifest/runtime invariants: pass
  • production dependency audit: 0 vulnerabilities (npm audit --omit=dev)
  • public documentation region-boundary scan: no new violations

Closes #272

@ax2

ax2 commented Jul 30, 2026

Copy link
Copy Markdown
Collaborator

@codex review

@ax2

ax2 commented Jul 30, 2026

Copy link
Copy Markdown
Collaborator

@codex review

@linfangw
linfangw merged commit f129464 into main Jul 30, 2026
44 of 45 checks passed
@linfangw
linfangw deleted the linfangw/issue-272-openclaw-contracts branch July 30, 2026 05:54
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Plugin loads but registers zero tools on OpenClaw >=2026.6.11 — missing contracts.tools in openclaw.plugin.json

3 participants