Skip to content

feat: upgrade card send - #1688

Merged
liangshuo-1 merged 1 commit into
larksuite:mainfrom
91-enjoy:feat/upgrade_card_send
Jul 2, 2026
Merged

feat: upgrade card send#1688
liangshuo-1 merged 1 commit into
larksuite:mainfrom
91-enjoy:feat/upgrade_card_send

Conversation

@91-enjoy

@91-enjoy 91-enjoy commented Jun 30, 2026

Copy link
Copy Markdown
Contributor

Summary

Before this change, lark-im skill had no structured guidance for creating and sending interactive card messages. Agents had to hand-write card JSON from scratch, leading to inconsistent quality, missing required
fields, and incorrect component usage.

This PR introduces a comprehensive Card 2.0 card creation system to the lark-im skill, including:

  • A step-by-step card creation workflow
  • A P0–P7 quality benchmark system for visual design
  • Detailed reference docs for all 27 Card 2.0 components
  • Updated +messages-send / +messages-reply shortcuts to integrate with the workflow

Changes

New workflow: references/card/lark-im-card-create.md

A complete 7-step card creation orchestration workflow that agents must follow before sending any interactive card. Covers:

  • Step 0 — Entry branch: Determines input type (text-only, image-only, or image+text combination) and fidelity strategy
  • Step 1 — Intent analysis: Outputs a structured design brief covering version choice, component selection, interaction types, width mode, and optional auto-listen config
  • Step 2 — Document loading: Loads style guide and selected component docs based on the Step 1 component list
  • Step 3 — Card JSON construction: Builds the full card JSON (header + body) according to the component plan, then runs the P0–P7 hard gate self-check. P0 and P1–P3 are blocking — must pass before proceeding to send
  • Step 4 — Send: Sends the card via lark-cli im +messages-send. Retries up to 3 times with error-specific fixes. Falls back to Card 1.0 reconstruction if all retries fail
  • Step 5 — Interaction callback (optional): Handles card.action.trigger callbacks for interactive components — buttons, forms, selectors, pickers, overflow menus, etc.
  • Step 6 — User feedback fixes (on-demand): Surgical, minimal-diff modifications based on user feedback after seeing the sent card. Resend after fixes

New style guide: references/card/lark-im-card-style.md

Defines 8 quality tiers (P0–P7) that serve as the sole arbiter of card quality:

  • P0 (gate): Must match user intent exactly — decompose requirements into individual info points and verify each has a corresponding component
  • P1 (blocking): Visual hierarchy — one primary focus area, supporting info in grey, proper text size/weight gradient
  • P2 (blocking): Grouping — related fields in same container (column_set/interactive_container), different topics separated by containers not <hr>
  • P3 (blocking): Complexity — at least 2 visual blocks with ≥1 non-plain-text structural element; ≤5 blocks, ≤3 color families
  • P4 (hygiene): Contrast — title and body differ by at least one size or weight level
  • P5 (hygiene): Alignment — spacing via container properties, not scattered margins; values from 2/4/8/12px set
  • P6 (bonus): Semantic consistency — red=down/error, green=up/success, grey=secondary
  • P7 (bonus): Robustness — weighted/none layout (avoid stretch), light/dark color tokens

Includes an "intent → component combination" reference table covering notification, data display, form input, and confirmation dialog patterns.

New root schema: references/card/card-2.0-schema.md

Documents the Card 2.0 root structure, config options (update_multi, width_mode, style, text_size presets), color token system (24 named colors with light/dark variants), and a categorized component index (containers,
display, interactive).

27 new component references: references/card/components/*.md

One file per Card 2.0 component, each containing:

  • JSON schema fields with types and constraints
  • Code examples
  • Common pitfalls (e.g. column_set children must be column, button needs explicit behaviors for callbacks)

Components covered:

  • Containers (5): column_set, collapsible_panel, form, interactive_container, recycling_container
  • Display (10): header, div, markdown, img, img_combination, person, person_list, chart, table, hr
  • Interactive (12): button, checker, input, overflow, select_img, select_person, select_static, multi_select_person, multi_select_static, date_picker, picker_datetime, picker_time

New resource references: references/card/resource/colors.md and icons.md

  • colors.md: 24 named color tokens with hex values for both light and dark themes
  • icons.md: Built-in icon name catalog grouped by category (UI actions, status, directional, etc.)

Updated files

  • SKILL.md: Added a mandatory pre-send gate — agents must read lark-im-card-create.md before any +messages-send or +messages-reply with --msg-type interactive
  • lark-im-messages-send.md: Cross-references the card workflow and adds --msg-type interactive documentation
  • lark-im-messages-reply.md: Same cross-reference for reply flow

Test Plan

  • make unit-test passed
  • Manual verification: trigger card creation via the skill workflow and confirm the output JSON passes the P0–P7 self-check
  • Verify existing non-card message flows (text, image, post) are unaffected

Related Issues

  • None

Summary by CodeRabbit

  • Documentation
    • Added a comprehensive Card 2.0 reference covering the card structure, style rules, colors, icons, and creation workflow.
    • Published detailed component guides for layouts, text, images, charts, forms, tables, selection controls, date/time pickers, buttons, and interactive containers.
    • Expanded IM message docs with clearer guidance for sending and replying with interactive cards, including required workflow steps and payload rules.

@github-actions github-actions Bot added domain/im PR touches the im domain size/XL Architecture-level or global-impact change labels Jun 30, 2026
@coderabbitai

coderabbitai Bot commented Jun 30, 2026

Copy link
Copy Markdown

Review Change Stack

📝 Walkthrough

Walkthrough

Adds Card 2.0 reference docs, a creation workflow, and style/resource guidance for Lark IM interactive cards. Also strengthens messages-send, messages-reply, and SKILL.md so interactive card payloads must come from the workflow output.

Changes

Lark IM Card 2.0 Documentation Suite

Layer / File(s) Summary
Interactive card guardrails in send/reply docs
skills/lark-im/SKILL.md, skills/lark-im/references/lark-im-messages-send.md, skills/lark-im/references/lark-im-messages-reply.md
Adds STOP warnings and notes requiring users to follow the card creation workflow before passing any JSON to --msg-type interactive --content.
Card creation workflow (lark-im-card-create.md)
skills/lark-im/references/card/lark-im-card-create.md
Defines the end-to-end card creation workflow: entry branching by input type, Steps 1–6, and an execution checklist.
Card style guide and P0–P7 quality rubric
skills/lark-im/references/card/lark-im-card-style.md
Adds the style guide, rubric, intent-to-component mapping, visual rules, layout patterns, truncation guidance, flex_mode, chart theming, and laser rules.
Card 2.0 root schema and color/icon resources
skills/lark-im/references/card/card-2.0-schema.md, skills/lark-im/references/card/resource/colors.md, skills/lark-im/references/card/resource/icons.md
Documents the Card 2.0 root JSON skeleton, component index, color enumeration rules, and icon token reference.
Container and layout component docs
skills/lark-im/references/card/components/column_set.md, collapsible_panel.md, form.md, interactive_container.md, recycling_container.md
Adds reference docs for container/layout components including fields, nesting constraints, and callback rules.
Display component docs
skills/lark-im/references/card/components/header.md, div.md, markdown.md, img.md, img_combination.md, person.md, person_list.md, chart.md, table.md, hr.md
Adds reference docs for display components with field tables, examples, and pitfall notes.
Interactive component docs
skills/lark-im/references/card/components/button.md, input.md, overflow.md, select_static.md, select_person.md, multi_select_static.md, multi_select_person.md, select_img.md, date_picker.md, picker_time.md, picker_datetime.md, checker.md
Adds reference docs for interactive components with field tables, callback rules, form integration notes, and nesting constraints.

Estimated code review effort: 2 (Simple) | ~15 minutes

Suggested reviewers: YangJunzhou-01

🚥 Pre-merge checks | ✅ 5
✅ Passed checks (5 passed)
Check name Status Explanation
Title check ✅ Passed The title is concise and related to the PR, though it is broader than the full Card 2.0 workflow scope.
Description check ✅ Passed The description matches the required template with Summary, Changes, Test Plan, and Related Issues sections.
Docstring Coverage ✅ Passed No functions found in the changed files to evaluate docstring coverage. Skipping docstring coverage check.
Linked Issues check ✅ Passed Check skipped because no linked issues were found for this pull request.
Out of Scope Changes check ✅ Passed Check skipped because no linked issues were found for this pull request.
✨ Finishing Touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands.

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 6

🧹 Nitpick comments (6)
skills/lark-im/references/card/components/multi_select_static.md (1)

40-40: 📐 Maintainability & Code Quality | 🔵 Trivial | ⚡ Quick win

Clarify callback field names for standalone vs form cases.

The callback description is ambiguous. Specify action.options for standalone and form_value[name] for form containers, matching the contract in lark-im-card-action-reply.md.

- 回调返回选中的多个值。
+ 回调(非 form):`action.tag="multi_select_static"` + `action.options`(逗号分隔的 value);form 内则读 `form_value[name]`。
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@skills/lark-im/references/card/components/multi_select_static.md` at line 40,
The callback description in the multi-select static reference is ambiguous;
update the wording to explicitly distinguish the standalone and form-container
cases. In the relevant section of the multi_select_static documentation, state
that the selected values are returned via action.options when used standalone,
and via form_value[name] when used inside a form container, keeping the
terminology aligned with lark-im-card-action-reply.md.
skills/lark-im/references/card/components/date_picker.md (2)

23-24: 📐 Maintainability & Code Quality | 🔵 Trivial | 💤 Low value

Clarify conditional requirement for placeholder.

The table marks placeholder as optional, but the description states it's required when initial_date is unset. Use the "否*" convention (like name field) to indicate conditional requirement, or clarify in the table.

- | `placeholder` | 否 | Object | / | 占位文本,plain_text;未设 `initial_date` 时必填 |
+ | `placeholder` | 否* | Object | / | 占位文本,plain_text;**未设 `initial_date` 时必填** |
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@skills/lark-im/references/card/components/date_picker.md` around lines 23 -
24, The `placeholder` field in the `date_picker` component table is described as
conditionally required when `initial_date` is not set, but it is currently
marked as optional. Update the documentation entry for `placeholder` to use the
conditional-required convention used elsewhere (for example, the `name` field)
or otherwise make the conditional requirement explicit in the table so the
requirement is unambiguous.

34-34: 📐 Maintainability & Code Quality | 🔵 Trivial | ⚡ Quick win

Incomplete callback documentation for form container case.

Add the form container fallback to form_value[name] for consistency with the universal form rule documented in lark-im-card-action-reply.md.

- 回调:`action.tag="date_picker"` + `action.option`(日期字符串,如 `"2025-06-10 +0800"`)+ `action.timezone`;form 内则读 `form_value[name]`。
+ 回调(非 form):`action.tag="date_picker"` + `action.option`(日期字符串,如 `"2025-06-10 +0800"`)+ `action.timezone`;form 内则读 `form_value[name]`。
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@skills/lark-im/references/card/components/date_picker.md` at line 34, The
date_picker callback documentation is missing the form-container fallback, so
update the description in the date_picker section to mention that when used
inside a form container, the value should be read from form_value[name] as well
as the existing action.tag/action.option/action.timezone fields. Keep the
wording aligned with the universal form rule in lark-im-card-action-reply.md and
ensure the callback behavior is described consistently for both standalone and
form container cases.
skills/lark-im/references/card/components/select_person.md (1)

39-39: 📐 Maintainability & Code Quality | 🔵 Trivial | ⚡ Quick win

Incomplete callback documentation for form container case.

The callback description only covers the standalone case (action.option). Per the universal form container rule in lark-im-card-action-reply.md, when inside a form, the value appears in form_value[name] instead. Document both cases explicitly for consistency with other components.

- 回调 `action.tag="select_person"` + `action.option`(选中人的 open_id)。
+ 回调(非 form):`action.tag="select_person"` + `action.option`(选中人的 open_id);form 内则读 `form_value[name]`。
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@skills/lark-im/references/card/components/select_person.md` at line 39, The
callback documentation for select_person is incomplete because it only describes
the standalone action.option case and omits the form container behavior. Update
the select_person.md description to explicitly document both callback shapes:
outside a form, use action.tag="select_person" with action.option as the
selected open_id; inside a form, the selected value is provided in
form_value[name] per the form container rule. Keep the wording consistent with
the other component references and the lark-im-card-action-reply.md convention.
skills/lark-im/references/card/components/picker_time.md (1)

23-23: 📐 Maintainability & Code Quality | 🔵 Trivial | 💤 Low value

Consider marking placeholder as conditionally required.

Following the name field convention, consider using "否*" to indicate that placeholder is required when initial_time is unset.

- | `placeholder` | 否 | Object | / | 占位文本,plain_text;未设 `initial_time` 时必填 |
+ | `placeholder` | 否* | Object | / | 占位文本,plain_text;**未设 `initial_time` 时必填** |
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@skills/lark-im/references/card/components/picker_time.md` at line 23, Update
the `picker_time` component reference so the `placeholder` row reflects
conditional requiredness, matching the `name` field convention. In the table
entry for `placeholder`, change the required marker to indicate it is required
only when `initial_time` is unset, and keep the existing description aligned
with that rule.
skills/lark-im/references/card/components/multi_select_person.md (1)

40-40: 📐 Maintainability & Code Quality | 🔵 Trivial | ⚡ Quick win

Clarify callback field names for standalone vs form cases.

The callback description is ambiguous about which field contains the selected values. Specify action.options for standalone (comma-separated open_ids) and form_value[name] for form containers, matching the contract in lark-im-card-action-reply.md.

- 回调返回选中的多个 open_id。
+ 回调(非 form):`action.tag="multi_select_person"` + `action.options`(逗号分隔的 open_id);form 内则读 `form_value[name]`。
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@skills/lark-im/references/card/components/multi_select_person.md` at line 40,
The callback description is ambiguous about where the selected values are
returned, so update the `multi_select_person.md` wording to distinguish the two
cases clearly. In the standalone case, state that the selected multiple open_ids
are returned in `action.options` as a comma-separated value; in the form
container case, state that the selected value is returned in `form_value[name]`.
Keep the terminology aligned with `lark-im-card-action-reply.md` and make sure
the field names are explicit in the `multi_select_person` callback description.
🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

Inline comments:
In `@skills/lark-im/references/card/components/interactive_container.md`:
- Line 37: The padding/margin defaults in the table are using comma separators,
which is inconsistent with the CSS spacing notation shown in the example. Update
the documentation entry for the `padding`/`margin` row in
`interactive_container.md` so the default format matches the standard
space-separated form used by the example, keeping the guidance consistent for
readers.

In `@skills/lark-im/references/card/components/select_img.md`:
- Line 26: Clarify the select_img docs around multi_select and form usage: the
current wording in the multi_select option and the standalone select example is
contradictory. Update the descriptions tied to the multi_select option and the
non-form example so it clearly states that only multi_select: true requires
being nested in a form and uses asynchronous submission, while the default
single-select mode (multi_select: false) can be used standalone with immediate
callback behavior.
- Line 34: The field table in the select_img documentation marks `behaviors` as
required, but it should be optional to match the minimal example and the
documented default callback behavior. Update the `behaviors` row in the table so
it is marked optional, keeping the rest of the parameter description unchanged
and aligned with the `date_picker.md` convention.
- Line 42: The single-select callback field is documented incorrectly in the
select_img reference: in the non-form flow for the select_img action, use
action.option for single-select and action.options only for multi-select, while
form handling should continue to read form_value[name]. Update the select_img.md
wording to match the lark-im-card-action-reply.md contract and keep the
action.tag="select_img" reference intact.

In `@skills/lark-im/references/card/lark-im-card-style.md`:
- Around line 197-201: Clarify the highlight block layout rule so it is
unambiguous for `column` blocks using `flex_mode` in the `lark-im-card-style.md`
guidance: reconcile the current `weight: 1` requirement with the
`bisect`/`trisect` flex_mode rules, and explicitly state whether `weight` should
be set or omitted for this specific pattern. Update the relevant section that
describes column styling and layout choice so it matches the flex_mode decision
table and references the same terms (`column`, `flex_mode`, `bisect`, `trisect`)
consistently.

In `@skills/lark-im/references/lark-im-messages-send.md`:
- Around line 162-166: The STOP block in the interactive card section should
match the stronger wording used in reply.md and SKILL.md by removing the “from
the examples below” qualifier. Update the guidance near the interactive card
instructions so it gives an absolute prohibition on hand-writing or copying any
card payload, and keep the reference to card/lark-im-card-create.md and its
workflow unchanged.

---

Nitpick comments:
In `@skills/lark-im/references/card/components/date_picker.md`:
- Around line 23-24: The `placeholder` field in the `date_picker` component
table is described as conditionally required when `initial_date` is not set, but
it is currently marked as optional. Update the documentation entry for
`placeholder` to use the conditional-required convention used elsewhere (for
example, the `name` field) or otherwise make the conditional requirement
explicit in the table so the requirement is unambiguous.
- Line 34: The date_picker callback documentation is missing the form-container
fallback, so update the description in the date_picker section to mention that
when used inside a form container, the value should be read from
form_value[name] as well as the existing
action.tag/action.option/action.timezone fields. Keep the wording aligned with
the universal form rule in lark-im-card-action-reply.md and ensure the callback
behavior is described consistently for both standalone and form container cases.

In `@skills/lark-im/references/card/components/multi_select_person.md`:
- Line 40: The callback description is ambiguous about where the selected values
are returned, so update the `multi_select_person.md` wording to distinguish the
two cases clearly. In the standalone case, state that the selected multiple
open_ids are returned in `action.options` as a comma-separated value; in the
form container case, state that the selected value is returned in
`form_value[name]`. Keep the terminology aligned with
`lark-im-card-action-reply.md` and make sure the field names are explicit in the
`multi_select_person` callback description.

In `@skills/lark-im/references/card/components/multi_select_static.md`:
- Line 40: The callback description in the multi-select static reference is
ambiguous; update the wording to explicitly distinguish the standalone and
form-container cases. In the relevant section of the multi_select_static
documentation, state that the selected values are returned via action.options
when used standalone, and via form_value[name] when used inside a form
container, keeping the terminology aligned with lark-im-card-action-reply.md.

In `@skills/lark-im/references/card/components/picker_time.md`:
- Line 23: Update the `picker_time` component reference so the `placeholder` row
reflects conditional requiredness, matching the `name` field convention. In the
table entry for `placeholder`, change the required marker to indicate it is
required only when `initial_time` is unset, and keep the existing description
aligned with that rule.

In `@skills/lark-im/references/card/components/select_person.md`:
- Line 39: The callback documentation for select_person is incomplete because it
only describes the standalone action.option case and omits the form container
behavior. Update the select_person.md description to explicitly document both
callback shapes: outside a form, use action.tag="select_person" with
action.option as the selected open_id; inside a form, the selected value is
provided in form_value[name] per the form container rule. Keep the wording
consistent with the other component references and the
lark-im-card-action-reply.md convention.
🪄 Autofix (Beta)

Fix all unresolved CodeRabbit comments on this PR:

  • Push a commit to this branch (recommended)
  • Create a new PR with the fixes

ℹ️ Review info
⚙️ Run configuration

Configuration used: defaults

Review profile: CHILL

Plan: Pro

Run ID: a1787d63-b242-4590-bbf6-911637837066

📥 Commits

Reviewing files that changed from the base of the PR and between 3fcb695 and cccf468.

📒 Files selected for processing (35)
  • skills/lark-im/SKILL.md
  • skills/lark-im/references/card/card-2.0-schema.md
  • skills/lark-im/references/card/components/button.md
  • skills/lark-im/references/card/components/chart.md
  • skills/lark-im/references/card/components/checker.md
  • skills/lark-im/references/card/components/collapsible_panel.md
  • skills/lark-im/references/card/components/column_set.md
  • skills/lark-im/references/card/components/date_picker.md
  • skills/lark-im/references/card/components/div.md
  • skills/lark-im/references/card/components/form.md
  • skills/lark-im/references/card/components/header.md
  • skills/lark-im/references/card/components/hr.md
  • skills/lark-im/references/card/components/img.md
  • skills/lark-im/references/card/components/img_combination.md
  • skills/lark-im/references/card/components/input.md
  • skills/lark-im/references/card/components/interactive_container.md
  • skills/lark-im/references/card/components/markdown.md
  • skills/lark-im/references/card/components/multi_select_person.md
  • skills/lark-im/references/card/components/multi_select_static.md
  • skills/lark-im/references/card/components/overflow.md
  • skills/lark-im/references/card/components/person.md
  • skills/lark-im/references/card/components/person_list.md
  • skills/lark-im/references/card/components/picker_datetime.md
  • skills/lark-im/references/card/components/picker_time.md
  • skills/lark-im/references/card/components/recycling_container.md
  • skills/lark-im/references/card/components/select_img.md
  • skills/lark-im/references/card/components/select_person.md
  • skills/lark-im/references/card/components/select_static.md
  • skills/lark-im/references/card/components/table.md
  • skills/lark-im/references/card/lark-im-card-create.md
  • skills/lark-im/references/card/lark-im-card-style.md
  • skills/lark-im/references/card/resource/colors.md
  • skills/lark-im/references/card/resource/icons.md
  • skills/lark-im/references/lark-im-messages-reply.md
  • skills/lark-im/references/lark-im-messages-send.md

Comment thread skills/lark-im/references/card/components/interactive_container.md
Comment thread skills/lark-im/references/card/components/select_img.md
Comment thread skills/lark-im/references/card/components/select_img.md
Comment thread skills/lark-im/references/card/components/select_img.md
Comment thread skills/lark-im/references/card/lark-im-card-style.md
Comment thread skills/lark-im/references/lark-im-messages-send.md
@github-actions

github-actions Bot commented Jul 2, 2026

Copy link
Copy Markdown

🚀 PR Preview Install Guide

🧰 CLI update

npm i -g https://pkg.pr.new/larksuite/cli/@larksuite/cli@9aa9ef1782bca9ef80a14c6cc5d9d8b7b14e21d1

🧩 Skill update

npx skills add 91-enjoy/cli#feat/upgrade_card_send -y -g

@91-enjoy
91-enjoy force-pushed the feat/upgrade_card_send branch from cccf468 to 5d8f58f Compare July 2, 2026 07:21

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 4

🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

Inline comments:
In `@skills/lark-im/references/card/components/checker.md`:
- Line 26: The markdown table row for button_area is rendering extra columns
because the literal pipe characters in its value are unescaped. Update the
checker.md table entry for button_area so the pipes inside the Object example
are escaped, keeping the row in a single column and preserving the full value in
the generated docs.

In `@skills/lark-im/references/card/components/select_static.md`:
- Around line 23-25: The `select_static` reference currently marks `options` as
optional, which allows invalid empty selects. Update the `select_static`
documentation table to make `options` required, and ensure the related
`options[].text` and `options[].value` entries still describe the required item
shape. If there is an intended lazy-loading behavior, document that explicitly
in this section instead of leaving `options` optional.

In `@skills/lark-im/references/card/lark-im-card-create.md`:
- Around line 109-110: The Card 1.0 fallback in the send-failure workflow is not
actionable because there is no Card 1.0 schema or component reference to rebuild
against. Update the guidance in the card create doc so the fallback either
points to a valid 1.0 reference/source of truth or remove the automatic
downgrade step from the retry flow; use the “发送失败时” retry section and the “Card
1.0” fallback wording as the place to fix.

In `@skills/lark-im/references/card/lark-im-card-style.md`:
- Around line 127-133: The spacing guidance in the card style doc is internally
inconsistent because the body padding recommendation uses 20px while the rest of
the rules emphasize a 2/4/8/12px scale. Update the guidance around the body
padding example in the card style reference to either label 20px as an explicit
exception or adjust it to fit the same spacing scale, and make sure the
surrounding spacing rules in the card-style section remain consistent with that
choice.
🪄 Autofix (Beta)

Fix all unresolved CodeRabbit comments on this PR:

  • Push a commit to this branch (recommended)
  • Create a new PR with the fixes

ℹ️ Review info
⚙️ Run configuration

Configuration used: defaults

Review profile: CHILL

Plan: Pro

Run ID: b8c7c5c6-aa3f-44fb-bcf4-defb6efd0964

📥 Commits

Reviewing files that changed from the base of the PR and between cccf468 and 5d8f58f.

📒 Files selected for processing (35)
  • skills/lark-im/SKILL.md
  • skills/lark-im/references/card/card-2.0-schema.md
  • skills/lark-im/references/card/components/button.md
  • skills/lark-im/references/card/components/chart.md
  • skills/lark-im/references/card/components/checker.md
  • skills/lark-im/references/card/components/collapsible_panel.md
  • skills/lark-im/references/card/components/column_set.md
  • skills/lark-im/references/card/components/date_picker.md
  • skills/lark-im/references/card/components/div.md
  • skills/lark-im/references/card/components/form.md
  • skills/lark-im/references/card/components/header.md
  • skills/lark-im/references/card/components/hr.md
  • skills/lark-im/references/card/components/img.md
  • skills/lark-im/references/card/components/img_combination.md
  • skills/lark-im/references/card/components/input.md
  • skills/lark-im/references/card/components/interactive_container.md
  • skills/lark-im/references/card/components/markdown.md
  • skills/lark-im/references/card/components/multi_select_person.md
  • skills/lark-im/references/card/components/multi_select_static.md
  • skills/lark-im/references/card/components/overflow.md
  • skills/lark-im/references/card/components/person.md
  • skills/lark-im/references/card/components/person_list.md
  • skills/lark-im/references/card/components/picker_datetime.md
  • skills/lark-im/references/card/components/picker_time.md
  • skills/lark-im/references/card/components/recycling_container.md
  • skills/lark-im/references/card/components/select_img.md
  • skills/lark-im/references/card/components/select_person.md
  • skills/lark-im/references/card/components/select_static.md
  • skills/lark-im/references/card/components/table.md
  • skills/lark-im/references/card/lark-im-card-create.md
  • skills/lark-im/references/card/lark-im-card-style.md
  • skills/lark-im/references/card/resource/colors.md
  • skills/lark-im/references/card/resource/icons.md
  • skills/lark-im/references/lark-im-messages-reply.md
  • skills/lark-im/references/lark-im-messages-send.md
✅ Files skipped from review due to trivial changes (25)
  • skills/lark-im/references/card/components/picker_time.md
  • skills/lark-im/references/card/components/column_set.md
  • skills/lark-im/references/card/components/img.md
  • skills/lark-im/references/card/components/markdown.md
  • skills/lark-im/references/card/resource/icons.md
  • skills/lark-im/references/card/components/picker_datetime.md
  • skills/lark-im/references/card/components/table.md
  • skills/lark-im/references/card/components/header.md
  • skills/lark-im/references/card/components/div.md
  • skills/lark-im/references/card/components/img_combination.md
  • skills/lark-im/references/card/components/recycling_container.md
  • skills/lark-im/references/card/components/select_person.md
  • skills/lark-im/references/card/components/button.md
  • skills/lark-im/references/card/components/person_list.md
  • skills/lark-im/SKILL.md
  • skills/lark-im/references/card/components/select_img.md
  • skills/lark-im/references/lark-im-messages-reply.md
  • skills/lark-im/references/card/components/overflow.md
  • skills/lark-im/references/card/components/collapsible_panel.md
  • skills/lark-im/references/card/resource/colors.md
  • skills/lark-im/references/card/components/date_picker.md
  • skills/lark-im/references/card/components/chart.md
  • skills/lark-im/references/lark-im-messages-send.md
  • skills/lark-im/references/card/components/multi_select_person.md
  • skills/lark-im/references/card/card-2.0-schema.md
🚧 Files skipped from review as they are similar to previous changes (5)
  • skills/lark-im/references/card/components/multi_select_static.md
  • skills/lark-im/references/card/components/form.md
  • skills/lark-im/references/card/components/interactive_container.md
  • skills/lark-im/references/card/components/person.md
  • skills/lark-im/references/card/components/input.md

Comment thread skills/lark-im/references/card/components/checker.md
Comment thread skills/lark-im/references/card/components/select_static.md
Comment thread skills/lark-im/references/card/lark-im-card-create.md
Comment thread skills/lark-im/references/card/lark-im-card-style.md
@91-enjoy
91-enjoy force-pushed the feat/upgrade_card_send branch from 5d8f58f to 9aa9ef1 Compare July 2, 2026 11:30
@liangshuo-1
liangshuo-1 merged commit 9f15067 into larksuite:main Jul 2, 2026
20 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

domain/im PR touches the im domain size/XL Architecture-level or global-impact change

Projects

None yet

Development

Successfully merging this pull request may close these issues.

4 participants