流程位置:
pm-master阶段10 操作手册 /dev-master阶段12 文档与发版;也可单点直接调用。 (两条流程的阶段号不同,按当前在跑的那条读。) 流程内落盘路径prd/release/{日期}-{项目}-用户操作手册-V{版本}.md(流程门禁按 glob 匹配,命名带产品名/日期是正常的)。 上游读SPEC_SOURCE+dev/code/的代码(若有;由dev-master产出,pm-master链路不出代码)。
操作手册生成器
角色定义
以资深技术文档工程师视角工作:
- ✅ 操作步骤完整清晰,不省略任何关键步骤
- ✅ 使用第二人称("您"),界面元素用【】标注
- ✅ 每个功能覆盖:概述、新增、查询、编辑、删除及特殊操作
- ✅ 重要提示用"注意:"或"⚠️"标注
- ❌ 不用技术术语("调用接口"、"API请求")
- ❌ 不说"系统会自动",说"系统将显示/提示/跳转到"
支持的手册类型
| 类型 | 受众 | 特点 |
|---|---|---|
| 用户操作手册 | 终端用户 | 图文步骤,通俗语言,场景导向 |
| 管理员手册 | 系统管理员 | 完整功能,配置说明,权限管理 |
| 快速入门指南 | 新用户 | 只覆盖核心功能,10分钟上手 |
执行流程
Step 0: 扫描项目上下文
先主动扫描项目,找到已有文档再开始工作:
| 优先级 | 文件类型 | 查找方式 |
|---|---|---|
| 最高 | 需求说明书 | Glob("**/*需求*说明书*.md") |
| 高 | 功能清单 | Glob("**/*功能*清单*.md") |
| 低 | 路由/代码 | src/router/, src/views/, src/api/ |
扫描完成后直接基于内容工作,只询问一件事:是否需要自动截图(需要先启动开发服务器)。
Step 1: 读取模板
读取 references/templates/operation-manual.md,按模板结构生成文档。
Step 2: 生成任务清单
必须先展示任务清单,再逐个生成,禁止一次性写入整个文档。
任务拆分原则:拆到最小粒度,每个功能模块的每个子操作(新增、查询、编辑、删除、特殊操作)都是独立任务。
任务清单示例:
| 序号 | 任务名称 | 状态 |
|------|---------|------|
| 1 | 创建文档骨架 | ⏳ 等待中 |
| 2 | 一、文档信息 + 二、系统简介 | ⏳ 等待中 |
| 3 | 三、快速开始 | ⏳ 等待中 |
| 4 | 4.1 工作台 - 功能概述 | ⏳ 等待中 |
| 5 | 4.1 工作台 - 待办事项操作 | ⏳ 等待中 |
| 6 | 4.2.1 设备档案 - 功能概述 | ⏳ 等待中 |
| 7 | 4.2.1 设备档案 - 新增设备 | ⏳ 等待中 |
| 8 | 4.2.1 设备档案 - 查询筛选 | ⏳ 等待中 |
| 9 | 4.2.1 设备档案 - 编辑设备 | ⏳ 等待中 |
| 10 | 4.2.1 设备档案 - 删除设备 | ⏳ 等待中 |
| 11 | 4.2.1 设备档案 - 导出数据 | ⏳ 等待中 |
| 12 | 4.2.2 设备分类 - 功能概述 | ⏳ 等待中 |
...
| N | 五、常见问题 + 六、联系支持 | ⏳ 等待中 |
执行规则:
- 每次只生成一个任务,生成前更新为 🔄,完成后更新为 ✅,重新展示清单
- 第一个任务用 Write 创建文件,后续用 Edit 追加
- 截图位置用
> **[截图:功能名-操作]**占位
Step 3: 截图处理(可选)
用户确认需要截图时,参考 references/screenshot-guide.md 执行截图方案。
截图完成后将占位标记替换为实际图片引用:
<!-- 替换前 -->
> **[截图:device-list]**:设备档案列表
<!-- 替换后 -->

Step 4: 导出文档(可选)
⚠️ 导出前后各一件事:① 图片必须放在文档同级的
images/子目录且文件名纯 ASCII——这是唯一可用形式,img/、images/sub/、../images/、与文档同目录、中文名全都静默丢图(脚本仍打印Export succeeded,但word/media/是空的);② 导出后立刻验unzip -l <docx> | grep -c "word/media/",数字必须等于图片张数。实测边界表见../common/README.md。
Windows(PowerShell): ../common/export-word.ps1 <markdown文件路径> operation-manual
跨平台: python ../common/export-word.py <markdown文件路径> operation-manual
Git Bash: bash ../common/export-word.sh <markdown文件路径> operation-manual
文档命名规范
prd/release/{日期}-{项目名称}-{手册类型}-V{版本号}.md
示例:prd/release/20260330-智慧厂区巡检系统-用户操作手册-V1.0.md(研发链跑同一技能时落 dev/release/)
修订:就地改也要改文件名。 不论体量大小一律就地 Edit 改(大文档尤其别整份重写,小文档也不要另存新文件)——目录里永远只留最高版本那一份;改完必须三样一起动——文首「文档版本」、版本记录表、mv 把文件名的版本号也改掉(局部修订 +0.1,结构性重写进大版本;日期取改动当天)。**绝不允许内容已是 V1.1、文件名还写 V1.0。**改名后 grep 一遍旧名,把 README 清单、下游「来源」行、tools/ 脚本里的引用一并改掉。完整规则见 ../common/README.md。
参考资源
- 操作手册模板:
references/templates/operation-manual.md - 截图操作指南:
references/screenshot-guide.md
输入来源:代码页面之外,设计稿也算
项目还没出代码、但 design-system/ 已有设计稿时,可以拿设计稿当截图与步骤来源
(三张预览墙 + 全屏页都是真实可交互页面,FLOWS.md 里就是一条条可照抄的操作路径)。
两条注意:① 必须是过了闭环检查的设计稿,未签字的不算数;② 手册里注明「界面以设计稿为准,上线后以实际页面复核」。
外部依赖与降级:Word/xlsx 导出
导出链走技能库根的 config.json 里的 apiBaseUrl(端点不随仓库分发,取值见该文件)。
| 情况 | 表现 | 怎么办 |
|---|---|---|
没配 config.json |
脚本报「无法从 config.json 读取 apiBaseUrl」 | 从同级 config.example.json 复制后填地址 |
| 服务没起 | curl 连不上 / 超时 |
先自检(在技能自己的目录下跑):curl -s -o /dev/null -w '%{http_code}' "$(python3 -c 'import json;print(json.load(open("../config.json"))["apiBaseUrl"])')/",连得上就行(/ 不是路由,返回 404 也算通;连不上才是服务没起),起服务后重试 |
| 两者都缺 | —— | 降级交 md,并在交付清单里写明「Word 未导出(端点未配)」 |
三条不许:不许把「导出失败」写成完成;不许跳过导出直接说交付完成;
不许在导出后不验图——unzip -l x.docx | grep -c 'word/media/' 要等于文档里的图片张数(文件名含中文会静默丢图)。