fix(slack): bridge presentation capabilities and renderPresentation through channel outbound facade - #95463
Conversation
|
Codex review: needs maintainer review before merge. Reviewed July 4, 2026, 10:47 AM ET / 14:47 UTC. Summary PR surface: Source +284, Tests +440. Total +724 across 14 files. Reproducibility: yes. at source level: current main routes Slack presentation payloads through a facade without renderPresentation and classifies text before presentation, matching the live CLI text-receipt report in #95440. Review metrics: 2 noteworthy metrics.
Stored data model Root-cause cluster Members:
Proposal only: this assessment does not dispatch repair, suppress jobs, mutate sibling items, close, or merge anything. Merge readiness Overall follows the weaker of proof and patch quality, so missing proof can cap an otherwise strong patch. Rank-up moves:
Mantis proof suggestion Risk before merge
Maintainer options:
Next step before merge
Security Review detailsBest possible solution: Land this branch after maintainers accept the card-receipt and Slack delivery semantics; no narrow automated repair is indicated. Do we have a high-confidence way to reproduce the issue? Yes at source level: current main routes Slack presentation payloads through a facade without renderPresentation and classifies text before presentation, matching the live CLI text-receipt report in #95440. Is this the best way to solve the issue? Yes: delegating the existing Slack renderer through the active facade and classifying rendered presentation data before text is the narrow owner-boundary fix; a second renderer or config switch would duplicate existing contracts. AGENTS.md: found and applied where relevant. Codex review notes: model internal, reasoning high; reviewed against 445976ed49d0. Label changesLabel changes:
Label justifications:
Evidence reviewedPR surface: Source +284, Tests +440. Total +724 across 14 files. View PR surface stats
Acceptance criteria:
What I checked:
Likely related people:
What the crustacean ranks mean
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
Review history (2 earlier review cycles)
|
|
@clawsweeper re-review |
|
🦞🧹 I asked ClawSweeper to review this item again. |
Match the simpler approach from openclaw#95463: only reorder text↔card priority in resolvePayloadReceiptKind, removing the over-engineered hasPresentationChannelData helper and its channelData-specific tests. The core fix is 3 lines — checking presentation before text so that payloads with both a presentation and a text fallback correctly report 'card' instead of 'text'. Ref: openclaw#95440
|
@clawsweeper re-review |
|
@clawsweeper re-review Added real Slack proof: openclaw agent --local delivers message to real Slack workspace channel. Bot token verified, presentation bridge active. |
|
🦞👀 Command router queued. I will update this comment with the next step. |
|
@clawsweeper re-review Changes since last review (a7cde7df):
All 46 Slack + 10 outbound-bridge tests pass. |
|
🦞🧹 I asked ClawSweeper to review this item again. |
|
@clawsweeper re-review Added real Slack proof: |
Co-authored-by: 徐闻涵0668001344 <xu.wenhan1@xydigit.com>
a7711ff to
b0fade6
Compare
|
Land-ready verification for
Ready to land after exact-head hosted checks. |
Co-authored-by: Peter Steinberger <steipete@gmail.com>
What Problem This Solves
Fixes an issue where Slack users sending portable presentations would receive only plain-text fallback content because the Slack channel facade did not expose its native presentation renderer. This affected Block Kit text, dividers, buttons, selects, card receipts, and callback delivery.
Closes #95440
Why This Change Was Made
The Slack facade now advertises one shared capability contract and lazily delegates native rendering to the Slack outbound adapter. The adapter preserves authored block order and visible payload text, enforces Slack's text/action/option/message limits, falls back without dropping content, and ignores callbacks generated by URL-only buttons (including already-posted legacy buttons). Core receipt classification now recognizes semantic presentations and non-empty rendered presentation blocks before plain text.
User Impact
Slack presentation payloads now render as native Block Kit cards with working controls and
cardreceipts. Unsupported or oversized content remains visible as a complete fallback; ordinary non-presentation media and interactive sends retain their existing behavior.Evidence
receipt.parts[0].kind = "card"CLI result, and independent production confirmation that bridging this facade path restores buttons and callbacks.node scripts/run-vitest.mjs ...across nine core/Slack files — 176 tests passed.tbx_01kwpqw5dfdsykccvz0923dy0d, Actions run 28708979405, exit 0.tbx_01kwpr3ayn81x3n7wrt6yymxwd, Actions run 28709080389, exit 0.