Skip to content

feat: add scoped mention pattern policy#70864

Merged
steipete merged 1 commit into
openclaw:mainfrom
patrick-slimelab:feature/mention-pattern-policy-clean
May 31, 2026
Merged

feat: add scoped mention pattern policy#70864
steipete merged 1 commit into
openclaw:mainfrom
patrick-slimelab:feature/mention-pattern-policy-clean

Conversation

@patrick-slimelab

@patrick-slimelab patrick-slimelab commented Apr 24, 2026

Copy link
Copy Markdown
Contributor

Summary

Refactors the scoped mention-pattern policy into a small shared helper instead of per-channel policy logic.

This rewrite keeps configured regex mention patterns as a fallback to native platform mentions, then lets selected channel providers scope those configured patterns by conversation ID:

  • channels.<provider>.mentionPatterns.mode: "allow" keeps current behavior and can disable configured patterns with denyIn.
  • channels.<provider>.mentionPatterns.mode: "deny" disables configured patterns for that provider by default and enables them only for allowIn conversations.
  • Native platform mentions still pass; this policy only gates configured messages.groupChat.mentionPatterns / per-agent regex patterns.

The runtime wiring is intentionally narrow now: Discord, Matrix, Slack, Telegram, and WhatsApp pass provider/conversation policy facts into the shared buildMentionRegexes helper. Other channels keep current behavior until they are migrated explicitly.

Why This Shape

The previous version touched too many plugins and duplicated the same allow/deny logic at each call site. This version moves the decision into src/channels/mention-pattern-policy.ts and keeps channel code responsible only for supplying stable facts: provider id, conversation id, and any resolved account policy.

Out of scope:

User-Facing Behavior

Users can now scope configured regex mention patterns for the migrated providers without changing native @mention handling. Default behavior remains unchanged when no provider-level mention-pattern policy is configured.

Verification

  • node scripts/run-vitest.mjs src/auto-reply/inbound.test.ts
  • pnpm check:test-types
  • git diff --check
  • pnpm config:channels:check
  • pnpm config:docs:check
  • pnpm plugin-sdk:api:check
  • .agents/skills/autoreview/scripts/autoreview --mode local -> clean, no accepted/actionable findings

Real behavior proof

Behavior addressed: Scoped configured group mention regexes by provider conversation, while preserving native platform mentions and default behavior when no policy is configured.

Real environment tested: Local source checkout on Node/pnpm with focused unit, type, generated config/API, and autoreview proof.

Exact steps or command run after this patch: node scripts/run-vitest.mjs src/auto-reply/inbound.test.ts; pnpm check:test-types; git diff --check; pnpm config:channels:check; pnpm config:docs:check; pnpm plugin-sdk:api:check; .agents/skills/autoreview/scripts/autoreview --mode local.

Evidence after fix: Focused mention helper tests pass, typecheck passes, generated config/channel/API baselines are current, and autoreview reports no accepted/actionable findings.

Observed result after fix: Provider deny/allow policy gates configured regex mentions through the shared helper; unsupported callers keep current behavior because there is no global deny mode.

What was not tested: Live Discord/Matrix/Slack/Telegram/WhatsApp inbound messages were not exercised in this refactor pass.

@openclaw-barnacle openclaw-barnacle Bot added docs Improvements or additions to documentation channel: bluebubbles Channel integration: bluebubbles channel: discord Channel integration: discord channel: imessage Channel integration: imessage channel: line Channel integration: line channel: matrix Channel integration: matrix channel: mattermost Channel integration: mattermost channel: nextcloud-talk Channel integration: nextcloud-talk channel: signal Channel integration: signal channel: slack Channel integration: slack channel: telegram Channel integration: telegram channel: whatsapp-web Channel integration: whatsapp-web channel: zalouser Channel integration: zalouser gateway Gateway runtime channel: irc size: L labels Apr 24, 2026
@greptile-apps

greptile-apps Bot commented Apr 24, 2026

Copy link
Copy Markdown
Contributor

Greptile Summary

This PR introduces a shared MentionPatternsPolicyConfig (with mode, allowIn, denyIn) at the provider level, wires resolveMentionPatternPolicy into all channel runtimes, and documents the raw-regex-body syntax. The core logic in mention-pattern-policy.ts is correct and well-tested, and the priority ordering (provider explicit mode → agent/global mode, denyIn beats allowIn) is sound.

Confidence Score: 5/5

PR is safe to merge — no correctness or security issues found.

Logic in the policy resolver is correct and thoroughly tested. The only finding is a P2 noting that per-provider scoping via Zod schemas is only wired up for Discord and Matrix; all other providers silently fall back to the global mode. This is a documentation/completeness gap, not a defect in the changed code.

src/channels/mention-pattern-policy.ts — the provider-policy fallback path is called for many providers whose schemas cannot actually supply a policy.

Prompt To Fix All With AI
This is a comment left during a code review.
Path: src/channels/mention-pattern-policy.ts
Line: 39-48

Comment:
**Per-provider policy only configurable for Discord and Matrix**

All 10+ other providers that call `resolveMentionPatternsEnabled` (WhatsApp, Signal, Slack, LINE, IRC, iMessage, Mattermost, Nextcloud Talk, Zalouser, Telegram, BlueBubbles) pass `provider: "<name>"` but their Zod schemas use `.strict()` without a `mentionPatterns` field, so `cfg.channels?.["whatsapp"]?.mentionPatterns` will always be `undefined` after Zod validation. Those providers silently fall back to the global `messages.groupChat.mentionPatternsMode` and can never use `allowIn`/`denyIn` scoping. Only Discord (`DiscordAccountSchema` line 543 in `zod-schema.providers-core.ts`) and Matrix (`config-schema.ts`) expose this field through their schemas.

If per-provider scoping is intentionally limited to Discord/Matrix in this PR, a note in the docs to that effect would prevent operator confusion when attempting e.g. `channels.whatsapp.mentionPatterns`.

How can I resolve this? If you propose a fix, please make it concise.

Reviews (10): Last reviewed commit: "fix: address mention policy review follo..." | Re-trigger Greptile

Comment thread src/channels/mention-pattern-policy.ts
Comment on lines +63 to +67
const allowMatched =
conversationId != null && normalizeIdList(providerPolicy?.allowIn).has(conversationId);
const denyMatched =
conversationId != null && normalizeIdList(providerPolicy?.denyIn).has(conversationId);
const enabled = effectiveMode === "allow" ? !denyMatched : allowMatched && !denyMatched;

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.

P2 allowIn is silently ignored in allow effective mode

When effectiveMode === "allow", allowMatched is computed but never used in the enabled expression (!denyMatched). This means that configuring { mode: "inherit", allowIn: ["chan-1"] } on a provider while the global mode is "allow" has no effect — the entry silently does nothing. A user could reasonably expect allowIn to produce a no-op in this combination, but it would be worth either a comment or a doc note to avoid confusion in misconfigured setups.

Prompt To Fix With AI
This is a comment left during a code review.
Path: src/channels/mention-pattern-policy.ts
Line: 63-67

Comment:
**`allowIn` is silently ignored in `allow` effective mode**

When `effectiveMode === "allow"`, `allowMatched` is computed but never used in the `enabled` expression (`!denyMatched`). This means that configuring `{ mode: "inherit", allowIn: ["chan-1"] }` on a provider while the global mode is `"allow"` has no effect — the entry silently does nothing. A user could reasonably expect `allowIn` to produce a no-op in this combination, but it would be worth either a comment or a doc note to avoid confusion in misconfigured setups.

How can I resolve this? If you propose a fix, please make it concise.

Comment thread extensions/imessage/src/monitor/inbound-processing.ts Outdated

@chatgpt-codex-connector chatgpt-codex-connector Bot 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.

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: c9dfc8e46a

ℹ️ About Codex in GitHub

Codex has been enabled to automatically review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

When you sign up for Codex through ChatGPT, Codex can also answer questions or update the PR, like "@codex address that feedback".

Comment on lines +896 to +900
const mentionPatternsEnabled = core.channel.mentions.resolveMentionPatternsEnabled({
cfg,
provider: "matrix",
conversationId: roomId,
});

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.

P2 Badge Honor Matrix account mentionPatterns overrides

This call only passes { cfg, provider, conversationId }, so policy resolution falls back to cfg.channels.matrix.mentionPatterns; in multi-account Matrix runs, cfg is not rebuilt with accountConfig.mentionPatterns (only selected allowlist fields are merged), so channels.matrix.accounts.<id>.mentionPatterns has no effect. That means account-scoped mode: "deny" or allowIn/denyIn settings are silently ignored and mention gating behavior is wrong for non-default accounts.

Useful? React with 👍 / 👎.

@patrick-slimelab
patrick-slimelab force-pushed the feature/mention-pattern-policy-clean branch 3 times, most recently from 75d3ac3 to 512e3e6 Compare April 24, 2026 03:45
@openclaw-barnacle openclaw-barnacle Bot added the agents Agent runtime and tooling label Apr 24, 2026
@patrick-slimelab
patrick-slimelab force-pushed the feature/mention-pattern-policy-clean branch from 512e3e6 to cca7168 Compare April 24, 2026 03:53
@patrick-slimelab
patrick-slimelab requested a review from a team as a code owner April 24, 2026 03:53

@chatgpt-codex-connector chatgpt-codex-connector Bot 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.

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: cca7168d2c

ℹ️ About Codex in GitHub

Codex has been enabled to automatically review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

When you sign up for Codex through ChatGPT, Codex can also answer questions or update the PR, like "@codex address that feedback".

Comment thread src/config/zod-schema.core.ts Outdated
export const GroupChatSchema = z
.object({
mentionPatterns: z.array(z.string()).optional(),
mentionPatternsMode: MentionPatternsModeSchema.optional(),

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.

P2 Badge Prevent no-op agent mentionPatternsMode config

Adding mentionPatternsMode to GroupChatSchema makes agents.list[].groupChat.mentionPatternsMode valid because agent entries reuse this schema (src/config/zod-schema.agent-runtime.ts), but the new policy resolver only reads messages.groupChat.mentionPatternsMode (src/channels/mention-pattern-policy.ts:52). In practice, per-agent mode values are silently ignored, so users can set an apparently supported agent-scoped override that has no runtime effect; this should either be removed from the shared agent schema or wired through mention-policy resolution with agent context.

Useful? React with 👍 / 👎.

@patrick-slimelab
patrick-slimelab force-pushed the feature/mention-pattern-policy-clean branch from cca7168 to 6cc50a8 Compare April 24, 2026 04:13
@openclaw-barnacle openclaw-barnacle Bot removed the agents Agent runtime and tooling label Apr 24, 2026
@patrick-slimelab
patrick-slimelab force-pushed the feature/mention-pattern-policy-clean branch 2 times, most recently from 0dc81df to 9558b44 Compare April 24, 2026 04:28
@clawsweeper

clawsweeper Bot commented May 29, 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.

Re-review progress:

@patrick-slimelab

Copy link
Copy Markdown
Contributor Author

Merged latest origin/main to clear the current DIRTY/CONFLICTING state and pushed new head 636b499d38. Refreshed the PR body Real behavior proof for exact head 636b499d38581e2d859a9f0910022025f35612ba.

Verification passed:

  • pnpm config:docs:check
  • pnpm plugin-sdk:api:check
  • pnpm config:channels:check
  • git diff --check
  • exact-head Telegram media pre-download proof for 636b499d38

Outstanding non-code blockers remain dependency graph/secops authorization and ClawSweeper live/equivalent Telegram transport proof acceptance.

@greptileai review
@clawsweeper re-review

@clawsweeper

clawsweeper Bot commented May 29, 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.

Re-review progress:

@patrick-slimelab

Copy link
Copy Markdown
Contributor Author

Fixed the new check-lint failure from head 636b499d38 and pushed 754483653f.

Verification:

  • pnpm lint --threads=8
  • node scripts/run-vitest.mjs run src/commands/agent-via-gateway.test.ts
  • git diff --check

Refreshed the PR body Real behavior proof for exact head 754483653fbdc46a1e2323129c0f8856df415775.

Outstanding non-code blockers remain dependency-guard secops approval and maintainer/security acceptance for the ClawSweeper durable review items.

@greptileai review
@clawsweeper re-review

@clawsweeper

clawsweeper Bot commented May 29, 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.

@patrick-slimelab

Copy link
Copy Markdown
Contributor Author

Merged latest origin/main to clear the current CONFLICTING/DIRTY state and pushed new head 28beb9d91d. Resolved the upstream rename around agentViaGatewayTesting and refreshed the PR body Real behavior proof for exact head 28beb9d91d5c8f2164d9dd8812db0751e19eedd4.

Verification:

  • pnpm lint --threads=8
  • node scripts/run-vitest.mjs run src/commands/agent-via-gateway.test.ts
  • git diff --cached --check
  • exact-head Telegram media pre-download proof for 28beb9d91d

Outstanding non-code blockers remain dependency-guard secops approval and maintainer/security acceptance for the ClawSweeper durable review items.

@greptileai review
@clawsweeper re-review

@clawsweeper

clawsweeper Bot commented May 29, 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.

Re-review progress:

@patrick-slimelab

Copy link
Copy Markdown
Contributor Author

Merged latest origin/main to clear the current CONFLICTING/DIRTY state and pushed new head 5231aadb1b. Resolved conflicts in generated config/plugin SDK hashes, Azure Speech env cleanup, and Hugging Face model discovery timeout handling. Refreshed the PR body Real behavior proof for exact head 5231aadb1bf0f4e6ecdf6c1b498d0e928a4efede.

Verification:

  • pnpm config:docs:check
  • pnpm plugin-sdk:api:check
  • pnpm config:channels:check
  • node scripts/run-vitest.mjs run extensions/azure-speech/speech-provider.test.ts extensions/huggingface/models.test.ts
  • git diff --cached --check
  • exact-head Telegram media pre-download proof for 5231aadb1b

Outstanding non-code blockers remain dependency-guard secops approval and maintainer/security acceptance for the ClawSweeper durable review items.

@greptileai review
@clawsweeper re-review

@clawsweeper

clawsweeper Bot commented May 29, 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.

Re-review progress:

@patrick-slimelab

Copy link
Copy Markdown
Contributor Author

Fixed the new checks-node-core-runtime-infra-state failure and pushed 103a1fbd3d. The CONNECT timeout test attached the rejection assertion after advancing the oversized fake timer, which let Vitest see an unhandled rejection in CI; the assertion is now attached before timer advancement.

Verification:

  • node scripts/run-vitest.mjs run src/infra/net/http-connect-tunnel.test.ts
  • node scripts/run-vitest.mjs run --config test/vitest/vitest.infra.config.ts --reporter=verbose
  • git diff --check
  • exact-head Telegram media pre-download proof for 103a1fbd3d

Outstanding non-code blockers remain dependency-guard secops approval and maintainer/security acceptance for the ClawSweeper durable review items.

@greptileai review
@clawsweeper re-review

@clawsweeper

clawsweeper Bot commented May 29, 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.

@patrick-slimelab

Copy link
Copy Markdown
Contributor Author

Merged latest origin/main again after the push race and updated head to 57080dd99d. Kept the CONNECT timeout rejection-handling fix, resolved the new plugin SDK baseline conflict, and refreshed exact-head proof for 57080dd99d5c57020ab70652147dd6a6a4d1eadc.

Verification:

  • pnpm plugin-sdk:api:check
  • node scripts/run-vitest.mjs run src/infra/net/http-connect-tunnel.test.ts
  • git diff --cached --check
  • exact-head Telegram media pre-download proof for 57080dd99d

Outstanding non-code blockers remain dependency-guard secops approval and maintainer/security acceptance for the ClawSweeper durable review items.

@greptileai review
@clawsweeper re-review

@clawsweeper

clawsweeper Bot commented May 29, 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.

Re-review progress:

@patrick-slimelab

Copy link
Copy Markdown
Contributor Author

Fixed the new checks-node-core-fast timeout failure and pushed cee6492154. The sandbox browser audit tests now force real timers around the Docker timeout probes so prior unit-fast files that use fake timers cannot leave the probes hanging until Vitest's 120s test timeout.\n\nVerification:\n- node scripts/run-vitest.mjs run --config test/vitest/vitest.unit-fast.config.ts src/security/audit-sandbox-browser.test.ts --reporter=verbose\n- git diff --check\n- exact-head Telegram media pre-download proof for cee6492154\n\nOutstanding non-code blockers remain dependency-guard secops approval and maintainer/security acceptance for the ClawSweeper durable review items.\n\n@greptileai review\n@clawsweeper re-review

@steipete

Copy link
Copy Markdown
Contributor

Refresh note after duplicate cleanup:

Local verification after the refresh:

  • pnpm config:channels:check
  • pnpm plugin-sdk:api:check
  • pnpm config:docs:check
  • git diff --check

CI note: the new run is red. dependency-guard-autoscrub cannot create an app token for the contributor fork, then reports dependency graph changes that require removal or a current secops override. Several normal CI shards are also failing on the refreshed branch, so this still needs follow-up before landing.

@patrick-slimelab

Copy link
Copy Markdown
Contributor Author

Fixed the refreshed-head CI failures and pushed 1ec2124d83. The missing ../shared/string-coerce.js import now uses the normalization-core package export, and stale shrinkwrap artifacts were regenerated.

Verification:

  • pnpm tsgo:prod
  • pnpm check:test-types
  • pnpm build:plugin-sdk:strict-smoke
  • node scripts/run-vitest.mjs run src/channels/mention-pattern-policy.test.ts
  • pnpm deps:shrinkwrap:check
  • pnpm deadcode:dependencies
  • pnpm deadcode:unused-files
  • pnpm deadcode:report:ci:ts-unused
  • pnpm build
  • git diff --check

@greptileai review
@clawsweeper re-review

@clawsweeper

clawsweeper Bot commented May 31, 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.

Re-review progress:

@steipete

Copy link
Copy Markdown
Contributor

Landing proof for rewritten head f2db66a:

  • node scripts/run-vitest.mjs src/auto-reply/inbound.test.ts
  • pnpm check:test-types
  • git diff --check
  • pnpm config:channels:check
  • pnpm config:docs:check
  • pnpm plugin-sdk:api:check
  • .agents/skills/autoreview/scripts/autoreview --mode local

Results: targeted inbound suite passed 61 tests, type tests passed, generated config/docs/API baselines are current, and autoreview reported no accepted/actionable findings.

Known proof gap: I did not run live Discord, Matrix, Slack, Telegram, or WhatsApp inbound messages after the refactor. Using maintainer proof override for that gap because this rewrite limits the new behavior to explicit per-channel configured regex mention-pattern policy and keeps native mentions plus unsupported channels on their existing paths.

@chatgpt-codex-connector chatgpt-codex-connector Bot 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.

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: f2db66ab73

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

effectiveDmAllow: dmAllow.effectiveAllow,
groupConfig,
topicConfig,
providerMentionPatterns: cfg.channels?.telegram?.accounts?.[account.accountId]?.mentionPatterns,

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.

P2 Badge Resolve Telegram mention policy from the normalized account

When the configured Telegram account key is not already in canonical form (for example accounts.Work resolving to account id work), this direct map lookup misses the account entry even though Telegram account resolution supports normalized keys via resolveNormalizedAccountEntry. In that setup the bot still runs under the account, but its account-scoped mentionPatterns policy is ignored and policy falls back to the root/default behavior; use the resolved/merged Telegram account config instead of indexing the raw accounts object here.

Useful? React with 👍 / 👎.

@steipete

Copy link
Copy Markdown
Contributor

Final landing proof for head 4cc9409:

  • node scripts/run-vitest.mjs src/auto-reply/inbound.test.ts
  • pnpm check:test-types
  • pnpm lint
  • git diff --check
  • pnpm config:channels:check
  • pnpm config:docs:check
  • pnpm plugin-sdk:api:check
  • .agents/skills/autoreview/scripts/autoreview --mode local

Results: focused inbound suite passed 61 tests, test types passed, lint passed after the final lint-only cleanup, generated config/docs/API baselines are current, and autoreview was clean.

Known proof gap remains live channel runtime coverage for Discord, Matrix, Slack, Telegram, and WhatsApp; maintained under proof override for this scoped config/helper refactor.

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

Labels

channel: bluebubbles Channel integration: bluebubbles channel: discord Channel integration: discord channel: matrix Channel integration: matrix channel: slack Channel integration: slack channel: telegram Channel integration: telegram channel: whatsapp-web Channel integration: whatsapp-web docs Improvements or additions to documentation mantis: telegram-visible-proof Mantis should capture Telegram visible proof. merge-risk: 🚨 compatibility 🚨 May break existing users, config, migrations, defaults, or upgrade paths. merge-risk: 🚨 message-delivery 🚨 May drop, duplicate, misroute, suppress, or wrongly target messages. merge-risk: 🚨 security-boundary 🚨 May affect sandboxing, authorization, credentials, or sensitive data. P2 Normal backlog priority with limited blast radius. proof: override Maintainer override for the external PR real behavior proof gate. rating: 🧂 unranked krab Not merge-ready due to missing proof or serious correctness/safety concerns. size: M status: ⏳ waiting on author ClawSweeper has contributor-facing work open and is waiting for author action. triage: dirty-candidate Candidate: broad unrelated surfaces; may need splitting or cleanup.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants