Skip to content

refactor(plugins): share manifest capability families - #139049

Merged
steipete merged 1 commit into
mainfrom
codex/deslop-manifest-families
Sep 5, 2026
Merged

steipete merged 1 commit into
mainfrom
codex/deslop-manifest-families

Conversation

@steipete

@steipete steipete commented Sep 5, 2026 •

Copy link
Copy Markdown
Contributor
Additional instructions

MUST: Keep Allow edits from maintainers enabled for this PR so maintainers
can help update the branch when needed.

What Problem This Solves

Plugin maintainers must currently update three separate capability-family inventories to keep manifest parsing, official catalog supplementation, and capability consent aligned. The inventories contain the same 22 families, but only the consent inventory checks that every declared family is accounted for.

Why This Change Was Made

One internal, exhaustively checked tuple now supplies all three consumers. It preserves every family and its order while removing the duplicate lists; the shared module has only a type import, so metadata discovery stays independent of plugin runtime loading.

The manifest type and its field documentation remain the independent contract. The runtime eligibility subset and public Plugin SDK exports are unchanged. Production LOC: +42/-86, net -44; no test, generated, or dependency changes.

User Impact

No user-visible behavior changes. Parsing, catalog overlays, consent summaries, and acceptance hashes keep their current behavior, with one place to maintain the supported capability families.

Evidence

  • Before and after: OPENCLAW_VITEST_MAX_WORKERS=2 node scripts/run-vitest.mjs src/plugins/capability-summary.test.ts src/plugins/manifest-registry.test.ts — 126 tests pass. Coverage includes every reviewed contract family, actual manifest normalization, and supplemental official-catalog contracts.
  • Formatting, git diff --check, and targeted core lint pass.
  • Fresh independent Codex autoreview through P2 reports scoped-clean. It checked all key values/order, the readonly tuple and exhaustive type check, unknown-key filtering, and metadata-only loading.
  • The full changed-check pipeline now passes in the native PR checkout after a checkout-owned dependency install, including production/test typechecks, lint, unused exports, and import-cycle checks. The initial shared-install guard was preserved.
  • pnpm build passes locally in that native checkout; no ineffective dynamic-import warnings were emitted.
  • Exact-head CI run 33963993520 passes, including the required openclaw/ci-gate.
  • Separate read-only Codex review of ee882077ff64b2475113a2b7452c3894d34c7310 found no actionable P0–P2 findings.

Compatibility review requested by ClawSweeper: 0 config/default fields added, changed, or removed. All 22 capability families and their order, unknown-key filtering, catalog merge ordering, consent hash inputs, public types, and SDK exports remain unchanged. Existing configurations and upgrades keep the same behavior; no migration is needed.

Validated head: ee882077ff64b2475113a2b7452c3894d34c7310.

@clawsweeper

clawsweeper Bot commented Sep 5, 2026 •

Copy link
Copy Markdown
Contributor

🦞👀
ClawSweeper picked this up.

Pull request received. I will update this pull request when review starts.

ClawSweeper review in progress

ClawSweeper is reviewing this revision. This supersedes any previous blocked status.

View the workflow run.

@openclaw-barnacle openclaw-barnacle Bot added size: S maintainer Maintainer-authored PR labels Sep 5, 2026
@steipete
steipete marked this pull request as ready for review September 5, 2026 11:41
@clawsweeper clawsweeper Bot added P3 Low-priority cleanup, docs, polish, ergonomics, or speculative work. rating: 🐚 platinum hermit Good normal PR readiness with ordinary maintainer review expected. status: 👀 ready for maintainer look ClawSweeper has no concrete contributor-facing blocker left for this PR. labels Sep 5, 2026
@clawsweeper

clawsweeper Bot commented Sep 5, 2026

Copy link
Copy Markdown
Contributor

Codex review: blocked before merge. Reviewed September 5, 2026, 7:47 AM ET / 11:47 UTC.

ClawSweeper review

What this changes

The PR shares one checked list of plugin capability families across manifest parsing, catalog supplementation, and capability consent summaries.

Merge readiness

⛔ Blocked before merge - 1 item remains

Keep open: the cleanup remains useful on fetched main, and no blocking correctness or security findings were identified.

Priority: P3
Reviewed head: ee882077ff64b2475113a2b7452c3894d34c7310

Review scores

Measure Result What it means
Overall readiness 🐚 platinum hermit (4/6) A focused, maintainable extraction with preserved contracts and relevant reported validation.
Proof confidence 🌊 off-meta tidepool Not applicable: This maintainer-authored, behavior-preserving metadata refactor is exempt from contributor live proof; existing parsing, catalog, and consent tests provide supplemental coverage.
Patch quality 🐚 platinum hermit (4/6) No actionable review findings were identified.

Verification

Check Result Evidence
Real behavior Not applicable Not applicable: This maintainer-authored, behavior-preserving metadata refactor is exempt from contributor live proof; existing parsing, catalog, and consent tests provide supplemental coverage.
Evidence reviewed 9 items Equivalent capability inventories: Read all four changed modules and compared the extracted tuple with all three original inventories at the merge base and fetched main: all contain the same 22 keys in identical order. The tuple also exactly covers the independent PluginManifestContracts type.
Parsing and catalog owner boundary: loadPluginManifest calls normalizeManifestContracts; registry construction merges those contracts with official catalog metadata. String normalization, unknown-key filtering, deduplication, and merge order remain unchanged.
Consent and sibling behavior: Capability summaries still sort the same declared values before hashing; consent still rechecks the current artifact before recording acceptance. The narrower runtime eligibility union and public SDK exports are unchanged.
Findings None None.
Security None None.

How this fits together

Plugin discovery reads manifests and catalog metadata before loading plugin code. The resulting capability records feed runtime planning, status displays, and operator consent checks.

flowchart LR
  A[Plugin manifests] --> C[Manifest normalization]
  B[Shared capability families] --> C
  C --> E[Plugin registry]
  D[Official catalog metadata] --> E
  B --> E
  E --> F[Capability consent]
  B --> F
  E --> G[Plugin status]
Loading

Before merge

  • Review config compatibility - Confirm compatibility and upgrade impact for the changed config or default surface before merge.
Agent review details

Security

None.

PR surface

Source -44. Total -44 across 4 files.

View PR surface stats
Area Files Added Removed Net
Source 4 42 86 -44
Tests 0 0 0 0
Docs 0 0 0 0
Config 0 0 0 0
Generated 0 0 0 0
Other 0 0 0 0
Total 4 42 86 -44

Review metrics

Metric Value Why it matters
Inventory consolidation 3 inventories → 1; production −44 lines, tests 0 Moving the checked tuple removes two duplicate inventories without adding behavior or test-support code.

Technical review

Best possible solution:

Keep one internal exhaustive inventory while preserving independent manifest types, existing consent semantics, and the narrower runtime eligibility contract.

Do we have a high-confidence way to reproduce the issue?

Not applicable: this refactor addresses duplicated inventories rather than a reported runtime failure; source comparison confirms identical family values and ordering.

Is this the best way to solve the issue?

Yes. A type-only shared module removes duplication without coupling parsing to consent machinery or expanding runtime eligibility.

AGENTS.md: found and applied where relevant.

Codex review notes: model internal, reasoning high; reviewed against d46c7ee046a9.

Labels

Label changes:

  • add P3: This is internal maintenance that preserves capability values, ordering, and user-visible behavior.
  • add rating: 🐚 platinum hermit: Overall readiness is 🐚 platinum hermit; proof is 🌊 off-meta tidepool and patch quality is 🐚 platinum hermit.
  • add status: 👀 ready for maintainer look: ClawSweeper has no concrete contributor-facing blocker left for this PR. Not applicable: This maintainer-authored, behavior-preserving metadata refactor is exempt from contributor live proof; existing parsing, catalog, and consent tests provide supplemental coverage.

Label justifications:

  • P3: This is internal maintenance that preserves capability values, ordering, and user-visible behavior.
  • rating: 🐚 platinum hermit: Overall readiness is 🐚 platinum hermit; proof is 🌊 off-meta tidepool and patch quality is 🐚 platinum hermit.
  • status: 👀 ready for maintainer look: ClawSweeper has no concrete contributor-facing blocker left for this PR. Not applicable: This maintainer-authored, behavior-preserving metadata refactor is exempt from contributor live proof; existing parsing, catalog, and consent tests provide supplemental coverage.

Evidence

What I checked:

  • Equivalent capability inventories: Read all four changed modules and compared the extracted tuple with all three original inventories at the merge base and fetched main: all contain the same 22 keys in identical order. The tuple also exactly covers the independent PluginManifestContracts type. (src/plugins/manifest-contract-keys.ts:3, ee882077ff64)
  • Parsing and catalog owner boundary: loadPluginManifest calls normalizeManifestContracts; registry construction merges those contracts with official catalog metadata. String normalization, unknown-key filtering, deduplication, and merge order remain unchanged. (src/plugins/manifest-registry.ts:299, ee882077ff64)
  • Consent and sibling behavior: Capability summaries still sort the same declared values before hashing; consent still rechecks the current artifact before recording acceptance. The narrower runtime eligibility union and public SDK exports are unchanged. (src/plugins/capability-summary.ts:173, ee882077ff64)
  • Existing boundary coverage: The summary test independently enumerates every contract family. Registry tests cover normalized provider contracts and official catalog supplementation. The captured PR body reports 126 tests passing before and after; this read-only review did not execute tests. (src/plugins/capability-summary.test.ts:126, ee882077ff64)
  • Metadata-only implementation: The documented contracts are OpenClaw-owned static capability metadata. The shared module imports only an OpenClaw type; its changed behavior does not depend on a Codex runtime or protocol contract. Public docs: docs/plugins/manifest.md. (docs/plugins/manifest.md:820, ee882077ff64)
  • Still distinct from current main: The affected paths on fetched main match the merge base and retain the three inventories. No matching replacement is established by the supplied discussion; live GitHub search was unavailable. (src/plugins/capability-summary.ts:29, d46c7ee046a9)

Likely related people:

  • Peter Steinberger: Raw commit 0dbd5c8 adds src/plugins/capability-summary.test.ts:130 relative to its recorded parents. This identifies author metadata, not feature responsibility or a PR merger. (role: source-line author; confidence: high; commits: 0dbd5c81d531; files: src/plugins/capability-summary.test.ts)

Rating scale

Score Internal tier Crab rank Meaning
6/6 S 🦀 challenger crab Exceptional readiness
5/6 A 🦞 diamond lobster Very strong readiness
4/6 B 🐚 platinum hermit Good normal PR; ordinary maintainer review
3/6 C 🦐 gold shrimp Useful, but confidence is limited
2/6 D 🦪 silver shellfish Proof or implementation needs work
1/6 F 🧂 unranked krab Not merge-ready
N/A NA 🌊 off-meta tidepool Rating does not apply

Overall follows the weaker of proof and patch quality.
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.

Workflow

  • ClawSweeper keeps one durable marker-backed review comment per issue or PR.
  • Re-runs edit this comment so the latest verdict, findings, and automation markers stay together instead of adding duplicate bot comments.
  • A fresh review can be triggered by eligible @clawsweeper re-review comments, exact-item GitHub events, scheduled/background review runs, or manual workflow dispatch.
  • PR/issue authors and users with repository write access can comment @clawsweeper re-review or @clawsweeper re-run on an open PR or issue to request a fresh review only.
  • Maintainers can also comment @clawsweeper review to request a fresh review only.
  • Fresh-review commands do not start repair, autofix, rebase, CI repair, or automerge.
  • Maintainer-only repair and merge flows require explicit commands such as @clawsweeper autofix, @clawsweeper automerge, @clawsweeper fix ci, or @clawsweeper address review.
  • Maintainers can comment @clawsweeper explain to ask for more context, or @clawsweeper stop to stop active automation.

@steipete

steipete commented Sep 5, 2026

Copy link
Copy Markdown
Contributor Author

Ready to land ee882077ff64b2475113a2b7452c3894d34c7310. Production net -44; tests unchanged. The original duplicated inventories contained the same 22 keys in the same order; the shared exhaustive leaf module preserves parsing, catalog overlays, consent/hash inputs, and metadata-only loading.

Before/after focused proof: 126 tests pass. Native node scripts/check-changed.mjs -- src/plugins/capability-summary.ts src/plugins/manifest-capability-normalizers.ts src/plugins/manifest-registry.ts src/plugins/manifest-contract-keys.ts and pnpm build pass. Required exact-head CI 33963993520 is green. Fresh autoreview through P2, independent source challenge, and separate read-only exact-head review have no actionable findings.

ClawSweeper compatibility checklist addressed: zero config/default fields added, changed or removed; no schema, migration, public SDK, capability eligibility or acceptance-hash changes. Current configs and upgrades behave identically. No remaining proof gap.

@steipete
steipete merged commit 490eea4 into main Sep 5, 2026
252 checks passed
@steipete
steipete deleted the codex/deslop-manifest-families branch September 5, 2026 12:02
@steipete

steipete commented Sep 5, 2026

Copy link
Copy Markdown
Contributor Author

Merged via squash.

github-actions Bot pushed a commit to Desicool/openclaw that referenced this pull request Sep 6, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

maintainer Maintainer-authored PR P3 Low-priority cleanup, docs, polish, ergonomics, or speculative work. rating: 🐚 platinum hermit Good normal PR readiness with ordinary maintainer review expected. size: S status: 👀 ready for maintainer look ClawSweeper has no concrete contributor-facing blocker left for this PR.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant