Skip to content

test(discord): clarify and guardrail gateway proxy selection#99126

Merged
joshavant merged 3 commits into
openclaw:mainfrom
svuppala2006:discord-gateway-env-proxy
Jul 3, 2026
Merged

test(discord): clarify and guardrail gateway proxy selection#99126
joshavant merged 3 commits into
openclaw:mainfrom
svuppala2006:discord-gateway-env-proxy

Conversation

@svuppala2006

@svuppala2006 svuppala2006 commented Jul 2, 2026

Copy link
Copy Markdown
Contributor

What Problem This Solves

Restricted deployments that need Discord Gateway and Discord REST traffic to leave the Gateway pod through a managed proxy, not through broad direct :443 egress.

Current shipped Discord proxy validation only accepts loopback proxy hosts. The docs show examples like:

{
  channels: {
    discord: {
      proxy: "http://proxy.example:8080",
    },
  },
}

That example is misleading today. A non-loopback DNS proxy is rejected, and Discord falls back to direct/default transport instead of routing through the configured proxy.

Why This Change Was Made

This PR keeps Discord Gateway proxying explicit. Discord does not silently inherit ambient proxy environment variables for Gateway sessions. Operators still configure channels.discord.proxy.

The change allows a non-loopback Discord proxy URL only when it exactly matches the active process proxy endpoint from HTTP_PROXY, HTTPS_PROXY, or ALL_PROXY. The match uses the normalized full URL, including credentials, default port, and lower/upper-case env precedence. Arbitrary DNS hosts and non-loopback IPs remain rejected.

That gives restricted-egress deployments a supported MITM/operator-managed proxy path for Discord without accepting arbitrary remote proxy hosts in Discord config.

User Impact

Users in restricted-egress environments can run Discord through their configured proxy without granting broad Gateway pod :443 egress.

Supported path:

{
  channels: {
    discord: {
      proxy: "http://some-proxy:8080",
    },
  },
}

with the active process proxy set to the same endpoint, for example:

HTTPS_PROXY=http://some-proxy:8080

Loopback proxy configs continue to work. Non-loopback proxy configs that do not match the active process proxy continue to fall back instead of being used for Discord bot-token traffic.

Evidence

Automated Tests

Focused Discord proxy tests passed after the maintainer fix:

env OPENCLAW_HEAVY_CHECK_LOCK_SCOPE=worktree \
  PNPM_CONFIG_MODULES_DIR=/Users/somalley/git/ambient-code/openclaw/node_modules \
  OPENCLAW_VITEST_MAX_WORKERS=1 \
  node scripts/test-projects.mjs \
  extensions/discord/src/client.proxy.test.ts \
  extensions/discord/src/monitor/provider.proxy.test.ts \
  extensions/discord/src/monitor/provider.rest-proxy.test.ts \
  extensions/discord/src/send.webhook.proxy.test.ts \
  -- --reporter=verbose

Result: 4 files passed, 57 tests passed.

Additional checks:

node scripts/generate-docs-map.mjs --check
git diff --check
.agents/skills/autoreview/scripts/autoreview --mode local

Result: docs map up to date, diff check clean, autoreview clean with no accepted/actionable findings.

Real Behavior Proof From #98272

The original PR, #98272, carried live Discord proof for this behavior before the fork was deleted. That proof used a K8s cluster in namespace sallyom-claw, Claw higgins, Discord test server Test Claws, and bot Test.

Image under test:

init:init-volume=quay.io/sallyom/openclaw:latest policy=Always
init:init-config=quay.io/sallyom/openclaw:latest policy=Always
container:gateway=quay.io/sallyom/openclaw:latest policy=Always

The Discord plugin loaded from the rebuilt OpenClaw image:

{
  "source": "/app/dist/extensions/discord/index.js",
  "origin": "bundled",
  "status": "loaded"
}

Gateway logs showed both proxy paths enabled:

[discord] [default] starting provider
[discord] rest proxy enabled
[discord] gateway proxy enabled
[gateway] ready
[discord] client initialized as 1500860555307520212; awaiting gateway readiness
[discord] [default] Discord bot probe resolved @Test

Discord channel status showed the bot connected:

{
  "channels": {
    "discord": {
      "configured": true,
      "running": true,
      "lastError": null
    }
  },
  "channelAccounts": {
    "discord": [
      {
        "accountId": "default",
        "running": true,
        "connected": true,
        "tokenStatus": "available",
        "bot": {
          "username": "Test"
        }
      }
    ]
  }
}

The Gateway egress NetworkPolicy had no broad :443 rule. It allowed only the proxy pod on :8080 plus DNS:

egress:
- ports:
  - port: 8080
    protocol: TCP
  to:
  - podSelector:
      matchLabels:
        app: claw-proxy
        claw.sandbox.com/instance: higgins
- ports:
  - port: 53
    protocol: UDP
  - port: 53
    protocol: TCP
  - port: 5353
    protocol: UDP
  - port: 5353
    protocol: TCP
  to:
  - namespaceSelector: {}

A live Discord REST proof message was posted through the MITM proxy:

{
  "proxy": "http://some-proxy:8080",
  "guild": "Test",
  "textChannel": "general",
  "messageCreated": true,
  "content": "OpenClaw final Discord proxy proof 2026-07-01T23:17:06.190Z"
}

Discord status then showed inbound Gateway activity:

{
  "connected": true,
  "lastInboundAt": 1782947826282,
  "lastTransportActivityAt": 1782947816644,
  "lastError": null
}

Related

…bSocket

Discord Gateway WebSocket connections now honor HTTP_PROXY/HTTPS_PROXY
environment variables as fallback before direct connection, matching the
existing pattern from Discord REST API and WhatsApp.

This enables Discord channel deployment in Kubernetes/OpenShift environments
with network policy egress restrictions, removing the need for broad :443
egress as a workaround.

- Add createEnvProxyDiscordGatewayAgent() helper (mirrors rest-fetch.ts pattern)
- Try env proxy before direct HttpsAgent in createDiscordGatewayPlugin()
- Explicit channels.discord.proxy still overrides env proxy
- Add formatErrorMessage and resolveEnvHttpProxyAgentOptions imports

Fixes openclaw#98266
@openclaw-barnacle openclaw-barnacle Bot added docs Improvements or additions to documentation channel: discord Channel integration: discord size: M triage: needs-pr-context Candidate: external PR body lacks required problem context or evidence. labels Jul 2, 2026
@clawsweeper

clawsweeper Bot commented Jul 2, 2026

Copy link
Copy Markdown
Contributor

Codex review: needs maintainer review before merge. Reviewed July 2, 2026, 9:17 PM ET / 01:17 UTC.

Summary
This PR broadens Discord proxy validation so explicit channels.discord.proxy accepts valid HTTP(S) proxy hosts, updates the Discord docs, and adds REST, Gateway WebSocket, and webhook proxy tests.

PR surface: Source -23, Tests +290, Docs +1. Total +268 across 6 files.

Reproducibility: yes. Source inspection shows current main and v2026.6.11 reject non-loopback explicit Discord proxy URLs, and the PR body/comment include live proof for the configured DNS proxy path.

Review metrics: 1 noteworthy metric.

  • Discord proxy validation rule: 1 broadened. The PR changes the accepted explicit proxy endpoints that can carry Discord bot Gateway, REST, and webhook traffic.

Stored data model
Persistent data-model change detected: serialized state: extensions/discord/src/send.webhook.proxy.test.ts. Confirm migration or upgrade compatibility proof before merge.

Root-cause cluster
Relationship: fixed_by_candidate
Canonical: #98266
Summary: This PR is the active implementation candidate for the Discord restricted-egress proxy problem after the intended path changed from ambient env fallback to explicit channels.discord.proxy.

Members:

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

Merge readiness
Overall: 🐚 platinum hermit
Proof: 🦞 diamond lobster
Patch quality: 🐚 platinum hermit
Result: ready for maintainer review.

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

Rank-up moves:

  • [P2] Get explicit owner/security acceptance for the non-loopback explicit Discord proxy boundary before merge.

Risk before merge

  • [P1] Merging intentionally allows token-bearing Discord Gateway, REST, and webhook traffic to traverse any explicitly configured non-loopback HTTP(S) proxy, so maintainers should accept that operator-trust boundary before landing.

Maintainer options:

  1. Accept explicit proxy authority (recommended)
    Maintainers can accept that channels.discord.proxy is operator-controlled authority for Discord egress and land once the current green checks remain green.
  2. Narrow the accepted proxy policy
    If arbitrary explicit HTTP(S) proxy hosts are too broad, require a smaller managed-proxy source and update the validator, docs, and tests before merge.
  3. Keep loopback-only Discord proxying
    If maintainers do not want token-bearing Discord traffic routed through non-loopback explicit proxies, pause or close this PR and leave the current boundary in place.

Next step before merge

  • [P2] The remaining action is maintainer/security acceptance of explicit non-loopback Discord proxy routing, not an automated code repair.

Security
Needs attention: The diff has no supply-chain concern, but it intentionally changes the Discord bot-token proxy trust boundary and needs maintainer/security acceptance.

Review details

Best possible solution:

Land the explicit channels.discord.proxy fix after owner/security acceptance of remote proxy trust; keep ambient and broader proxy semantics in #60035.

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

Yes. Source inspection shows current main and v2026.6.11 reject non-loopback explicit Discord proxy URLs, and the PR body/comment include live proof for the configured DNS proxy path.

Is this the best way to solve the issue?

Yes, if maintainers accept the trust boundary. The PR keeps Gateway proxying explicit through existing channels.discord.proxy ownership instead of adding ambient env fallback, while leaving broader proxy design to #60035.

AGENTS.md: found and applied where relevant.

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

Label changes

Label changes:

  • add rating: 🐚 platinum hermit: Overall readiness is 🐚 platinum hermit; proof is 🦞 diamond lobster and patch quality is 🐚 platinum hermit.
  • add status: 👀 ready for maintainer look: ClawSweeper has no concrete contributor-facing blocker left for this PR. Sufficient (logs): The PR body and follow-up comment include after-fix K8s/Gateway logs, NetworkPolicy scope, live Discord message output, and CONNECT proof showing Discord traffic used the configured DNS proxy with no direct Discord attempts.
  • remove rating: 🦐 gold shrimp: Current PR rating is rating: 🐚 platinum hermit, so this older rating label is no longer current.
  • remove status: ⏳ waiting on author: Current PR status label is status: 👀 ready for maintainer look.

Label justifications:

  • P2: This is a bounded Discord restricted-egress fix with proof and green checks, but it is not an active outage or emergency.
  • merge-risk: 🚨 security-boundary: The diff broadens the proxy trust boundary for token-bearing Discord traffic from loopback-only to any explicitly configured valid HTTP(S) proxy host.
  • rating: 🐚 platinum hermit: Overall readiness is 🐚 platinum hermit; proof is 🦞 diamond lobster and patch quality is 🐚 platinum hermit.
  • status: 👀 ready for maintainer look: ClawSweeper has no concrete contributor-facing blocker left for this PR. Sufficient (logs): The PR body and follow-up comment include after-fix K8s/Gateway logs, NetworkPolicy scope, live Discord message output, and CONNECT proof showing Discord traffic used the configured DNS proxy with no direct Discord attempts.
  • proof: sufficient: Contributor real behavior proof is sufficient. The PR body and follow-up comment include after-fix K8s/Gateway logs, NetworkPolicy scope, live Discord message output, and CONNECT proof showing Discord traffic used the configured DNS proxy with no direct Discord attempts.
Evidence reviewed

PR surface:

Source -23, Tests +290, Docs +1. Total +268 across 6 files.

View PR surface stats
Area Files Added Removed Net
Source 1 2 25 -23
Tests 4 317 27 +290
Docs 1 1 0 +1
Config 0 0 0 0
Generated 0 0 0 0
Other 0 0 0 0
Total 6 320 52 +268

Security concerns:

  • [medium] Confirm explicit remote Discord proxy trust — extensions/discord/src/proxy-fetch.ts:66
    validateDiscordProxyUrl now accepts any valid HTTP(S) proxy host, so configured Discord Gateway, REST, and webhook traffic carrying bot credentials can traverse a non-loopback proxy chosen in config.
    Confidence: 0.86

What I checked:

  • Current main still rejects non-loopback Discord proxy config: validateDiscordProxyUrl on current main still requires the proxy hostname to be loopback and throws Proxy URL must target a loopback host otherwise. (extensions/discord/src/proxy-fetch.ts:69, 381b44a9fc26)
  • Latest release still has the same shipped behavior: Tag v2026.6.11 contains the same loopback-only Discord proxy validation, so the PR is not obsolete in the latest release. (extensions/discord/src/proxy-fetch.ts:69, e085fa1a3ffd)
  • PR head changes the validation boundary: At PR head, validateDiscordProxyUrl rejects malformed or non-http(s) URLs but accepts any parsed URL with a host, which is the central behavior change under review. (extensions/discord/src/proxy-fetch.ts:66, cb82693ca869)
  • Gateway remains explicit, not ambient-env driven: PR head keeps the default Gateway WebSocket agent direct and only switches to a proxy when discordConfig.proxy is explicitly configured. (extensions/discord/src/monitor/gateway-plugin.ts:406, cb82693ca869)
  • Tests cover the new Discord proxy behavior: PR-head tests cover DNS, arbitrary DNS, non-loopback IP, credentials, REST, Gateway WebSocket, and webhook proxy paths, while preserving direct Gateway behavior when only ambient proxy env is set. (extensions/discord/src/monitor/provider.proxy.test.ts:523, cb82693ca869)
  • Maintainer discussion records the current fix direction: A follow-up comment says commit cb82693ca869d73a50ec1db01b9e2a93512b2819 uses explicit operator config as authority, removes env exact-match authorization, and was live-proven through a configured DNS proxy with no direct Discord attempts. (cb82693ca869)

Likely related people:

  • vincentkoc: PR and git history tie the current loopback-only Discord proxy validation boundary to the merged security hardening work this PR changes. (role: security hardening contributor; confidence: high; commits: 50e1eb56d761; files: extensions/discord/src/proxy-fetch.ts, extensions/discord/src/monitor/provider.proxy.test.ts)
  • steipete: History shows repeated recent work in Discord proxy resolution, Gateway behavior, and shared proxy/dispatcher helpers used by this PR. (role: recent adjacent contributor; confidence: high; commits: 566fc7210687, 1b9ec88d9cc5; files: extensions/discord/src/proxy-fetch.ts, extensions/discord/src/monitor/rest-fetch.ts, src/infra/net/undici-runtime.ts)
  • joshavant: The PR discussion records this person pushing the current fix-direction commit and prior main history shows adjacent Discord config/auth runtime work. (role: reviewer and likely follow-up owner; confidence: medium; commits: cb82693ca869, 0687e0476021; files: extensions/discord/src/proxy-fetch.ts, extensions/discord/src/monitor/provider.proxy.test.ts, extensions/discord/src/client.ts)
  • scoootscooob: Merged history moved the Discord implementation into the current extensions/discord boundary, carrying the affected proxy code into its current owner area. (role: major refactor contributor; confidence: medium; commits: 5682ec37fada, d1c837b9c135; files: extensions/discord/src/monitor/gateway-plugin.ts, extensions/discord/src/proxy-fetch.ts)
  • sallyom: The related issue and predecessor PR discussion record live K8s/Discord proxy testing and the decision to keep Discord proxying explicit through channels.discord.proxy. (role: live-proof and discussion owner; confidence: medium; commits: e6e3af3a6b7c; files: extensions/discord/src/proxy-fetch.ts, docs/channels/discord.md)
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.

@clawsweeper clawsweeper Bot added proof: sufficient ClawSweeper judged the real behavior proof convincing. rating: 🦐 gold shrimp Decent PR readiness signal, but merge confidence is limited. status: ⏳ waiting on author ClawSweeper has contributor-facing work open and is waiting for author action. P2 Normal backlog priority with limited blast radius. merge-risk: 🚨 security-boundary 🚨 May affect sandboxing, authorization, credentials, or sensitive data. labels Jul 2, 2026
@sallyom sallyom self-assigned this Jul 2, 2026
@sallyom
sallyom force-pushed the discord-gateway-env-proxy branch from 0add562 to ca8e39c Compare July 2, 2026 21:06
@clawsweeper clawsweeper Bot added rating: 🧂 unranked krab Not merge-ready due to missing proof or serious correctness/safety concerns. and removed rating: 🦐 gold shrimp Decent PR readiness signal, but merge confidence is limited. labels Jul 2, 2026
@sallyom
sallyom force-pushed the discord-gateway-env-proxy branch from ca8e39c to e6e3af3 Compare July 2, 2026 21:55
@openclaw-barnacle openclaw-barnacle Bot removed the triage: needs-pr-context Candidate: external PR body lacks required problem context or evidence. label Jul 2, 2026
@clawsweeper clawsweeper Bot added rating: 🐚 platinum hermit Good normal PR readiness with ordinary maintainer review expected. status: 👀 ready for maintainer look ClawSweeper has no concrete contributor-facing blocker left for this PR. merge-risk: 🚨 compatibility 🚨 May break existing users, config, migrations, defaults, or upgrade paths. rating: 🦐 gold shrimp Decent PR readiness signal, but merge confidence is limited. status: ⏳ waiting on author ClawSweeper has contributor-facing work open and is waiting for author action. and removed rating: 🧂 unranked krab Not merge-ready due to missing proof or serious correctness/safety concerns. status: ⏳ waiting on author ClawSweeper has contributor-facing work open and is waiting for author action. rating: 🐚 platinum hermit Good normal PR readiness with ordinary maintainer review expected. status: 👀 ready for maintainer look ClawSweeper has no concrete contributor-facing blocker left for this PR. merge-risk: 🚨 compatibility 🚨 May break existing users, config, migrations, defaults, or upgrade paths. labels Jul 2, 2026
@joshavant
joshavant self-requested a review July 2, 2026 23:07
@joshavant

Copy link
Copy Markdown
Contributor

Pushed commit cb82693ca869d73a50ec1db01b9e2a93512b2819 with the agreed Discord proxy fix direction.

What changed:

  • channels.discord.proxy now treats explicit operator config as the authority: any valid http:/https: proxy URL with a host is accepted, including DNS/private proxy endpoints.
  • Removed the process-proxy/env exact-match authorization path from the shared Discord proxy validator while keeping malformed/unsupported proxy URL rejection.
  • Updated Discord REST client, webhook send, startup REST fetch, and Gateway WebSocket proxy tests to cover DNS and non-loopback proxy URLs.
  • Updated Discord docs to use a DNS proxy example and clarify that Gateway WebSocket proxying is explicit while startup REST lookups use the configured Discord proxy.

Validation run on the pushed branch state:

  • node scripts/run-vitest.mjs extensions/discord/src/client.proxy.test.ts extensions/discord/src/send.webhook.proxy.test.ts extensions/discord/src/monitor/provider.proxy.test.ts extensions/discord/src/monitor/provider.rest-proxy.test.ts
  • git diff --cached --check
  • node scripts/generate-docs-map.mjs --check

Additional pre-push validation on the same file content before applying it to this PR branch:

  • $autoreview branch review against origin/main completed cleanly.
  • Live Discord proof with brokered credentials reproduced the original loopback rejection/no proxy CONNECTs/direct Discord attempts on origin/main, then confirmed the fixed content connected through the configured DNS proxy with CONNECTs to discord.com:443 and gateway.discord.gg:443, with no direct Discord attempts.

@joshavant

Copy link
Copy Markdown
Contributor

@clawsweeper re-review

@clawsweeper

clawsweeper Bot commented Jul 3, 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: 🐚 platinum hermit Good normal PR readiness with ordinary maintainer review expected. status: 👀 ready for maintainer look ClawSweeper has no concrete contributor-facing blocker left for this PR. and removed rating: 🦐 gold shrimp Decent PR readiness signal, but merge confidence is limited. status: ⏳ waiting on author ClawSweeper has contributor-facing work open and is waiting for author action. labels Jul 3, 2026
@joshavant
joshavant merged commit 4440226 into openclaw:main Jul 3, 2026
107 of 112 checks passed
@joshavant

Copy link
Copy Markdown
Contributor

Thanks @svuppala2006 for opening this, and congrats on your first OpenClaw contribution.

This PR started from the Discord proxy path rejecting documented non-loopback proxy URLs, which meant restricted-egress setups could fail to use the intended proxy. During review, we kept the fix on the explicit channels.discord.proxy boundary rather than ambient HTTP_PROXY / HTTPS_PROXY inheritance.

The merged change now accepts valid explicit HTTP(S) proxy URLs with a host for Discord REST, webhook, startup REST lookup, and Gateway WebSocket paths. It also keeps Gateway WebSocket direct when only ambient proxy env is set, and updates the tests/docs around that behavior.

We validated it with focused Discord proxy tests and live proof: the old behavior reproduced the loopback rejection and direct Discord attempts, while the merged fix connected through the configured DNS proxy with CONNECTs to discord.com:443 and gateway.discord.gg:443, with no direct Discord attempts.

Thanks again for bringing this in.

github-actions Bot pushed a commit to Desicool/openclaw that referenced this pull request Jul 3, 2026
…w#99126)

* feat(discord): add HTTP_PROXY/HTTPS_PROXY env fallback for gateway WebSocket

Discord Gateway WebSocket connections now honor HTTP_PROXY/HTTPS_PROXY
environment variables as fallback before direct connection, matching the
existing pattern from Discord REST API and WhatsApp.

This enables Discord channel deployment in Kubernetes/OpenShift environments
with network policy egress restrictions, removing the need for broad :443
egress as a workaround.

- Add createEnvProxyDiscordGatewayAgent() helper (mirrors rest-fetch.ts pattern)
- Try env proxy before direct HttpsAgent in createDiscordGatewayPlugin()
- Explicit channels.discord.proxy still overrides env proxy
- Add formatErrorMessage and resolveEnvHttpProxyAgentOptions imports

Fixes openclaw#98266

* test(discord): keep gateway proxy explicit

Signed-off-by: sallyom <[email protected]>

* fix(discord): allow explicit remote proxy URLs

---------

Signed-off-by: sallyom <[email protected]>
Co-authored-by: sallyom <[email protected]>
Co-authored-by: joshavant <[email protected]>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

channel: discord Channel integration: discord docs Improvements or additions to documentation merge-risk: 🚨 security-boundary 🚨 May affect sandboxing, authorization, credentials, or sensitive data. P2 Normal backlog priority with limited blast radius. proof: sufficient ClawSweeper judged the real behavior proof convincing. rating: 🐚 platinum hermit Good normal PR readiness with ordinary maintainer review expected. size: M status: 👀 ready for maintainer look ClawSweeper has no concrete contributor-facing blocker left for this PR.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants