Skip to content

refactor: reorganize lark slides skill references - #2207

Open
ethan-zhx wants to merge 1 commit into
mainfrom
refactor/reorg_slides
Open

refactor: reorganize lark slides skill references#2207
ethan-zhx wants to merge 1 commit into
mainfrom
refactor/reorg_slides

Conversation

@ethan-zhx

@ethan-zhx ethan-zhx commented Aug 6, 2026

Copy link
Copy Markdown
Collaborator

Summary

Reorganize the lark-slides skill reference files into logical subdirectories (cli/, xml/) and split monolithic lint scripts into focused modules. This improves discoverability and makes it easier for AI agents to navigate the skill's reference material.

Changes

  • Move CLI-specific reference docs into references/cli/ (6 files: media-upload, replace-pages, replace-slide, xml-presentation-slide-get, xml-presentation-slide-replace, xml-presentations-get)
  • Move XML-related reference files into references/xml/ (iconpark-index.json, iconpark.md, slides_chart_demo.xml, slides_xml_schema_definition.xml)
  • Add new xml_lint.py and xml_lint_test.py scripts for general XML validation
  • Refactor xml_text_overlap_lint.py and xml_text_overlap_lint_test.py for better modularity
  • Update SKILL.md to reflect new file paths

Test Plan

  • make unit-test passes (lint scripts)
  • Manual verification: lark-cli slides commands resolve reference files at new paths

Related Issues

  • None

Summary by CodeRabbit

  • New Features

    • Added CLI guidance for uploading media, adding or deleting slides, replacing slides or pages, and reading or updating presentation XML.
    • Added a complete Slides XML schema, chart examples, IconPark guidance, and XML linting for structural, layout, and release-readiness checks.
  • Documentation

    • Reorganized creation, editing, template, validation, troubleshooting, and CLI references.
    • Legacy paths now redirect to updated guides.
    • Added readback and visual verification guidance for safer presentation updates.

@coderabbitai

coderabbitai Bot commented Aug 6, 2026

Copy link
Copy Markdown

Review Change Stack

📝 Walkthrough

Walkthrough

The Slides skill now uses reorganized XML, workflow, CLI, and validation references. The change adds the SML 2.0 schema, chart and IconPark references, XML linting with tests, and compatibility stubs for legacy paths.

Changes

Slides XML workflow

Layer / File(s) Summary
XML schema and release-gate linting
skills/lark-slides/references/xml/slides_xml_schema_definition.xml, skills/lark-slides/scripts/xml_lint.py, skills/lark-slides/scripts/xml_lint_test.py, skills/lark-slides/scripts/xml_text_overlap_lint.py
Adds the SML 2.0 schema, XML structure and layout checks, release-gate JSON output, comprehensive tests, and compatibility exports for the renamed linter.
CLI command references
skills/lark-slides/references/cli/*, skills/lark-slides/references/xml/lark-slides-add-slide.md, skills/lark-slides/references/xml/lark-slides-delete-slide.md
Adds documentation for slide insertion and deletion, media upload, page replacement, block-level slide replacement, and XML presentation read and replace commands.
Canonical XML references and examples
skills/lark-slides/references/xml/*
Adds the XML schema quick reference, IconPark guidance, and a chart presentation covering native chart types and variants.
Editing, validation, and workflow documentation
skills/lark-slides/SKILL.md, skills/lark-slides/references/workflow/*, skills/lark-slides/references/lark-slides-create.md, skills/lark-slides/references/planning-layer.md
Defines reorganized editing, template, error-handling, validation, creation, and planning workflows.
Legacy-path compatibility
skills/lark-slides/references/*.md, skills/lark-slides/references/*.xml
Replaces former reference content with migration notices that point to reorganized documentation.

Estimated code review effort: 5 (Critical) | ~120 minutes

Possibly related PRs

Suggested labels: domain/ccm

Suggested reviewers: liangshuo-1

🚥 Pre-merge checks | ✅ 4 | ❌ 1

❌ Failed checks (1 warning)

Check name Status Explanation Resolution
Docstring Coverage ⚠️ Warning Docstring coverage is 0.28% which is insufficient. The required threshold is 80.00%. Write docstrings for the functions missing them to satisfy the coverage threshold.
✅ Passed checks (4 passed)
Check name Status Explanation
Title check ✅ Passed The title clearly summarizes the primary change: reorganizing the Lark Slides skill references.
Description check ✅ Passed The description includes the required summary, changes, test plan, and related issues sections with relevant content.
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 💡 2
📝 Generate docstrings 💡
  • Create stacked PR
  • Commit on current branch
🛠️ Fix failing CI checks 💡
  • Create stacked PR
  • Commit on current branch
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch refactor/reorg_slides

Warning

There were issues while running some tools. Please review the errors and either fix the tool's configuration or disable the tool if it's a critical failure.

🔧 Biome (2.5.6)
skills/lark-slides/references/iconpark-index.json

File contains syntax errors that prevent linting: Line 1: unexpected character #; Line 1: String values must be double quoted.; Line 1: String values must be double quoted.; Line 1: unexpected character ; Line 1: String values must be double quoted.; Line 1: unexpected character ; Line 3: String values must be double quoted.; Line 3: unexpected character ; Line 3: expected `,` but instead found `xml`; Line 3: unexpected character `/`; Line 3: expected `,` but instead found `iconpark`; Line 3: Minus must be followed by a digit; Line 3: expected `,` but instead found `index`; Line 3: unexpected character `.`; Line 3: expected `,` but instead found `json`; Line 3: End of file expected; Line 3: unexpected character ; Line 3: unexpected character (; Line 3: String values must be double quoted.; Line 3: unexpected character /; Line 3: String values must be double quoted.; Line 3: Minus must be followed by a digit; Line 3: String values must be double quoted.; Line 3: unexpected character .; Line 3: String values must be double quoted.; Line 3: unexpected character ); Line 3: unexpected character ; Line 5: String values must be double quoted.; Line 5: unexpected character ; Line 5: String values must be double quoted.; Line 5: unexpected character


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.

@github-actions github-actions Bot added the size/XL Architecture-level or global-impact change label Aug 6, 2026
@github-actions

github-actions Bot commented Aug 6, 2026

Copy link
Copy Markdown

PR Quality Summary

CI did not complete successfully. Use the failed check links below to decide whether this PR needs a code change or a rerun.

Failed checks

@github-actions

github-actions Bot commented Aug 6, 2026

Copy link
Copy Markdown

🚀 PR Preview Install Guide

🧰 CLI update

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

🧩 Skill update

npx skills add larksuite/cli#refactor/reorg_slides -y -g

@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: 12

🧹 Nitpick comments (2)
skills/lark-slides/scripts/xml_lint.py (1)

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

Remove the unreachable --help key check.

parse_args strips the leading -- from each token, so the options dictionary never contains the key "--help". Only options.get("help") can be true.

♻️ Proposed cleanup
-    if options.get("help") or options.get("--help"):
+    if options.get("help"):
🤖 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-slides/scripts/xml_lint.py` around lines 2968 - 2975, Remove the
unreachable options.get("--help") check from run_cli, leaving the existing
options.get("help") handling and usage behavior unchanged.
skills/lark-slides/scripts/xml_text_overlap_lint.py (1)

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

Remove the compatibility stub.

xml_text_overlap_lint is only referenced in the stub itself, while existing docs/test/workflow usages point to scripts/xml_lint.py, so the wrapper module should be removed to avoid accidental use.

🤖 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-slides/scripts/xml_text_overlap_lint.py` around lines 2 - 7,
Remove the xml_text_overlap_lint compatibility stub entirely, including its
imports and re-exports; retain the canonical xml_lint module and its run_cli and
XmlLayoutLintError symbols unchanged.
🤖 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-slides/references/cli/lark-slides-media-upload.md`:
- Around line 28-36: Align the media upload response example with the token
extraction commands: either nest file_token under data or update the jq paths in
the documented upload flows, including the references around lines 66-68 and
108, to read the top-level field. Ensure the copy-paste commands return the
actual token rather than null.

In `@skills/lark-slides/references/cli/lark-slides-replace-slide.md`:
- Around line 132-138: Update the `<table>` example to include explicit `width`
and `height` attributes alongside `topLeftX` and `topLeftY`, ensuring it
satisfies the XML contract described in `SKILL.md` while preserving the existing
table structure.

In
`@skills/lark-slides/references/cli/lark-slides-xml-presentation-slide-replace.md`:
- Around line 42-49: Update the direct block_replace examples in this document
to include id="bab" on each replacement root, matching the corresponding
block_id so copied commands satisfy the required replacement contract; leave all
block_insert examples unchanged.

In `@skills/lark-slides/references/iconpark-index.json`:
- Around line 1-5: The legacy references/iconpark-index.json path must remain
valid JSON for existing consumers. Replace the Markdown migration notice in
iconpark-index.json with a symlink or equivalent copy of
xml/iconpark-index.json, and place the migration notice in a separate Markdown
file.

In `@skills/lark-slides/references/lark-slides-add-slide.md`:
- Line 3: Update the migration notices in
skills/lark-slides/references/lark-slides-add-slide.md:3 and
skills/lark-slides/references/lark-slides-delete-slide.md:3 to point to existing
destination documents under skills/lark-slides, or create the referenced target
documents before linking to them.

In `@skills/lark-slides/references/lark-slides-edit-workflows.md`:
- Line 3: Fix the broken migration links in
skills/lark-slides/references/lark-slides-edit-workflows.md:3-3 and
skills/lark-slides/references/lark-slides-pptx-template-workflows.md:3-3 by
moving the referenced documents to the stated workflow/ paths or updating both
links to their actual existing locations, ensuring all migration notices and
back-references resolve correctly.

In `@skills/lark-slides/references/lark-slides-history.md`:
- Line 1: Remove the two stray backticks immediately before the Markdown heading
marker in the slides history document so the line begins directly with # and
renders as a heading.

In `@skills/lark-slides/references/slides_xml_schema_definition.xml`:
- Around line 1-5: Remove the Markdown compatibility notice from
skills/lark-slides/references/slides_xml_schema_definition.xml and update all
remaining references to use xml/slides_xml_schema_definition.xml, or replace it
with parseable XML containing the notice in an XML comment. Apply the same
treatment to skills/lark-slides/references/slides_chart_demo.xml, directing
references to xml/slides_chart_demo.xml; ensure both .xml paths remain valid for
XML parsers and xml_lint.py.

In `@skills/lark-slides/references/xml/iconpark.md`:
- Line 29: Update the icon fallback guidance to choose the nearest semantically
relevant icon when no suitable match is found, rather than selecting randomly
from frequent examples. If no semantic fallback exists, remove the icon and
reclaim its layout space, preserving the surrounding icon-search guidance.

In `@skills/lark-slides/references/xml/slides_chart_demo.xml`:
- Around line 226-229: Correct the footer page-count text in each visible footer
shape, including the instances near the referenced sections, so the seven-slide
presentation is numbered sequentially from 01 / 07 through 07 / 07. Preserve the
existing footer styling and update only the displayed pagination values.

In `@skills/lark-slides/references/xml/slides_xml_schema_definition.xml`:
- Around line 955-968: Update the shadow documentation text in the annotation
above the shadow attributes to name the attribute as align instead of
shadowAlign, matching the declared xs:attribute and avoiding
unsupported-attribute guidance.

In `@skills/lark-slides/scripts/xml_lint.py`:
- Around line 325-344: Update load_iconpark_icon_types to handle a missing or
unreadable ICONPARK_INDEX_PATH before read_text, following
iconpark_tool.load_index’s existence-check-and-fail pattern. Route the failure
through fail(...) so the CLI’s existing XmlLayoutLintError handling emits the
standard error message, while preserving the current JSON decoding and
validation behavior.

---

Nitpick comments:
In `@skills/lark-slides/scripts/xml_lint.py`:
- Around line 2968-2975: Remove the unreachable options.get("--help") check from
run_cli, leaving the existing options.get("help") handling and usage behavior
unchanged.

In `@skills/lark-slides/scripts/xml_text_overlap_lint.py`:
- Around line 2-7: Remove the xml_text_overlap_lint compatibility stub entirely,
including its imports and re-exports; retain the canonical xml_lint module and
its run_cli and XmlLayoutLintError symbols unchanged.
🪄 Autofix

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 Plus

Run ID: 4b78c468-0ff2-43dc-bdcd-7181e604cb8f

📥 Commits

Reviewing files that changed from the base of the PR and between 50b4c68 and a3e9003.

📒 Files selected for processing (36)
  • skills/lark-slides/SKILL.md
  • skills/lark-slides/references/cli/lark-slides-media-upload.md
  • skills/lark-slides/references/cli/lark-slides-replace-pages.md
  • skills/lark-slides/references/cli/lark-slides-replace-slide.md
  • skills/lark-slides/references/cli/lark-slides-xml-presentation-slide-get.md
  • skills/lark-slides/references/cli/lark-slides-xml-presentation-slide-replace.md
  • skills/lark-slides/references/cli/lark-slides-xml-presentations-get.md
  • skills/lark-slides/references/iconpark-index.json
  • skills/lark-slides/references/iconpark.md
  • skills/lark-slides/references/lark-slides-add-slide.md
  • skills/lark-slides/references/lark-slides-create.md
  • skills/lark-slides/references/lark-slides-delete-slide.md
  • skills/lark-slides/references/lark-slides-edit-workflows.md
  • skills/lark-slides/references/lark-slides-history.md
  • skills/lark-slides/references/lark-slides-media-upload.md
  • skills/lark-slides/references/lark-slides-pptx-template-workflows.md
  • skills/lark-slides/references/lark-slides-replace-pages.md
  • skills/lark-slides/references/lark-slides-replace-slide.md
  • skills/lark-slides/references/lark-slides-xml-presentation-slide-get.md
  • skills/lark-slides/references/lark-slides-xml-presentation-slide-replace.md
  • skills/lark-slides/references/lark-slides-xml-presentations-get.md
  • skills/lark-slides/references/planning-layer.md
  • skills/lark-slides/references/slides_chart_demo.xml
  • skills/lark-slides/references/slides_xml_schema_definition.xml
  • skills/lark-slides/references/troubleshooting.md
  • skills/lark-slides/references/validation-checklist.md
  • skills/lark-slides/references/xml-schema-quick-ref.md
  • skills/lark-slides/references/xml/iconpark-index.json
  • skills/lark-slides/references/xml/iconpark.md
  • skills/lark-slides/references/xml/slides_chart_demo.xml
  • skills/lark-slides/references/xml/slides_xml_schema_definition.xml
  • skills/lark-slides/scripts/iconpark_tool.py
  • skills/lark-slides/scripts/xml_lint.py
  • skills/lark-slides/scripts/xml_lint_test.py
  • skills/lark-slides/scripts/xml_text_overlap_lint.py
  • skills/lark-slides/scripts/xml_text_overlap_lint_test.py

Comment on lines +28 to +36
## 返回值

```json
{
"file_token": "boxcnXXXXXXXXXXXXXXXXXXXXXX",
"file_name": "pic.png",
"size": 12345,
"presentation_id": "slidesXXXXXXXXXXXXXXXXXXXXXX"
}

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

🎯 Functional Correctness | 🟡 Minor | ⚡ Quick win

🧩 Analysis chain

🏁 Script executed:

#!/bin/bash
set -euo pipefail

rg -n -C 4 'media-upload|file_token|\.data\.file_token' skills/lark-slides
rg -n -C 8 'media-upload|file_token' --glob '*.py' --glob '*.js' --glob '*.ts' .

Repository: larksuite/cli

Length of output: 29414


🏁 Script executed:

#!/bin/bash
set -euo pipefail

printf 'Repository files matching media-upload:\n'
git ls-files | grep -F 'media-upload' || true

printf '\nSearch for media-upload handlers/tests/docs:\n'
rg -n -C 3 'media-upload|upload_all|file_token|\.data\.file_token|jq -r .data.file_token' .

printf '\nCandidate CLI/tooling files:\n'
git ls-files | grep -Ei 'lark|slides|media|upload|tool' | head -200

Repository: larksuite/cli

Length of output: 50374


🌐 Web query:

Lark CLI slides +media-upload response JSON file_token data.file_token

💡 Result:

When using the Lark CLI shortcut slides +media-upload to upload a local image to a presentation, the command returns a JSON response containing the file_token [1][2]. This file_token is the identifier required to embed the image within a slide's XML content using an <img src="..."> tag [1][3]. The standard JSON response structure returned by the command is [1][4]: { "file_token": "boxcnXXXXXXXXXXXXXXXXXXXXXX", "file_name": "pic.png", "size": 12345, "presentation_id": "slidesXXXXXXXXXXXXXXXXXXXXXX" } To access the file_token data specifically in a shell script, you can pipe the output into a tool like jq [4]: TOKEN=$(lark-cli slides +media-upload --file./image.png --presentation "$PID" | jq -r '.data.file_token') Key technical details regarding this process: 1. Parent Type: The +media-upload shortcut automatically sets the API parameter parent_type to slide_file [1][5]. This is a specific requirement for Lark Slides; using other values like slide_image will result in an error [1][2][3]. 2. Limitations: The command supports images up to 20 MB [1][6]. It does not support external HTTP/HTTPS URLs; files must be local to the machine running the CLI [6]. 3. Usage: The returned file_token should be placed directly into the src attribute of an img tag within the slide XML structure (e.g., <img src="boxcn..." />) [1][4]. Attempting to use a raw URL in the src field will not render the image [6].

Citations:


Align the media upload JSON example with token extraction.

The documented upload response returns file_token at the top level, but the copy-paste flow reads .data.file_token. Update the JSON example or the jq path in lines 66-68, 108, and similar references so the command returns the token value instead of null.

🤖 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-slides/references/cli/lark-slides-media-upload.md` around lines
28 - 36, Align the media upload response example with the token extraction
commands: either nest file_token under data or update the jq paths in the
documented upload flows, including the references around lines 66-68 and 108, to
read the top-level field. Ensure the copy-paste commands return the actual token
rather than null.

Comment on lines +132 to +138
`<table>`(2×2):
```xml
<table topLeftX="30" topLeftY="80">
<colgroup><col span="2" width="110"/></colgroup>
<tr><td><content><p>A</p></content></td><td><content><p>B</p></content></td></tr>
<tr><td><content><p>C</p></content></td><td><content><p>D</p></content></td></tr>
</table>

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

🎯 Functional Correctness | 🟡 Minor | ⚡ Quick win

Add dimensions to the table example.

SKILL.md requires every <table> to define width and height, but this example only defines topLeftX and topLeftY. Add explicit dimensions so the copy-paste snippet follows the skill’s XML contract.

Proposed fix
-<table topLeftX="30" topLeftY="80">
+<table topLeftX="30" topLeftY="80" width="220" height="100">
📝 Committable suggestion

‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.

Suggested change
`<table>`(2×2):
```xml
<table topLeftX="30" topLeftY="80">
<colgroup><col span="2" width="110"/></colgroup>
<tr><td><content><p>A</p></content></td><td><content><p>B</p></content></td></tr>
<tr><td><content><p>C</p></content></td><td><content><p>D</p></content></td></tr>
</table>
`<table>`(2×2):
🤖 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-slides/references/cli/lark-slides-replace-slide.md` around lines
132 - 138, Update the `<table>` example to include explicit `width` and `height`
attributes alongside `topLeftX` and `topLeftY`, ensuring it satisfies the XML
contract described in `SKILL.md` while preserving the existing table structure.

Comment on lines +42 to +49
```json
{
"parts": [
{ "action": "block_replace", "block_id": "bab", "replacement": "<shape .../>" },
{ "action": "block_insert", "insertion": "<img .../>", "insert_before_block_id": "baa" }
]
}
```

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

🎯 Functional Correctness | 🟠 Major | ⚡ Quick win

Add the required id to direct replacement examples.

This document states that direct block_replace calls require the replacement root to contain id="<block_id>". The examples use <shape .../> without an id, so copied commands will fail with 3350001. Add id="bab" to each replacement root. Do not add it to block_insert examples.

Proposed fix
-    { "action": "block_replace", "block_id": "bab", "replacement": "<shape .../>" },
+    { "action": "block_replace", "block_id": "bab", "replacement": "<shape id=\"bab\" .../>" },

-      "replacement": "<shape type=\"text\" topLeftX=\"80\" topLeftY=\"80\" width=\"800\" height=\"120\"><content textType=\"title\"><p>新标题</p></content></shape>"
+      "replacement": "<shape id=\"bab\" type=\"text\" topLeftX=\"80\" topLeftY=\"80\" width=\"800\" height=\"120\"><content textType=\"title\"><p>新标题</p></content></shape>"

Also applies to: 80-91, 113-124

🤖 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-slides/references/cli/lark-slides-xml-presentation-slide-replace.md`
around lines 42 - 49, Update the direct block_replace examples in this document
to include id="bab" on each replacement root, matching the corresponding
block_id so copied commands satisfy the required replacement contract; leave all
block_insert examples unchanged.

Comment thread skills/lark-slides/references/lark-slides-add-slide.md
Comment thread skills/lark-slides/references/lark-slides-edit-workflows.md
@@ -1,4 +1,4 @@
# slides history(历史版本与回滚)
``# slides history(历史版本与回滚)

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

📐 Maintainability & Code Quality | 🟡 Minor | ⚡ Quick win

Remove the stray backticks from the heading.

Two backticks precede the #. Markdown does not render this line as a heading. It renders as literal text that starts with ``.

📝 Proposed fix
-``# slides history(历史版本与回滚)
+# slides history(历史版本与回滚)
📝 Committable suggestion

‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.

Suggested change
``# slides history(历史版本与回滚)
# slides history(历史版本与回滚)
🤖 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-slides/references/lark-slides-history.md` at line 1, Remove the
two stray backticks immediately before the Markdown heading marker in the slides
history document so the line begins directly with # and renders as a heading.

- 图标用于概念提示、步骤、状态、指标、角色和导航;不要用无关装饰图标填充版面。
- 常用尺寸:行内状态图标 16-24px,卡片标题图标 28-40px,主视觉图标 56-96px。
- 图标必须填充颜色并和背景有足够对比;深色背景优先放在浅色圆形/方形底上,或使用 `rgba(255, 255, 255, 1)` 作为图标填充色。
- 查不到合适图标时,从高频示例里选择替代图标(随机选择,不要千篇一律),不留空图标位。

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

🎯 Functional Correctness | 🟡 Minor | ⚡ Quick win

Use a semantic fallback instead of a random icon.

This rule directs the agent to select a random frequent icon when search has no match. That can add an icon unrelated to the slide content and conflicts with line 26. Select the nearest semantic fallback. If no semantic fallback exists, remove the icon and reclaim its layout space.

🤖 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-slides/references/xml/iconpark.md` at line 29, Update the icon
fallback guidance to choose the nearest semantically relevant icon when no
suitable match is found, rather than selecting randomly from frequent examples.
If no semantic fallback exists, remove the icon and reclaim its layout space,
preserving the surrounding icon-search guidance.

Comment on lines +226 to +229
<shape width="128" height="18" topLeftX="800" topLeftY="512" type="text">
<content textType="caption" fontSize="10" fontFamily="思源黑体" color="rgba(148, 163, 184, 1)" textAlign="right">
<p>03 / 12</p>
</content>

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

🎯 Functional Correctness | 🟡 Minor | ⚡ Quick win

Correct the footer page counts.

This presentation contains seven slides, but its footers show pages 03 / 12 through 10 / 12 and omit 08 / 12. The rendered demo will show incorrect pagination. Renumber the footers as 01 / 07 through 07 / 07, or add the missing slides if this file must contain twelve pages.

Also applies to: 441-444, 590-593, 814-817, 1030-1033, 1186-1189, 1406-1409

🤖 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-slides/references/xml/slides_chart_demo.xml` around lines 226 -
229, Correct the footer page-count text in each visible footer shape, including
the instances near the referenced sections, so the seven-slide presentation is
numbered sequentially from 01 / 07 through 07 / 07. Preserve the existing footer
styling and update only the displayed pagination values.

@ethan-zhx
ethan-zhx force-pushed the refactor/reorg_slides branch from a3e9003 to ad82da4 Compare August 6, 2026 06:50

@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.

Caution

Inline review comments failed to post. This is likely due to GitHub's internal server error or limits when posting large numbers of comments. If you are seeing this consistently it is likely a permissions issue. Please check "Moderation" -> "Code review limits" under your organization settings.

Actionable comments posted: 12

🧹 Nitpick comments (2)
skills/lark-slides/scripts/xml_lint.py (1)

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

Remove the unreachable --help key check.

parse_args strips the leading -- from each token, so the options dictionary never contains the key "--help". Only options.get("help") can be true.

♻️ Proposed cleanup
-    if options.get("help") or options.get("--help"):
+    if options.get("help"):
🤖 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-slides/scripts/xml_lint.py` around lines 2968 - 2975, Remove the
unreachable options.get("--help") check from run_cli, leaving the existing
options.get("help") handling and usage behavior unchanged.
skills/lark-slides/scripts/xml_text_overlap_lint.py (1)

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

Remove the compatibility stub.

xml_text_overlap_lint is only referenced in the stub itself, while existing docs/test/workflow usages point to scripts/xml_lint.py, so the wrapper module should be removed to avoid accidental use.

🤖 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-slides/scripts/xml_text_overlap_lint.py` around lines 2 - 7,
Remove the xml_text_overlap_lint compatibility stub entirely, including its
imports and re-exports; retain the canonical xml_lint module and its run_cli and
XmlLayoutLintError symbols unchanged.
🤖 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-slides/references/cli/lark-slides-media-upload.md`:
- Around line 28-36: Align the media upload response example with the token
extraction commands: either nest file_token under data or update the jq paths in
the documented upload flows, including the references around lines 66-68 and
108, to read the top-level field. Ensure the copy-paste commands return the
actual token rather than null.

In `@skills/lark-slides/references/cli/lark-slides-replace-slide.md`:
- Around line 132-138: Update the `<table>` example to include explicit `width`
and `height` attributes alongside `topLeftX` and `topLeftY`, ensuring it
satisfies the XML contract described in `SKILL.md` while preserving the existing
table structure.

In
`@skills/lark-slides/references/cli/lark-slides-xml-presentation-slide-replace.md`:
- Around line 42-49: Update the direct block_replace examples in this document
to include id="bab" on each replacement root, matching the corresponding
block_id so copied commands satisfy the required replacement contract; leave all
block_insert examples unchanged.

In `@skills/lark-slides/references/iconpark-index.json`:
- Around line 1-5: The legacy references/iconpark-index.json path must remain
valid JSON for existing consumers. Replace the Markdown migration notice in
iconpark-index.json with a symlink or equivalent copy of
xml/iconpark-index.json, and place the migration notice in a separate Markdown
file.

In `@skills/lark-slides/references/lark-slides-add-slide.md`:
- Line 3: Update the migration notices in
skills/lark-slides/references/lark-slides-add-slide.md:3 and
skills/lark-slides/references/lark-slides-delete-slide.md:3 to point to existing
destination documents under skills/lark-slides, or create the referenced target
documents before linking to them.

In `@skills/lark-slides/references/lark-slides-edit-workflows.md`:
- Line 3: Fix the broken migration links in
skills/lark-slides/references/lark-slides-edit-workflows.md:3-3 and
skills/lark-slides/references/lark-slides-pptx-template-workflows.md:3-3 by
moving the referenced documents to the stated workflow/ paths or updating both
links to their actual existing locations, ensuring all migration notices and
back-references resolve correctly.

In `@skills/lark-slides/references/lark-slides-history.md`:
- Line 1: Remove the two stray backticks immediately before the Markdown heading
marker in the slides history document so the line begins directly with # and
renders as a heading.

In `@skills/lark-slides/references/slides_xml_schema_definition.xml`:
- Around line 1-5: Remove the Markdown compatibility notice from
skills/lark-slides/references/slides_xml_schema_definition.xml and update all
remaining references to use xml/slides_xml_schema_definition.xml, or replace it
with parseable XML containing the notice in an XML comment. Apply the same
treatment to skills/lark-slides/references/slides_chart_demo.xml, directing
references to xml/slides_chart_demo.xml; ensure both .xml paths remain valid for
XML parsers and xml_lint.py.

In `@skills/lark-slides/references/xml/iconpark.md`:
- Line 29: Update the icon fallback guidance to choose the nearest semantically
relevant icon when no suitable match is found, rather than selecting randomly
from frequent examples. If no semantic fallback exists, remove the icon and
reclaim its layout space, preserving the surrounding icon-search guidance.

In `@skills/lark-slides/references/xml/slides_chart_demo.xml`:
- Around line 226-229: Correct the footer page-count text in each visible footer
shape, including the instances near the referenced sections, so the seven-slide
presentation is numbered sequentially from 01 / 07 through 07 / 07. Preserve the
existing footer styling and update only the displayed pagination values.

In `@skills/lark-slides/references/xml/slides_xml_schema_definition.xml`:
- Around line 955-968: Update the shadow documentation text in the annotation
above the shadow attributes to name the attribute as align instead of
shadowAlign, matching the declared xs:attribute and avoiding
unsupported-attribute guidance.

In `@skills/lark-slides/scripts/xml_lint.py`:
- Around line 325-344: Update load_iconpark_icon_types to handle a missing or
unreadable ICONPARK_INDEX_PATH before read_text, following
iconpark_tool.load_index’s existence-check-and-fail pattern. Route the failure
through fail(...) so the CLI’s existing XmlLayoutLintError handling emits the
standard error message, while preserving the current JSON decoding and
validation behavior.

---

Nitpick comments:
In `@skills/lark-slides/scripts/xml_lint.py`:
- Around line 2968-2975: Remove the unreachable options.get("--help") check from
run_cli, leaving the existing options.get("help") handling and usage behavior
unchanged.

In `@skills/lark-slides/scripts/xml_text_overlap_lint.py`:
- Around line 2-7: Remove the xml_text_overlap_lint compatibility stub entirely,
including its imports and re-exports; retain the canonical xml_lint module and
its run_cli and XmlLayoutLintError symbols unchanged.
🪄 Autofix

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 Plus

Run ID: 4b78c468-0ff2-43dc-bdcd-7181e604cb8f

📥 Commits

Reviewing files that changed from the base of the PR and between 50b4c68 and a3e9003.

📒 Files selected for processing (36)
  • skills/lark-slides/SKILL.md
  • skills/lark-slides/references/cli/lark-slides-media-upload.md
  • skills/lark-slides/references/cli/lark-slides-replace-pages.md
  • skills/lark-slides/references/cli/lark-slides-replace-slide.md
  • skills/lark-slides/references/cli/lark-slides-xml-presentation-slide-get.md
  • skills/lark-slides/references/cli/lark-slides-xml-presentation-slide-replace.md
  • skills/lark-slides/references/cli/lark-slides-xml-presentations-get.md
  • skills/lark-slides/references/iconpark-index.json
  • skills/lark-slides/references/iconpark.md
  • skills/lark-slides/references/lark-slides-add-slide.md
  • skills/lark-slides/references/lark-slides-create.md
  • skills/lark-slides/references/lark-slides-delete-slide.md
  • skills/lark-slides/references/lark-slides-edit-workflows.md
  • skills/lark-slides/references/lark-slides-history.md
  • skills/lark-slides/references/lark-slides-media-upload.md
  • skills/lark-slides/references/lark-slides-pptx-template-workflows.md
  • skills/lark-slides/references/lark-slides-replace-pages.md
  • skills/lark-slides/references/lark-slides-replace-slide.md
  • skills/lark-slides/references/lark-slides-xml-presentation-slide-get.md
  • skills/lark-slides/references/lark-slides-xml-presentation-slide-replace.md
  • skills/lark-slides/references/lark-slides-xml-presentations-get.md
  • skills/lark-slides/references/planning-layer.md
  • skills/lark-slides/references/slides_chart_demo.xml
  • skills/lark-slides/references/slides_xml_schema_definition.xml
  • skills/lark-slides/references/troubleshooting.md
  • skills/lark-slides/references/validation-checklist.md
  • skills/lark-slides/references/xml-schema-quick-ref.md
  • skills/lark-slides/references/xml/iconpark-index.json
  • skills/lark-slides/references/xml/iconpark.md
  • skills/lark-slides/references/xml/slides_chart_demo.xml
  • skills/lark-slides/references/xml/slides_xml_schema_definition.xml
  • skills/lark-slides/scripts/iconpark_tool.py
  • skills/lark-slides/scripts/xml_lint.py
  • skills/lark-slides/scripts/xml_lint_test.py
  • skills/lark-slides/scripts/xml_text_overlap_lint.py
  • skills/lark-slides/scripts/xml_text_overlap_lint_test.py
🛑 Comments failed to post (4)
skills/lark-slides/references/iconpark-index.json (1)

1-5: 🗄️ Data Integrity & Integration | 🟠 Major | ⚡ Quick win

Keep the legacy .json path valid JSON.

This Markdown content is not JSON. A consumer that still opens references/iconpark-index.json as the advertised compatibility path will fail during JSON parsing. Keep a valid JSON compatibility asset, such as a symlink or equivalent copy of xml/iconpark-index.json, and move this migration notice to a Markdown file.

🧰 Tools
🪛 Biome (2.5.6)

[error] 1-1: unexpected character #

(parse)


[error] 1-1: String values must be double quoted.

(parse)


[error] 1-1: String values must be double quoted.

(parse)


[error] 1-1: unexpected character

(parse)


[error] 1-1: String values must be double quoted.

(parse)


[error] 1-1: unexpected character

(parse)


[error] 3-3: String values must be double quoted.

(parse)


[error] 3-3: unexpected character ```

(parse)


[error] 3-3: expected , but instead found xml

(parse)


[error] 3-3: unexpected character /

(parse)


[error] 3-3: expected , but instead found iconpark

(parse)


[error] 3-3: Minus must be followed by a digit

(parse)


[error] 3-3: expected , but instead found index

(parse)


[error] 3-3: unexpected character .

(parse)


[error] 3-3: expected , but instead found json

(parse)


[error] 3-3: End of file expected

(parse)


[error] 3-3: unexpected character ```

(parse)


[error] 3-3: unexpected character (

(parse)


[error] 3-3: String values must be double quoted.

(parse)


[error] 3-3: unexpected character /

(parse)


[error] 3-3: String values must be double quoted.

(parse)


[error] 3-3: Minus must be followed by a digit

(parse)


[error] 3-3: String values must be double quoted.

(parse)


[error] 3-3: unexpected character .

(parse)


[error] 3-3: String values must be double quoted.

(parse)


[error] 3-3: unexpected character )

(parse)


[error] 3-3: unexpected character

(parse)


[error] 5-5: String values must be double quoted.

(parse)


[error] 5-5: unexpected character

(parse)


[error] 5-5: String values must be double quoted.

(parse)


[error] 5-5: unexpected character

(parse)

🤖 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-slides/references/iconpark-index.json` around lines 1 - 5, The
legacy references/iconpark-index.json path must remain valid JSON for existing
consumers. Replace the Markdown migration notice in iconpark-index.json with a
symlink or equivalent copy of xml/iconpark-index.json, and place the migration
notice in a separate Markdown file.

Source: Linters/SAST tools

skills/lark-slides/references/slides_xml_schema_definition.xml (1)

1-5: 🗄️ Data Integrity & Integration | 🟠 Major | ⚡ Quick win

Markdown migration notices kept under .xml file extensions. Both files retain the .xml extension while their content is now Markdown starting with #. Any XML parser, schema loader, or .xml glob — including the xml_lint.py script added in this stack — fails on these paths instead of reading a notice. The shared root cause is one compatibility strategy applied to artifacts that are not Markdown.

  • skills/lark-slides/references/slides_xml_schema_definition.xml#L1-L5: delete the path and update the remaining references, or replace the body with a parseable XML document that carries the notice in an XML comment.
  • skills/lark-slides/references/slides_chart_demo.xml#L1-L5: apply the same treatment, pointing to xml/slides_chart_demo.xml.
📍 Affects 2 files
  • skills/lark-slides/references/slides_xml_schema_definition.xml#L1-L5 (this comment)
  • skills/lark-slides/references/slides_chart_demo.xml#L1-L5
🤖 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-slides/references/slides_xml_schema_definition.xml` around lines
1 - 5, Remove the Markdown compatibility notice from
skills/lark-slides/references/slides_xml_schema_definition.xml and update all
remaining references to use xml/slides_xml_schema_definition.xml, or replace it
with parseable XML containing the notice in an XML comment. Apply the same
treatment to skills/lark-slides/references/slides_chart_demo.xml, directing
references to xml/slides_chart_demo.xml; ensure both .xml paths remain valid for
XML parsers and xml_lint.py.
skills/lark-slides/references/xml/slides_xml_schema_definition.xml (1)

955-968: 📐 Maintainability & Code Quality | 🟡 Minor | ⚡ Quick win

Align the documentation attribute name with the declared attribute.

The documentation names the attribute shadowAlign. The declaration on Line 968 names it align. An author who follows the documentation writes an attribute that xml_lint.py reports as sxsd_unsupported_attr.

📝 Proposed documentation fix
                 对齐方式:
-                - shadowAlign: 阴影相对于元素的对齐方式(默认为top-left左上对齐)
+                - align: 阴影相对于元素的对齐方式(默认为top-left左上对齐)
📝 Committable suggestion

‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.

                对齐方式:
                - align: 阴影相对于元素的对齐方式(默认为top-left左上对齐)
                注意:空标签表示默认阴影效果(color=rgba(0, 0, 0, 0.25), offset=15, blur=35, angle=45)
            </xs:documentation>
        </xs:annotation>
        <xs:attribute name="color" type="sml:Color" use="optional" default="rgba(0, 0, 0, 0.25)"/>
        <xs:attribute name="offset" type="sml:Range0To200DotType" use="optional" default="15" />
        <xs:attribute name="blur" type="sml:PercentageType" use="optional" default="35"/>
        <xs:attribute name="angle" type="sml:RotationType" use="optional" default="45"/>
        <xs:attribute name="hScale" type="sml:ScaleType" use="optional" default="1"/>
        <xs:attribute name="vScale" type="sml:ScaleType" use="optional" default="1"/>
        <xs:attribute name="hSkew" type="sml:SkewType" use="optional" default="0"/>
        <xs:attribute name="vSkew" type="sml:SkewType" use="optional" default="0"/>
        <xs:attribute name="align" type="sml:ShadowAlignType" use="optional" default="top-left"/>
🤖 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-slides/references/xml/slides_xml_schema_definition.xml` around
lines 955 - 968, Update the shadow documentation text in the annotation above
the shadow attributes to name the attribute as align instead of shadowAlign,
matching the declared xs:attribute and avoiding unsupported-attribute guidance.
skills/lark-slides/scripts/xml_lint.py (1)

325-344: 🩺 Stability & Availability | 🟠 Major | ⚡ Quick win

Handle a missing iconpark index file.

load_iconpark_icon_types catches only json.JSONDecodeError. If references/xml/iconpark-index.json is absent or unreadable, read_text raises OSError. The __main__ block catches only XmlLayoutLintError, so the CLI prints a traceback instead of the xml-lint error: ... message. This PR moves that file into a new directory, so a stale or wrong path is a realistic failure.

iconpark_tool.load_index already uses the intended pattern: check existence, then call fail(...).

🛡️ Proposed fix
-    try:
-        index_data = json.loads(ICONPARK_INDEX_PATH.read_text(encoding="utf-8"))
-    except json.JSONDecodeError as error:
-        fail(f"invalid iconpark index JSON: {error}")
+    try:
+        index_data = json.loads(ICONPARK_INDEX_PATH.read_text(encoding="utf-8"))
+    except OSError as error:
+        fail(f"iconpark index not found: {ICONPARK_INDEX_PATH} ({error})")
+    except json.JSONDecodeError as error:
+        fail(f"invalid iconpark index JSON: {error}")
📝 Committable suggestion

‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.

def load_iconpark_icon_types() -> set[str]:
    global _ICONPARK_ICON_TYPES_CACHE
    if _ICONPARK_ICON_TYPES_CACHE is not None:
        return _ICONPARK_ICON_TYPES_CACHE

    try:
        index_data = json.loads(ICONPARK_INDEX_PATH.read_text(encoding="utf-8"))
    except OSError as error:
        fail(f"iconpark index not found: {ICONPARK_INDEX_PATH} ({error})")
    except json.JSONDecodeError as error:
        fail(f"invalid iconpark index JSON: {error}")
    icons = index_data.get("icons")
    if not isinstance(icons, list):
        fail("iconpark index must contain an icons array")

    icon_types = {
        icon["iconType"]
        for icon in icons
        if isinstance(icon, dict) and isinstance(icon.get("iconType"), str) and icon["iconType"]
    }
    _ICONPARK_ICON_TYPES_CACHE = icon_types
    return icon_types
🤖 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-slides/scripts/xml_lint.py` around lines 325 - 344, Update
load_iconpark_icon_types to handle a missing or unreadable ICONPARK_INDEX_PATH
before read_text, following iconpark_tool.load_index’s existence-check-and-fail
pattern. Route the failure through fail(...) so the CLI’s existing
XmlLayoutLintError handling emits the standard error message, while preserving
the current JSON decoding and validation behavior.

@coderabbitai

coderabbitai Bot commented Aug 6, 2026

Copy link
Copy Markdown

Note

GitHub couldn't provide a complete incremental comparison for this pull request, so CodeRabbit is performing a full review instead. This review may take a little longer.

1 similar comment
@coderabbitai

coderabbitai Bot commented Aug 6, 2026

Copy link
Copy Markdown

Note

GitHub couldn't provide a complete incremental comparison for this pull request, so CodeRabbit is performing a full review instead. This review may take a little longer.

@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: 1

🧹 Nitpick comments (4)
skills/lark-slides/references/cli/lark-slides-replace-pages.md (1)

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

Remove the blank line between the two blockquotes.

markdownlint reports MD028 (no-blanks-blockquote) at line 6. A blank line between two > blocks can render as one merged quote in some renderers. Separate the blocks with a > continuation line, or merge them into one blockquote.

♻️ Proposed fix
 > **灰度期间的重要兼容说明**:当前命令的 `--help` 及输出中的 `deprecated` 字段会提示改用 `+update-slide`,但该提示依赖尚未全量的 Slide Engine 后端能力。在本参考页随 skill 发布期间,必须忽略该提示并继续使用 `+replace-pages`,不得切换到 `+update-slide`。后端全量并由新版 skill 恢复路由后,再使用 `+update-slide`。
-
-> 重要:这是多步编排,不是后端原子事务。CLI 对每页执行“先创建新页到旧页前,再删除旧页”;创建失败时旧页会保留。删除失败时可能出现新旧页同时存在,需要按返回结果继续处理。
+>
+> 重要:这是多步编排,不是后端原子事务。CLI 对每页执行“先创建新页到旧页前,再删除旧页”;创建失败时旧页会保留。删除失败时可能出现新旧页同时存在,需要按返回结果继续处理。
🤖 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-slides/references/cli/lark-slides-replace-pages.md` around lines
5 - 7, Remove the blank line between the two blockquotes in the reference
content, either by adding a `>` continuation line or merging both paragraphs
into one blockquote, so the markdown satisfies MD028.

Source: Linters/SAST tools

skills/lark-slides/SKILL.md (1)

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

Make the document references in the Quick Reference table use consistent paths.

Rows 86 and 87 use the new xml/ prefix. The other rows still use bare file names such as lark-slides-replace-slide.md, iconpark.md, validation-xml.md, and slides_chart_demo.xml. Those files now live in references/cli/, references/xml/, or references/workflow/. A reader who resolves a bare name lands on the legacy stub instead of the canonical document. Add the same subdirectory prefix to every row.

🤖 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-slides/SKILL.md` around lines 82 - 95, Update the Quick Reference
table in the document so every referenced file uses its canonical references/
subdirectory path, including entries under references/cli/, references/xml/, and
references/workflow/. Apply this consistently to all rows, not only the existing
xml/ references, while leaving command names and non-file references unchanged.
skills/lark-slides/scripts/xml_lint_test.py (1)

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

Distinguish the two chart roundtrip test names.

test_lint_xml_ignores_chart_parsed_values_roundtrip_tags and test_lint_xml_ignores_chart_parsed_values_roundtrip_tag differ only by a trailing s. The bodies differ only in whether chartData carries isStaticData="true". A reader cannot tell which behavior each test pins. Rename both to state the distinguishing condition, for example ..._roundtrip_tag_with_static_data and ..._roundtrip_tag_without_static_data.

Also applies to: 885-885

🤖 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-slides/scripts/xml_lint_test.py` at line 862, Rename the two
chart roundtrip tests to clearly distinguish their static-data conditions:
update test_lint_xml_ignores_chart_parsed_values_roundtrip_tags and
test_lint_xml_ignores_chart_parsed_values_roundtrip_tag to names such as
..._roundtrip_tag_with_static_data and ..._roundtrip_tag_without_static_data,
matching each test’s chartData isStaticData="true" usage.
skills/lark-slides/references/workflow/validation-xml.md (1)

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

Add the remaining release-blocking codes to the table.

xml_lint.py also emits duplicate_element_id and text_may_overflow_shape at error level. Both block release, and duplicate_element_id has a non-obvious remediation: remove the id attribute instead of inventing a new one. Add rows for them so the table covers every code that can set release_ready == false.

♻️ Proposed additions
 | `bbox_overlap` | 文本元素的估算绘制区域明显重叠 | 拉开文本坐标、缩小文本框/字号,或改成明确的分栏/分组结构 |
+| `duplicate_element_id` | 多个元素共用同一个 `id` | 新写的元素直接删除 `id` 属性;改写回读 XML 时只保留原元素上的服务端 ID,不要自造新 ID |
+| `text_may_overflow_shape` | 估算文本高度超出 `<shape>` 自身内容框 | 增大 `height`、精简文字,或设置 `wrap="true" autoFit="normal-auto-fit"` |
 | `*_out_of_canvas` | 元素边界超出页面画布 | 根据 `measurement.overflow` 移回画布或缩小尺寸 |
🤖 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-slides/references/workflow/validation-xml.md` around lines 55 -
71, 在“常见 code 的处理方向”表中补充 duplicate_element_id 和 text_may_overflow_shape 两行,确保覆盖
xml_lint.py 以 error 级别阻止 release 的代码;明确 duplicate_element_id 的处理方式是移除 id
属性而不是创建新 ID,并为 text_may_overflow_shape 指明按 lint 提示调整文本框尺寸、字号或文本内容以避免溢出。
🤖 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-slides/references/cli/lark-slides-replace-slide.md`:
- Line 258: Update the link label at
skills/lark-slides/references/cli/lark-slides-replace-slide.md:258 from
lark-slides-edit-workflows.md to slides_editing.md while preserving the target
../workflow/slides_editing.md. Also update the label at
skills/lark-slides/references/lark-slides-create.md:8 from
lark-slides-pptx-template-workflows.md to template-editing.md while preserving
the target workflow/template-editing.md.

---

Nitpick comments:
In `@skills/lark-slides/references/cli/lark-slides-replace-pages.md`:
- Around line 5-7: Remove the blank line between the two blockquotes in the
reference content, either by adding a `>` continuation line or merging both
paragraphs into one blockquote, so the markdown satisfies MD028.

In `@skills/lark-slides/references/workflow/validation-xml.md`:
- Around line 55-71: 在“常见 code 的处理方向”表中补充 duplicate_element_id 和
text_may_overflow_shape 两行,确保覆盖 xml_lint.py 以 error 级别阻止 release 的代码;明确
duplicate_element_id 的处理方式是移除 id 属性而不是创建新 ID,并为 text_may_overflow_shape 指明按 lint
提示调整文本框尺寸、字号或文本内容以避免溢出。

In `@skills/lark-slides/scripts/xml_lint_test.py`:
- Line 862: Rename the two chart roundtrip tests to clearly distinguish their
static-data conditions: update
test_lint_xml_ignores_chart_parsed_values_roundtrip_tags and
test_lint_xml_ignores_chart_parsed_values_roundtrip_tag to names such as
..._roundtrip_tag_with_static_data and ..._roundtrip_tag_without_static_data,
matching each test’s chartData isStaticData="true" usage.

In `@skills/lark-slides/SKILL.md`:
- Around line 82-95: Update the Quick Reference table in the document so every
referenced file uses its canonical references/ subdirectory path, including
entries under references/cli/, references/xml/, and references/workflow/. Apply
this consistently to all rows, not only the existing xml/ references, while
leaving command names and non-file references unchanged.
🪄 Autofix

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 Plus

Run ID: 588d31eb-c5c3-495e-923a-fd7ddf25e045

📥 Commits

Reviewing files that changed from the base of the PR and between 50b4c68 and ad82da4.

📒 Files selected for processing (43)
  • skills/lark-slides/SKILL.md
  • skills/lark-slides/references/cli/lark-slides-media-upload.md
  • skills/lark-slides/references/cli/lark-slides-replace-pages.md
  • skills/lark-slides/references/cli/lark-slides-replace-slide.md
  • skills/lark-slides/references/cli/lark-slides-xml-presentation-slide-get.md
  • skills/lark-slides/references/cli/lark-slides-xml-presentation-slide-replace.md
  • skills/lark-slides/references/cli/lark-slides-xml-presentations-get.md
  • skills/lark-slides/references/iconpark-index.json
  • skills/lark-slides/references/iconpark.md
  • skills/lark-slides/references/lark-slides-add-slide.md
  • skills/lark-slides/references/lark-slides-create.md
  • skills/lark-slides/references/lark-slides-delete-slide.md
  • skills/lark-slides/references/lark-slides-edit-workflows.md
  • skills/lark-slides/references/lark-slides-history.md
  • skills/lark-slides/references/lark-slides-media-upload.md
  • skills/lark-slides/references/lark-slides-pptx-template-workflows.md
  • skills/lark-slides/references/lark-slides-replace-pages.md
  • skills/lark-slides/references/lark-slides-replace-slide.md
  • skills/lark-slides/references/lark-slides-xml-presentation-slide-get.md
  • skills/lark-slides/references/lark-slides-xml-presentation-slide-replace.md
  • skills/lark-slides/references/lark-slides-xml-presentations-get.md
  • skills/lark-slides/references/planning-layer.md
  • skills/lark-slides/references/slides_chart_demo.xml
  • skills/lark-slides/references/slides_xml_schema_definition.xml
  • skills/lark-slides/references/troubleshooting.md
  • skills/lark-slides/references/validation-checklist.md
  • skills/lark-slides/references/workflow/error-handling.md
  • skills/lark-slides/references/workflow/slides_editing.md
  • skills/lark-slides/references/workflow/template-editing.md
  • skills/lark-slides/references/workflow/validation-xml.md
  • skills/lark-slides/references/xml-schema-quick-ref.md
  • skills/lark-slides/references/xml/iconpark-index.json
  • skills/lark-slides/references/xml/iconpark.md
  • skills/lark-slides/references/xml/lark-slides-add-slide.md
  • skills/lark-slides/references/xml/lark-slides-delete-slide.md
  • skills/lark-slides/references/xml/slides_chart_demo.xml
  • skills/lark-slides/references/xml/slides_xml_schema_definition.xml
  • skills/lark-slides/references/xml/xml-schema-quick-ref.md
  • skills/lark-slides/scripts/iconpark_tool.py
  • skills/lark-slides/scripts/xml_lint.py
  • skills/lark-slides/scripts/xml_lint_test.py
  • skills/lark-slides/scripts/xml_text_overlap_lint.py
  • skills/lark-slides/scripts/xml_text_overlap_lint_test.py
🚧 Files skipped from review as they are similar to previous changes (30)
  • skills/lark-slides/references/xml-schema-quick-ref.md
  • skills/lark-slides/references/slides_xml_schema_definition.xml
  • skills/lark-slides/references/lark-slides-history.md
  • skills/lark-slides/references/lark-slides-media-upload.md
  • skills/lark-slides/references/slides_chart_demo.xml
  • skills/lark-slides/references/cli/lark-slides-media-upload.md
  • skills/lark-slides/references/planning-layer.md
  • skills/lark-slides/references/xml/iconpark.md
  • skills/lark-slides/references/cli/lark-slides-xml-presentation-slide-get.md
  • skills/lark-slides/references/lark-slides-xml-presentations-get.md
  • skills/lark-slides/references/lark-slides-edit-workflows.md
  • skills/lark-slides/references/lark-slides-xml-presentation-slide-get.md
  • skills/lark-slides/references/lark-slides-replace-pages.md
  • skills/lark-slides/references/iconpark.md
  • skills/lark-slides/scripts/iconpark_tool.py
  • skills/lark-slides/references/lark-slides-pptx-template-workflows.md
  • skills/lark-slides/references/lark-slides-replace-slide.md
  • skills/lark-slides/references/xml/xml-schema-quick-ref.md
  • skills/lark-slides/references/lark-slides-delete-slide.md
  • skills/lark-slides/references/cli/lark-slides-xml-presentations-get.md
  • skills/lark-slides/references/cli/lark-slides-xml-presentation-slide-replace.md
  • skills/lark-slides/references/troubleshooting.md
  • skills/lark-slides/references/lark-slides-xml-presentation-slide-replace.md
  • skills/lark-slides/references/workflow/error-handling.md
  • skills/lark-slides/scripts/xml_text_overlap_lint.py
  • skills/lark-slides/references/xml/slides_xml_schema_definition.xml
  • skills/lark-slides/references/validation-checklist.md
  • skills/lark-slides/references/workflow/slides_editing.md
  • skills/lark-slides/references/xml/lark-slides-add-slide.md
  • skills/lark-slides/references/xml/slides_chart_demo.xml

- [xml_presentation.slide get](lark-slides-xml-presentation-slide-get.md) — 读原页拿 `block_id` / `revision_id`
- [xml_presentation.slide replace](lark-slides-xml-presentation-slide-replace.md) — 底层 replace API 参考
- [+media-upload](lark-slides-media-upload.md) — 上传图片拿 `file_token`
- [lark-slides-edit-workflows.md](../workflow/slides_editing.md) — 读-改-写闭环 + 决策树

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

📐 Maintainability & Code Quality | 🟡 Minor | ⚡ Quick win

Stale link labels after the reference reorganization. Both links point at the new document location, but the visible label still names the legacy file that is now only a migration stub. Update each label to name the file it actually opens.

  • skills/lark-slides/references/cli/lark-slides-replace-slide.md#L258-L258: change the label lark-slides-edit-workflows.md to slides_editing.md for the target ../workflow/slides_editing.md.
  • skills/lark-slides/references/lark-slides-create.md#L8-L8: change the label lark-slides-pptx-template-workflows.md to template-editing.md for the target workflow/template-editing.md.
📍 Affects 2 files
  • skills/lark-slides/references/cli/lark-slides-replace-slide.md#L258-L258 (this comment)
  • skills/lark-slides/references/lark-slides-create.md#L8-L8
🤖 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-slides/references/cli/lark-slides-replace-slide.md` at line 258,
Update the link label at
skills/lark-slides/references/cli/lark-slides-replace-slide.md:258 from
lark-slides-edit-workflows.md to slides_editing.md while preserving the target
../workflow/slides_editing.md. Also update the label at
skills/lark-slides/references/lark-slides-create.md:8 from
lark-slides-pptx-template-workflows.md to template-editing.md while preserving
the target workflow/template-editing.md.

@@ -1,2984 +1,10 @@
#!/usr/bin/env python3

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

[P1] Restore the required license headers on the compatibility wrappers

This replacement dropped the copyright and SPDX header, and the required license-header check is currently failing for both xml_text_overlap_lint.py and xml_text_overlap_lint_test.py. Please keep the compatibility wrappers and add the repository-standard header after each shebang so the PR can pass the merge gate.

SKILL_ROOT = Path(__file__).resolve().parent.parent
REFERENCES_DIR = SKILL_ROOT / "references"
DEFAULT_INDEX_PATH = REFERENCES_DIR / "iconpark-index.json"
DEFAULT_INDEX_PATH = REFERENCES_DIR / "xml" / "iconpark-index.json"

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

[P1] Preserve parseable content at legacy structured-data paths

Updating the in-tree loader makes the new path work, but references/iconpark-index.json itself now starts with Markdown, so every existing JSON consumer of the promised compatibility path fails immediately. The same regression affects references/slides_xml_schema_definition.xml and references/slides_chart_demo.xml: both legacy .xml paths now contain Markdown and are no longer well-formed XML. Machine-readable resources cannot redirect through a Markdown notice. Please keep valid JSON/XML at the legacy paths (for example, generated copies of the canonical files), or add a loader-level redirect that all existing consumers actually use.

status = slide_status(all_errors, all_warnings)
result: dict[str, Any] = {
"schema_version": "2.0",
"tool": "xml_lint",

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

[P2] Preserve the legacy lint result contract

Calling scripts/xml_text_overlap_lint.py now delegates to this implementation, so the same input returns "tool": "xml_lint"; at the merge base the legacy entry point returned "tool": "xml_text_overlap_lint". Its --help output also names the new executable. Automation that selects or validates results by the tool identifier therefore breaks even though the old path still exists. Please let the wrapper preserve the legacy tool/usage values and add a regression test that invokes the compatibility entry point instead of only executing the new test suite.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

size/XL Architecture-level or global-impact change

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants