Commit 4bb71298f3d6a7958957718edffa2fae2814963f
1 parent
4706a8d9
update req card template
Showing
12 changed files
with
133 additions
and
63 deletions
README.md
| ... | ... | @@ -44,7 +44,7 @@ Claude Code 插件:ERP / 后端管理系统全流程开发框架。 |
| 44 | 44 | ``` |
| 45 | 45 | Plan 阶段**三段式**执行,中间有两个人工审阅断点: |
| 46 | 46 | |
| 47 | - - **第一段(首次运行)**:执行 **A0 → A1**(创建骨架 / 锁技术栈 / 填需求 / 生成 REQ 卡片)后**停下**,等你审阅 `docs/01-需求清单/*.md` 里的 REQ 卡片(Plan 阶段第一个人工关口:业务范围) | |
| 47 | + - **第一段(首次运行)**:执行 **A0 → A1**(创建骨架 / 锁技术栈 / 填需求 / 生成 REQ 卡片骨架)后**停下**,等你审阅并补全 `docs/01-需求清单/<module>/REQ-*.md`(CC 已起草 req_id / title / goal / rules / constraints / acceptance;输入 / 输出 各保留「主表 + 从表1」骨架表,留 `-` 等你按业务补;依赖表 / 依赖接口保留 `TBD(A3/A5 自动补)` 由后续 skill 回填——Plan 阶段第一个人工关口:业务范围) | |
| 48 | 48 | - **第二段(REQ 审阅完重新运行)**:继续 **A2 → A3**(生成骨架 / 从 REQ 正向设计 `docs/03-数据库设计文档.md` 并回填 REQ 依赖表)后再次**停下**,等你审阅 docs/03 的表 / 字段 / 索引 / 外键(第二个人工关口:数据库 schema —— A4 会基于它翻译 DDL 并 apply 到 MySQL,所以这关口与 REQ 审阅同等重要) |
| 49 | 49 | - **第三段(docs/03 审阅完重新运行)**:执行 **A4 → A5**(解析 docs/03 → 生成 V1 migration → 自动 `DROP+CREATE` 本地 schema 并 apply → 生成下游文档),Plan 完成后再次**停下** |
| 50 | 50 | |
| ... | ... | @@ -102,7 +102,7 @@ erp-workflow-plugin/ |
| 102 | 102 | | # | Skill | 作用 | 流程中谁调用 | |
| 103 | 103 | |---|---|---|---| |
| 104 | 104 | | A0 | `project-init` | • 依赖检查(`mysql` 在 PATH,缺失则尝试自动安装)<br>• 空目录初始化:`cp` 模板创建 CLAUDE.md / docs/01/index.md / docs/08<br>• `git init` | `plan-start` | |
| 105 | -| A1 | `scope-lock` | • 引导填项目概述 / 技术栈 / 需求索引<br>• 生成 REQ 卡片(`schema_refs=TBD(A3 自动补)`、`api_refs=TBD(A5 自动补)`)<br>• **停下**等人工审阅 REQ 卡片,审阅完毕用 `/plan-start` 恢复续进 A2 | A0 | | |
| 105 | +| A1 | `scope-lock` | • 引导填项目概述 / 技术栈 / 需求索引<br>• 按 `docs/01-需求清单/<module>/{_module.md, REQ-*.md}` 子目录结构生成 REQ 卡片骨架(CC 起草 req_id / title / goal / rules / constraints / acceptance;输入 / 输出 各保留「主表 + 从表1」骨架,每张表表头 + 1 行 `-` 等人工补;`依赖表 / 依赖接口` 留 `TBD(A3/A5 自动补)`)<br>• **停下**等人工审阅 + 填输入 / 输出表,审阅完毕用 `/plan-start` 恢复续进 A2 | A0 | | |
| 106 | 106 | | A2 | `skeleton-gen` | • 生成架构文档:docs/04 § 一+ / docs/06 / docs/07 / docs/09<br>• 生成工具脚本:scripts/*.sh、.githooks/pre-push、.env.local<br>• 创建 `sql/migrations/` 空目录(Flyway 准备)<br>• 合并 .gitignore(逐行判重) | `plan-start` | |
| 107 | 107 | | A3 | `db-design-gen` | • 从 docs/01 REQ 卡片正向设计 `docs/03-数据库设计文档.md`(schema SSoT)<br>• 回填 REQ 卡片依赖表(`TBD(A3 自动补)` → 实际表名)<br>• **停下**等人工审阅 docs/03,审阅完毕用 `/plan-start` 恢复续进 A4 | A2 | |
| 108 | 108 | | A4 | `db-init` | • LLM 解析 docs/03 → `sql/migrations/V1__initial_schema.sql`(DDL only)<br>• **5 维度全量校验** DDL ↔ docs/03(表名 / 列名+列序 / 类型+nullable+默认值 / 索引名 / FK 名),fail-closed<br>• 验证 MySQL 连接<br>• 调 `scripts/setup-test-db.sh` 复用三层防护(与 B 阶段 test.sh 共用)→ DROP+CREATE 空库<br>• apply V1 + `SHOW TABLES` 行数自检 | A3 | |
| ... | ... | @@ -185,8 +185,8 @@ erp-workflow-plugin/ |
| 185 | 185 | | project-init | `docs-01-index-template.md` | 需求清单索引骨架,等用户填模块表 | |
| 186 | 186 | | project-init | `docs-08-initial-template.md` | 工作流进度文件骨架(Plan A0~A5 checkbox) | |
| 187 | 187 | | project-init | `docs-04-stack-template.md` | docs/04 § 零 默认技术栈总览(零槽位,cp 即可) | |
| 188 | -| scope-lock | `req-card-template.md` | 单张 REQ-XXX-NNN 卡片字段结构 | | |
| 189 | -| scope-lock | `docs-01-module-template.md` | 单模块 `<code>-<name>.md` 外壳 | | |
| 188 | +| scope-lock | `req-card-template.md` | 单张 REQ-XXX-NNN 卡片骨架(6 个 `{{...}}` 占位符由 CC 替换;输入 / 输出 各含「主表 + 从表1」骨架表,留 `-` 等人工补) | | |
| 189 | +| scope-lock | `_module-template.md` | 模块子目录的 `_module.md` 模块头(4 行:模块代码-名 / 简述 / 依赖模块 TBD / 涉及表 TBD) | | |
| 190 | 190 | | skeleton-gen | `docs-04-skeleton-template.md` | docs/04 § 一+ 编码规范大纲(HTML 注释引导 LLM) | |
| 191 | 191 | | skeleton-gen | `docs-06-static-template.md` | docs/06 § 一~四 UI 模式大纲 | |
| 192 | 192 | | skeleton-gen | `docs-07-env-template.md` | docs/07 环境配置大纲 | | ... | ... |
skills/coding/feature-brainstorm/SKILL.md
| ... | ... | @@ -18,7 +18,7 @@ allowed-tools: Read Write Skill Bash(mysql *) |
| 18 | 18 | 1. **中断检查**:调用 `interrupt-check`。如果触发 → 停止。 |
| 19 | 19 | 2. 确定输入: |
| 20 | 20 | - 当前 REQ-XXX-NNN(从对话中获取,或 `docs/08` 当前模块下一个未完成的 REQ)。 |
| 21 | - - REQ 卡片:`docs/01-需求清单/<module>.md` 中对应的 REQ-XXX-NNN 节。 | |
| 21 | + - REQ 卡片:`docs/01-需求清单/<module>/<req_id>.md`(一 REQ 一文件)。 | |
| 22 | 22 | - 相关数据表(从 `docs/03` 或实时 mysql 命令行查询)。 |
| 23 | 23 | 3. 委托本插件 `superpower-brainstorming`,以 REQ 卡片 + schema 引用作为上下文;把步骤 4 推导出的落盘路径作为 caller-provided path 传入。 |
| 24 | 24 | 4. 推导路径:`docs/superpowers/specs/$(date +%F)-<REQ-id>.md`。如已存在,征求用户确认后覆盖。 | ... | ... |
skills/plan/db-design-gen/SKILL.md
| 1 | 1 | --- |
| 2 | 2 | name: db-design-gen |
| 3 | -description: A3 DB 设计 + REQ 回填——基于 docs/01-需求清单 REQ 卡片正向设计 docs/03-数据库设计文档.md(业务实体 → 表 + 字段 + 索引 + 外键 + 业务注记),并把回填值写入 REQ 卡片的「依赖表: TBD(A3 自动补)」占位。生成完毕停下等人工审阅。 | |
| 3 | +description: A3 DB 设计 + REQ 回填——基于 docs/01-需求清单/<module>/REQ-*.md 正向设计 docs/03-数据库设计文档.md(业务实体 → 表 + 字段 + 索引 + 外键 + 业务注记),并把回填值写入 REQ 卡片的「依赖表: TBD(A3 自动补)」与模块头的「涉及表: TBD(A3 自动补)」占位。生成完毕停下等人工审阅。 | |
| 4 | 4 | user-invocable: false |
| 5 | 5 | allowed-tools: Read Write Edit Grep Glob Skill AskUserQuestion |
| 6 | 6 | --- |
| ... | ... | @@ -11,7 +11,7 @@ allowed-tools: Read Write Edit Grep Glob Skill AskUserQuestion |
| 11 | 11 | |
| 12 | 12 | ## 前置条件 |
| 13 | 13 | |
| 14 | -- A1 `scope-lock` 已完成:`docs/01-需求清单/<module>-*.md` REQ 卡片存在,含 `TBD(A3 自动补)` 占位。 | |
| 14 | +- A1 `scope-lock` 已完成:`docs/01-需求清单/<module>/_module.md` + `docs/01-需求清单/<module>/REQ-*.md` 已生成,含 `TBD(A3 自动补)` 占位。 | |
| 15 | 15 | - A2 `skeleton-gen` 已完成:`docs/04-技术规范.md § 一+` 命名规范已生成(本 skill 推导表/字段命名时严格遵循)。 |
| 16 | 16 | |
| 17 | 17 | ## 执行步骤 |
| ... | ... | @@ -40,7 +40,7 @@ allowed-tools: Read Write Edit Grep Glob Skill AskUserQuestion |
| 40 | 40 | |
| 41 | 41 | - `docs/04-技术规范.md` § 一+ 命名规范(表名 / 字段名 / 索引名 / 外键名约定,及主键 / 时间戳 / 软删等审计列约定) |
| 42 | 42 | - `docs/01-需求清单/index.md` 模块索引(模块代码 ↔ 中文名) |
| 43 | -- `docs/01-需求清单/*.md`(排除 `index.md`)所有 REQ 卡片,提取 `req_id` / `goal` / `input` / `output` / `rules` / `constraints` / `acceptance` | |
| 43 | +- `docs/01-需求清单/*/REQ-*.md` 所有 REQ 卡片,提取 `req_id` / `goal` / `输入`(主表+从表的字段清单)/ `输出`(主表+从表的字段清单)/ `跨字段规则` / `边界` / `验收` | |
| 44 | 44 | |
| 45 | 45 | ### B. LLM 推导 schema |
| 46 | 46 | |
| ... | ... | @@ -64,13 +64,13 @@ allowed-tools: Read Write Edit Grep Glob Skill AskUserQuestion |
| 64 | 64 | |
| 65 | 65 | ### D. 回填模块头 + REQ 卡片的 TBD 字段 |
| 66 | 66 | |
| 67 | -1. 用 `Glob` 列出 `docs/01-需求清单/*.md`(排除 `index.md`)。 | |
| 67 | +1. 用 `Glob` 列出 `docs/01-需求清单/*/_module.md`(模块头)和 `docs/01-需求清单/*/REQ-*.md`(REQ 卡片)。 | |
| 68 | 68 | 2. 用 `Grep` 在这些文件中搜索 `TBD(A3 自动补)` 的**行号**(不读全文)。两种行命中: |
| 69 | - - `涉及表: TBD(A3 自动补)` → 模块级(文件头部,每文件一次) | |
| 70 | - - `依赖表: TBD(A3 自动补)` → REQ 级(每 REQ 一次) | |
| 69 | + - `涉及表: TBD(A3 自动补)` → 模块级(仅在 `_module.md`,每文件一次) | |
| 70 | + - `依赖表: TBD(A3 自动补)` → REQ 级(仅在 `REQ-*.md`,每文件一次) | |
| 71 | 71 | 3. 对每个命中行按类型回填: |
| 72 | - - **模块级 `涉及表`**:用 `Read` 取该文件 `{{module_code}}` + `{{module_name}}`,聚合步骤 B 中所有归属该模块的表(多表用 `, ` 分隔);`Edit` 替换为 `涉及表: <table1>, <table2>, ...` | |
| 73 | - - **REQ 级 `依赖表`**:用 `Read` 仅读取该 REQ 卡片所在片段(标题前后约 20 行)取 `req_id`;根据步骤 B 推导结果定位该 REQ 关联的表;`Edit` 替换为 `依赖表: <table1>, <table2>` | |
| 72 | + - **模块级 `涉及表`**(`_module.md`):用 `Read` 取该文件 `module_code` + `module_name`,聚合步骤 B 中所有归属该模块的表(多表用 `, ` 分隔);`Edit` 替换为 `涉及表: <table1>, <table2>, ...` | |
| 73 | + - **REQ 级 `依赖表`**(`REQ-*.md`):从文件名直接得 `req_id`(`REQ-USR-001.md` → `REQ-USR-001`);根据步骤 B 推导结果定位该 REQ 关联的表;`Edit` 替换为 `依赖表: <table1>, <table2>` | |
| 74 | 74 | - **不动** `TBD(A5 自动补)` 的两种行(`依赖接口` REQ 级 / `依赖模块` 模块级)—— 由 A5 `downstream-gen` 生成 docs/05 + 完成模块 DAG 后回填 |
| 75 | 75 | 4. 用 `Grep` 再次扫 `TBD(A3 自动补)` 应 0 命中;仍有残留则打印残留位置清单并停下。 |
| 76 | 76 | 5. 打印回填统计:`A3 回填 <M> 处模块涉及表 + <N> 处 REQ schema_refs`。 |
| ... | ... | @@ -93,7 +93,7 @@ allowed-tools: Read Write Edit Grep Glob Skill AskUserQuestion |
| 93 | 93 | |
| 94 | 94 | 产出: |
| 95 | 95 | ✓ docs/03-数据库设计文档.md |
| 96 | - ✓ docs/01-需求清单/<module>-*.md 依赖表已回填 | |
| 96 | + ✓ docs/01-需求清单/<module>/REQ-*.md 依赖表已回填 + _module.md 涉及表已回填 | |
| 97 | 97 | |
| 98 | 98 | ⏸ 现在请你审阅 docs/03(表 / 字段 / 索引 / 外键 / 业务注记)。 |
| 99 | 99 | 重点关注: |
| ... | ... | @@ -125,4 +125,5 @@ allowed-tools: Read Write Edit Grep Glob Skill AskUserQuestion |
| 125 | 125 | - `${CLAUDE_SKILL_DIR}/templates/docs-03-header-template.md` |
| 126 | 126 | - `${CLAUDE_SKILL_DIR}/templates/docs-03-table-template.md` |
| 127 | 127 | - `docs/04-技术规范.md` § 一+(命名规范输入) |
| 128 | -- `docs/01-需求清单/*.md`(REQ 输入 + 回填目标) | |
| 128 | +- `docs/01-需求清单/<module>/_module.md`(模块头:回填 `涉及表`) | |
| 129 | +- `docs/01-需求清单/<module>/REQ-*.md`(REQ 输入 + 回填 `依赖表`) | ... | ... |
skills/plan/db-design-gen/templates/docs-03-header-template.md
| ... | ... | @@ -2,7 +2,7 @@ |
| 2 | 2 | |
| 3 | 3 | Schema: `{{schema_name}}` |
| 4 | 4 | Migration 清单: `sql/migrations/V*.sql`(由 Flyway 顺序 apply) |
| 5 | -生成方式: 由 A3 `db-design-gen` 基于 `docs/01-需求清单/*.md` REQ 卡片正向设计生成(schema SSoT)。 | |
| 5 | +生成方式: 由 A3 `db-design-gen` 基于 `docs/01-需求清单/<module>/REQ-*.md` REQ 卡片正向设计生成(schema SSoT)。 | |
| 6 | 6 | |
| 7 | 7 | ## ER 关系概览 |
| 8 | 8 | ... | ... |
skills/plan/downstream-gen/SKILL.md
| ... | ... | @@ -11,7 +11,7 @@ allowed-tools: Read Write Edit Glob Grep Skill AskUserQuestion Bash(cat *) Bash( |
| 11 | 11 | |
| 12 | 12 | ## 前置条件 |
| 13 | 13 | |
| 14 | -- `docs/01-需求清单/*.md` 完整 REQ 卡片已就绪(A1 生成 + 人工审阅过 + A3 已回填依赖表)。 | |
| 14 | +- `docs/01-需求清单/<module>/_module.md` + `docs/01-需求清单/<module>/REQ-*.md` 完整 REQ 卡片已就绪(A1 生成 + 人工审阅过 + A3 已回填依赖表)。 | |
| 15 | 15 | - `docs/03-数据库设计文档.md` 已就绪(A3 生成 + 人工审阅过)。 |
| 16 | 16 | - `sql/migrations/V1__initial_schema.sql` 已生成并 apply(A4 完成)。 |
| 17 | 17 | - `docs/05` / `docs/06 § 五` / `docs/10` 等下游文件尚不存在(本 skill 创建)。 |
| ... | ... | @@ -66,13 +66,13 @@ allowed-tools: Read Write Edit Glob Grep Skill AskUserQuestion Bash(cat *) Bash( |
| 66 | 66 | |
| 67 | 67 | ### B2. 回填模块头 + REQ 卡片的 TBD(A5) 字段 |
| 68 | 68 | |
| 69 | -1. 用 `Glob` 列出 `docs/01-需求清单/*.md`(排除 `index.md`)。 | |
| 69 | +1. 用 `Glob` 列出 `docs/01-需求清单/*/_module.md`(模块头)和 `docs/01-需求清单/*/REQ-*.md`(REQ 卡片)。 | |
| 70 | 70 | 2. 用 `Grep` 在这些文件中搜索 `TBD(A5 自动补)` 的行号(不读全文)。两种行命中: |
| 71 | - - `依赖模块: TBD(A5 自动补)` → 模块级(文件头部,每文件一次) | |
| 72 | - - `依赖接口: TBD(A5 自动补)` → REQ 级(每 REQ 一次) | |
| 71 | + - `依赖模块: TBD(A5 自动补)` → 模块级(仅在 `_module.md`,每文件一次) | |
| 72 | + - `依赖接口: TBD(A5 自动补)` → REQ 级(仅在 `REQ-*.md`,每文件一次) | |
| 73 | 73 | 3. 对每个命中行按类型回填: |
| 74 | - - **模块级 `依赖模块`**:用 `Read` 取该文件 `{{module_code}}` + `{{module_name}}`,从步骤 A 的 `module_topo_order[]` + DAG 查该模块的上游依赖(多模块用 `, ` 分隔);`Edit` 替换为 `依赖模块: <module_x>, <module_y>`(无依赖填 `—`) | |
| 75 | - - **REQ 级 `依赖接口`**:用 `Read` 仅读取该 REQ 卡片所在片段(REQ 标题行前后 20 行),提取 `req_id`;在步骤 B 刚生成的 `docs/05-API接口契约.md` 里 Grep 属于该 REQ 的 endpoint;`Edit` 替换为 `依赖接口: POST /api/xxx, GET /api/yyy`(多个用 `, ` 分隔) | |
| 74 | + - **模块级 `依赖模块`**(`_module.md`):用 `Read` 取该文件 `module_code` + `module_name`,从步骤 A 的 `module_topo_order[]` + DAG 查该模块的上游依赖(多模块用 `, ` 分隔);`Edit` 替换为 `依赖模块: <module_x>, <module_y>`(无依赖填 `—`) | |
| 75 | + - **REQ 级 `依赖接口`**(`REQ-*.md`):从文件名直接得 `req_id`(`REQ-USR-001.md` → `REQ-USR-001`);在步骤 B 刚生成的 `docs/05-API接口契约.md` 里 Grep 属于该 REQ 的 endpoint;`Edit` 替换为 `依赖接口: POST /api/xxx, GET /api/yyy`(多个用 `, ` 分隔) | |
| 76 | 76 | 4. 打印回填统计:`A5 回填 <M> 处模块依赖 + <N> 处 REQ api_refs`。 |
| 77 | 77 | |
| 78 | 78 | ### C. docs/06 — 页面清单 |
| ... | ... | @@ -87,7 +87,7 @@ docs/08 已由 A0 project-init 创建(含 Plan 进度骨架)。本步骤只 |
| 87 | 87 | 1. 用 `Read` 读取 `${CLAUDE_SKILL_DIR}/templates/docs-08-module-row-template.md`(单模块 bullet 行模板)。 |
| 88 | 88 | 2. **按 `module_id` 字母序**对每个模块: |
| 89 | 89 | - 从步骤 A `req_order[]` 过滤出 `module_id` 匹配的 REQ 列表(保持步骤 A 算出的模块内 REQ 顺序)。 |
| 90 | - - 对每个 REQ 从 `docs/01-需求清单/<module>.md` 读出其一句话标题(REQ 卡片标题行或 `goal` 字段)。 | |
| 90 | + - 对每个 REQ 从 `docs/01-需求清单/<module>/<req_id>.md` 读出其一句话标题(REQ 卡片标题行或 `goal` 字段)。 | |
| 91 | 91 | - 渲染 `{{req_checklist}}` 块:每行 ` - [ ] <req_id> <title>`(4 空格缩进对齐 `- 功能:`)。 |
| 92 | 92 | - 渲染整条 bullet,填充 `module_id` / `module_name` / `depends_on` / `path_scopes` / `req_checklist`。 |
| 93 | 93 | |
| ... | ... | @@ -106,7 +106,7 @@ docs/08 已由 A0 project-init 创建(含 Plan 进度骨架)。本步骤只 |
| 106 | 106 | - docs/01 的每个 REQ 都出现在 docs/05(作为接口,如适用)、docs/10(作为验收项)。 |
| 107 | 107 | - `docs/02 § 二` 开发顺序清单的 `module_id` 集合 = `docs/08 § 二` 的 `module_id` 集合(数量、ID 全等);不相等 → 报错停下,列出差集。 |
| 108 | 108 | |
| 109 | -2. **最终占位符扫描**(覆盖 Plan 阶段全部产出:`docs/01-需求清单/*.md` + `docs/02` / `docs/03` / `docs/05` / `docs/06` / `docs/10`): | |
| 109 | +2. **最终占位符扫描**(覆盖 Plan 阶段全部产出:`docs/01-需求清单/index.md` + `docs/01-需求清单/*/_module.md` + `docs/01-需求清单/*/REQ-*.md` + `docs/02` / `docs/03` / `docs/05` / `docs/06` / `docs/10`): | |
| 110 | 110 | |
| 111 | 111 | a. **`TBD` → CC 自动补齐**:用 `Grep` 搜索 `TBD(A3 自动补)` 和 `TBD(A5 自动补)`。有命中则按 A3 / B2 同样逻辑就地补填(A3 查 docs/03 填 `依赖表:`;A5 查 docs/05 按 REQ-ID 填 `依赖接口:`),再 Grep 确认 0 命中;仍残留报错停下。 |
| 112 | 112 | ... | ... |
skills/plan/project-init/templates/docs-01-index-template.md
| 1 | 1 | # 需求清单 |
| 2 | 2 | |
| 3 | -> 本目录按模块组织所有功能需求。每个模块一个文件,由 CC 基于下方纲要扩展成 REQ-XXX-NNN 标准卡片。 | |
| 3 | +> 本目录按模块组织所有功能需求。每个模块一个子目录,含 `_module.md`(模块头)和 `REQ-XXX-NNN.md`(每张 REQ 卡片一个文件)。下方核心功能点供 CC 拆分出 REQ 编号 + 标题 + 草拟规则;卡片内输入 / 输出的主从表字段由人工填写。 | |
| 4 | 4 | |
| 5 | 5 | ## 模块索引 |
| 6 | 6 | |
| ... | ... | @@ -12,5 +12,5 @@ |
| 12 | 12 | ## 填写说明 |
| 13 | 13 | |
| 14 | 14 | 1. 每个模块占一行,`模块代码` 用大写英文缩写(如 SYS / PUR / INV / SAL / FIN / HR) |
| 15 | -2. `核心功能点` 只需列关键词,CC 会基于此扩展成完整 REQ 卡片 | |
| 15 | +2. `核心功能点` 只需列关键词,CC 会基于此拆分出 N 张 REQ 卡片骨架(卡片内输入 / 输出的主从表字段仍由人工填) | |
| 16 | 16 | 3. 填完后运行 `/erp-workflow:plan-start`,CC 会自动检测并进入需求生成阶段 | ... | ... |
skills/plan/project-init/templates/docs-08-initial-template.md
| ... | ... | @@ -15,7 +15,7 @@ |
| 15 | 15 | - [ ] 项目概述已填写(CLAUDE.md § 🎯 项目概述) |
| 16 | 16 | - [ ] 技术栈已确认(docs/04 § 零) |
| 17 | 17 | - [ ] 需求清单索引已填写(docs/01-需求清单/index.md) |
| 18 | - - [ ] REQ 卡片已生成(docs/01-需求清单/*.md,schema/api 字段标记为 TBD) | |
| 18 | + - [ ] REQ 卡片骨架已生成(docs/01-需求清单/<module>/REQ-*.md,业务内容留待人工填写) | |
| 19 | 19 | |
| 20 | 20 | - [ ] A2 骨架生成 — skeleton-gen |
| 21 | 21 | - [ ] 架构文档已生成(docs/04 § 一+、docs/06、docs/07、docs/09) | ... | ... |
skills/plan/scope-lock/SKILL.md
| 1 | 1 | --- |
| 2 | 2 | name: scope-lock |
| 3 | -description: A1 计划范围锁定——引导用户填写项目概述 + 技术栈 + 需求索引,并自动扩展 REQ 卡片待人工评审(依赖表 / 依赖接口两字段由模板写死 `TBD(...)` 占位,A3/A5 后续回填)。 | |
| 3 | +description: A1 计划范围锁定——引导用户填写项目概述 + 技术栈 + 需求索引,并按模块子目录生成 REQ 卡片骨架(CC 推断 req_id/title/goal/rules/constraints/acceptance;输入/输出 主从表骨架留 `-` 等人工填;依赖表/依赖接口模板写死 `TBD(A3/A5 自动补)` 由后续 skill 回填)。 | |
| 4 | 4 | user-invocable: false |
| 5 | -allowed-tools: Read Write Edit Grep Skill AskUserQuestion | |
| 5 | +allowed-tools: Read Write Edit Grep Skill AskUserQuestion Bash(mkdir *) | |
| 6 | 6 | --- |
| 7 | 7 | |
| 8 | 8 | **所有输出必须使用中文。** |
| ... | ... | @@ -101,7 +101,7 @@ allowed-tools: Read Write Edit Grep Skill AskUserQuestion |
| 101 | 101 | |
| 102 | 102 | 请按业务列出所有模块: |
| 103 | 103 | - 每行一个模块(如 SYS 系统管理 / PUR 采购 / SAL 销售) |
| 104 | - - 「核心功能点」只需关键词,CC 会扩展为完整 REQ 卡片 | |
| 104 | + - 「核心功能点」只需关键词,CC 会拆分为 REQ 卡片骨架(卡片内输入 / 输出的主从表字段由你后续人工填) | |
| 105 | 105 | 改完后回来选择「继续」。 |
| 106 | 106 | ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ |
| 107 | 107 | ``` |
| ... | ... | @@ -114,16 +114,22 @@ allowed-tools: Read Write Edit Grep Skill AskUserQuestion |
| 114 | 114 | 完成后,用 `Edit` 在 `docs/08-模块任务管理.md` 中勾选: |
| 115 | 115 | - ` - [ ] 需求清单索引已填写(docs/01-需求清单/index.md)` |
| 116 | 116 | |
| 117 | -### D. 生成 REQ 卡片并停下等人工审阅 | |
| 117 | +### D. 生成 REQ 卡片骨架并停下等人工审阅 | |
| 118 | 118 | |
| 119 | 119 | 1. 用 `Grep` 校验 `docs/01-需求清单/index.md` 无 `【人工填写:` 残留;有则回步骤 C。 |
| 120 | 120 | 2. 用 `Read` 读 `index.md` 解析模块索引。 |
| 121 | 121 | 3. 对每个模块: |
| 122 | - - 基于「核心功能点」扩展若干 REQ-XXX-NNN 卡片 | |
| 123 | - - 用 `${CLAUDE_SKILL_DIR}/templates/req-card-template.md` 渲染每张(渲染约定见模板顶部 HTML 注释)。 | |
| 124 | - - 用 `${CLAUDE_SKILL_DIR}/templates/docs-01-module-template.md` 包装卡片列表,用 `Write` 写入 `docs/01-需求清单/<module_code>-<module_name>.md`。 | |
| 122 | + - 基于「核心功能点」推断出 N 个 REQ,每个 REQ 产出六元组 | |
| 123 | + `{req_id, title, goal, rules, constraints, acceptance}`: | |
| 124 | + - `req_id` / `title`:从核心功能点拆分命名(如「用户/角色/权限」→ `REQ-SYS-001 用户管理`、`REQ-SYS-002 角色管理`、`REQ-SYS-003 权限管理`) | |
| 125 | + - `goal`:用一句话展开 `title` | |
| 126 | + - `rules` / `constraints` / `acceptance`:业务语义层面的合理起草,待人工审阅修订 | |
| 127 | + - **不推断输入 / 输出的主从表字段**——模板内保留 `主表 + 从表1` 骨架(每张表表头 + 1 行 `-`),等人工按业务自行复制行 / 增删从表 | |
| 128 | + - 用 `Bash`: `mkdir -p docs/01-需求清单/<module_code>-<module_name>` 创建模块目录 | |
| 129 | + - 用 `${CLAUDE_SKILL_DIR}/templates/_module-template.md` 渲染 `_module.md`,填充 `{module_code, module_name, module_brief}`,`Write` 到 `docs/01-需求清单/<module_code>-<module_name>/_module.md` | |
| 130 | + - 对每个 REQ:用 `${CLAUDE_SKILL_DIR}/templates/req-card-template.md` 渲染(渲染约定见模板顶部 HTML 注释),替换 6 个占位符,`Write` 到 `docs/01-需求清单/<module_code>-<module_name>/<req_id>.md` | |
| 125 | 131 | 4. 用 `Edit` 在 `docs/08-模块任务管理.md` 勾选(A1 子项 + A1 顶层): |
| 126 | - - ` - [ ] REQ 卡片已生成(docs/01-需求清单/*.md,schema/api 字段标记为 TBD)` | |
| 132 | + - ` - [ ] REQ 卡片骨架已生成(docs/01-需求清单/<module>/REQ-*.md,业务内容留待人工填写)` | |
| 127 | 133 | - `- [ ] A1 范围锁定 — scope-lock` |
| 128 | 134 | 5. 打印停下横幅并**停止**: |
| 129 | 135 | |
| ... | ... | @@ -135,9 +141,14 @@ allowed-tools: Read Write Edit Grep Skill AskUserQuestion |
| 135 | 141 | ✓ CLAUDE.md § 🎯 项目概述 |
| 136 | 142 | ✓ docs/04 § 零 技术栈 |
| 137 | 143 | ✓ docs/01-需求清单/index.md 模块索引 |
| 138 | - ✓ docs/01-需求清单/<module>-*.md REQ 卡片 | |
| 144 | + ✓ docs/01-需求清单/<module>/_module.md 模块头 | |
| 145 | + ✓ docs/01-需求清单/<module>/REQ-*.md REQ 卡片骨架 | |
| 139 | 146 | |
| 140 | - ⏸ 现在请你审阅每张 REQ 卡片(路径:`docs/01-需求清单/<module_code>-<module_name>.md`) | |
| 147 | + ⏸ 现在请你逐张打开 REQ 卡片: | |
| 148 | + - **必填**:输入(主表 + N 从表)、输出(主表 + N 从表) | |
| 149 | + · 每张表先把 `-` 行按实际字段数复制;没有从表就删掉 `从表1` 整段,多于一个就复制为 `从表2 / 从表3 / ...` | |
| 150 | + - **审阅**:目标 / 跨字段规则 / 边界 / 验收(CC 已起草,对照业务校正) | |
| 151 | + - **保留**:依赖表 / 依赖接口 行的 `TBD(A3/A5 自动补)` 不要改,由 A3/A5 自动回填 | |
| 141 | 152 | |
| 142 | 153 | 审阅是 Plan 阶段的关键人工关口,请认真逐张过一遍。 |
| 143 | 154 | 审阅完成后,运行以下命令继续进入 A2: |
| ... | ... | @@ -152,6 +163,7 @@ allowed-tools: Read Write Edit Grep Skill AskUserQuestion |
| 152 | 163 | - `CLAUDE.md` § 🎯 项目概述(写入目标) |
| 153 | 164 | - `docs/04-技术规范.md`(技术栈输出,供 skeleton-gen 读取使用) |
| 154 | 165 | - `docs/01-需求清单/index.md`(模块索引输入) |
| 155 | -- `docs/01-需求清单/<module>-*.md`(REQ 卡片输出,A3 db-design-gen 会回填 TBD 字段) | |
| 166 | +- `docs/01-需求清单/<module>/_module.md`(模块头输出) | |
| 167 | +- `docs/01-需求清单/<module>/REQ-*.md`(REQ 卡片骨架输出,A3 db-design-gen / A5 downstream-gen 会回填 TBD 字段) | |
| 156 | 168 | - `${CLAUDE_SKILL_DIR}/templates/req-card-template.md` |
| 157 | -- `${CLAUDE_SKILL_DIR}/templates/docs-01-module-template.md` | |
| 169 | +- `${CLAUDE_SKILL_DIR}/templates/_module-template.md` | ... | ... |
skills/plan/scope-lock/examples/example.md
0 → 100644
| 1 | +<!-- | |
| 2 | +本文件示例 scope-lock 步骤 D 渲染后的单张 REQ 卡片产物。 | |
| 3 | +路径:docs/01-需求清单/USR-用户管理/REQ-USR-001.md | |
| 4 | + | |
| 5 | +CC 已替换 6 个占位符(req_id / title / goal / rules / constraints / acceptance); | |
| 6 | +输入 / 输出 各保留「主表 + 从表1」骨架,每张表只有表头 + 1 行 `-`,等人工按业务补; | |
| 7 | +依赖表 / 依赖接口 保留 `TBD(...)`,等 A3/A5 自动回填。 | |
| 8 | +--> | |
| 9 | +### REQ-USR-001 增加用户 | |
| 10 | + | |
| 11 | +**目标**: 在系统中创建新用户账号,绑定员工并配置登录凭据、用户类型与权限组 | |
| 12 | + | |
| 13 | +- **输入**: | |
| 14 | + - **主表**: | |
| 15 | + | |
| 16 | + | 字段 | 类型 | 必填 | 输入方式 | 显示来源 | 默认值 | 业务规则 | | |
| 17 | + | --- | --- | --- | --- | --- | --- | --- | | |
| 18 | + | - | - | - | - | - | - | - | | |
| 19 | + | |
| 20 | + - **从表1**: | |
| 21 | + | |
| 22 | + | 字段 | 类型 | 必填 | 输入方式 | 显示来源 | 默认值 | 业务规则 | | |
| 23 | + | --- | --- | --- | --- | --- | --- | --- | | |
| 24 | + | - | - | - | - | - | - | - | | |
| 25 | + | |
| 26 | +- **输出**: | |
| 27 | + - **主表**: | |
| 28 | + | |
| 29 | + | 字段 | 类型 | 必填 | 输入方式 | 显示来源 | 默认值 | 业务规则 | | |
| 30 | + | --- | --- | --- | --- | --- | --- | --- | | |
| 31 | + | - | - | - | - | - | - | - | | |
| 32 | + | |
| 33 | + - **从表1**: | |
| 34 | + | |
| 35 | + | 字段 | 类型 | 必填 | 输入方式 | 显示来源 | 默认值 | 业务规则 | | |
| 36 | + | --- | --- | --- | --- | --- | --- | --- | | |
| 37 | + | - | - | - | - | - | - | - | | |
| 38 | + | |
| 39 | +- **跨字段规则**: 员工名选定后用户号 / 用户名 / 手机号 / 邮箱自动带出;权限组至少 1 个 | |
| 40 | +- **边界**: 同一员工名不能重复创建账号;超级管理员仅允许系统内置创建 | |
| 41 | +- **验收**: 新增成功后可立即登录;字段校验失败时给出明确提示 | |
| 42 | +- **依赖表**: TBD(A3 自动补) | |
| 43 | +- **依赖接口**: TBD(A5 自动补) | ... | ... |
skills/plan/scope-lock/templates/docs-01-module-template.md renamed to skills/plan/scope-lock/templates/_module-template.md
skills/plan/scope-lock/templates/req-card-template.md
| 1 | 1 | <!-- |
| 2 | -req-card-template:单张 REQ 卡片结构(三段式)。 | |
| 3 | -1) 标题 + 目标引言:`### {{req_id}} {{title}}` + 一行 `**目标**: {{goal}}` | |
| 4 | -2) 字段表(7 列 × N 行):UI 字段 / API 参数的结构化清单 | |
| 5 | - - 是多行块占位,每个字段一行,LLM 根据本 REQ 实际字段数**复制该行 N 次**,每行填实际值 | |
| 6 | - - `{{field_rules}}` 是**字段级**规则(例:"13 位数字"、"至少 1 个"、"员工名选择后显示");多条用 `;` 分割 | |
| 7 | - - `{{source}}` 若来自 DB 表用反引号包裹(如 `` `职员表` ``) | |
| 8 | - - 若本 REQ 无表单字段(纯后台任务),schema 行填占位:`| — | — | — | — | — | — | 无表单输入 |` | |
| 9 | -3) REQ 级元数据(bullet list): | |
| 10 | - - `**跨字段规则**: {{rules}}` = **REQ 级** 跨字段 / 业务流程规则,与字段表 `{{field_rules}}` 区分 | |
| 11 | - - `TBD(A3 自动补)` 由 A3 `db-design-gen` 回填 | |
| 12 | - - `TBD(A5 自动补)` 由 A5 `downstream-gen` 回填 | |
| 13 | - - REQ 级槽位由 LLM 基于功能点推断。 | |
| 14 | -渲染时 scope-lock skill 会**剥掉本 HTML 注释**,最终 REQ 卡片不保留。 | |
| 2 | +req-card-template:单张 REQ 卡片骨架。每张卡片是 docs/01-需求清单/<module>/REQ-XXX-NNN.md 一个独立文件。 | |
| 3 | +渲染约定: | |
| 4 | +1) scope-lock 渲染时**只替换 6 个占位符**:{{req_id}} / {{title}} / {{goal}} / {{rules}} / {{constraints}} / {{acceptance}} | |
| 5 | + 这 6 项由 CC 根据 docs/01-需求清单/index.md 的「核心功能点」推断起草: | |
| 6 | + - req_id / title:从核心功能点拆分命名得来 | |
| 7 | + - goal:用一句话展开 title | |
| 8 | + - rules / constraints / acceptance:业务语义层面的合理起草,待人工审阅修订 | |
| 9 | +2) `**输入**` / `**输出**` 各含「主表 + N 个从表」二级结构,每张表内字面 `-` 是**字面占位**,模板原样保留。等人工拿到生成的卡片后按实际业务自己改: | |
| 10 | + - 每张表:仅保留表头 + 1 行 `-` 示意;人工按字段数复制行 | |
| 11 | + - 没有从表的 REQ:删掉 `从表1` 整段;多于一个从表:复制 `从表1` 段并改成 `从表2 / 从表3 / ...` | |
| 12 | +3) `**依赖表**: TBD(A3 自动补)` 和 `**依赖接口**: TBD(A5 自动补)` 是后续 skill 自动回填的占位,渲染时**保持原样**,不要替换为 `-` 也不要替换为 `{{...}}` | |
| 13 | +4) 渲染后这段 HTML 注释要**剥掉**,不进入最终卡片 | |
| 15 | 14 | --> |
| 16 | 15 | ### {{req_id}} {{title}} |
| 17 | 16 | |
| 18 | 17 | **目标**: {{goal}} |
| 19 | 18 | |
| 20 | -| 字段 | 类型 | 必填 | 输入方式 | 显示来源 | 默认值 | 业务规则 | | |
| 21 | -|---|---|---|---|---|---|---| | |
| 22 | -| {{field}} | {{type}} | {{required}} | {{input_method}} | {{source}} | {{default}} | {{field_rules}} | | |
| 19 | +- **输入**: | |
| 20 | + - **主表**: | |
| 21 | + | |
| 22 | + | 字段 | 类型 | 必填 | 输入方式 | 显示来源 | 默认值 | 业务规则 | | |
| 23 | + | --- | --- | --- | --- | --- | --- | --- | | |
| 24 | + | - | - | - | - | - | - | - | | |
| 25 | + | |
| 26 | + - **从表1**: | |
| 27 | + | |
| 28 | + | 字段 | 类型 | 必填 | 输入方式 | 显示来源 | 默认值 | 业务规则 | | |
| 29 | + | --- | --- | --- | --- | --- | --- | --- | | |
| 30 | + | - | - | - | - | - | - | - | | |
| 31 | + | |
| 32 | +- **输出**: | |
| 33 | + - **主表**: | |
| 34 | + | |
| 35 | + | 字段 | 类型 | 必填 | 输入方式 | 显示来源 | 默认值 | 业务规则 | | |
| 36 | + | --- | --- | --- | --- | --- | --- | --- | | |
| 37 | + | - | - | - | - | - | - | - | | |
| 38 | + | |
| 39 | + - **从表1**: | |
| 40 | + | |
| 41 | + | 字段 | 类型 | 必填 | 输入方式 | 显示来源 | 默认值 | 业务规则 | | |
| 42 | + | --- | --- | --- | --- | --- | --- | --- | | |
| 43 | + | - | - | - | - | - | - | - | | |
| 23 | 44 | |
| 24 | -- **输出**: {{output}} | |
| 25 | 45 | - **跨字段规则**: {{rules}} |
| 26 | 46 | - **边界**: {{constraints}} |
| 27 | 47 | - **验收**: {{acceptance}} | ... | ... |
skills/plan/skeleton-gen/templates/docs-09-structure-template.md