Skip to content

fix(gateway): tolerate Paperclip metadata via adapterMeta namespace + paperclip alias on AgentParamsSchema#74974

Closed
jeffrey701 wants to merge 1 commit into
openclaw:mainfrom
jeffrey701:fix/agent-params-accept-paperclip-metadata-74635
Closed

fix(gateway): tolerate Paperclip metadata via adapterMeta namespace + paperclip alias on AgentParamsSchema#74974
jeffrey701 wants to merge 1 commit into
openclaw:mainfrom
jeffrey701:fix/agent-params-accept-paperclip-metadata-74635

Conversation

@jeffrey701

@jeffrey701 jeffrey701 commented Apr 30, 2026

Copy link
Copy Markdown
Contributor

Summary

Closes #74635, #62102. Refs #69139, #72565, #75901 (earlier vendor-named designs that were closed without merge).

Paperclip and other external agents inject a root-level metadata blob when invoking agents through the openclaw_gateway adapter, but AgentParamsSchema is declared with additionalProperties: false, so the gateway rejects the entire payload before dispatch:

invalid agent params: at root: unexpected property 'paperclip'

Three earlier PRs (#69139, #72565, #75901) tried to land this as a vendor-named root field and were closed without merge. This PR lands the same outcome behind a generic namespace plus a backward-compatibility alias instead, so future adapters do not have to grow the protocol schema each time.

Schema change (src/gateway/protocol/schema/agent.ts)

AgentParamsSchema gains two optional fields, both treated as opaque by the gateway:

  • adapterMeta: Type.Optional(Type.Record(Type.String(), Type.Unknown())) - generic landing pad for opaque per-adapter metadata. Each external agent or plugin adapter writes under its own key (adapterMeta: { paperclip: {...}, greptile: {...} }); the gateway accepts the bag as-is and never inspects it. New adapters land protocol-side without growing the schema.
  • paperclip: Type.Optional(Type.Unknown()) - backward-compatibility alias for adapters published before adapterMeta was introduced. The currently published Paperclip adapter sends its metadata at the root as paperclip, so heartbeats keep dispatching while it migrates to adapterMeta.paperclip. The comment explicitly marks this for removal once Paperclip cuts a release that nests under adapterMeta.

additionalProperties: false on AgentParamsSchema is intentionally untouched. Truly unknown root fields (typo'd idempotnecyKey, somethingElse, etc.) still fail validation before dispatch.

Swift bindings (apps/shared/OpenClawKit/Sources/OpenClawProtocol/GatewayModels.swift)

Mirrors the two new fields on AgentParams in all four codegen positions (declaration, init signature, init body, CodingKeys), following the existing inputprovenance / cleanupbundlemcponrunend pattern:

  • public let adaptermeta: [String: AnyCodable]?
  • public let paperclip: AnyCodable?

The macOS-side mirror was deleted upstream so only the shared one needs to be regenerated.

Tests (src/gateway/protocol/agent-params-validator.test.ts, new)

New unit-test file covering both the new fields and the unchanged guard:

  • minimal canonical payload accepted, missing message / idempotencyKey rejected
  • root-level paperclip alias accepts object, string, number, boolean, null
  • adapterMeta with one or more adapter keys accepted
  • empty adapterMeta and adapterMeta with primitive entry values accepted
  • both surfaces side by side (paperclip + adapterMeta.paperclip) accepted
  • adapterMeta with non-object value rejected (string, number, boolean, null, array)
  • truly unknown root properties still rejected (additionalProperties guard intact)

Changelog

One bullet under ## Unreleased -> ### Changes describing the namespace + alias and citing #74635 and #62102.

Local verification

  • pnpm exec oxfmt --check --threads=1 on the touched .ts files: clean.
  • Standalone tsx reproducer importing the same TypeBox schema body and compiling it with the same Ajv config as src/gateway/protocol/index.ts: 19/19 cases pass (covering the 8 PR test scenarios plus their primitive variants); see Real behavior proof below.
  • pnpm test src/gateway/protocol/agent-params-validator.test.ts is expected to pass on CI; local run was blocked by registry access while pnpm tried to install the github-pinned @openclaw/fs-safe workspace dep.

Real behavior proof

Behavior or issue addressed: The gateway rejected agent invocations with a root-level paperclip metadata blob (the shape Paperclip rev 3494e84 actually sends against OpenClaw 2026.4.26 be8c246), failing with invalid agent params: at root: unexpected property 'paperclip' before dispatch. After this patch, the same payload is accepted as an opaque value via the backward-compatibility alias, and the new adapterMeta namespace accepts the same blob nested under adapterMeta.paperclip for the migration path. The additionalProperties: false guard on AgentParamsSchema is still in effect for unrelated typos.

Real environment tested: Local OpenClaw checkout of jeffrey701/fix/agent-params-accept-paperclip-metadata-74635 rebased onto upstream/main at f9e8e83a16 (current main tip); Node.js v22.22.0; pnpm-resolved [email protected]; OpenClaw workspace typebox and ajv dependencies as pinned in package.json. The reproducer drives the actual Ajv-compiled schema body from src/gateway/protocol/schema/agent.ts against the same Ajv configuration src/gateway/protocol/index.ts uses to compile validateAgentParams (new Ajv({ allErrors: true, removeAdditional: false })), so the verdict matches what the gateway would produce in process.

Exact steps or command run after this patch: After applying the schema, Swift binding, test, and changelog edits and committing as 63770c9d4a, from the repo root:

$ /usr/bin/git diff --stat upstream/main..HEAD
$ /usr/bin/git status -s
$ pnpm exec oxfmt --check --threads=1 src/gateway/protocol/schema/agent.ts src/gateway/protocol/agent-params-validator.test.ts CHANGELOG.md
$ ./node_modules/.bin/tsx .validator-repro-74974.mts

The .validator-repro-74974.mts script lives at the repo root so tsx resolves the OpenClaw workspace typebox and ajv packages; it copies the AgentParamsSchema body verbatim and walks 19 payloads (canonical baseline, root-level paperclip alias as object/string/number/boolean/null, adapterMeta with two adapter keys, empty adapterMeta, adapterMeta with primitive values, both surfaces side by side, adapterMeta as non-object string/number/boolean/null/array, and two truly-unknown root keys to confirm additionalProperties: false still fires).

Evidence after fix: Three terminal captures from the local OpenClaw checkout described above. The first capture is the diff scope against upstream/main; the second is the formatter run on the touched .ts files; the third is the standalone Ajv-compiled schema reproducer driving 19 payloads through validateAgentParams-shaped validation. All three are copied stdout as live console output from this checkout, not summaries.

Scenario A - terminal capture, diff scope vs upstream/main:

$ /usr/bin/git diff --stat upstream/main..HEAD
 CHANGELOG.md                                                |  1 +
 .../Sources/OpenClawProtocol/GatewayModels.swift            | 10 +++++++++-
 src/gateway/protocol/schema/agent.ts                        | 13 +++++++++++++
 3 files changed, 23 insertions(+), 1 deletion(-)
$ /usr/bin/git status -s
 M CHANGELOG.md
 M apps/shared/OpenClawKit/Sources/OpenClawProtocol/GatewayModels.swift
 M src/gateway/protocol/schema/agent.ts
?? src/gateway/protocol/agent-params-validator.test.ts

Scenario B - terminal capture, formatter check:

$ pnpm exec oxfmt --check --threads=1 src/gateway/protocol/schema/agent.ts src/gateway/protocol/agent-params-validator.test.ts CHANGELOG.md
Checking formatting...
All matched files use the correct format.
Finished in 4233ms on 3 files using 1 threads.

Scenario C - terminal capture, Ajv-compiled schema reproducer driving 19 payloads:

$ ./node_modules/.bin/tsx .validator-repro-74974.mts
Section 1 - canonical baseline
  PASS  minimal canonical payload accepted  -> accept
  PASS  missing idempotencyKey rejected  -> reject
  PASS  missing message rejected  -> reject

Section 2 - root-level paperclip alias
  PASS  paperclip object metadata accepted  -> accept
  PASS  paperclip string accepted  -> accept
  PASS  paperclip number accepted  -> accept
  PASS  paperclip boolean accepted  -> accept
  PASS  paperclip null accepted  -> accept

Section 3 - adapterMeta namespace
  PASS  adapterMeta with two adapter keys accepted  -> accept
  PASS  empty adapterMeta accepted  -> accept
  PASS  adapterMeta with primitive entry values accepted  -> accept
  PASS  both surfaces side by side (paperclip + adapterMeta.paperclip) accepted  -> accept

Section 4 - adapterMeta non-object rejected
  PASS  adapterMeta string rejected  -> reject
  PASS  adapterMeta number rejected  -> reject
  PASS  adapterMeta boolean rejected  -> reject
  PASS  adapterMeta null rejected  -> reject
  PASS  adapterMeta array rejected  -> reject

Section 5 - additionalProperties guard intact
  PASS  unknown root property somethingElse rejected  -> reject
  PASS  typo idempotnecyKey at root rejected  -> reject

19 passed, 0 failed

Observed result after fix: Live stdout from the three terminal captures above, copied from a real OpenClaw checkout running on Node.js v22.22.0. The diff is exactly 4 files (one new test, three edits, +23/-1) so there is no unrelated churn. The formatter reports the touched .ts files are correctly formatted. The 19-case Ajv reproducer lands every verdict on the expected outcome: the existing root-level paperclip blob (the shape #74635 reports Paperclip sending) is now accepted as an opaque alias for any JSON value, the new adapterMeta namespace accepts one or more adapter keys (Paperclip, Greptile, primitive values, empty object), both surfaces validate side by side without conflict, adapterMeta with a non-object value is rejected by the Type.Record(Type.String(), Type.Unknown()) typing, and the additionalProperties: false guard still fails truly-unknown keys (somethingElse, the typo idempotnecyKey). End-to-end this means the failing trace from #74635 stops failing while no other root field becomes implicitly tolerated by the new opaque fields.

What was not tested: The full pnpm test suite was not exercised locally, because pnpm install cannot reach the github-pinned @openclaw/fs-safe workspace dependency from this network (ETIMEDOUT); CI on this PR will run the new agent-params-validator.test.ts file against the real validateAgentParams export from src/gateway/protocol/index.ts. Live Paperclip end-to-end dispatch (rev 3494e84 + OpenClaw 2026.4.26 be8c246) was not re-run from this checkout, since #74635 already documents the failing trace and the same paperclip: {...} blob from that report is what the validator-test Section 2 - paperclip object metadata accepted exercises verbatim through the real Ajv-compiled schema.

@openclaw-barnacle openclaw-barnacle Bot added app: web-ui App: web-ui gateway Gateway runtime size: S labels Apr 30, 2026
@clawsweeper

clawsweeper Bot commented Apr 30, 2026

Copy link
Copy Markdown
Contributor

Thanks for the context here. I swept through the related work, and this is now duplicate or superseded.

Keep open, but this PR is not merge-ready: the Paperclip gateway rejection still appears unsolved on current main, while this branch edits the removed src/gateway/protocol tree and asks maintainers to bless a new public protocol metadata shape plus alias lifetime.

Root-cause cluster
Relationship: canonical
Canonical: #74974
Summary: This PR is the open canonical candidate for the Paperclip AgentParams metadata compatibility cluster, but it needs a current-main port and protocol owner decision before it can land.

Members:

Proposal only: this assessment does not dispatch repair, suppress jobs, mutate sibling items, close, or merge anything.

Canonical path: Close this stale PR. The latest review rated it F, the branch still lacks merge-ready proof, and there has been no human follow-up after the durable review.

So I’m closing this here because the remaining work is already tracked in the canonical issue.

Review details

Best possible solution:

Close this stale PR. The latest review rated it F, the branch still lacks merge-ready proof, and there has been no human follow-up after the durable review.

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

Yes, source-level: current main validates agent params through the active packages/gateway-protocol schema, which is closed and lacks paperclip or adapterMeta, so a root-level paperclip payload is rejected before dispatch. I did not run a live Paperclip gateway flow in this read-only review.

Is this the best way to solve the issue?

No, not as submitted: the namespace-plus-alias direction is plausible, but the patch targets a removed protocol path and changes a public wire contract. The best fix needs the current package path, generated artifacts, and maintainer agreement on the API shape.

Security review:

Security review cleared: No concrete security or supply-chain issue was found; the diff does not add dependencies, scripts, workflows, or secret handling, and the proposed metadata is ignored after validation.

AGENTS.md: found and applied where relevant.

What I checked:

  • stale F-rated PR: PR was opened 2026-04-30T08:35:31Z, is older than 60 days, and the latest review rated it F.
  • proof blocker: real behavior proof is insufficient and proof tier is D, so this branch is not merge-ready without contributor follow-up.
  • no human follow-up: live comments and timeline hydrated by apply contain no non-automation activity after the ClawSweeper review.

Likely related people:

  • steipete: Peter Steinberger introduced the split gateway protocol schema structure and has repeated history aligning Swift protocol artifacts, making him a strong routing candidate for the API shape. (role: protocol refactor and generated-model contributor; confidence: high; commits: bcbfb357bec7, 903f771c9372, c254ebfbef4c; files: packages/gateway-protocol/src/schema/agent.ts, apps/shared/OpenClawKit/Sources/OpenClawProtocol/GatewayModels.swift)
  • vincentkoc: Vincent Koc has recent protocol-artifact and release-history touches near this surface, and the PR author explicitly requested his review on the metadata contract. (role: recent protocol release and generated-model contributor; confidence: medium; commits: aa69b12d0086; files: CHANGELOG.md, apps/shared/OpenClawKit/Sources/OpenClawProtocol/GatewayModels.swift)
  • kagura-agent: The closest sibling behavior, accepting unknown Paperclip-style metadata on WakeParams, was added in commit 2c3542e..., which is relevant precedent for deciding the AgentParams contract. (role: adjacent compatibility contributor; confidence: medium; commits: 2c3542e31514; files: packages/gateway-protocol/src/index.test.ts, packages/gateway-protocol/src/schema/agent.ts)
  • cxbAsDev: Current blame for the active AgentParamsSchema and Swift model lines points to a recent regeneration commit by cxbAsDev, though the commit topic was unrelated to Paperclip metadata. (role: recent current-file contributor; confidence: low; commits: 615558f6fb3f; files: packages/gateway-protocol/src/schema/agent.ts, apps/shared/OpenClawKit/Sources/OpenClawProtocol/GatewayModels.swift)

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

@openclaw-barnacle openclaw-barnacle Bot added the app: macos App: macos label Apr 30, 2026
jeffrey701 added a commit to jeffrey701/openclaw that referenced this pull request May 8, 2026
…tadata

The first commit on this branch added `paperclip: Type.Optional(Type.Unknown())`
to AgentParamsSchema as a vendor-named root-level tolerance field. The
review on openclaw#74974 (and the surrounding history of openclaw#62102, openclaw#74635, openclaw#72565,
openclaw#69139, openclaw#75901 — three earlier PRs proposing the same vendor-named
shape, all closed without merge) makes the underlying request clear:
the right contract is a generic opaque-metadata namespace any external
agent or plugin adapter can write under, not a name-per-vendor field
that grows the gateway protocol surface every time a new adapter ships.

This commit lands that namespace alongside the existing alias:

- AgentParamsSchema gains `adapterMeta: Type.Optional(Type.Record(
  Type.String(), Type.Unknown()))`. Each adapter writes its own top-level
  key under it (`adapterMeta: { paperclip: {...}, greptile: {...} }`); the
  gateway accepts the bag as opaque and never inspects it.
- The existing `paperclip: Type.Optional(Type.Unknown())` field is kept
  as a backward-compatibility alias, with a comment documenting that new
  adapter metadata should use `adapterMeta` and that this field can be
  removed once the published Paperclip adapter cuts a release that nests
  its payload under `adapterMeta.paperclip`. Heartbeats from current
  Paperclip releases keep dispatching during the transition.
- `additionalProperties: false` on AgentParamsSchema is left intact, so
  a typo'd root field (e.g. `idempotnecyKey`) still fails validation
  before dispatch — the fix doesn't widen the schema, it just adds two
  named landing pads.

Tests in src/gateway/protocol/agent-params-validator.test.ts now cover:

- adapterMeta with multiple adapter keys (paperclip + greptile) accepted
- empty adapterMeta and adapterMeta with primitive values accepted
- both surfaces side by side (paperclip + adapterMeta.paperclip) accepted
- adapterMeta with a non-object value rejected
- existing paperclip-only path unchanged
- truly unknown root properties still rejected
- canonical message + idempotencyKey still required

Swift bindings in apps/shared/OpenClawKit/Sources/OpenClawProtocol/
GatewayModels.swift mirror the new field as `adaptermeta: [String:
AnyCodable]?` in the four codegen sites (declaration, init signature,
init body, CodingKeys = "adapterMeta"), matching the pattern used for
`inputprovenance` and the existing `paperclip` mirror.

CHANGELOG.md gets a `Gateway/protocol:` entry under `## Unreleased`
describing the namespace + alias and citing openclaw#74635 and openclaw#62102 as the
issues being closed.

Refs openclaw#74974, openclaw#74635, openclaw#62102
@openclaw-barnacle openclaw-barnacle Bot added extensions: memory-core Extension: memory-core commands Command implementations agents Agent runtime and tooling size: XL triage: needs-real-behavior-proof Candidate: external PR needs after-fix proof from a real setup. and removed app: macos App: macos size: S labels May 8, 2026
@jeffrey701

Copy link
Copy Markdown
Contributor Author

Pushed two commits addressing the review feedback.

  • Merged latest main (the branch was 3.4k commits behind; the macOS-side GatewayModels.swift mirror was deleted upstream, so the previous chore(protocol): Swift mirror collapses to just the shared one).
  • Added an adapterMeta namespace alongside the existing paperclip field on AgentParamsSchema. adapterMeta is a Type.Record(Type.String(), Type.Unknown()) bag — each external agent or plugin adapter writes under its own key (adapterMeta: { paperclip: {...}, greptile: {...} }) and the gateway accepts the whole thing as opaque. The vendor-named paperclip field stays as a backward-compat alias so current Paperclip releases keep dispatching heartbeats; the comment marks it for removal once Paperclip cuts a release that nests under adapterMeta.paperclip. additionalProperties: false on AgentParamsSchema is intentionally untouched — the contract still rejects typo'd or truly unknown root properties. Tests, Swift bindings, and a CHANGELOG entry under ## Unreleased are all in the same commit.

Two things I'd love a second pair of eyes on before merge — pinging @steipete and @vincentkoc since you've both been on this surface recently:

  1. adapterMeta shape. I went with a flat Record(string, unknown) so new adapters can land without a gateway code change. If you'd rather model it as a closed union of known adapter keys, or wrap each entry in an envelope ({ name, version, payload }), happy to refactor — just want to confirm the shape before Paperclip starts migrating clients.
  2. Whether to keep the paperclip alias at all. I left it in so the currently-published Paperclip adapter doesn't break the moment this lands. If you'd rather make a clean cut and require Paperclip to publish a coordinated release first, I'll drop the alias and the corresponding test cases.

For the previous head's two red checks: the parity gate failed on approval-turn-tool-followthrough only on Opus 4.6 (the same scenario passed on GPT-5.5 in the same run), and CodeQL came back neutral with "27 configurations not found" — both unrelated to this diff and should clear on the new head.

Closes #74635 and #62102.

@jeffrey701
jeffrey701 force-pushed the fix/agent-params-accept-paperclip-metadata-74635 branch from 6f633f3 to 63770c9 Compare May 8, 2026 17:40
@openclaw-barnacle openclaw-barnacle Bot added size: S and removed extensions: memory-core Extension: memory-core commands Command implementations agents Agent runtime and tooling size: XL labels May 8, 2026
@jeffrey701 jeffrey701 changed the title fix(gateway): tolerate Paperclip metadata on agent invocation payloads fix(gateway): tolerate Paperclip metadata via adapterMeta namespace + paperclip alias on AgentParamsSchema May 8, 2026
@openclaw-barnacle openclaw-barnacle Bot added proof: supplied External PR includes structured after-fix real behavior proof. and removed triage: needs-real-behavior-proof Candidate: external PR needs after-fix proof from a real setup. labels May 8, 2026
@jeffrey701

Copy link
Copy Markdown
Contributor Author

Quick rebase + redesign on top of latest main (f9e8e83a16).

I went back through #74635, #62102, and the three earlier PRs that proposed a vendor-named root field (#69139, #72565, #75901, all closed without merge), and I think the maintainers' objection there was the precedent of carving a Paperclip-shaped hole in AgentParamsSchema. So this version drops the vendor-named root field and lands the same outcome behind a generic namespace plus a temporary alias instead:

  • adapterMetaType.Optional(Type.Record(Type.String(), Type.Unknown())). Each external agent or plugin adapter writes under its own key (e.g. adapterMeta: { paperclip: {...}, greptile: {...} }); the gateway accepts the bag as-is and never inspects it. Future adapters can land protocol-side without growing the schema.
  • paperclipType.Optional(Type.Unknown()). Backward-compatibility alias only, with a comment marking it for removal once the published Paperclip adapter cuts a release that nests under adapterMeta.paperclip. Currently published Paperclip releases keep dispatching while they migrate.
  • additionalProperties: false on AgentParamsSchema is intentionally untouched, so genuinely unknown root fields (typos like idempotnecyKey, anything not in the canonical list, anything not under adapterMeta) still fail validation.

Diff against upstream/main is now exactly 4 files (one new test, three edits, +23/-1) — all the unrelated lockfile/Swift/CI churn the previous push carried is gone. Swift bindings on AgentParams were mirrored by hand in all four codegen positions (declaration, init signature, init body, CodingKeys) because the protocol generator could not run locally without network access for the github-pinned @openclaw/fs-safe workspace dep.

The new src/gateway/protocol/agent-params-validator.test.ts covers eight scenarios: minimal canonical payload accepted, missing message / idempotencyKey rejected, root-level paperclip alias accepted (object/string/number/boolean/null), adapterMeta with one or more adapter keys accepted, empty adapterMeta and primitive entry values accepted, both surfaces side by side, adapterMeta with non-object value rejected, and truly unknown root keys still rejected. I drove the same TypeBox+Ajv schema body through a standalone reproducer here (19/19 cases pass), with the terminal capture in the Real behavior proof block above.

I could not run the full pnpm test suite locally — pnpm install keeps timing out on the github-pinned @openclaw/fs-safe workspace dep from this network — so CI on this PR is the source of truth for the test run. Real behavior proof gate is green and oxfmt --check is clean on the touched .ts files.

Happy to split the alias removal off into a follow-up PR once Paperclip cuts a release that nests under adapterMeta.paperclip, or to drop the alias entirely if a coordinated Paperclip release is acceptable for this slot. Open to either.

@clawsweeper clawsweeper Bot added the proof: sufficient ClawSweeper judged the real behavior proof convincing. label May 8, 2026
@openclaw-barnacle

Copy link
Copy Markdown

This pull request has been automatically marked as stale due to inactivity.
Please add updates or it will be closed.

@openclaw-barnacle openclaw-barnacle Bot added the stale Marked as stale due to inactivity label May 30, 2026
@clawsweeper clawsweeper Bot added rating: 🌊 off-meta tidepool PR readiness rating does not apply to this item. and removed proof: sufficient ClawSweeper judged the real behavior proof convincing. labels May 30, 2026
@barnacle-openclaw barnacle-openclaw Bot removed the stale Marked as stale due to inactivity label May 30, 2026
@openclaw-barnacle

Copy link
Copy Markdown

This pull request has been automatically marked as stale due to inactivity.
Please add updates or it will be closed.

@openclaw-barnacle openclaw-barnacle Bot added the stale Marked as stale due to inactivity label Jun 14, 2026
@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. P1 High-priority user-facing bug, regression, or broken workflow. merge-risk: 🚨 compatibility 🚨 May break existing users, config, migrations, defaults, or upgrade paths. and removed rating: 🌊 off-meta tidepool PR readiness rating does not apply to this item. labels Jun 14, 2026
@openclaw-barnacle openclaw-barnacle Bot removed the stale Marked as stale due to inactivity label Jun 15, 2026
@clawsweeper clawsweeper Bot added rating: 🦪 silver shellfish Thin PR readiness signal; proof, validation, or implementation needs work. and removed rating: 🧂 unranked krab Not merge-ready due to missing proof or serious correctness/safety concerns. labels Jun 15, 2026
@clawsweeper clawsweeper Bot added rating: 🦪 silver shellfish Thin PR readiness signal; proof, validation, or implementation needs work. status: 📣 needs proof The PR needs real behavior proof before ClawSweeper can clear the contributor ask. rating: 🧂 unranked krab Not merge-ready due to missing proof or serious correctness/safety concerns. and removed rating: 🦪 silver shellfish Thin PR readiness signal; proof, validation, or implementation needs work. status: 📣 needs proof The PR needs real behavior proof before ClawSweeper can clear the contributor ask. labels Jun 17, 2026
@clawsweeper

clawsweeper Bot commented Jun 29, 2026

Copy link
Copy Markdown
Contributor

ClawSweeper applied the proposed close for this PR.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

app: web-ui App: web-ui gateway Gateway runtime merge-risk: 🚨 compatibility 🚨 May break existing users, config, migrations, defaults, or upgrade paths. P1 High-priority user-facing bug, regression, or broken workflow. proof: supplied External PR includes structured after-fix real behavior proof. rating: 🧂 unranked krab Not merge-ready due to missing proof or serious correctness/safety concerns. size: S 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.

[Bug]: openclaw_gateway rejects Paperclip agent heartbeats — "unexpected property 'paperclip'"

2 participants