Skip to content

feat: pair mobile devices from the Control UI#94672

Merged
steipete merged 7 commits into
openclaw:mainfrom
bkudiess:feat/device-pair-setup-qr
Jul 4, 2026
Merged

feat: pair mobile devices from the Control UI#94672
steipete merged 7 commits into
openclaw:mainfrom
bkudiess:feat/device-pair-setup-qr

Conversation

@bkudiess

@bkudiess bkudiess commented Jun 18, 2026

Copy link
Copy Markdown
Contributor

Related: #94661

What Problem This Solves

The OpenClaw iOS/Android apps can scan a Gateway setup QR, but the Control UI could not create one. Operators had to leave the browser and use openclaw qr or the optional Telegram device-pair plugin; the UI exposed only the separate device-management surface.

Why This Change Was Made

This adds the hidden, operator.admin-scoped device.pair.setupCode RPC from the original contribution and uses it for a guided Nodes → Pair mobile device flow. The RPC reuses the canonical pairing/setup-code helpers; the Control UI adds no second token or QR format. The Devices card now appears at the top of Nodes, the dialog handles scan/copy/retry states, and the docs lead with the browser flow.

The setup code contains a short-lived bootstrap credential. The RPC returns only the opaque setup code plus non-secret connection metadata, is not advertised, and keeps the configured device-pair public URL fallback used by the existing CLI/plugin flow.

User Impact

An already paired administrator can now connect a phone without opening a terminal:

  1. Open Nodes in the Control UI.
  2. Click Pair mobile device.
  3. In the mobile app, open Settings → Gateway and scan the QR (or paste the setup code).
  4. The official app connects automatically. If Devices shows a pending request, review its role and scopes before approving it.

Sessions without operator.admin cannot create setup codes. Remote pairing still requires a secure/reachable Gateway URL (wss://, such as Tailscale Serve/Funnel); private LAN and loopback retain their existing allowances.

Evidence

  • Visual proof: mocked before/after screenshots and flow recording, captured with deterministic data and no credentials or private endpoints
  • Focused Gateway + Control UI tests: node scripts/run-vitest.mjs src/gateway/server-methods/device-pair-setup.test.ts ui/src/ui/views/nodes.devices.test.ts
  • Mocked browser E2E: node scripts/run-vitest.mjs run --config test/vitest/vitest.ui-e2e.config.ts --configLoader runner ui/src/ui/e2e/mobile-pairing.e2e.test.ts
  • i18n: pnpm ui:i18n:check
  • Docs: focused MDX check passed; full docs/link gate runs in Testbox
  • Broad changed-file/type/lint gate: check:changed passed on Blacksmith Testbox tbx_01kwp7yb60j5eqj6te8fyzmf76 (workflow run)
  • Build: production pnpm build passed in the same Testbox run
  • GitHub CI: final selected-workflow rerun passed every job, including docs, iOS build, types, lint, QA Smoke, and all Node shards (run attempt 2)

Not tested: a physical iPhone scan. The E2E verifies the actual Control UI route, Gateway request, PNG QR rendering, and replacement-code action against the deterministic mocked Gateway.

@openclaw-barnacle openclaw-barnacle Bot added app: web-ui App: web-ui gateway Gateway runtime size: M labels Jun 18, 2026
@openclaw-barnacle openclaw-barnacle Bot added the triage: mock-only-proof Candidate: PR proof only shows tests, mocks, snapshots, lint, typecheck, or CI. label Jun 18, 2026
@clawsweeper

clawsweeper Bot commented Jun 18, 2026

Copy link
Copy Markdown
Contributor

Codex review: needs real behavior proof before merge. Reviewed July 4, 2026, 12:37 PM ET / 16:37 UTC.

Summary
Adds a hidden admin-scoped device.pair.setupCode Gateway RPC, wires a Nodes -> Pair mobile device Control UI dialog around it, and updates protocol models, docs, i18n, and focused tests.

Reproducibility: not applicable. as a feature PR: current main lacks the Control UI/RPC path, and the PR adds it rather than fixing a reproducible broken existing contract.

Review metrics: 1 noteworthy metric.

  • Credential-minting RPC: 1 hidden operator.admin RPC added. The new method issues setup-code bootstrap credentials, so security-boundary review matters even though the method is not advertised.

Stored data model
Persistent data-model change detected: migration/backfill/repair: docs/ci.md, serialized state: extensions/copilot/src/byok-proxy.test.ts, serialized state: ui/src/ui/e2e/mobile-pairing.e2e.test.ts, unknown-truncated-pull-files, vector/embedding metadata: docs/channels/pairing.md, vector/embedding metadata: docs/cli/qr.md. Confirm migration or upgrade compatibility proof before merge.

Merge readiness
Overall: 🦪 silver shellfish
Proof: 🦪 silver shellfish
Patch quality: 🐚 platinum hermit
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:

  • Post redacted live proof from a real Gateway showing the Control UI setup-code flow and mobile app scan or paste result.
  • Refresh the branch against current main before final maintainer approval.

Proof guidance:

  • [P1] Needs real behavior proof before merge: The available proof is mocked browser evidence: the inspected screenshot shows the dialog and QR, but the PR does not include a real Gateway plus mobile scan or setup-code paste run. 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.

Mantis proof suggestion
A visible Control UI pairing flow with missing real behavior proof would benefit from a short live visual validation. A maintainer can ask Mantis to capture proof by posting this exact PR comment:

@openclaw-mantis visual task: verify Nodes -> Pair mobile device opens a QR/setup-code dialog against a real Gateway and records copy/new-code plus mobile scan or paste behavior.

Risk before merge

  • [P1] The PR adds a hidden admin RPC that mints a short-lived bootstrap credential; the code is admin-scoped and non-advertised, but green CI cannot by itself settle the security-boundary decision.
  • [P1] Real behavior proof is mock-only: the visible screenshots show deterministic Control UI/Gateway mock data, and no real Gateway plus mobile scan or setup-code paste proof is posted.
  • [P1] The branch is behind current main and carries broad sync drift, so maintainers should refresh the merge view before final approval.

Maintainer options:

  1. Require live pairing proof before merge (recommended)
    Ask for a redacted live run showing the Control UI against a real Gateway, setup-code creation, copy/new-code behavior, and a mobile app scan or setup-code paste outcome.
  2. Accept the mocked proof explicitly
    A maintainer can choose to accept the deterministic browser proof for the UI portion while owning the unproven physical-device path.

Next step before merge

  • [P1] Automation should not take over because the remaining blocker is real behavior proof plus maintainer security acceptance, not a narrow code repair.

Security
Cleared: No concrete security vulnerability was found in the diff; the new credential-minting path is hidden and admin-scoped, but remains a merge-risk surface needing maintainer acceptance.

Review details

Best possible solution:

Land the admin-scoped Control UI pairing flow only after a maintainer accepts the setup-code security boundary and the PR includes redacted live proof against a real Gateway/mobile pairing path.

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

Not applicable as a feature PR: current main lacks the Control UI/RPC path, and the PR adds it rather than fixing a reproducible broken existing contract.

Is this the best way to solve the issue?

Yes, the shape is the maintainable layer: reuse the existing setup-code helper through a hidden admin-scoped Gateway RPC and keep the browser as a renderer, but the merge still needs live proof and security acceptance.

AGENTS.md: found and applied where relevant.

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

Label changes

Label changes:

  • add merge-risk: 🚨 security-boundary: Merging adds a new path for an authenticated administrator to mint setup-code bootstrap credentials and expose them in the browser UI.
  • add rating: 🦪 silver shellfish: Overall readiness is 🦪 silver shellfish; proof is 🦪 silver shellfish and patch quality is 🐚 platinum hermit.
  • add status: 📣 needs proof: The PR needs real behavior proof before ClawSweeper can clear the contributor ask. Needs real behavior proof before merge: The available proof is mocked browser evidence: the inspected screenshot shows the dialog and QR, but the PR does not include a real Gateway plus mobile scan or setup-code paste run. 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.

Label justifications:

  • P2: This is a normal-priority feature improvement for mobile pairing with limited blast radius, not a current crash, data loss, or outage.
  • merge-risk: 🚨 security-boundary: Merging adds a new path for an authenticated administrator to mint setup-code bootstrap credentials and expose them in the browser UI.
  • rating: 🦪 silver shellfish: Overall readiness is 🦪 silver shellfish; proof is 🦪 silver shellfish and patch quality is 🐚 platinum hermit.
  • status: 📣 needs proof: The PR needs real behavior proof before ClawSweeper can clear the contributor ask. Needs real behavior proof before merge: The available proof is mocked browser evidence: the inspected screenshot shows the dialog and QR, but the PR does not include a real Gateway plus mobile scan or setup-code paste run. 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

What I checked:

  • Current main gap: Current main has no device.pair.setupCode, DevicePairSetupCode, or Pair mobile device implementation, so the central feature is not already implemented on main. (280e8d487627)
  • Hidden admin RPC descriptor: The PR registers device.pair.setupCode as operator.admin and advertise: false, which matches the stated security boundary for a setup-code creator. (src/gateway/methods/core-descriptors.ts:177, 64342046638a)
  • RPC reuses canonical pairing helper: The handler validates params, reads the runtime config, preserves the configured device-pair public URL fallback, calls resolvePairingSetupFromConfig, encodes the setup code, and returns only the setup code plus non-secret metadata. (src/gateway/server-methods/device-pair-setup.ts:31, 64342046638a)
  • Underlying helper mints bootstrap credential: The existing setup-code helper issues a short-lived bootstrap token using PAIRING_SETUP_BOOTSTRAP_PROFILE, making this PR a security-boundary change even though the method is hidden and admin-scoped. (src/pairing/setup-code.ts:416, 280e8d487627)
  • Control UI request path: The Control UI controller opens the pairing setup state and requests device.pair.setupCode, with stale-response guards for replaced Gateway clients and closed dialogs. (ui/src/ui/controllers/devices.ts:62, 64342046638a)
  • Control UI rendering path: The dialog renders the QR image when present, exposes copy and replacement-code actions, and keeps a manual setup-code fallback inside details. (ui/src/ui/views/nodes-pairing.ts:68, 64342046638a)

Likely related people:

  • steipete: Authored the PR follow-up commits for the Control UI flow and docs, is assigned on the live PR, and has recent current-main history on Control UI device docs and gateway method descriptors. (role: recent area contributor follow-up and UI/docs area contributor; confidence: high; commits: 089f8c1f6fce, 64342046638a, 12a56d4d46dd; files: ui/src/ui/controllers/devices.ts, ui/src/ui/views/nodes.ts, docs/web/control-ui.md)
  • Josh Avant: Recent current-main work changed route-aware LAN pairing URLs and the related QR/chat pairing path, both adjacent to setup-code generation and rendering. (role: adjacent pairing URL and QR behavior contributor; confidence: medium; commits: ba5244c18996, 052dc59526a2; files: src/pairing/setup-code.ts, docs/channels/pairing.md, ui/src/ui/chat/grouped-render.ts)
  • Val Alexander: Authored the current LAN/setup-code pairing policy fix that shaped the secure URL and iOS pairing behavior this PR reuses. (role: setup-code and iOS pairing policy contributor; confidence: medium; commits: 36df0d93b93a; files: src/pairing/setup-code.ts, apps/shared/OpenClawKit/Sources/OpenClawProtocol/GatewayModels.swift)
  • Pavan Kumar Gondhi: Authored prior bootstrap pairing hardening around approval and scope changes, directly adjacent to the short-lived credential this RPC mints. (role: bootstrap-token security contributor; confidence: medium; commits: b17e77a22bf4, 2d00bedc1e73; files: src/infra/device-bootstrap.ts, src/shared/device-bootstrap-profile.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 (2 earlier review cycles)
  • reviewed 2026-06-22T03:18:16.844Z sha cf313b1 :: needs real behavior proof before merge. :: [P2] Preserve the configured public URL fallback | [P3] Document the setup-code RPC contract
  • reviewed 2026-07-04T11:42:10.126Z sha 68009e8 :: needs real behavior proof before merge. :: none

@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: 🚨 security-boundary 🚨 May affect sandboxing, authorization, credentials, or sensitive data. labels Jun 18, 2026
@bkudiess
bkudiess force-pushed the feat/device-pair-setup-qr branch from a02aadf to 1945f20 Compare June 18, 2026 20:28
@bkudiess

Copy link
Copy Markdown
Contributor Author

Adversarial review (GPT-5.5) pass — addressed two real findings on this PR:

  1. Privilege escalation (fixed). The method was gated at operator.pairing, but the minted setup-code bootstrap profile hands off broader operator scopes (operator.read / write / approvals / talk.secrets). A operator.pairing-only caller could therefore mint a code granting scopes it doesn't hold. Changed the gate to operator.admin — which the companion that drives onboarding already holds (the wizard.* methods it uses are all operator.admin), so the use case is unaffected while the escalation is closed.

  2. Result-size safety (fixed). qrDataUrl is capped at 16 KB in the result schema, but a pathological publicUrl could render a larger QR, and the response path doesn't validate the result schema. The handler now omits an oversized QR (returning just setupCode, which the client can render itself) so the response always satisfies the schema. Added a regression test.

Unchanged guarantees: auth is a label only and the gateway credential / bootstrap token is never a response field.

Re-validated on latest main: handler tests (6, +1 new) + descriptor-drift guard green; tsgo:core exit 0; oxlint + oxfmt clean.

The OpenClaw mobile/companion app scans a pairing setup code to connect to the gateway, but that code + QR could only be produced by the openclaw qr CLI (ASCII to stdout). Non-terminal clients driving onboarding had no way to display the connect QR.

Add a device.pair.setupCode gateway method that reuses resolvePairingSetupFromConfig + encodePairingSetupCode + renderQrPngDataUrl to return { setupCode, qrDataUrl?, gatewayUrl, auth, urlSource }. The embedded setup code mints a short-lived bootstrap token that hands off broad operator scopes (read/write/approvals/talk.secrets), so the method requires operator.admin (matching the wizard methods a companion already uses) and is not advertised. auth is a label only; the gateway credential is never returned, and an oversized QR is omitted so the response always satisfies the result schema.

Refs openclaw#94661.

Co-authored-by: Copilot <[email protected]>
@steipete steipete changed the title feat(gateway): add device.pair.setupCode RPC for connect QR feat: pair mobile devices from the Control UI Jul 4, 2026
@openclaw-barnacle openclaw-barnacle Bot added docs Improvements or additions to documentation app: ios App: ios scripts Repository scripts size: XL and removed size: M labels Jul 4, 2026
@steipete

steipete commented Jul 4, 2026

Copy link
Copy Markdown
Contributor

Maintainer follow-up complete on 68009e83109.

What changed:

  • Added the Nodes → Pair mobile device Control UI flow around the contributed device.pair.setupCode RPC.
  • Preserved CLI/plugin public-URL precedence and made QR rendering failure non-fatal.
  • Matched the official mobile-client contract: setup-code clients auto-connect; pending approval remains only for mismatched/non-official clients.
  • Cleared setup credentials across dialog, disconnect, and Gateway-client lifecycle transitions, including stale-response guards.
  • Updated pairing, iOS, Control UI, and Gateway protocol docs and refreshed generated locale fallback strings.
  • Corrected the CLI QR page so official-client auto-connect and manual-approval fallback agree across every pairing guide.

Focused proof:

node scripts/run-vitest.mjs src/gateway/server-methods/device-pair-setup.test.ts ui/src/ui/controllers/devices.test.ts ui/src/ui/views/nodes.devices.test.ts ui/src/ui/app-gateway.node.test.ts ui/src/ui/app-lifecycle.node.test.ts
node scripts/run-vitest.mjs run --config test/vitest/vitest.ui-e2e.config.ts --configLoader runner ui/src/ui/e2e/mobile-pairing.e2e.test.ts
node scripts/run-vitest.mjs test/scripts/control-ui-i18n.test.ts ui/src/ui/app-gateway-chat-load.node.test.ts ui/src/ui/app-gateway.sessions.node.test.ts
pnpm ui:i18n:check
pnpm docs:check-links

Broad proof: Blacksmith Testbox tbx_01kwp7yb60j5eqj6te8fyzmf76 passed check:changed and a production build (workflow run). Fresh autoreview found no accepted/actionable findings.

Known gap: no physical-iPhone scan. Mocked Control UI E2E covers the route, Gateway request, PNG QR, copy/replacement flow, and auto-connect guidance. Before/after screenshots plus a short recording are captured locally; attachment publishing is blocked because this checkout has no configured Crabbox artifact broker and the existing-Chrome bridge is offline.

CI follow-up: the first check-docs run correctly found a stale generated docs map. Regenerated it in 4880ace8e07; node scripts/generate-docs-map.mjs --check and git diff --check now pass, and the fresh docs check passed.

Initial final-head CI reached 68 passes, then exposed two unrelated broad-shard failures: a current-main .crabbox.yaml/test expectation mismatch and an MCP catalog-generation flake outside this PR's diff. The exact MCP file passed locally (39/39). A targeted rerun started workflow attempt 2; GitHub reran the selected workflow and every job passed, including docs, iOS build, types, lint, QA Smoke, and all Node shards (run attempt 2). The final 68009e83109 follow-up is docs-only and also passed focused MDX, generated-map, and diff checks locally.

@steipete steipete self-assigned this Jul 4, 2026
@openclaw-barnacle openclaw-barnacle Bot added cli CLI command changes commands Command implementations docker Docker and sandbox tooling agents Agent runtime and tooling extensions: copilot labels Jul 4, 2026
@github-actions github-actions Bot added the dependencies-changed PR changes dependency-related files label Jul 4, 2026
@github-actions

github-actions Bot commented Jul 4, 2026

Copy link
Copy Markdown
Contributor

Dependency Guard

This PR changes dependency-related files. Maintainers should confirm these changes are intentional.

Changed files:

  • docs/snippets/plugin-publish/minimal-package.json
  • npm-shrinkwrap.json
  • package.json
  • pnpm-lock.yaml

Maintainer follow-up:

  • Review whether the dependency changes are intentional.
  • Inspect resolved package deltas when lockfile, shrinkwrap, or workspace dependency policy changes are present.
  • Treat package-lock.json and npm-shrinkwrap.json diffs as security-review surfaces.
  • Run pnpm deps:changes:report -- --base-ref origin/main --markdown /tmp/dependency-changes.md --json /tmp/dependency-changes.json locally for detailed release-style evidence.

@github-actions

github-actions Bot commented Jul 4, 2026

Copy link
Copy Markdown
Contributor

Dependency graph change authorized

This PR includes dependency graph changes. A repository admin or member of @openclaw/openclaw-secops authorized this exact head SHA with /allow-dependencies-change.

  • Approved SHA: 64342046638aba18ba56f2c965bbfb6da1c94674
  • Approved by: @steipete
  • Reason: Maintainer-prepared cross-repo sync; dependency files match current main exactly and add no dependency graph delta.

A later push changes the PR head SHA and requires a fresh security approval.

@steipete

steipete commented Jul 4, 2026

Copy link
Copy Markdown
Contributor

/allow-dependencies-change Maintainer-prepared cross-repo sync; dependency files match current main exactly and add no dependency graph delta.

@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. merge-risk: 🚨 security-boundary 🚨 May affect sandboxing, authorization, credentials, or sensitive data. and removed rating: 🧂 unranked krab Not merge-ready due to missing proof or serious correctness/safety concerns. merge-risk: 🚨 security-boundary 🚨 May affect sandboxing, authorization, credentials, or sensitive data. status: 📣 needs proof The PR needs real behavior proof before ClawSweeper can clear the contributor ask. labels Jul 4, 2026
@steipete
steipete merged commit 129e0a8 into openclaw:main Jul 4, 2026
129 of 137 checks passed
@steipete

steipete commented Jul 4, 2026

Copy link
Copy Markdown
Contributor

Merged via squash.

@steipete

steipete commented Jul 4, 2026

Copy link
Copy Markdown
Contributor

Additional visual proof — corrected light-theme states from the merged behavior; deterministic mock data only, with no credentials or private endpoints.

04-light-after-devices 05-light-pairing-dialog

github-actions Bot pushed a commit to Desicool/openclaw that referenced this pull request Jul 5, 2026
* feat(gateway): add device.pair.setupCode RPC for connect QR

The OpenClaw mobile/companion app scans a pairing setup code to connect to the gateway, but that code + QR could only be produced by the openclaw qr CLI (ASCII to stdout). Non-terminal clients driving onboarding had no way to display the connect QR.

Add a device.pair.setupCode gateway method that reuses resolvePairingSetupFromConfig + encodePairingSetupCode + renderQrPngDataUrl to return { setupCode, qrDataUrl?, gatewayUrl, auth, urlSource }. The embedded setup code mints a short-lived bootstrap token that hands off broad operator scopes (read/write/approvals/talk.secrets), so the method requires operator.admin (matching the wizard methods a companion already uses) and is not advertised. auth is a label only; the gateway credential is never returned, and an oversized QR is omitted so the response always satisfies the result schema.

Refs openclaw#94661.

Co-authored-by: Copilot <[email protected]>

* feat(ui): pair mobile devices from Control UI

* docs: refresh generated docs map

* docs: clarify mobile QR auto-connect

* docs: clarify mobile QR auto-connect

* docs: clarify mobile QR auto-connect

---------

Co-authored-by: Barbara Kudiess <[email protected]>
Co-authored-by: Copilot <[email protected]>
Co-authored-by: Peter Steinberger <[email protected]>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

agents Agent runtime and tooling app: ios App: ios app: web-ui App: web-ui channel: discord Channel integration: discord channel: matrix Channel integration: matrix channel: mattermost Channel integration: mattermost channel: slack Channel integration: slack channel: whatsapp-web Channel integration: whatsapp-web channel: zalouser Channel integration: zalouser cli CLI command changes commands Command implementations dependencies-changed PR changes dependency-related files docker Docker and sandbox tooling docs Improvements or additions to documentation extensions: copilot gateway Gateway runtime 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. scripts Repository scripts size: XL status: 📣 needs proof The PR needs real behavior proof before ClawSweeper can clear the contributor ask. triage: mock-only-proof Candidate: PR proof only shows tests, mocks, snapshots, lint, typecheck, or CI.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants