Skip to content

fix(feishu): stream plain replies as cards#88276

Merged
steipete merged 3 commits into
openclaw:mainfrom
qiangu:codex/feishu-streaming-card-replies
May 30, 2026
Merged

fix(feishu): stream plain replies as cards#88276
steipete merged 3 commits into
openclaw:mainfrom
qiangu:codex/feishu-streaming-card-replies

Conversation

@qiangu

@qiangu qiangu commented May 30, 2026

Copy link
Copy Markdown
Contributor

Summary

  • Treat Feishu channels.feishu.streaming=true as the documented streaming-card delivery path for ordinary final assistant text in renderMode: "auto", instead of falling through to normal text bubbles.
  • Start the Feishu streaming-card session when assistant output begins or partial snapshots arrive, so Codex/app-server replies can use one card lifecycle before the final close.
  • Keep non-final delivery boundaries intact: completed block replies still require blockStreaming, streaming:false still sends plain messages, and tool-summary replies stay on the normal message path.

Real behavior proof

  • Behavior or issue addressed: Feishu/Lark replies with channels.feishu.streaming=true and default renderMode:auto should render ordinary final assistant text as an interactive streaming card from the first visible reply, not as an ordinary grey text bubble.
  • Real environment tested: Local OpenClaw gateway built from this PR branch (codex/feishu-streaming-card-replies, head f3bc7f738c7820e53b813522e26a8a0fd97524c1) running as version 2026.5.30 on macOS against a real Feishu p2p bot conversation. Config had channels.feishu.streaming=true, channels.feishu.footer.elapsed=true, channels.feishu.footer.status=true, and messages.visibleReplies=automatic.
  • Exact steps or command run after this patch:
    1. Stopped the installed 2026.5.27 LaunchAgent gateway.
    2. Started this PR branch from source on the normal gateway port with:
      node scripts/run-node.mjs gateway run --bind loopback --port 18789 --force --verbose --ws-log compact --raw-stream --raw-stream-path /tmp/openclaw-pr-feishu-streaming-proof-raw.jsonl
    3. Confirmed openclaw gateway status --require-rpc --timeout 15000 reported CLI version 2026.5.27 but running Gateway version 2026.5.30, with Feishu enabled and connected.
    4. Sent this real Feishu p2p prompt to the bot: PR proof 88276-1621:请直接普通回复这一句,不要调用任何工具,不要发图片或附件,只回复:PATCHED_FEISHU_STREAMING_CARD_88276_1621.
  • Evidence after fix (screenshot, recording, terminal capture, console output, redacted runtime log, linked artifact, or copied live output): A tester-provided Feishu screenshot captured at 2026-05-30 16:48 Asia/Shanghai shows the reply under 1 条回复 as a white bordered card, containing PATCHED_FEISHU_STREAMING_CARD_88276_1621, with footer text 已完成 · 耗时 14.5s. Redacted runtime log from the same run:
    2026-05-30T16:48:11.428+08:00 feishu[default][msg:<redacted inbound om_...>]: phase transition (from=idle, to=creating, source=ensureCardCreated)
    2026-05-30T16:48:11.711+08:00 feishu[default][msg:<redacted inbound om_...>]: cardkit card.create response (code=0, msg=success, context=cardId=<redacted>)
    2026-05-30T16:48:11.714+08:00 feishu[default][msg:<redacted inbound om_...>]: created CardKit entity (cardId=<redacted>, initialSequence=1)
    2026-05-30T16:48:12.481+08:00 feishu[default][msg:<redacted inbound om_...>]: phase transition (from=creating, to=streaming, source=ensureCardCreated.cardkit)
    2026-05-30T16:48:12.485+08:00 feishu[default][msg:<redacted inbound om_...>]: sent CardKit card (messageId=<redacted reply om_...>)
    2026-05-30T16:48:12.543+08:00 feishu[default][msg:<redacted inbound om_...>]: phase transition (from=streaming, to=completed, source=onIdle, reason=normal)
    2026-05-30T16:48:12.886+08:00 feishu[default][msg:<redacted inbound om_...>]: cardkit card.settings response (code=0, msg=success, context=seq=2, streaming_mode=false)
    2026-05-30T16:48:13.210+08:00 feishu[default][msg:<redacted inbound om_...>]: cardkit card.update response (code=0, msg=success, context=seq=3, cardId=<redacted>)
    2026-05-30T16:48:13.213+08:00 feishu[default][msg:<redacted inbound om_...>]: reply completed, card finalized (elapsedMs=14823, isCardKit=true)
    
  • Observed result after fix: The first visible bot reply was the streaming-card reply container, not a grey plain message bubble. The runtime created and sent a CardKit card, finalized it with streaming_mode=false, and the final Feishu UI showed the status/elapsed footer.
  • What was not tested: No additional gaps for this Feishu p2p final-reply path.
  • Proof limitations or environment constraints: The screenshot was captured in a private Feishu tenant and is described/redacted here instead of uploading private tenant imagery. lark-cli im +messages-search was not used because the local user token lacks search:message; the live gateway/CardKit runtime log above is the API-side proof.

Verification

  • npm exec --yes [email protected] -- pnpm exec node scripts/run-vitest.mjs run extensions/feishu/src/reply-dispatcher.test.ts — 59 tests passed.
  • npm exec --yes [email protected] -- pnpm exec oxlint extensions/feishu/src/reply-dispatcher.ts extensions/feishu/src/reply-dispatcher.test.ts
  • npm exec --yes [email protected] -- pnpm exec oxfmt --check extensions/feishu/src/reply-dispatcher.ts extensions/feishu/src/reply-dispatcher.test.ts
  • git diff --check
  • Earlier adjacent hook sanity on the first revision: npm exec --yes [email protected] -- pnpm exec node scripts/run-vitest.mjs run extensions/codex/src/app-server/event-projector.test.ts src/auto-reply/reply/agent-runner-execution.test.ts --testNamePattern "assistant message start|onPartialReply|bridges CLI assistant agent events"

Risk Checklist

  • User-visible behavior changed: Yes. Feishu streaming:true now applies to ordinary final assistant text in auto mode, matching the channel documentation.
  • Config, environment, or migration behavior changed: No.
  • Security, auth, secrets, network, or tool execution behavior changed: No.
  • Highest-risk area: accidentally changing non-final deliveries. Mitigation: the implementation now gates forced streaming cards on info.kind === "final"; a regression test proves plain tool text still uses sendMessageFeishu when streaming is enabled.

Current Review State

  • Addressed ClawSweeper P1 feedback by narrowing the forced streaming-card predicate from non-block replies to final replies only.
  • Added a regression test for streaming:true tool-summary delivery.
  • Added live Feishu/CardKit proof from a real p2p run on this PR branch.
  • Supersedes the earlier message-tool routing attempt in fix(message): keep automatic replies out of implicit sends #88228; this PR targets the actual Feishu streaming-card reply path.

@openclaw-barnacle openclaw-barnacle Bot added channel: feishu Channel integration: feishu size: S labels May 30, 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 May 30, 2026
@clawsweeper

clawsweeper Bot commented May 30, 2026

Copy link
Copy Markdown
Contributor

Codex review: found issues before merge. Reviewed May 30, 2026, 1:07 PM ET / 17:07 UTC.

Summary
The PR changes Feishu reply dispatch so streaming-enabled final and partial plain assistant replies use CardKit cards, adds stale preview discard handling for voice media, and expands dispatcher tests.

PR surface: Source +61, Tests +167. Total +228 across 3 files.

Reproducibility: yes. at source/proof level: current main keeps plain final text on the normal message path, while the PR body shows a real Feishu p2p run where the same final text becomes a CardKit reply.

Review metrics: 1 noteworthy metric.

  • Default-on Feishu delivery path: 1 existing final-text path changed. Ordinary final replies move from searchable post messages to CardKit when streaming is enabled by default, so maintainers should accept or gate the behavior before merge.

Merge readiness
Overall: 🦐 gold shrimp
Proof: 🦞 diamond lobster
Patch quality: 🦐 gold shrimp
Result: needs maintainer review before merge.

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

Rank-up moves:

  • Resolve the Feishu searchability/default-delivery decision by gating the behavior, composing it with fallback work, or recording explicit maintainer acceptance.

Risk before merge

  • [P1] Existing Feishu users with default-on streaming would have ordinary final text delivered as CardKit interactive cards, and the linked Feishu search issue says that content is not conversation-search indexed.
  • [P2] The safe product path is still unsettled because the searchable fallback work remains open and this PR does not gate or compose with that fallback.

Maintainer options:

  1. Gate or compose the searchable fallback (recommended)
    Before merge, keep existing searchable plain-message delivery as the default or combine the CardKit path with an opt-in searchable post fallback.
  2. Accept the CardKit default tradeoff
    Maintainers can intentionally accept non-searchable CardKit final replies for streaming-enabled Feishu users, but that decision should be explicit before landing.
  3. Pause for the fallback PR
    Pause this PR until fix(feishu): add searchable streaming fallback #74808 or a replacement settles the search-indexing behavior.

Next step before merge

  • [P2] The remaining blocker is maintainer product judgment on Feishu default delivery and searchability, not a safe automated repair.

Security
Cleared: No concrete security or supply-chain regression was found; the diff adds Feishu message deletion only for bot-created transient streaming previews and does not change dependencies, secrets, or permissions.

Review findings

  • [P1] Preserve searchable delivery for default streaming users — extensions/feishu/src/reply-dispatcher.ts:561-567
Review details

Best possible solution:

Land only after maintainers either gate the plain-final CardKit behavior, compose it with a searchable fallback, or explicitly accept the Feishu searchability tradeoff.

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

Yes at source/proof level: current main keeps plain final text on the normal message path, while the PR body shows a real Feishu p2p run where the same final text becomes a CardKit reply.

Is this the best way to solve the issue?

No as submitted: the dispatcher change and tests are focused, but changing default streaming users' plain replies into CardKit messages needs gating, fallback composition, or explicit maintainer acceptance.

Full review comments:

Overall correctness: patch is incorrect
Overall confidence: 0.86

AGENTS.md: found and applied where relevant.

Codex review notes: model gpt-5.5, reasoning high; reviewed against 522da25932b3.

Label changes

Label justifications:

  • P2: This is a Feishu channel delivery fix with limited blast radius, but it changes visible behavior for default streaming users.
  • merge-risk: 🚨 compatibility: Existing Feishu streaming-enabled users would get a different default delivery format for ordinary final text without changing config.
  • merge-risk: 🚨 message-delivery: The PR changes which Feishu transport path delivers visible final replies, affecting searchability and user-visible message behavior.
  • rating: 🦐 gold shrimp: Overall readiness is 🦐 gold shrimp; proof is 🦞 diamond lobster and patch quality is 🦐 gold shrimp.
  • status: ⏳ waiting on author: ClawSweeper has contributor-facing work open and is waiting for author action. Sufficient (logs): The PR body supplies real Feishu p2p CardKit runtime logs and a described screenshot for the central final-reply card behavior.
  • proof: sufficient: Contributor real behavior proof is sufficient. The PR body supplies real Feishu p2p CardKit runtime logs and a described screenshot for the central final-reply card behavior.
Evidence reviewed

PR surface:

Source +61, Tests +167. Total +228 across 3 files.

View PR surface stats
Area Files Added Removed Net
Source 2 77 16 +61
Tests 1 170 3 +167
Docs 0 0 0 0
Config 0 0 0 0
Generated 0 0 0 0
Other 0 0 0 0
Total 3 247 19 +228

What I checked:

Likely related people:

  • steipete: Recent current-main Feishu work and the live PR timeline both show follow-up commits on the same dispatcher and streaming-card area. (role: recent Feishu contributor and PR follow-up author; confidence: high; commits: 05634708e053, 1395b99729bb, 1ba20238fc15; files: extensions/feishu/src/reply-dispatcher.ts, extensions/feishu/src/streaming-card.ts)
  • vincentkoc: History shows recent Feishu reply-dispatcher work around reasoning previews and runtime seams near this streaming path. (role: recent Feishu streaming contributor; confidence: high; commits: d609f71c9b74, 319aa2f1fe67, ddd1c77b49ef; files: extensions/feishu/src/reply-dispatcher.ts)
  • nszhsl: GitHub commit metadata ties structured card headers, note footers, and streaming-card enhancements to this contributor. (role: streaming-card feature history; confidence: medium; commits: df3a247db2a9, 8a2273e210a6; files: extensions/feishu/src/streaming-card.ts, extensions/feishu/src/reply-dispatcher.ts)
  • rexl2018: History shows prior hardening of Feishu streaming merge semantics and final-reply dedupe in the same files this PR extends. (role: streaming merge and final-dedupe feature history; confidence: medium; commits: 3bf6ed181e03; files: extensions/feishu/src/reply-dispatcher.ts, extensions/feishu/src/streaming-card.ts)
  • xzq-xu: GitHub commit metadata ties the original Feishu CardKit streaming-card support to this contributor. (role: original streaming-card contributor; confidence: medium; commits: 65be9ccf63f3; files: extensions/feishu/src/streaming-card.ts, extensions/feishu/src/reply-dispatcher.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.

@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: 🚨 message-delivery 🚨 May drop, duplicate, misroute, suppress, or wrongly target messages. labels May 30, 2026
@qiangu
qiangu force-pushed the codex/feishu-streaming-card-replies branch from c090d80 to f3bc7f7 Compare May 30, 2026 09:06
@qiangu

qiangu commented May 30, 2026

Copy link
Copy Markdown
Contributor Author

@clawsweeper re-review

Updated after your review:

  • Narrowed the forced Feishu streaming-card path to info.kind === "final", so tool summaries stay on the normal message path.
  • Added a regression test for streaming:true plain tool text delivery.
  • Added live Feishu/CardKit proof from a real p2p run on this PR branch to the PR body, including the screenshot observation and redacted runtime log excerpt.

@openclaw-barnacle openclaw-barnacle Bot added proof: supplied External PR includes structured after-fix real behavior proof. and removed triage: mock-only-proof Candidate: PR proof only shows tests, mocks, snapshots, lint, typecheck, or CI. labels May 30, 2026
@clawsweeper

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

Re-review progress:

@clawsweeper clawsweeper Bot added 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 May 30, 2026
@qiangu
qiangu force-pushed the codex/feishu-streaming-card-replies branch from f3bc7f7 to bf04b05 Compare May 30, 2026 09:23
@qiangu

qiangu commented May 30, 2026

Copy link
Copy Markdown
Contributor Author

@clawsweeper re-review

Addressed the active-streaming tool-summary feedback:

  • Active Feishu streaming sessions now consume only block/final text.
  • Tool and other non-final text deliveries fall through to the normal Feishu message path even after onAssistantMessageStart has opened a streaming card.
  • Added a regression test that starts a streaming session before delivering kind: "tool" text, then verifies the final answer still closes the streaming card.

Verification rerun locally:

  • npm exec --yes [email protected] -- pnpm exec node scripts/run-vitest.mjs run extensions/feishu/src/reply-dispatcher.test.ts
  • npm exec --yes [email protected] -- pnpm exec oxlint extensions/feishu/src/reply-dispatcher.ts extensions/feishu/src/reply-dispatcher.test.ts
  • npm exec --yes [email protected] -- pnpm exec oxfmt --check extensions/feishu/src/reply-dispatcher.ts extensions/feishu/src/reply-dispatcher.test.ts
  • git diff --check

@clawsweeper

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

Re-review progress:

@openclaw-barnacle openclaw-barnacle Bot removed the proof: sufficient ClawSweeper judged the real behavior proof convincing. label May 30, 2026
@clawsweeper clawsweeper Bot added the proof: sufficient ClawSweeper judged the real behavior proof convincing. label May 30, 2026
@qiangu
qiangu force-pushed the codex/feishu-streaming-card-replies branch from bf04b05 to 42e997c Compare May 30, 2026 09:41
@qiangu

qiangu commented May 30, 2026

Copy link
Copy Markdown
Contributor Author

@clawsweeper re-review

Addressed the assistant-start empty-card feedback:

  • onAssistantMessageStart no longer creates a Feishu CardKit streaming session by itself.
  • Status clearing on assistant start now only updates an existing/starting streaming session, so NO_REPLY or otherwise non-deliverable final turns cannot close a newly created empty card.
  • Final/partial deliverable text still starts the streaming card path, preserving the plain final-text streaming-card behavior.
  • Added regression coverage for assistant message start followed by no deliverable final text.

Verification rerun locally:

  • npm exec --yes [email protected] -- pnpm exec node scripts/run-vitest.mjs run extensions/feishu/src/reply-dispatcher.test.ts
  • npm exec --yes [email protected] -- pnpm exec oxlint extensions/feishu/src/reply-dispatcher.ts extensions/feishu/src/reply-dispatcher.test.ts
  • npm exec --yes [email protected] -- pnpm exec oxfmt --check extensions/feishu/src/reply-dispatcher.ts extensions/feishu/src/reply-dispatcher.test.ts
  • git diff --check

@clawsweeper

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

Re-review progress:

@openclaw-barnacle openclaw-barnacle Bot removed the proof: sufficient ClawSweeper judged the real behavior proof convincing. label May 30, 2026
@clawsweeper clawsweeper Bot added proof: sufficient ClawSweeper judged the real behavior proof convincing. rating: 🐚 platinum hermit Good normal PR readiness with ordinary maintainer review expected. 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. labels May 30, 2026
@steipete
steipete force-pushed the codex/feishu-streaming-card-replies branch from c0ecfa0 to a2aa9c1 Compare May 30, 2026 16:32
@openclaw-barnacle openclaw-barnacle Bot removed the proof: sufficient ClawSweeper judged the real behavior proof convincing. label May 30, 2026
@clawsweeper clawsweeper Bot added the proof: sufficient ClawSweeper judged the real behavior proof convincing. label May 30, 2026
@openclaw-barnacle openclaw-barnacle Bot added the gateway Gateway runtime label May 30, 2026
@clawsweeper clawsweeper Bot added 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. merge-risk: 🚨 compatibility 🚨 May break existing users, config, migrations, defaults, or upgrade paths. and removed 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. labels May 30, 2026
@steipete
steipete force-pushed the codex/feishu-streaming-card-replies branch from 1703261 to 1ba2023 Compare May 30, 2026 16:59
@openclaw-barnacle openclaw-barnacle Bot removed the gateway Gateway runtime label May 30, 2026
@steipete

Copy link
Copy Markdown
Contributor

Verification before merge for head 1ba20238fc15267a15c51a104790fdf70bd99d18:

Behavior addressed: Feishu streaming: true now streams ordinary final assistant replies through CardKit in auto mode, preserves tool-summary text delivery, discards stale partial previews only when final delivery intentionally suppresses text for voice media or duplicate final text, and preserves streamed partial text for regular media-only finals.

Real environment tested: local repo validation plus GitHub PR CI. No fresh live Feishu tenant retest after the maintainer fix; the PR's supplied real-behavior proof covers the original plain streaming-card path, and the new unit coverage covers the voice/media preview-discard paths.

Exact steps or command run after this patch:

node scripts/run-vitest.mjs run extensions/feishu/src/reply-dispatcher.test.ts
pnpm tsgo:extensions
pnpm test:extensions:package-boundary:compile
pnpm exec oxfmt --check extensions/feishu/src/reply-dispatcher.ts extensions/feishu/src/reply-dispatcher.test.ts extensions/feishu/src/streaming-card.ts
git diff --check
.agents/skills/autoreview/scripts/autoreview --mode branch --base origin/main

Evidence after fix:

reply-dispatcher.test.ts: 63 passed
pnpm tsgo:extensions: passed
extension package boundary compile: passed, 112 plugins compiled
oxfmt --check + git diff --check: passed
autoreview: clean, no accepted/actionable findings
GitHub PR checks on run 26689677607: OpenGrep passed, Real behavior proof passed, Critical Quality selected shards passed, extension package boundary passed, lint/types/dependency/build/check shards passed except the unrelated no-output timeouts below.

Observed result after fix: plain Feishu final replies enter the streaming card path; voice media finals discard stale text previews instead of leaving duplicate cards; regular media-only finals keep the active streamed card and send the media attachment.

What was not tested: no new live Feishu tenant run after the maintainer fix. CI run 26689677607 had two repeated broad Vitest no-output timeouts on unrelated shards (checks-node-agentic-commands-doctor, checks-node-core-runtime-infra-state) after rerun attempt 2; both logs show test-harness no-output timeouts outside extensions/feishu/**, with no Feishu assertion failure.

@steipete
steipete merged commit 3b8ab4e into openclaw:main May 30, 2026
163 of 168 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

channel: feishu Channel integration: feishu 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. P2 Normal backlog priority with limited blast radius. proof: sufficient ClawSweeper judged the real behavior proof convincing. proof: supplied External PR includes structured after-fix real behavior proof. rating: 🦐 gold shrimp Decent PR readiness signal, but merge confidence is limited. size: M status: ⏳ waiting on author ClawSweeper has contributor-facing work open and is waiting for author action.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants