Skip to content

feat: bind signed ClawHub default feed trust#101981

Merged
giodl73-repo merged 10 commits into
openclaw:mainfrom
giodl73-repo:feeds-trust-clawhub-default-profile
Jul 24, 2026
Merged

feat: bind signed ClawHub default feed trust#101981
giodl73-repo merged 10 commits into
openclaw:mainfrom
giodl73-repo:feeds-trust-clawhub-default-profile

Conversation

@giodl73-repo

@giodl73-repo giodl73-repo commented Jul 8, 2026

Copy link
Copy Markdown
Contributor

Feed stack — OpenClaw trust foundation

Can review and merge now, in parallel with ClawHub #3005.
Required before: #110250 (sharded consumer) and production signing activation.

This PR defines and hardens the trust/identity/expiry contract but intentionally does not bundle a production key or activate the default signed feed. Key handoff and activation remain a separate proof-backed operation after the code stack lands.

Summary - bind the built-in clawhub-public profile to payload identity clawhub-official, preserving built-in/environment trust when the profile is customized - keep existing custom signed profiles without feedId operational during the staged rollout; new profiles can opt into identity binding now - support paired key-id/public-key environment overrides and fail closed before fetch when the pair is incomplete - enforce the signed DSSE HTTP contract, payload expiry, monotonic rollback/equivocation protection, and snapshot re-verification - keep expired or legacy no-expiry snapshots visible while stripping install authority - require schema-v2 entries to declare the complete available + official install-authority pair before overlays or clones - document trusted-key distribution and the non-inventing Doctor migration requirement for the separately landing feed-profile config surface ## Dependencies - merged envelope compatibility policy: #110037 - merged signed snapshot key rotation: #108342 - ClawHub stored-catalog signer and key-management tooling: openclaw/clawhub#3005 - corrected hosted-feed v1 specs: openclaw/rfcs#39 ## Rollout policy The built-in clawhub-public profile is identity-bound immediately. Existing custom signed profiles that omit feedId retain signature verification without payload-identity binding during the transition. The separately landing user-facing profile configuration must diagnose the missing value and ask the operator to supply it; Doctor must not infer a feed identity from its URL. This PR intentionally does not invent or bundle a production key. ClawHub must generate and retain the Ed25519 private key in deployment secret storage and hand OpenClaw the matching public key and key ID. Bundling that trust root and activating the production default remain a separate proof-backed change. ## Validation - node scripts/run-vitest.mjs src/plugins/official-external-plugin-catalog-envelope.test.ts src/plugins/official-external-plugin-catalog.test.ts --run: 74 passed, including SQLite snapshot/rotation cases on Node 24.15 - changed-file oxfmt, type-aware oxlint, and git diff --check: passed - codex review --base upstream/main at 51552f0ee4f: no actionable correctness findings ## Real behavior proof Behavior addressed: A customized built-in profile could lose default trust; signed authority lacked a complete expiry and HTTP contract; legacy snapshots could interfere with rollback state; and schema-v2 manifest fallback could bypass entry-level install authority. Environment tested: WSL Ubuntu with Node 24.15, generated Ed25519 keys, HTTP response fixtures, in-memory snapshots, and the real SQLite snapshot store. Proof covered: 1. Built-in trust inheritance, explicit unsigned downgrade, incomplete-env failure, and cross-feed replay rejection. 2. Standard DSSE live responses, snapshot-only beta compatibility, ETag-based 304 re-verification, expiry, rollback, equivocation, and key rotation. 3. Expired and no-expiry snapshots remain visible but non-installable. 4. Legacy custom signed profiles without feedId work through configured and explicit-URL paths. 5. Schema-v2 entries missing either or both authority fields lose install authority before catalog overlays. Not yet tested: The production ClawHub signer and bundled public trust root. Those do not exist in this branch and are intentionally reserved for the separate activation proof. ## Maintainer decision Approved to merge this as staged trust-binding enforcement before production ClawHub signing-key activation proof. This branch identity-binds the built-in clawhub-public profile, preserves the documented legacy custom signed-profile transition, and keeps the production public trust root plus signer activation as a separate proof-backed change. Before that later activation, ClawHub must provide the signing implementation/key handoff and OpenClaw must receive redacted production-equivalent refresh proof for the default path.

@openclaw-barnacle openclaw-barnacle Bot added docs Improvements or additions to documentation cli CLI command changes scripts Repository scripts size: XL maintainer Maintainer-authored PR labels Jul 8, 2026
@clawsweeper

clawsweeper Bot commented Jul 8, 2026

Copy link
Copy Markdown
Contributor

Codex review: needs real behavior proof before merge. Reviewed July 18, 2026, 1:36 PM ET / 17:36 UTC.

Summary
The branch adds feedId binding, default ClawHub trust-root override handling, signed-feed expiry enforcement, and cached-snapshot authority restrictions for hosted marketplace catalogs.

PR surface: Source +236, Tests +350, Docs +32. Total +618 across 8 files.

Reproducibility: yes. from source: a currently valid signed profile containing url and signed verification but no feedId follows the new schema branch and is rejected before refresh. The provided context does not establish a live deployed configuration reproduction.

Review metrics: 1 noteworthy metric.

  • Signed-profile requirement: 1 new required binding for every signed feed profile. The new feedId validation changes whether existing signed marketplace configuration remains parseable during upgrade.

Merge readiness
Overall: 🦪 silver shellfish
Proof: 🦪 silver shellfish
Patch quality: 🦐 gold shrimp
Result: blocked until real behavior proof from a real setup is added.

Overall follows the weaker of proof and patch quality, so missing proof can cap an otherwise strong patch.

Rank-up moves:

  • [P1] Obtain a maintainer decision and implement the signed-profile migration or staged compatibility path.
  • [P1] Add focused coverage for an existing signed profile upgrading through that chosen path.
  • Post redacted deployment-equivalent refresh and persisted-snapshot evidence after ClawHub provisions signing.

Proof guidance:

  • [P1] Needs real behavior proof before merge: The submitted generated-key, mocked-HTTP, and in-memory-snapshot tests cover important logic but do not show after-fix behavior through a deployment-equivalent ClawHub signer and persisted OpenClaw refresh; add redacted terminal output, logs, or an artifact once that signer exists. After adding proof, update the PR body; ClawSweeper should re-review automatically. If it does not, the PR author or someone with repository write access can comment @clawsweeper re-review.

Risk before merge

  • [P1] Existing users with a signed marketplace profile accepted by the merged configuration contract can have openclaw.json rejected at startup after this change unless they add a correct feedId; the branch has no doctor migration or staged compatibility path.
  • [P1] The planned production default remains unproven because no deployment-equivalent ClawHub signer and public trust-root handoff exist; generated keys, mocked HTTP, and in-memory snapshots do not demonstrate the actual refresh and persisted-state path.

Maintainer options:

  1. Resolve the signed-profile upgrade path before merge (recommended)
    Add the maintainer-approved migration or compatibility behavior and focused coverage for existing signed configurations before enabling the new required binding.
  2. Accept an intentional breaking rollout
    Land only after a maintainer explicitly accepts startup rejection for existing signed profiles and the upgrade documentation states the required operator action.
  3. Pause default-trust activation
    Keep this security rollout paused until the ClawHub production signer, trust root, and migration decision are available together.

Next step before merge

  • [P1] A concrete implementation direction exists, but maintainers must first choose the signed-profile upgrade policy because Doctor cannot safely invent each profile’s payload identity.

Maintainer decision needed

  • Question: Should signed marketplace profiles already accepted by the merged configuration contract be migrated through openclaw doctor --fix, temporarily remain compatible, or intentionally become invalid when feedId binding is introduced?
  • Rationale: The security binding is sensible, but a doctor migration cannot safely invent a profile’s expected payload identity, while unconditional schema rejection changes the upgrade contract for existing operator configuration.
  • Likely owner: Patrick-Erichsen — The discussion records this person as the recent reviewer-side participant for the requested changes, while the decision is product and upgrade policy rather than a mechanical implementation choice.
  • Options:
    • Stage the requirement with a doctor-guided migration (recommended): Keep existing signed profiles operational during a bounded transition and have Doctor identify each profile that needs an explicit operator-confirmed feedId.
    • Make the break intentional: Require feedId immediately, document the upgrade action prominently, and accept that existing signed profiles fail config validation until operators update them.
    • Defer activation until the production trust handoff: Keep the generic binding capability but postpone the default signed-profile rollout until ClawHub provisions the signer and a migration policy is approved.

Security
Cleared: No secret material, third-party execution, dependency, or supply-chain regression is introduced by the examined diff; the remaining concern is the explicitly surfaced upgrade policy for this security-sensitive trust boundary.

Review findings

  • [P1] Preserve or migrate existing signed profiles — src/config/zod-schema.root-support.ts:573-575
Review details

Best possible solution:

Agree the signed-profile upgrade contract first, then ship a narrow doctor-guided migration or deliberately staged rollout that preserves valid existing configurations until an operator can supply the required payload identity, followed by redacted deployment-equivalent refresh proof once ClawHub provisions the signing key.

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

Yes, from source: a currently valid signed profile containing url and signed verification but no feedId follows the new schema branch and is rejected before refresh. The provided context does not establish a live deployed configuration reproduction.

Is this the best way to solve the issue?

No; payload identity binding is a reasonable security control, but unconditional config rejection is not the best rollout until maintainers choose and prove an upgrade path for existing signed profiles.

Full review comments:

  • [P1] Preserve or migrate existing signed profiles — src/config/zod-schema.root-support.ts:573-575
    The prior signed-profile contract accepts verification.mode: "signed" without feedId, but this new schema rejection makes those existing configurations fail before refresh. Add the maintainer-approved Doctor migration or staged compatibility behavior; a payload ID cannot be silently inferred from an arbitrary configured URL.
    Confidence: 0.96

Overall correctness: patch is incorrect
Overall confidence: 0.95

AGENTS.md: found and applied where relevant.

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

Label changes

Label justifications:

  • P2: This is a bounded marketplace trust and configuration change with meaningful but non-emergency upgrade impact.
  • merge-risk: 🚨 compatibility: The new schema rule rejects existing signed profiles that omit feedId, with no migration in the proposed branch.
  • merge-risk: 🚨 security-boundary: The PR changes the trust boundary for marketplace catalog acceptance, key overrides, replay binding, and cached authority.
  • rating: 🦪 silver shellfish: Overall readiness is 🦪 silver shellfish; proof is 🦪 silver shellfish and patch quality is 🦐 gold shrimp.
  • status: 📣 needs proof: The PR needs real behavior proof before ClawSweeper can clear the contributor ask. Needs real behavior proof before merge: The submitted generated-key, mocked-HTTP, and in-memory-snapshot tests cover important logic but do not show after-fix behavior through a deployment-equivalent ClawHub signer and persisted OpenClaw refresh; add redacted terminal output, logs, or an artifact once that signer exists. After adding proof, update the PR body; ClawSweeper should re-review automatically. If it does not, the PR author or someone with repository write access can comment @clawsweeper re-review.
Evidence reviewed

PR surface:

Source +236, Tests +350, Docs +32. Total +618 across 8 files.

View PR surface stats
Area Files Added Removed Net
Source 5 266 30 +236
Tests 2 360 10 +350
Docs 1 32 0 +32
Config 0 0 0 0
Generated 0 0 0 0
Other 0 0 0 0
Total 8 658 40 +618

What I checked:

Likely related people:

  • giodl73-repo: Authored the merged envelope verifier, signed-profile configuration, refresh enforcement, and trust-state visibility work that this branch extends. (role: introduced and iterated hosted-feed trust behavior; confidence: high; commits: 30b3a7cdeda9, 735dbd2f9519, 9f248969f6c8; files: src/plugins/official-external-plugin-catalog.ts, src/config/types.marketplaces.ts, src/config/zod-schema.root-support.ts)
  • Patrick-Erichsen: The PR discussion records a direct response to requested changes and a recent subscription/mention, making this person a plausible routing contact for the remaining rollout decision, though no code-history ownership was established here. (role: recent review participant; confidence: low; files: src/plugins/official-external-plugin-catalog.ts)
What the crustacean ranks mean
  • 🦀 challenger crab: rare, exceptional readiness with strong proof, clean implementation, and convincing validation.
  • 🦞 diamond lobster: very strong readiness with only minor maintainer review expected.
  • 🐚 platinum hermit: good normal PR, likely mergeable with ordinary maintainer review.
  • 🦐 gold shrimp: useful signal, but proof or patch confidence is still limited.
  • 🦪 silver shellfish: thin signal; proof, validation, or implementation needs work.
  • 🧂 unranked krab: not merge-ready because proof is missing/unusable or there are serious correctness or safety concerns.
  • 🌊 off-meta tidepool: rating does not apply to this item.

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 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.
Review history (12 earlier review cycles; latest 8 shown)
  • reviewed 2026-07-08T18:17:51.435Z sha 5bd6f0a :: needs real behavior proof before merge. :: [P1] Do not claim bundled default verification with no bundled key | [P2] Cap raw signature arrays before filtering malformed entries
  • reviewed 2026-07-08T18:26:37.816Z sha 5bd6f0a :: needs real behavior proof before merge. :: [P1] Do not claim bundled default verification with no key | [P2] Cap raw signature arrays before filtering malformed entries
  • reviewed 2026-07-08T18:40:07.115Z sha 708d017 :: needs real behavior proof before merge. :: [P1] Do not document bundled verification without a bundled key
  • reviewed 2026-07-08T18:46:44.572Z sha 708d017 :: needs real behavior proof before merge. :: [P1] Do not document bundled verification without a bundled key
  • reviewed 2026-07-08T20:56:19.053Z sha 708d017 :: needs real behavior proof before merge. :: [P1] Do not document bundled verification without a bundled key
  • reviewed 2026-07-17T04:01:24.867Z sha fe939bc :: needs real behavior proof before merge. :: none
  • reviewed 2026-07-17T04:41:49.384Z sha fe939bc :: needs real behavior proof before merge. :: none
  • reviewed 2026-07-18T16:37:15.075Z sha 829f054 :: needs real behavior proof before merge. :: [P1] Provide an upgrade path for existing signed profiles

@clawsweeper clawsweeper Bot added rating: 🧂 unranked krab Not merge-ready due to missing proof or serious correctness/safety concerns. status: 📣 needs proof The PR needs real behavior proof before ClawSweeper can clear the contributor ask. P2 Normal backlog priority with limited blast radius. merge-risk: 🚨 compatibility 🚨 May break existing users, config, migrations, defaults, or upgrade paths. merge-risk: 🚨 security-boundary 🚨 May affect sandboxing, authorization, credentials, or sensitive data. labels Jul 8, 2026
@giodl73-repo
giodl73-repo force-pushed the feeds-trust-clawhub-default-profile branch from 5bd6f0a to 708d017 Compare July 8, 2026 18:35
@giodl73-repo
giodl73-repo force-pushed the feeds-trust-clawhub-default-profile branch from 708d017 to b59b36b Compare July 15, 2026 14:57
@giodl73-repo giodl73-repo changed the title feat: support signed ClawHub default feed feat: bind signed ClawHub default feed trust Jul 15, 2026
@openclaw-barnacle openclaw-barnacle Bot added size: M and removed cli CLI command changes scripts Repository scripts size: XL labels Jul 15, 2026
@giodl73-repo
giodl73-repo force-pushed the feeds-trust-clawhub-default-profile branch from b59b36b to a518ad4 Compare July 15, 2026 15:10

@Patrick-Erichsen Patrick-Erichsen left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Reviewed exact head a518ad4ed3a2ea4d18ca923d61902d3f60035fb6.

Findings

  • [P1] Preserve built-in trust when clawhub-public is configuredsrc/plugins/official-external-plugin-catalog.ts:405

    resolveOfficialExternalPluginCatalogProfileConfig() builds the trusted default and then replaces the entire profile via ...config?.feeds; the caller also omits env whenever that profile exists in config (src/plugins/official-external-plugin-catalog.ts:463). A valid config entry that only restates the ClawHub URL/feed ID therefore drops the built-in verification and ignores both documented trust env vars, accepting unsigned JSON. Merge user fields into the built-in profile and require an explicit verification: { mode: "unsigned" } downgrade, or reject overrides of the built-in trust fields. Add coverage for a configured clawhub-public profile with both trust env vars present.

  • [P1] Enforce signed feed expiry before accepting fresh or cached authoritysrc/plugins/official-external-plugin-catalog.ts:291

    The ClawHub producer's stored payload requires expiresAt, and RFC 0009 requires expiry validation and reporting stale content without silently granting new authority. The consumer feed type/guard does not parse expiresAt, and parseHostedCatalogFeedBody() plus loadHostedCatalogSnapshotResult() accept a validly signed payload or snapshot indefinitely. During endpoint failure/offline mode, an expired snapshot can therefore keep authorizing installs forever. Validate expiresAt > generatedAt, reject expired fresh payloads, and make snapshot fallback preserve visibility without granting install authority after expiry; cover fresh, 304, offline, and error fallback paths.

Verdict

The direction is plausible, but this is not yet the best or merge-ready fix: the default trust profile remains configuration-downgradable and the signed producer's expiry contract is not enforced. The key-rotation correction in #108342 should also land before this default feed trust is enabled.

Exact-head CI has no substantive source proof: CI preflight/tests/build/docs/security lanes were skipped, and the green “Real behavior proof” job only checked maintainer membership against the base checkout. The missing production public key and live signed endpoint proof are expected deployment blockers, separate from the code/spec findings above. ClawHub #3005 and RFC #39 are still open cross-repo dependencies.

@giodl73-repo

Copy link
Copy Markdown
Contributor Author

@Patrick-Erichsen Both requested code changes are addressed at exact head fe939bc: configured clawhub-public profiles inherit built-in/env trust unless verification is explicitly overridden, and signed feeds now enforce expiresAt > generatedAt across fresh, 304, offline, and error paths. Expired or legacy no-expiry snapshots remain visible but have install authority removed; legacy snapshots still participate in rollback checks so upgrades do not deadlock. Focused catalog suite: 41 passed, 2 SQLite tests skipped locally because Node 24.14.0 is below the repo's WAL-safe 24.15.0 floor. Final codex review found no actionable issues. #108342 remains the separate rotation prerequisite.

@clawsweeper clawsweeper Bot removed the rating: 🧂 unranked krab Not merge-ready due to missing proof or serious correctness/safety concerns. label Jul 17, 2026
@giodl73-repo

Copy link
Copy Markdown
Contributor Author

Rebased onto current main (61f036f748645952487ca35d280a1905665af766) and force-with-lease pushed current head e0c2e9d1b0512d8ce29688651d2bfbbea154bb7f.

Scoped current-head proof:

  • git diff --check origin/main...HEAD
  • pnpm exec oxfmt --check docs/cli/plugins.md src/plugins/official-external-plugin-catalog.ts src/plugins/official-external-plugin-catalog.test.ts
  • pnpm exec oxlint --deny-warnings --tsconfig tsconfig.json src/plugins/official-external-plugin-catalog.ts src/plugins/official-external-plugin-catalog.test.ts
  • node scripts/run-vitest.mjs src/plugins/official-external-plugin-catalog-envelope.test.ts src/plugins/official-external-plugin-catalog.test.ts --run (74 tests)

pnpm check:test-types was started after the rebase but did not complete before the local wrapper timeout; it was stopped after lingering in tsgo:extensions:test. No code changes were made beyond the main rebase.

@clawsweeper re-review

@clawsweeper

clawsweeper Bot commented Jul 24, 2026

Copy link
Copy Markdown
Contributor

🦞🧹
ClawSweeper re-review requested.

I asked ClawSweeper to review this item again.
Action: item re-review queued (workflow sweep.yml, event repository_dispatch).
Result: when the review finishes, ClawSweeper will create the durable review comment if needed or update the existing comment in place.

@giodl73-repo
giodl73-repo force-pushed the feeds-trust-clawhub-default-profile branch from e0c2e9d to 8ef434f Compare July 24, 2026 03:27
@giodl73-repo

Copy link
Copy Markdown
Contributor Author

Rebased again onto current main (edc344834ba0f4e3b561c8919cf84bdd50ff8b8b) after the auth-profile migration fix landed, and force-with-lease pushed current head 8ef434f690f4a3d92332cc3d554c514da63a8184.

Scoped current-head proof:

  • git diff --check origin/main...HEAD
  • pnpm exec oxfmt --check docs/cli/plugins.md src/plugins/official-external-plugin-catalog.ts src/plugins/official-external-plugin-catalog.test.ts
  • pnpm exec oxlint --deny-warnings --tsconfig tsconfig.json src/plugins/official-external-plugin-catalog.ts src/plugins/official-external-plugin-catalog.test.ts
  • node scripts/run-vitest.mjs src/plugins/official-external-plugin-catalog-envelope.test.ts src/plugins/official-external-plugin-catalog.test.ts --run (74 tests)

@clawsweeper re-review

@clawsweeper

clawsweeper Bot commented Jul 24, 2026

Copy link
Copy Markdown
Contributor

🦞🧹
ClawSweeper re-review requested.

I asked ClawSweeper to review this item again.
Action: item re-review queued (workflow sweep.yml, event repository_dispatch).
Result: when the review finishes, ClawSweeper will create the durable review comment if needed or update the existing comment in place.

@giodl73-repo
giodl73-repo force-pushed the feeds-trust-clawhub-default-profile branch from 8ef434f to 7378c93 Compare July 24, 2026 12:59
@giodl73-repo

Copy link
Copy Markdown
Contributor Author

Rebased onto current main (d2200f64af53eb24f4ddd51ab1bcba18745fc434) and force-with-lease pushed current head 7378c93971ecd9315301617b6e7e893f49419558.

Scoped current-head proof:

  • git diff --check origin/main...HEAD
  • ./node_modules/.bin/oxfmt --check docs/cli/plugins.md src/plugins/official-external-plugin-catalog.ts src/plugins/official-external-plugin-catalog.test.ts
  • ./node_modules/.bin/oxlint --deny-warnings --tsconfig tsconfig.json src/plugins/official-external-plugin-catalog.ts src/plugins/official-external-plugin-catalog.test.ts
  • node scripts/run-vitest.mjs src/plugins/official-external-plugin-catalog-envelope.test.ts src/plugins/official-external-plugin-catalog.test.ts --run (74 tests)

Note: pnpm exec triggered local dependency auto-install/hydration noise in this WSL worktree, so I used the already-installed repo-local binaries directly for format/lint. No code changes were made beyond the clean rebase.

@clawsweeper re-review

@clawsweeper

clawsweeper Bot commented Jul 24, 2026

Copy link
Copy Markdown
Contributor

🦞🧹
ClawSweeper re-review requested.

I asked ClawSweeper to review this item again.
Action: item re-review queued (workflow sweep.yml, event repository_dispatch).
Result: when the review finishes, ClawSweeper will create the durable review comment if needed or update the existing comment in place.

@giodl73-repo
giodl73-repo force-pushed the feeds-trust-clawhub-default-profile branch from 7378c93 to c689aa8 Compare July 24, 2026 13:01
@giodl73-repo

Copy link
Copy Markdown
Contributor Author

Rebased onto current main (ebf2306c1dcc638d82f9e114e858e6be71172d22) and force-with-lease pushed current head c689aa812b5ce0ae39385bdbe6b24d1f5d5cbe03.

Scoped current-head proof:

  • git diff --check origin/main...HEAD
  • ./node_modules/.bin/oxfmt --check docs/cli/plugins.md src/plugins/official-external-plugin-catalog.ts src/plugins/official-external-plugin-catalog.test.ts
  • ./node_modules/.bin/oxlint --deny-warnings --tsconfig tsconfig.json src/plugins/official-external-plugin-catalog.ts src/plugins/official-external-plugin-catalog.test.ts
  • node scripts/run-vitest.mjs src/plugins/official-external-plugin-catalog-envelope.test.ts src/plugins/official-external-plugin-catalog.test.ts --run (74 tests)

No code changes beyond the clean rebase.

@clawsweeper re-review

@giodl73-repo
giodl73-repo force-pushed the feeds-trust-clawhub-default-profile branch from c689aa8 to 966e375 Compare July 24, 2026 13:26
@giodl73-repo

Copy link
Copy Markdown
Contributor Author

Rebased onto current main (8d67c40939bed439a968b44185dd1b06df40619a) and force-with-lease pushed current head 966e3755ac590978dc85caa029b87b1a03bcdcee.

Scoped current-head proof:

  • git diff --check origin/main...HEAD
  • ./node_modules/.bin/oxfmt --check docs/cli/plugins.md src/plugins/official-external-plugin-catalog.ts src/plugins/official-external-plugin-catalog.test.ts
  • ./node_modules/.bin/oxlint --deny-warnings --tsconfig tsconfig.json src/plugins/official-external-plugin-catalog.ts src/plugins/official-external-plugin-catalog.test.ts
  • node scripts/run-vitest.mjs src/plugins/official-external-plugin-catalog-envelope.test.ts src/plugins/official-external-plugin-catalog.test.ts --run (74 tests)

No code changes beyond the clean rebase.

@clawsweeper re-review

@clawsweeper

clawsweeper Bot commented Jul 24, 2026

Copy link
Copy Markdown
Contributor

🦞🧹
ClawSweeper re-review requested.

I asked ClawSweeper to review this item again.
Action: item re-review queued (workflow sweep.yml, event repository_dispatch).
Result: when the review finishes, ClawSweeper will create the durable review comment if needed or update the existing comment in place.

@giodl73-repo
giodl73-repo merged commit f88e7e4 into openclaw:main Jul 24, 2026
118 of 119 checks passed
github-actions Bot pushed a commit to Desicool/openclaw that referenced this pull request Jul 25, 2026
* feat: bind signed ClawHub feed trust

* fix(feeds): preserve trust and enforce expiry

* fix(feeds): enforce signed catalog HTTP contract

* fix(feeds): align signed feed validation

* fix: preserve hosted catalog trust boundaries

* fix(feeds): stage custom feed identity binding

* fix(feeds): require complete entry trust authority

* fix(feeds): retain feed schema trust context

* fix(feeds): enforce schema trust before overlays

* fix(feeds): satisfy catalog trust CI checks

---------

Co-authored-by: Gio Della-Libera <[email protected]>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

docs Improvements or additions to documentation maintainer Maintainer-authored PR merge-risk: 🚨 compatibility 🚨 May break existing users, config, migrations, defaults, or upgrade paths. merge-risk: 🚨 security-boundary 🚨 May affect sandboxing, authorization, credentials, or sensitive data. P2 Normal backlog priority with limited blast radius. rating: 🦪 silver shellfish Thin PR readiness signal; proof, validation, or implementation needs work. size: L status: 📣 needs proof The PR needs real behavior proof before ClawSweeper can clear the contributor ask.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants