feat(feeds): add dormant catalog signing foundation#3005
Conversation
|
Someone is attempting to deploy a commit to the OpenClaw Foundation Team on Vercel. A member of the Team first needs to authorize it. |
|
Codex review: needs real behavior proof before merge. Reviewed July 22, 2026, 1:33 AM ET / 05:33 UTC. Summary Reproducibility: not applicable. as a feature PR. Source and the supplied diff do establish the compatibility concern: the existing canonical handler is replaced with a DSSE-only handler that can return Review metrics: 3 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
Maintainer decision needed
Security Review findings
Review detailsBest possible solution: Preserve the existing response as the default until maintainers approve a versioned or content-negotiated DSSE rollout and the matching OpenClaw consumer/trust profile is merged and deployed; then prove both the compatibility path and the production signed path with redacted endpoint evidence. Do we have a high-confidence way to reproduce the issue? Not applicable as a feature PR. Source and the supplied diff do establish the compatibility concern: the existing canonical handler is replaced with a DSSE-only handler that can return Is this the best way to solve the issue? No. Signing the stored payload is a sound implementation direction, but an unconditional replacement of the existing public representation is not the narrowest safe rollout while the corresponding OpenClaw consumer and trust-profile work remain open. Full review comments:
Overall correctness: patch is incorrect AGENTS.md: found and applied where relevant. Codex review notes: model internal, reasoning high; reviewed against a9775fc39b10. 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
Review history (4 earlier review cycles)
|
fd1d373 to
ba9c4c8
Compare
ba9c4c8 to
e566e3e
Compare
Patrick-Erichsen
left a comment
There was a problem hiding this comment.
This revision now signs the canonical stored clawhub-official publication bytes, preserves the payload digest/sequence/expiry fields, and matches the merged OpenClaw-specific DSSE/Ed25519 envelope contract. That is the right behavior and trust boundary.
LOC: +462/-33 (5 files)
Two rotation/cache findings remain below.
Best-fix verdict: acceptable architecture, but not merge-ready until signer transitions cannot publish a mixed key pair and all validators describe the selected signed representation.
Alternatives considered: storing the signed envelope alongside each publication would make representation revisions naturally immutable, but it couples publication to signing-secret availability and expands the storage contract. The narrower fix is an atomic signer configuration/activation revision plus rotation-aware validators.
Code/contracts read: ClawHub publication/store/HTTP/proxy paths and tests; current OpenClaw envelope verifier, loader, snapshot rollback path, and 1 MiB response bound; Convex's upstream Ed25519 WebCrypto implementation; DSSE protocol/envelope docs; RFC 0009 corrected trust/feed drafts.
CI: exact-head pr-gates, static, unit, types-build, packages, and e2e-http are green. The only failing status is external Vercel team authorization.
Expected deployment blockers, separate from these findings: the production key and live endpoint proof do not exist yet; OpenClaw's default ClawHub trust/feed-id PR and rotation follow-up remain open; the corrected RFC contract is also still open. Current OpenClaw main also does not yet enforce the signed payload's expiresAt, so end-to-end production trust is not complete even after this producer lands.
d6a3331 to
bed5f5c
Compare
|
@Patrick-Erichsen Re-review when convenient: your two requested producer fixes are both present at exact head c62a506. Signer id/key activation is atomic, and Last-Modified now varies with the selected signed representation. The substantive static/unit/types/packages/e2e checks are green; the remaining failures are the unrelated moderation-star Playwright lane and Vercel authorization. |
38043a5 to
f76d8a3
Compare
|
ClawSweeper status: review started. I am starting a fresh review of this pull request: feat: sign stored OpenClaw catalog publications This is item 1/1 in the current shard. Shard 19/22. This placeholder means the worker is alive and reading the current context. I will edit this same comment with the actual review when the claws are done clicking. Crustacean status: shell secured, claws on keyboard, evidence pebbles being sorted. |
8469465 to
1527bb4
Compare
1527bb4 to
15b8dfb
Compare
|
@Patrick-Erichsen The current restacked head \15b8dfba\ addresses both requested changes: signer key/id activation is atomic, and signed representation validators no longer reuse a stale Last-Modified value. It also keeps signing dormant behind explicit activation, preserving the unsigned canonical response until rollout. Substantive CI is green; only the external Vercel authorization status remains. Re-review when convenient.\n\n@clawsweeper re-review |
Summary
clawhub-officialcatalog publication/api/v1/feeds/pluginsMerge and activation contract
Merging this PR does not enable signing and does not require production keys.
The route selects DSSE only when a client explicitly sends
Accept: application/vnd.dsse+json. Without that opt-in, the existing unsigned response remains available even whenCLAWHUB_FEED_SIGNING_CONFIGis missing or malformed. An opted-in signed request fails closed with503 no-storeuntil a valid signer is installed.This is the dormant signing foundation for the large-feed stack. Production activation is a later operator action after the matching OpenClaw trust anchor is released.
Review order
OpenClaw trust-anchor work in openclaw/openclaw#101981 can be reviewed and landed in parallel, but must ship before production signing is activated.
Signing configuration
ClawHub owns one atomic Convex secret:
CLAWHUB_FEED_SIGNING_CONFIG: strict JSON containing exactlykeyIdand PKCS#8 Ed25519privateKeyOpenClaw receives only the matching public PEM and key id. There is intentionally no feed-adjacent public-key bootstrap endpoint. The complete provisioning, activation, rotation, and emergency-revocation runbook is in
specs/hosted-catalog-feed.md.Cache behavior
The signed representation uses its envelope ETag as the conditional validator and deliberately omits
Last-Modified; signer rotation changes envelope bytes without changing the stored publication timestamp. The unsigned representation retains its existing validators. Responses includeVary: Accept.Validation
bun x vitest run convex/httpApiV1.catalogFeedSigning.test.ts scripts/provision-catalog-feed-signing-key.test.ts— 25 tests passedLast-Modifiedgit diff --check origin/main...HEADcodex review --uncommitted— no actionable findingsbun run ci:staticnow clears the dependency audit after upstream #3234; it currently stops on formatting errors in two files already present onmain(.agents/skills/autoreview/CLAUDE.mdandCLAUDE.md). Production key provisioning and public-endpoint proof are intentionally deferred to activation.