- 移除 TodoItem 中的 priority、created_at 和 updated_at 字段 - 强制每个任务都必须有唯一 id,且由用户负责生成 - 修改合并模式逻辑,merge=true 下保留未提及的旧任务 - 支持已完成和已取消任务重新激活(状态改回 pending 或 in_progress) - 禁止 in_progress 状态退回到 pending,必须标记为 completed 或 cancelled - 优化状态转换校验,允许特定状态间合法切换 - 简化任务变更消息,移除详细的新增/更新/移除统计 - 更新文档和示例,明确 id 必须由用户生成和使用 - 修复和补充测试,增强状态转换和合并模式验证 - 调整任务时间戳生成逻辑,统一使用当前时间及索引 - 该变更提供更合理的任务状态机械及管理模式,提升稳定性和易用性
5.5 KiB
5.5 KiB
Troubleshooting
本文件覆盖 lark-slides 的通用创建前自检、XML 排障和常见失败处理。命令专属问题优先看对应 reference,例如 +replace-slide、+media-upload、xml_presentation.slide.create。
XML Preflight
在真正创建或替换前,至少检查:
- 特殊字符已转义:正文和标题里的
&、<、>不能裸写;属性值里的裸&也必须写成&。 - 属性引号安全:XML 属性、shell 引号、JSON 字符串包装之间没有互相打断。
- 结构合法:
<slide>下只放<style>、<data>、<note>,文本都在<content>内。 - 图片路径正确:
<img src="@...">只在+create --slides的支持链路中使用;直接调用xml_presentation.slide.create必须先拿到file_token。
Failure Order
遇到 invalid param、某一页创建失败、页面空白或布局错乱时,按顺序处理:
- 记录
xml_presentation_id,不要假设失败代表什么都没创建。 - 用
xml_presentations.get回读,确认是否已有部分页面写入。 - 检查失败页是否含未转义字符:
Q&A -> Q&A,文本</>写成</>,属性 URLa=1&b=2 -> a=1&b=2。 - 检查标签闭合、属性引号、
<content>结构,以及<slide>直接子元素。 - 页面空白、溢出、重叠或越界时,按 validation-checklist.md 运行 XML 文本重叠检查,并人工核对越界、截断、图文压盖等视觉风险;工具当前只会报告
xml_not_well_formed/bbox_overlap。 - 如果使用
--slides '[...]',怀疑 shell 截断时直接切到两步创建:先slides +create,再用xml_presentation.slide.create逐页添加。 - 局部问题用
+replace-slide块级修正;整页结构要改时再用slide.delete旧页 +slide.create新页。
Symptom Fixes
| 看到的问题 | 处理方式 |
|---|---|
| 文字被截断 / 看不全 | 增大 shape 的 width 或 height,或减少文本量 |
| 元素重叠 | 调整 topLeftX / topLeftY,拉开间距 |
| 页面大面积空白 | 回读确认内容是否写入;若内容存在,再缩小间距或增加主体元素 |
| 文字和背景色太接近 | 深色背景用浅色文字,浅色背景用深色文字 |
| 表格列宽不合理 | 调整 colgroup 中 col 的 width 值 |
| 图表没有显示 | 检查 chartPlotArea 和 chartData 是否都包含,dim1 / dim2 数据数量是否匹配 |
| 图片被裁掉一部分 | <img> 的 width / height 是裁剪后尺寸;要整图显示就让 width:height 对齐原图比例 |
图片不显示 / <img src> 仍是 @path |
@ 占位符只在 +create --slides 中替换;直接调 xml_presentation.slide.create 必须先用 +media-upload 拿 file_token |
新插入的 <img> 挡住原有元素 |
slide.get 读原页,对照已有块坐标挑空白位置;空间不够就在同一批 --parts 里先移动/缩小现有块再插图 |
| 渐变背景变成白色 | 渐变必须用 rgba() 格式 + 百分比停靠点,如 linear-gradient(135deg,rgba(30,60,114,1) 0%,rgba(59,130,246,1) 100%) |
| 整体风格不统一 | 封面页和结尾页用同一背景,内容页保持一致的配色和字号体系 |
Common Errors
| 错误码 / 信号 | 含义 | 解决方案 |
|---|---|---|
| 400 XML 格式错误 | XML 语法错误 | 检查标签闭合、属性引号、特殊字符转义 |
| 400 请求包装错误 | --data 未按 schema 包装 |
检查是否传入 xml_presentation.content 或 slide.content |
| 创建成功但页面空白 / 内容缺失 / 布局错乱 | 常见于 --slides '[...]' 的 shell 转义或长参数传递问题 |
改用两步创建,并在创建后立即读取 XML 验证 |
| 403 权限不足 | 身份或 scope 不匹配 | 先检查是否误用了 bot 身份,再确认 scope 和文档权限 |
| 404 演示文稿不存在 | xml_presentation_id 不正确或无权限 |
检查 token;wiki URL 需先解析真实 obj_token |
| 404 幻灯片不存在 | slide_id 不正确 |
重新读取 presentation 或 slide,确认最新 ID |
| 400 无法删除唯一幻灯片 | 演示文稿至少保留一页 | 先创建新页,再删除旧页 |
| 1061002 媒体上传 params error | slides 媒体上传参数不符合约定 | 用 slides +media-upload,不要手拼原生 medias/upload_all;slides 唯一可用 parent_type 是 slide_file |
| 1061004 forbidden | 当前身份对演示文稿无编辑权限 | 确认 user/bot 对目标 PPT 有编辑权限;bot 常见于 PPT 非该 bot 创建 |
| 3350001 | XML 非 well-formed、XML 结构不符合服务端要求,或 replace 片段问题 | 优先检查未转义字符;replace 场景再看 block_id 和 <content/> |
| 3350002 | revision_id 大于当前版本 |
用 -1 取当前版本,或重新读 xml_presentations.get 取最新 revision_id |
| validation: unsafe file path | --file 给了绝对路径或上层路径 |
--file 必须是 CWD 内相对路径;先 cd 到素材目录再执行 |
Command-Specific References
- 图片上传、
@path占位符、file_token:见 lark-slides-media-upload.md 和 lark-slides-create.md。 - 块级替换、
block_id、3350001 replace 细节:见 lark-slides-replace-slide.md。 - 原生
slide.create包装、before_slide_id和 jq 模板:见 lark-slides-xml-presentation-slide-create.md。