# Lark Doc Authoring ## Philosophy 以下原则是每个内容、结构和视觉决策的判定依据;写作和复查时逐条套用,冲突时按「约束栈」排序。 - **读者本位**:落地前先回答:读者是谁、为什么要读、带着什么任务来。按读者的任务组织内容,不按功能或作者视角罗列。 - **结构先行**:结论先行,先整体后局部;按逻辑分组与递进,依据关系选择列表、步骤或表格,使内容便于扫读。(特殊体裁除外) - **视觉服从语义**:先确定全篇主线和每节的中心任务或命题,再让视觉层级复现内容优先级。文档脱离讲解仍须完整、连续、可独立阅读。 - **最低理解成本**:选择最能降低读者理解、执行和出错成本的表达形式,而不是机械选择字符最少或制作成本最低的形式;删冗余,用短句、动词和数据,并按真实信息关系使用图、表格或交互组件。 - **克制且连贯**:每个视觉元素必须承担导航、比较、解释、证据、行动,或体裁所需的氛围与品牌功能;相关文字与视觉相邻,同类关系复用同类组件和样式。去掉后不影响读者任务或预期语气的装饰应删除。 - **约束栈**:事实 > 用户硬约束 > 读者任务 > 内容 > 组件样式;后项不得牺牲或放宽前项,格式与组件不得反向改变内容判断。 - **表达一致**:同一对象、动作和状态全文同名;标题层级与编号采用统一体系,如下;用户提供样例时,在不违反更高优先级规则的前提下延续其有效结构、语气、术语和编号。 - **自动编号模式**:每一个正文标题都写 `seq="auto"`,标题文本不手写任何前置序号。 - **中文手写模式**:适用于公文或正式场景,在标题文本中手写 `一、→(一)→ 1.→(1)`;最忌中文层级配阿拉伯小数,绝不出现 `一、` 下接 `1.1`。 ## Step Plan **CRITICAL:从零创作文档时按下述步骤依次执行,不可跳步。** ### Step 1:理解读者任务、文档格式要求、硬约束和禁区。 ### Step 2:选择 genre content contract。 下表文件均位于当前 Skill 的 `references/genres/` 目录。 - 路由表仅用于选择候选,不代替 contract。高置信命中后必须读取对应 Profile / Adapter,并按其中的路由与消歧规则复核;未读取不得确定该值或进入 Step 3。确认后记录固定短名,最多各读取一个;未命中时可省略 `genre_contract` 和 `adapter`。 - contract 决定内容任务、证据和体裁边界;adapter 只调整与所选 contract 兼容的平台结构、写作风格和组件约束。 | Content Profile | 独特专业任务 | |-|-| | [`route-workplace.md`](genres/route-workplace.md) | 组织决策、执行、留档 | | [`route-report.md`](genres/route-report.md) | 数据、研究和证据形成洞察 | | [`route-knowledge.md`](genres/route-knowledge.md) | 理解、自学、一次已知操作或检索 | | [`route-media.md`](genres/route-media.md) | 独立采集、核实和公共理解 | | [`route-opinion.md`](genres/route-opinion.md) | 形成并论证判断 | | [`route-consumer.md`](genres/route-consumer.md) | 以真实体验或测试辅助消费选择 | | [`route-marketing.md`](genres/route-marketing.md) | 组织授权的认知、转化或公关内容 | | [`route-personal-brand.md`](genres/route-personal-brand.md) | 本人经历、能力和作品的可信呈现 | | [`route-creative.md`](genres/route-creative.md) | 角色、冲突、情节与分支叙事 | | Adapter | 渠道 | |-|-| | [`route-platform.md`](genres/route-platform.md) | Email、微信公众号、小红书 | ### Step 3:收集资料并扫描表达机会。 1. 强制扫描事实、数据、案例、引用和图片等资源缺口;内容需要而现有材料不足时必须检索或生成,判断需要图片且用户未提供素材时必须搜索图片。 2. 根据用户要求、contract / adapter 限制和内容需要选择表达方式;可用 `presentation_mode` 记录视觉策略,不因字段存在就机械使用组件。 | 信息关系 | 候选表达 | |-|-| | 同组字段的精确比较或映射 | `table` | | 流程、依赖、分支、时序、层级、因果、空间或拓扑关系 | `whiteboard` | | 对象、场景、界面、外观、氛围、示例或视觉证据 | `img` | | 复杂交互、动态状态、可探索数据或应用式布局 | `html5-block` | | 两组简短、等权且适合横向阅读的信息 | `grid` | | 单个关键提醒或限制 | `callout` | | 简单并列、步骤或连续论述 | 列表或段落 | 3. 按全篇、章节、block 三个尺度构图:相关内容相邻,同类关系保持相同顺序与对齐;正文可以是主表达,不要求每节都有 presentation block。 4. 在写正文前确定计划使用的 block。Presentation Decision 的 `visual_plan.blocks` 只记录确需最低数量约束的 `whiteboard`、`img`、`html5-block`。三类均无硬性数量要求时写 `"blocks": []`。 `presentation_mode` 只表示模型采用的视觉策略;只有用户要求、contract / adapter 限制互相冲突时才询问用户: - `formal`:视觉正式、克制;不使用高亮块、emoji 或装饰性组件,只保留正式体裁确有必要的结构。 - `normal`:按内容需要使用组件;只有能降低理解、执行或出错成本时才扩展视觉表达。 - `rich`:主动利用图片、画板、HTML 和其他飞书组件;每个组件须有明确目的,不设全局数量配额。 ### Step 4:提交 Presentation Decision,并初始化草稿。 生成完整 JSON;字段值必须来自 Step 1–3,不得照抄示例。`word_count` 仅在用户明确提出字数要求时加入,使用 `min` / `max`;单边无限制写 `null`,“约 N 字”按 ±10%,无要求时省略整个字段: ```json { "audience": "项目负责人", "reader_task": "判断偏差并决定下一轮动作", "genre_contract": null, "adapter": null, "presentation_mode": "rich", "visual_plan": { "reason": "需要用因果图解释偏差来源与后续行动依赖", "blocks": [ {"type": "whiteboard", "min_count": 1, "purpose": "展示偏差成因与行动依赖"} ] } } ``` 不预建临时目录、草稿或决策文件。将上述 JSON 原样替换命令中的占位符并实际执行: ```bash lark-cli docs +script --command init-draft --presentation-decision '<上方完整 JSON>' --format json ``` - 返回的 `data` 字段包含 cwd、workspace、draft_path,后续 CLI 在 `data.cwd` 下执行;将 `data.workspace` 记为 `work_dir`、`data.draft_path` 记为 `draft_path`(已含工作区前缀)。 - CLI 会创建独占的 `work_dir` 并保存 `.presentation-decision.json` 作为固定基线,**但不会创建 `draft_path` 指向的 XML**。`draft_path` 是当前任务可直接写入的新文件路径; ### Step 5:生成 release candidate。 读取 [`lark-doc-xml.md`](lark-doc-xml.md),并结合 Presentation Decision、适用 contract 和 Philosophy 生成完整 XML。使用扩展标签时按需读取 [`拓展标签`](lark-doc-xml-extended-blocks.md)。 1. 公开网络图片使用 ``;已有本地图片使用 ``;画板使用 `` 并遵循[`画板工作流`](lark-doc-whiteboard.md);HTML 使用 `` 并遵循[`拓展标签`](lark-doc-xml-extended-blocks.md)。 2. 直接在 `/` 创建并写入完整 release candidate。新建资源建议放 `/`,已有资源可原地复用;CWD 内优先用相对路径,其他位置用允许访问的绝对路径。XML 内相对资源先查 CWD,仅文件不存在时回退到 XML 所在目录。 3. 首次写入后,发现 XML 语法问题时只修复最小范围,不无故重写正确内容。 ### Step 6:执行 Draft Profile Check。 1. 执行 `lark-cli docs +script --command parse --content "@./" --format json`。顶层 `ok` 仅表示命令执行成功,是否通过看 `data.assessment.status`。失败时按 `data.diagnostics[]` 局部修复;只有草稿为空、截断或结构无效时才全文重建。`parse` 不替代 XML 规则或服务端校验。 2. `passed` 只覆盖已启用的检查;先对照用户要求确认应声明的约束已完整填写,再按 [`lark-doc-xml.md`](lark-doc-xml.md) 复查标签、属性和值,并依据 Philosophy 检查事实与来源、用户硬约束、适用 contract / adapter 以及 `visual_plan`。最终 XML 能否写入以 `docs +create` 的服务端结果为准。 ### Step 7:创建文档并处理局部失败。 1. 只有最新 release candidate 完成 Draft Profile Check 和 XML 规则复查后,才读取 [`lark-doc-create.md`](lark-doc-create.md),使用同一个 `draft_path` 创建文档。 2. 创建结果存在 warning、局部资源失败或回查发现局部问题时,不得再次新建文档;读取 [`lark-doc-update.md`](lark-doc-update.md),对已创建文档做最小范围修复,并按 update 流程 fetch 验证。 ### Step 8:交付。 保留 Step 4 返回的 `work_dir` 及其中的创作草稿。最终只交付用户需要的结果,并说明必要来源、未关闭缺口、异常、失败或阻塞原因,以及文档 URL 或 token。