openclaw - 💡(How to fix) Fix Slack modal view_submission payload is compacted before plugins can access full input state

Official PRs (…)
ON THIS PAGE

Recommended Tools

×6

Utilities matched from this issue’s tags and category — try them while you read without losing context.

GitHub issue graph ai analysis

Paste a GitHub issue URL. We fetch that issue, discover linked issues from bodies/comments/timeline, collect linked pull requests, and produce a structured English report.

The report is written in English Markdown for sharing and archival.

Helpful · Quick feedback

Loading…

Slack modal view_submission events are currently converted directly into compact system events before plugin/extensions can access the full submitted state. For larger modals, OpenClaw truncates inputs to 3 entries, which makes plugin-owned workflows unable to process the complete form payload.

This blocks contract/intake-style workflows where a Slack modal collects many structured fields and the plugin needs the full submitted values as the source of truth.

Error Message

Environment:

Root Cause

Slack modal view_submission events are currently converted directly into compact system events before plugin/extensions can access the full submitted state. For larger modals, OpenClaw truncates inputs to 3 entries, which makes plugin-owned workflows unable to process the complete form payload.

This blocks contract/intake-style workflows where a Slack modal collects many structured fields and the plugin needs the full submitted values as the source of truth.

Fix Action

Fix / Workaround

Block action buttons dispatch correctly to the plugin handler. The handler opens a modal with callback_id=openclaw:contract_confirm_hearing.

  • block_actions call dispatchSlackPluginInteractiveHandler(...)
  • view_submission is handled by registerModalLifecycleHandler(...)
  • modal lifecycle handling calls emitSlackModalLifecycleEvent(...)
  • that enqueues formatSlackInteractionSystemEvent(eventPayload)
  • SLACK_INTERACTION_COMPACT_INPUTS_MAX_ITEMS = 3
  • long payloads become compact events with inputsOmitted and payloadTruncated
  1. Dispatch view_submission / view_closed lifecycle events to a plugin handler based on callback_id or a plugin namespace.
  2. Let the plugin persist the full submitted state to a file/DB and return a compact summary or submission_id.
  3. Keep the agent-visible system event compact by default, but include a durable reference such as submission_id, callbackId, userId, channel/thread, and a short summary.

Code Example

api.registerInteractiveHandler({
  channel: "slack",
  namespace: "dean.contract",
  handler: ...
});

---

callbackId: openclaw:contract_confirm_hearing
inputs received: 3 items
  customer_name / customer_kana / customer_category
inputsOmitted: 25
payloadTruncated: true
RAW_BUFFERClick to expand / collapse

Summary

Slack modal view_submission events are currently converted directly into compact system events before plugin/extensions can access the full submitted state. For larger modals, OpenClaw truncates inputs to 3 entries, which makes plugin-owned workflows unable to process the complete form payload.

This blocks contract/intake-style workflows where a Slack modal collects many structured fields and the plugin needs the full submitted values as the source of truth.

Observed behavior

Environment:

  • OpenClaw: 2026.5.12 (f066dd2)
  • Channel: Slack
  • Gateway was restarted after the 2026.5.12 dist update and is running the updated code.
  • Relevant installed file observed: /opt/homebrew/lib/node_modules/openclaw/dist/provider-Bh1oXjiK.js

A plugin/extension registers an interactive handler:

api.registerInteractiveHandler({
  channel: "slack",
  namespace: "dean.contract",
  handler: ...
});

Block action buttons dispatch correctly to the plugin handler. The handler opens a modal with callback_id=openclaw:contract_confirm_hearing.

When the modal is submitted with 28 fields, the agent session receives only the compacted system event:

callbackId: openclaw:contract_confirm_hearing
inputs received: 3 items
  customer_name / customer_kana / customer_category
inputsOmitted: 25
payloadTruncated: true

The full submitted form state is not available to the plugin handler.

Code path observed

In provider-Bh1oXjiK.js:

  • block_actions call dispatchSlackPluginInteractiveHandler(...)
  • view_submission is handled by registerModalLifecycleHandler(...)
  • modal lifecycle handling calls emitSlackModalLifecycleEvent(...)
  • that enqueues formatSlackInteractionSystemEvent(eventPayload)
  • SLACK_INTERACTION_COMPACT_INPUTS_MAX_ITEMS = 3
  • long payloads become compact events with inputsOmitted and payloadTruncated

So plugin handlers can handle the button click, but cannot receive the full modal submission payload.

Expected behavior

Plugin-owned modals should have a way to receive the full view_submission state before it is compacted for the agent-visible system event.

A workable design would be:

  1. Dispatch view_submission / view_closed lifecycle events to a plugin handler based on callback_id or a plugin namespace.
  2. Let the plugin persist the full submitted state to a file/DB and return a compact summary or submission_id.
  3. Keep the agent-visible system event compact by default, but include a durable reference such as submission_id, callbackId, userId, channel/thread, and a short summary.

This preserves context-size safety while allowing plugins to handle large structured modal submissions.

Why increasing the compact limit is not enough

Raising SLACK_INTERACTION_COMPACT_INPUTS_MAX_ITEMS would help this one 28-field case, but it turns the agent system event into a data transport channel. That has downsides:

  • context bloat for large forms
  • more PII in LLM-visible session history
  • harder audit boundaries
  • still fragile for larger forms

The cleaner boundary is plugin receives full state, agent receives a compact reference.

Reproduction outline

  1. Create a Slack plugin/extension that registers registerInteractiveHandler({ channel: "slack", namespace: "example.form" }).
  2. On button click, call views.open with callback_id="openclaw:example_form" and a modal containing more than 3 input blocks.
  3. Submit the modal.
  4. Observe the agent session receives a compact event with only 3 inputs and inputsOmitted.
  5. Observe the plugin handler does not receive the full view_submission.

Impact

This prevents production use of Slack modal workflows for structured intake/approval forms where all submitted values must be processed exactly, for example:

  • contract confirmation intake
  • customer onboarding forms
  • approval forms with many fields
  • tax/accounting structured questionnaires

Suggested acceptance criteria

  • Plugin API supports registering a modal lifecycle submission handler, or extends interactive handlers to route view_submission by callback_id.
  • Full submitted state is available to the plugin handler.
  • Default agent-visible system event remains compact.
  • The compact event can include a submission_id or plugin-provided summary/reference.
  • Existing OpenClaw reply buttons/selects and current modal system events remain backward compatible.

Vote matrix · Quick signals

Works
Did the solution work? Tap to confirm.
Easy Fix
Was it a quick fix?
Time Saver
Did it save you time?
Blocking
Was it severely blocking?
Common Issue
Are others likely hitting this too?
Flaky / Intermittent
Is it intermittent?
Verified / Reproducible
Can you reproduce it reliably?
Loading…

FAQ

Expected behavior

Plugin-owned modals should have a way to receive the full view_submission state before it is compacted for the agent-visible system event.

A workable design would be:

  1. Dispatch view_submission / view_closed lifecycle events to a plugin handler based on callback_id or a plugin namespace.
  2. Let the plugin persist the full submitted state to a file/DB and return a compact summary or submission_id.
  3. Keep the agent-visible system event compact by default, but include a durable reference such as submission_id, callbackId, userId, channel/thread, and a short summary.

This preserves context-size safety while allowing plugins to handle large structured modal submissions.

Still need to ship something?

×6

Another batch ranked right after the header list — different links, same matching logic.

Back to top recommendations

TRENDING

openclaw - 💡(How to fix) Fix Slack modal view_submission payload is compacted before plugins can access full input state