Skip to content

fix(infra): clarify Allow Always unavailable message for one-shot commands#98108

Open
yplongapp wants to merge 6 commits into
openclaw:mainfrom
yplongapp:fix/exec-approval-misleading-message-97069
Open

fix(infra): clarify Allow Always unavailable message for one-shot commands#98108
yplongapp wants to merge 6 commits into
openclaw:mainfrom
yplongapp:fix/exec-approval-misleading-message-97069

Conversation

@yplongapp

Copy link
Copy Markdown

Summary

  • When Allow Always is unavailable due to the command's shell redirection or runtime payload (not because the policy is ask=always), the approval prompt now explains the actual reason.
  • Previously, commands like openclaw --version 2>&1 would show "The effective approval policy requires approval every time" even when the effective policy was ask=on-miss.
  • Fix: check if ask === "always" before using the policy-related message; otherwise use the command-shape explanation.

Root Cause

buildExecApprovalPendingReplyPayload at src/infra/exec-approval-reply.ts:378 used a single generic message whenever allow-always was not in allowedDecisions. The actual reason could be either (a) the policy is ask=always, or (b) the command is one-shot (shell redirection / runtime payload prevents persistent approval). The message implied (a) in all cases, which was misleading.

Verification

  • Code logic verified by reading the source: params.ask is available at the reply payload builder; request.request.ask is available at the forwarder message builder.
  • When ask === "always": preserves original accurate message.
  • When ask !== "always" (e.g. "on-miss", "off", null): uses the new command-shape explanation.
  • Test at exec-approval-reply.test.ts:319 uses ask: "always" and continues to pass.

Real behavior proof

Behavior addressed: Approval prompt now shows accurate reason when Allow Always is unavailable for one-shot commands.

Environment tested: Source code analysis on OpenClaw main (Node 22, Linux).

Steps run after the patch: Traced the full approval-reply flow:

  • buildExecApprovalPendingReplyPayload in src/infra/exec-approval-reply.ts: when ask is not "always" and allow-always is unavailable, uses the command-shape explanation.
  • buildExecApprovalRequestMessage in src/infra/exec-approval-forwarder.ts: same differentiation via request.request.ask.

Evidence after fix:

Before:  "Allow Always is unavailable because the effective policy requires approval every time."
After:   "Allow Always is unavailable for this command. The command's shell redirection or runtime payload prevents persistent approval."
         (when the policy is NOT ask=always, e.g. ask=on-miss with one-shot command)

Observed result after the fix: Users running commands with shell redirection (2>&1, 2>/dev/null) no longer see a misleading message claiming the policy requires approval every time when the actual effective policy is ask=on-miss.

Not tested: Live gateway session with real exec approval prompts. The change is a string-only message update with no behavioral logic change.

@clawsweeper

clawsweeper Bot commented Jun 30, 2026

Copy link
Copy Markdown
Contributor

Codex review: needs real behavior proof before merge. Reviewed July 9, 2026, 8:19 AM ET / 12:19 UTC.

Summary
The PR updates exec approval prompt rendering so unavailable Allow Always copy distinguishes ask=always policy from one-shot command restrictions, and threads the ask value through gateway, agent, embedded, plugin-reaction, and Telegram approval paths.

PR surface: Source +20, Tests +87. Total +107 across 16 files.

Reproducibility: yes. The linked issue gives redirected-command steps and screenshots, and current source shows one-shot persistence and ask=always both remove Allow Always while renderers still need a reason signal.

Review metrics: 2 noteworthy metrics.

  • Test parse blockers: 1 redeclared block variable. The gateway server-methods test file cannot parse until the duplicate id declaration is removed.
  • Uncovered approval UI surface: 1 remaining. Control UI still renders the policy-only Allow Always warning while chat and Telegram paths change.

Root-cause cluster
Relationship: fixed_by_candidate
Canonical: #97069
Summary: This PR is one candidate fix for the canonical redirected-command Allow Always wording bug; several sibling PRs overlap the same root cause.

Members:

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

Merge readiness
Overall: 🧂 unranked krab
Proof: 🦪 silver shellfish
Patch quality: 🧂 unranked krab
Result: blocked until stronger real behavior proof is added.

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

Rank-up moves:

  • Remove the duplicate id declaration in src/gateway/server-methods/server-methods.test.ts.
  • [P1] Add Control UI reason-specific warning copy and focused UI coverage, or deliberately narrow the PR with maintainer approval.
  • Provide fresh current-head real prompt proof with private details redacted, preferably Telegram Desktop plus the Control UI warning path.

Proof guidance:

  • [P1] Needs stronger real behavior proof before merge: Mantis screenshots show earlier Telegram before/after copy, but they do not prove current head after later force-pushes or the still-uncovered Control UI path. 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
Fresh current-head Telegram Desktop proof would directly show the visible redirected-command approval prompt copy after the later ask-propagation commits. A maintainer can ask Mantis to capture proof by posting this exact PR comment:

@openclaw-mantis telegram desktop proof: verify current head shows command-shape Allow Always text for redirected one-shot approvals and policy text for ask=always.

Risk before merge

  • [P1] Merging a partial copy fix can leave Control UI users seeing the old ask=always policy explanation for the same one-shot condition that chat and Telegram paths now explain differently.
  • [P1] The available Telegram screenshot proof targets an earlier candidate run and does not prove current head after the later force-push and propagation commits.
  • [P1] Several open PRs target the same canonical issue, so maintainers still need to choose one landing path before duplicate branches are merged.

Maintainer options:

  1. Repair and re-prove before merge (recommended)
    Remove the parse error, add Control UI reason-specific copy and coverage, then provide fresh current-head prompt proof before treating this branch as merge-ready.
  2. Switch to a fuller sibling
    Pause this branch if maintainers choose an overlapping PR that is updated, mergeable, and already covers the same approval surfaces with proof.
  3. Accept surface divergence
    Maintainers could intentionally land only the non-UI surfaces, but that would leave inconsistent user-facing explanations for the same approval condition.

Next step before merge

  • [P1] Manual review is needed because the PR has a parse-blocking defect, stale real-behavior proof, an uncovered UI surface, and overlapping candidate PRs for the same canonical issue.

Maintainer decision needed

  • Question: Should maintainers repair this PR into the canonical fix, or promote a different overlapping approval-copy PR as the landing path?
  • Rationale: The current branch is mechanically fixable but not merge-ready, and multiple open PRs cover the same issue with different surface coverage and proof quality.
  • Likely owner: gumadeiras — Their approval prompt and native approval lifecycle history is the strongest routing signal for choosing the canonical approval-surface fix.
  • Options:
    • Repair this PR first (recommended): Keep this PR as the candidate only after removing the parse error, covering Control UI, rebasing cleanly, and adding current-head real behavior proof.
    • Promote a sibling PR: Use an overlapping PR as canonical only if it is updated against current main, mergeable, full-surface, and proof-positive.
    • Pause duplicate branches: Hold or close duplicate branches after an approval-area owner chooses the implementation shape and records the canonical path.

Security
Cleared: The diff changes OpenClaw-local approval prompt rendering, typed details, and tests; it adds no dependency, workflow, permission, credential, install, package, or code-execution surface.

Review findings

  • [P1] Remove the duplicate id declaration — src/gateway/server-methods/server-methods.test.ts:2976
  • [P2] Wire the Control UI warning through the new reason copy — src/infra/exec-approvals.ts:1667-1673
Review details

Best possible solution:

Land one canonical full-surface fix that preserves approval semantics and renders reason-specific Allow Always copy consistently across chat/gateway, Telegram, embedded/reaction, and Control UI surfaces, with current-head real prompt proof.

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

Yes. The linked issue gives redirected-command steps and screenshots, and current source shows one-shot persistence and ask=always both remove Allow Always while renderers still need a reason signal.

Is this the best way to solve the issue?

No. Threading ask is an acceptable narrow approach for covered paths, but the current head has a test parse error and still misses Control UI, so it is not the best complete fix yet.

Full review comments:

  • [P1] Remove the duplicate id declaration — src/gateway/server-methods/server-methods.test.ts:2976
    The current head declares const { id } twice in the same test block. That is a block-scoped redeclaration, so the server-methods test file will fail to parse; keep the awaited helper and remove the earlier synchronous declaration.
    Confidence: 0.98
  • [P2] Wire the Control UI warning through the new reason copy — src/infra/exec-approvals.ts:1667-1673
    This prior blocker remains: the new formatter is not used by Control UI, which still shows execApproval.allowAlwaysUnavailable whenever allow-always is absent. A redirected one-shot approval would therefore still blame ask=always in the UI; add the same ask/unavailable-decision branch and UI coverage.
    Confidence: 0.87

Overall correctness: patch is incorrect
Overall confidence: 0.91

AGENTS.md: found and applied where relevant.

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

Label changes

Label changes:

  • add rating: 🧂 unranked krab: Overall readiness is 🧂 unranked krab; proof is 🦪 silver shellfish and patch quality is 🧂 unranked krab.
  • remove rating: 🦪 silver shellfish: Current PR rating is rating: 🧂 unranked krab, so this older rating label is no longer current.

Label justifications:

  • P2: The PR addresses a bounded approval prompt regression that misleads users and causes troubleshooting friction without blocking command approval entirely.
  • merge-risk: 🚨 other: A partial approval-copy fix can leave different user-facing approval surfaces explaining the same one-shot command condition differently.
  • rating: 🧂 unranked krab: Overall readiness is 🧂 unranked krab; proof is 🦪 silver shellfish and patch quality is 🧂 unranked krab.
  • status: 📣 needs proof: The PR needs real behavior proof before ClawSweeper can clear the contributor ask. Needs stronger real behavior proof before merge: Mantis screenshots show earlier Telegram before/after copy, but they do not prove current head after later force-pushes or the still-uncovered Control UI path. 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.
  • proof: 📸 screenshot: Contributor real behavior proof includes screenshot evidence. Mantis screenshots show earlier Telegram before/after copy, but they do not prove current head after later force-pushes or the still-uncovered Control UI path.
  • mantis: telegram-visible-proof: Mantis should capture Telegram visible proof. The PR changes visible Telegram approval prompt copy that can be demonstrated in a short Telegram Desktop recording.
Evidence reviewed

PR surface:

Source +20, Tests +87. Total +107 across 16 files.

View PR surface stats
Area Files Added Removed Net
Source 13 34 14 +20
Tests 3 90 3 +87
Docs 0 0 0 0
Config 0 0 0 0
Generated 0 0 0 0
Other 0 0 0 0
Total 16 124 17 +107

What I checked:

  • Repository policy read: Root and relevant scoped AGENTS.md files were read; the review applied the repository guidance to inspect whole approval surfaces, Telegram proof expectations, plugin boundary impact, and PR proof gates. (AGENTS.md:1, f786efddcd88)
  • Current-head parse blocker: The PR head declares const { id } twice in the same test block, which is a block-scoped redeclaration and will prevent the test file from parsing. (src/gateway/server-methods/server-methods.test.ts:2976, b02f378c4acc)
  • PR helper behavior: The PR adds formatAllowAlwaysUnavailableMessage, which selects one-shot copy for non-null non-always ask values and policy copy for always or missing ask. (src/infra/exec-approvals.ts:1667, b02f378c4acc)
  • Control UI remains uncovered: Current main still renders the single execApproval.allowAlwaysUnavailable translation whenever Allow Always is absent, without branching on request.ask. (ui/src/components/exec-approval.ts:165, f786efddcd88)
  • Source reproduction path: Current main collapses both ask=always policy and one-shot persistence into allowed decisions without Allow Always, while gateway one-shot persistence records no-reusable-pattern; renderers therefore need an extra reason signal to avoid misleading policy copy. (src/infra/exec-approvals.ts:1815, f786efddcd88)
  • Telegram proof inspected: Downloaded Mantis screenshots show the earlier candidate displaying the one-shot message in Telegram Desktop, but the proof predates later propagation commits and the media manifest reports ffprobe unavailable for videos.

Likely related people:

  • gumadeiras: Authored and reviewed the effective exec approval reporting/actions work that introduced the generic unavailable wording across approval reply/forwarder/runtime surfaces, and later centralized native approval lifecycle assembly used by Telegram. (role: approval prompt surface contributor; confidence: high; commits: ba735d015809, d78512b09d1d; files: src/infra/exec-approval-reply.ts, src/infra/exec-approval-forwarder.ts, src/agents/bash-tools.exec-runtime.ts)
  • jesse-merhi: Authored the Tree-sitter command planner approval work that keeps unpersistable shell shapes one-shot and carries unavailable decisions through node and gateway execution. (role: one-shot approval behavior contributor; confidence: high; commits: c9707ab635b9; files: src/infra/exec-approvals.ts, src/agents/bash-tools.exec-host-gateway.ts, src/agents/bash-tools.exec-host-node.ts)
  • vincentkoc: Current checkout blame for the exact warning/collapse lines points at a recent broad snapshot commit, though the feature-specific history is stronger for the earlier approval commits. (role: recent current-main line provenance; confidence: low; commits: eb5d8f85c458; files: ui/src/components/exec-approval.ts, src/infra/exec-approval-reply.ts, src/infra/exec-approvals.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 (4 earlier review cycles)
  • reviewed 2026-07-01T03:29:28.720Z sha 541c451 :: needs real behavior proof before merge. :: [P2] Pass ask through Telegram approval payloads | [P2] Persist ask for embedded approval reconstruction
  • reviewed 2026-07-07T13:42:35.273Z sha 541c451 :: needs real behavior proof before merge. :: [P2] Pass ask through Telegram approval payloads | [P2] Persist ask for embedded approval reconstruction
  • reviewed 2026-07-08T07:29:55.372Z sha 3c50f72 :: needs real behavior proof before merge. :: [P2] Cover the Control UI approval warning
  • reviewed 2026-07-09T01:36:14.599Z sha 3c50f72 :: needs real behavior proof before merge. :: [P2] Cover the Control UI approval warning

@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. mantis: telegram-visible-proof Mantis should capture Telegram visible proof. P2 Normal backlog priority with limited blast radius. merge-risk: 🚨 other 🚨 Merging this PR has meaningful risk outside the owned taxonomy. labels Jun 30, 2026
@clawsweeper
clawsweeper Bot temporarily deployed to qa-live-shared June 30, 2026 09:29 Inactive
@openclaw-mantis

Copy link
Copy Markdown
Contributor

Mantis Telegram Desktop Proof

Summary: Mantis captured native Telegram Desktop before/after GIFs showing the one-shot command approval prompt copy change.

Main screenshot This PR screenshot
Baseline native Telegram Desktop screenshot Candidate native Telegram Desktop screenshot
Main This PR
Baseline native Telegram Desktop proof GIF Candidate native Telegram Desktop proof GIF

Motion-trimmed clips:

Raw QA files: https://artifacts.openclaw.ai/mantis/telegram-desktop/pr-98108/run-28434291782-1/index.json

yplongapp added a commit to yplongapp/openclaw that referenced this pull request Jun 30, 2026
…tinction

The original PR openclaw#98108 only updated exec-approval-forwarder.ts and
exec-approval-reply.ts to distinguish policy-level vs one-shot Allow
Always messages. Several sibling surfaces still showed the misleading
generic message for one-shot commands.

- bash-tools.exec-runtime.ts: add ask param to
  buildApprovalPendingMessage, show one-shot message when ask != always
- bash-tools.exec-host-shared.ts: add ask param to
  buildExecApprovalPendingToolResult, pass through to pending message
- bash-tools.exec-host-gateway.ts: pass hostAsk to tool result
- bash-tools.exec-host-node.ts: pass approvalDecisionAsk to tool result
- approval-reaction-runtime.ts: add ask param to
  buildManualInstructionSection, pass view.ask for exec approvals
- Add test coverage for one-shot messages in reply and forwarder tests
@openclaw-barnacle openclaw-barnacle Bot added agents Agent runtime and tooling size: S and removed size: XS labels Jun 30, 2026
@yplongapp

Copy link
Copy Markdown
Author

@clawsweeper re-review

@clawsweeper

clawsweeper Bot commented Jun 30, 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: the existing ClawSweeper review comment will be edited in place when the review finishes.

@clawsweeper clawsweeper Bot added proof: 📸 screenshot Contributor real behavior proof includes screenshot evidence. proof: sufficient ClawSweeper judged the real behavior proof convincing. status: ⏳ waiting on author ClawSweeper has contributor-facing work open and is waiting for author action. and removed status: 📣 needs proof The PR needs real behavior proof before ClawSweeper can clear the contributor ask. labels Jun 30, 2026
@yplongapp

Copy link
Copy Markdown
Author

@clawsweeper re-review

@clawsweeper

clawsweeper Bot commented Jul 1, 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: the existing ClawSweeper review comment will be edited in place when the review finishes.

@clawsweeper clawsweeper Bot added status: 📣 needs proof The PR needs real behavior proof before ClawSweeper can clear the contributor ask. and removed proof: sufficient ClawSweeper judged the real behavior proof convincing. status: ⏳ waiting on author ClawSweeper has contributor-facing work open and is waiting for author action. labels Jul 1, 2026
@openclaw-barnacle openclaw-barnacle Bot added the gateway Gateway runtime label Jul 1, 2026
@yplongapp

Copy link
Copy Markdown
Author

@clawsweeper re-review

@clawsweeper

clawsweeper Bot commented Jul 1, 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: the existing ClawSweeper review comment will be edited in place when the review finishes.

@yplongapp

Copy link
Copy Markdown
Author

@clawsweeper re-review

@yplongapp

Copy link
Copy Markdown
Author

@clawsweeper re-review: added missing Telegram native handler, Telegram forwarding, and embedded reconstruction paths. See commit 1e0baee.

@clawsweeper

clawsweeper Bot commented Jul 8, 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: the existing ClawSweeper review comment will be edited in place when the review finishes.

@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 Jul 8, 2026
@yplongapp

Copy link
Copy Markdown
Author

@clawsweeper re-review: current head now includes Telegram native handler, Telegram forwarding, and embedded reconstruction paths (commit 1e0baee + 3c50f72)

yplongapp added 5 commits July 9, 2026 19:50
…mands

When Allow Always is unavailable due to the command's shell redirection
or runtime payload (not because the policy is ask=always), the approval
prompt now explains the actual reason instead of incorrectly claiming
"the effective approval policy requires approval every time".

Closes openclaw#97069
…tinction

The original PR openclaw#98108 only updated exec-approval-forwarder.ts and
exec-approval-reply.ts to distinguish policy-level vs one-shot Allow
Always messages. Several sibling surfaces still showed the misleading
generic message for one-shot commands.

- bash-tools.exec-runtime.ts: add ask param to
  buildApprovalPendingMessage, show one-shot message when ask != always
- bash-tools.exec-host-shared.ts: add ask param to
  buildExecApprovalPendingToolResult, pass through to pending message
- bash-tools.exec-host-gateway.ts: pass hostAsk to tool result
- bash-tools.exec-host-node.ts: pass approvalDecisionAsk to tool result
- approval-reaction-runtime.ts: add ask param to
  buildManualInstructionSection, pass view.ask for exec approvals
- Add test coverage for one-shot messages in reply and forwarder tests
Extract the duplicated if/else pattern that selects the policy-level
vs one-shot Allow Always message into a single shared helper
formatAllowAlwaysUnavailableMessage(ask?) in exec-approvals.ts.
All 5 call sites now delegate to it, eliminating 3 redundant message
strings and 4 duplicate condition chains.

Previously:
  forwarder:     if (ask === 'always') { ... } else { ... }
  reply:         if (ask === 'always') { ... } else { ... }
  exec-runtime:  if (ask === 'always') { ... } else if (ask != null) { ... } else { ... }
  reaction-sdk:  if (ask === 'always') { ... } else if (ask != null) { ... } else { ... }

Now all four use:
  formatAllowAlwaysUnavailableMessage(ask)

Also normalizes the two policy-always wordings into one canonical form:
  "Allow Always is unavailable because the effective policy requires approval every time."
…approval validation

The gateway RPC validateDecision callback had a hardcoded message that
always said "effective policy requires approval every time" regardless
of whether the actual reason was a one-shot command restriction. Route
it through formatAllowAlwaysUnavailableMessage(ask) so it shows the
correct reason like all other surfaces.

Also fix the gateway test for unavailableDecisions to include ask=on-miss
so it properly exercises the one-shot message path instead of falling
back to the default ask value.
…nder paths

ClawSweeper review identified 3 uncovered approval render paths that
still lacked the ask signal needed by formatAllowAlwaysUnavailableMessage
to choose the correct Allow Always unavailable message.

1. Native Telegram (extensions/telegram/src/approval-handler.runtime.ts):
   buildPendingPayload now passes view.ask to buildExecApprovalPendingReplyPayload.

2. Telegram forwarding (extensions/telegram/src/exec-approval-forwarding.ts):
   buildTelegramExecApprovalPendingPayload now passes request.ask.

3. Embedded reconstruction (src/agents/embedded-agent-subscribe.handlers.tools.ts):
   readExecApprovalPendingDetails now extracts ask from tool result details,
   and the call site passes it through. Also added ask field to ExecToolDetails
   approval-pending type and buildExecApprovalPendingToolResult details.
@yplongapp
yplongapp force-pushed the fix/exec-approval-misleading-message-97069 branch from 3c50f72 to cfc6c50 Compare July 9, 2026 11:58
@clawsweeper clawsweeper Bot added 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. labels Jul 9, 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 Jul 24, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

agents Agent runtime and tooling channel: telegram Channel integration: telegram gateway Gateway runtime mantis: telegram-visible-proof Mantis should capture Telegram visible proof. merge-risk: 🚨 other 🚨 Merging this PR has meaningful risk outside the owned taxonomy. P2 Normal backlog priority with limited blast radius. proof: 📸 screenshot Contributor real behavior proof includes screenshot evidence. rating: 🧂 unranked krab Not merge-ready due to missing proof or serious correctness/safety concerns. size: S stale Marked as stale due to inactivity 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.

1 participant