--- name: erp-scope-lock description: A1 计划范围锁定——引导用户填写项目概述 + 技术栈 + 需求索引,并自动扩展 REQ 卡片待人工评审。`schema_refs` 填 `TBD(A4 自动补)`(A4 回填依赖表),`api_refs` 填 `TBD(A5 自动补)`(A5 回填依赖接口)。 user-invocable: false allowed-tools: Read Write Edit Grep Skill AskUserQuestion --- **所有输出必须使用中文。** # erp-scope-lock ## 执行步骤 ### 步骤 0:打印当前位置流程图 向用户展示当前在 A 阶段流程中的位置(A-only,`▶` 标在 A1): ``` ┌──────────────────────────────────────────────────────┐ │ 📋 阶段 A:规划(一次性) │ │ │ │ A0 初始化项目 → ▶ A1 锁范围(REQ 卡片) │ │ ↓ │ │ ⏸ 等你审阅 REQ,重新运行 /erp-plan-start 继续 │ │ ↓ │ │ A2 生成骨架 → A3 初始化 DB → A4 生成 DB 设计 → A5 生成下游文档│ │ ↓ │ │ 规划阶段到此结束 │ └──────────────────────────────────────────────────────┘ ``` ### A. 提示用户填写项目概述并等待 向用户输出: ``` ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ [erp-scope-lock] 请填写项目概述 📄 文件位置: ./CLAUDE.md 📌 编辑位置: § 🎯 项目概述 请将以下占位符替换为实际值: - 项目名称 - 项目简述 - 目标用户 - 部署方式 改完后回来选择「继续」。 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ ``` 用 `AskUserQuestion` 询问: - **question**: `项目概述填写完毕了吗?` - **options** (每项为对象): - `{"label": "继续", "description": "已完成检查"}` - `{"label": "有疑问想先沟通", "description": "需要讨论或修改"}` - 用户选择「有疑问想先沟通」→ 回答用户问题后,再次弹出同样的 QA。 - 用户选择「继续」→ 进入步骤 B。 ### B. 保存默认技术栈到 docs/04 用 `Write` 将以下默认技术栈表写入 `docs/04-技术规范.md`: ```markdown # 04-技术规范 ## 零、技术栈总览 | 分层模块 | 技术 | 版本要求 | 说明 | |---|---|---|---| | 前端基础框架 | React | 18.x | 构建前端应用 | | 前端 UI 组件 | Ant Design | 5.x | 页面组件与交互控件 | | 前端状态管理 | Redux Toolkit | 最新稳定版 | 管理全局状态 | | 前端路由管理 | React Router | v6 | 页面路由与导航 | | 前端工程化构建 | Vite | 最新稳定版 | 前端开发与打包构建 | | 前端接口通信 | Axios | 最新稳定版 | 调用后端 API | | 后端基础框架 | Spring Boot | 3.x | 构建后端服务 | | 后端数据访问 | MyBatis-Plus | 最新稳定版 | 数据库访问与 ORM 增强 | | 工作流引擎 | Activiti | 6.x | 审批流、流程流转 | | 缓存服务 | Redis | 最新稳定版 | 缓存、会话、分布式能力 | | 报表打印 | JXLS | 2.8.1 | 基于 Excel 模板生成报表 | | Excel 导入导出 | EasyExcel | 4.0.3 | Excel 数据导入导出 | | 关系型数据库 | MySQL | 8.x | 核心业务数据存储 | | 数据库 schema 迁移 | Flyway (`flyway-core` + `flyway-mysql`) | 10.x / 最新稳定版 | `sql/migrations/V_n__*.sql` 顺序 apply;Spring Boot 启动时自动应用 | | 接口风格 | RESTful API | 统一规范 | 前后端接口设计规范 | | 权限认证 | Spring Security / JWT | 最新稳定版 | 登录认证、权限控制 | | API 文档 | OpenAPI / Swagger | 最新稳定版 | 接口文档与调试 | | 项目构建管理 | Maven | 3.9.x | Java 项目依赖与构建 | | JDK 运行环境 | Java | 17 / 21 | Spring Boot 3 推荐版本 | | 部署容器 | Docker | 最新稳定版 | 容器化部署 | | Web 服务器 / 反向代理 | Nginx | 最新稳定版 | 前端托管、反向代理、负载分发 | | 日志管理 | Logback | 默认集成 / 最新稳定版 | 应用日志输出 | | 对象映射工具 | MapStruct | 最新稳定版 | DTO / VO / Entity 转换 | | 工具类库 | Hutool / Apache Commons | 最新稳定版 | 常用工具方法支持 | > 本表由 erp-scope-lock 锁定。后续所有规范基于此表推导。 ``` ### C. 提示用户检查并等待 向用户输出: ``` ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ [erp-scope-lock] 技术栈已保存 📄 文件位置: ./docs/04-技术规范.md 📌 编辑位置: § 零、技术栈总览 请检查技术栈表: - 不需要的行直接删除(如纯后端项目删前端行) - 需要替换的技术直接改 - 需要新增的条目直接加行 改完后回来选择「继续」。 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ ``` 用 `AskUserQuestion` 询问: - **question**: `技术栈检查完毕了吗?` - **options** (每项为对象): - `{"label": "继续", "description": "已完成检查"}` - `{"label": "有疑问想先沟通", "description": "需要讨论或修改"}` - 用户选择「有疑问想先沟通」→ 回答用户问题后,再次弹出同样的 QA。 - 用户选择「继续」→ 进入步骤 D。 ### D. 提示用户填写需求清单并等待 `docs/01-需求清单/README.md` 已由 `erp-project-init` 写入占位符模板,这里让用户补齐模块清单。 向用户输出: ``` ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ [erp-scope-lock] 请填写需求清单模块索引 📄 文件位置: ./docs/01-需求清单/README.md 📌 编辑位置: § 模块索引(表格) 请按业务列出所有模块: - 每行一个模块(如 SYS 系统管理 / PUR 采购 / SAL 销售) - 「核心功能点」只需关键词,CC 会扩展为完整 REQ 卡片 改完后回来选择「继续」。 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ ``` 用 `AskUserQuestion` 询问: - **question**: `需求清单模块索引填写完毕了吗?` - **options** (每项为对象): - `{"label": "继续", "description": "已完成检查"}` - `{"label": "有疑问想先沟通", "description": "需要讨论或修改"}` - 用户选择「有疑问想先沟通」→ 回答用户问题后,再次弹出同样的 QA。 - 用户选择「继续」→ 进入步骤 E。 ### E. 生成 REQ 卡片并等用户审阅 先用 `Grep` 在 `docs/01-需求清单/README.md` 搜索 `【人工填写:`,命中 → 提示残留行,回到步骤 D。通过后: 1. 用 `Read` 读取 `docs/01-需求清单/README.md`,解析模块索引表(每行:模块代码 / 模块名 / 核心功能点)。 2. 用 `Read` 读取两份模板: - `${CLAUDE_SKILL_DIR}/templates/req-card-template.md` - `${CLAUDE_SKILL_DIR}/templates/docs-01-module-template.md` 3. 对每个模块: - 基于「核心功能点」关键词,LLM 扩展为若干 REQ-XXX-NNN 卡片(编号按模块递增) - 每张卡片填充字段: - `goal` / `input` / `output` / `rules` / `constraints` / `acceptance` —— LLM 基于功能点推断 - `schema_refs` —— 填 `TBD(A4 自动补)`(A4 `erp-db-design-gen` 回填依赖表) - `api_refs` —— 填 `TBD(A5 自动补)`(A5 `erp-downstream-gen` 回填依赖接口) - 用 module 模板包装卡片列表 - 用 `Write` 写入 `docs/01-需求清单/-.md` 4. 向用户输出(只打印,**不弹出 QA**,不等待): ``` ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ [erp-scope-lock] REQ 卡片已生成 📄 文件位置: ./docs/01-需求清单/-*.md ⚠️ 依赖表 = TBD(A4 自动补)(A4 阶段回填) / 依赖接口 = TBD(A5 自动补)(A5 阶段回填) 请人工审阅每张 REQ 卡片的功能字段: - 目标 / 输入 / 输出 - 业务规则 / 边界 - 验收标准 审阅是 Plan 阶段的关键人工关口,请认真逐张过一遍。 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ ``` 5. 立即进入步骤 F(不等待用户任何输入)。 ### F. 勾选 docs/08 进度 + 停下等人工审阅 1. 用 `Edit` 在 `docs/08-模块任务管理.md` 勾选 5 个 checkbox(A1 的 4 个子项 + A1 父项): - ` - [ ] 项目概述已填写(CLAUDE.md § 🎯 项目概述)` → `[x]` - ` - [ ] 技术栈已确认(docs/04 § 零)` → `[x]` - ` - [ ] 需求清单索引已填写(docs/01-需求清单/README.md)` → `[x]` - ` - [ ] REQ 卡片已生成(docs/01-需求清单/*.md,schema/api 字段标记为 TBD)` → `[x]` - `- [ ] A1 范围锁定 — erp-scope-lock` → `[x]` 2. 输出 `scope-lock: 完成(4 项产出已勾选)`。 3. 打印停下横幅并**停下**(**不调** `Skill(erp-skeleton-gen)`,A2 由用户手动恢复): ``` ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ [erp-scope-lock] ✅ A1 范围锁定完成 产出: ✓ CLAUDE.md § 🎯 项目概述 ✓ docs/04 § 零 技术栈 ✓ docs/01-需求清单/README.md 模块索引 ✓ docs/01-需求清单/-*.md REQ 卡片 ⏸ 现在请你审阅 REQ 卡片(路径:`docs/01-需求清单/-.md`)。 审阅完成后,运行以下命令继续进入 A2: /erp-workflow:erp-plan-start (入口会读取 docs/08 进度,自动派发到 A2 erp-skeleton-gen) ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ ``` **停止**,不调用任何下游 skill。 ## 参考 - `CLAUDE.md` § 🎯 项目概述(写入目标) - `docs/04-技术规范.md`(技术栈输出,供 erp-skeleton-gen 读取使用) - `docs/01-需求清单/README.md`(模块索引输入) - `docs/01-需求清单/-*.md`(REQ 卡片输出,A4 erp-db-design-gen 会回填 TBD 字段) - `${CLAUDE_SKILL_DIR}/templates/req-card-template.md` - `${CLAUDE_SKILL_DIR}/templates/docs-01-module-template.md`