Commit 4bb71298f3d6a7958957718edffa2fae2814963f

Authored by zichun
1 parent 4706a8d9

update req card template

README.md
@@ -44,7 +44,7 @@ Claude Code 插件:ERP / 后端管理系统全流程开发框架。 @@ -44,7 +44,7 @@ Claude Code 插件:ERP / 后端管理系统全流程开发框架。
44 ``` 44 ```
45 Plan 阶段**三段式**执行,中间有两个人工审阅断点: 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 - **第二段(REQ 审阅完重新运行)**:继续 **A2 → A3**(生成骨架 / 从 REQ 正向设计 `docs/03-数据库设计文档.md` 并回填 REQ 依赖表)后再次**停下**,等你审阅 docs/03 的表 / 字段 / 索引 / 外键(第二个人工关口:数据库 schema —— A4 会基于它翻译 DDL 并 apply 到 MySQL,所以这关口与 REQ 审阅同等重要) 48 - **第二段(REQ 审阅完重新运行)**:继续 **A2 → A3**(生成骨架 / 从 REQ 正向设计 `docs/03-数据库设计文档.md` 并回填 REQ 依赖表)后再次**停下**,等你审阅 docs/03 的表 / 字段 / 索引 / 外键(第二个人工关口:数据库 schema —— A4 会基于它翻译 DDL 并 apply 到 MySQL,所以这关口与 REQ 审阅同等重要)
49 - **第三段(docs/03 审阅完重新运行)**:执行 **A4 → A5**(解析 docs/03 → 生成 V1 migration → 自动 `DROP+CREATE` 本地 schema 并 apply → 生成下游文档),Plan 完成后再次**停下** 49 - **第三段(docs/03 审阅完重新运行)**:执行 **A4 → A5**(解析 docs/03 → 生成 V1 migration → 自动 `DROP+CREATE` 本地 schema 并 apply → 生成下游文档),Plan 完成后再次**停下**
50 50
@@ -102,7 +102,7 @@ erp-workflow-plugin/ @@ -102,7 +102,7 @@ erp-workflow-plugin/
102 | # | Skill | 作用 | 流程中谁调用 | 102 | # | Skill | 作用 | 流程中谁调用 |
103 |---|---|---|---| 103 |---|---|---|---|
104 | A0 | `project-init` | • 依赖检查(`mysql` 在 PATH,缺失则尝试自动安装)<br>• 空目录初始化:`cp` 模板创建 CLAUDE.md / docs/01/index.md / docs/08<br>• `git init` | `plan-start` | 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 | 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` | 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 | A3 | `db-design-gen` | • 从 docs/01 REQ 卡片正向设计 `docs/03-数据库设计文档.md`(schema SSoT)<br>• 回填 REQ 卡片依赖表(`TBD(A3 自动补)` → 实际表名)<br>• **停下**等人工审阅 docs/03,审阅完毕用 `/plan-start` 恢复续进 A4 | A2 | 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 | 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 | 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,8 +185,8 @@ erp-workflow-plugin/
185 | project-init | `docs-01-index-template.md` | 需求清单索引骨架,等用户填模块表 | 185 | project-init | `docs-01-index-template.md` | 需求清单索引骨架,等用户填模块表 |
186 | project-init | `docs-08-initial-template.md` | 工作流进度文件骨架(Plan A0~A5 checkbox) | 186 | project-init | `docs-08-initial-template.md` | 工作流进度文件骨架(Plan A0~A5 checkbox) |
187 | project-init | `docs-04-stack-template.md` | docs/04 § 零 默认技术栈总览(零槽位,cp 即可) | 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 | skeleton-gen | `docs-04-skeleton-template.md` | docs/04 § 一+ 编码规范大纲(HTML 注释引导 LLM) | 190 | skeleton-gen | `docs-04-skeleton-template.md` | docs/04 § 一+ 编码规范大纲(HTML 注释引导 LLM) |
191 | skeleton-gen | `docs-06-static-template.md` | docs/06 § 一~四 UI 模式大纲 | 191 | skeleton-gen | `docs-06-static-template.md` | docs/06 § 一~四 UI 模式大纲 |
192 | skeleton-gen | `docs-07-env-template.md` | docs/07 环境配置大纲 | 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,7 +18,7 @@ allowed-tools: Read Write Skill Bash(mysql *)
18 1. **中断检查**:调用 `interrupt-check`。如果触发 → 停止。 18 1. **中断检查**:调用 `interrupt-check`。如果触发 → 停止。
19 2. 确定输入: 19 2. 确定输入:
20 - 当前 REQ-XXX-NNN(从对话中获取,或 `docs/08` 当前模块下一个未完成的 REQ)。 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 - 相关数据表(从 `docs/03` 或实时 mysql 命令行查询)。 22 - 相关数据表(从 `docs/03` 或实时 mysql 命令行查询)。
23 3. 委托本插件 `superpower-brainstorming`,以 REQ 卡片 + schema 引用作为上下文;把步骤 4 推导出的落盘路径作为 caller-provided path 传入。 23 3. 委托本插件 `superpower-brainstorming`,以 REQ 卡片 + schema 引用作为上下文;把步骤 4 推导出的落盘路径作为 caller-provided path 传入。
24 4. 推导路径:`docs/superpowers/specs/$(date +%F)-<REQ-id>.md`。如已存在,征求用户确认后覆盖。 24 4. 推导路径:`docs/superpowers/specs/$(date +%F)-<REQ-id>.md`。如已存在,征求用户确认后覆盖。
skills/plan/db-design-gen/SKILL.md
1 --- 1 ---
2 name: db-design-gen 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 user-invocable: false 4 user-invocable: false
5 allowed-tools: Read Write Edit Grep Glob Skill AskUserQuestion 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,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 - A2 `skeleton-gen` 已完成:`docs/04-技术规范.md § 一+` 命名规范已生成(本 skill 推导表/字段命名时严格遵循)。 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,7 +40,7 @@ allowed-tools: Read Write Edit Grep Glob Skill AskUserQuestion
40 40
41 - `docs/04-技术规范.md` § 一+ 命名规范(表名 / 字段名 / 索引名 / 外键名约定,及主键 / 时间戳 / 软删等审计列约定) 41 - `docs/04-技术规范.md` § 一+ 命名规范(表名 / 字段名 / 索引名 / 外键名约定,及主键 / 时间戳 / 软删等审计列约定)
42 - `docs/01-需求清单/index.md` 模块索引(模块代码 ↔ 中文名) 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 ### B. LLM 推导 schema 45 ### B. LLM 推导 schema
46 46
@@ -64,13 +64,13 @@ allowed-tools: Read Write Edit Grep Glob Skill AskUserQuestion @@ -64,13 +64,13 @@ allowed-tools: Read Write Edit Grep Glob Skill AskUserQuestion
64 64
65 ### D. 回填模块头 + REQ 卡片的 TBD 字段 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 2. 用 `Grep` 在这些文件中搜索 `TBD(A3 自动补)` 的**行号**(不读全文)。两种行命中: 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 3. 对每个命中行按类型回填: 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 - **不动** `TBD(A5 自动补)` 的两种行(`依赖接口` REQ 级 / `依赖模块` 模块级)—— 由 A5 `downstream-gen` 生成 docs/05 + 完成模块 DAG 后回填 74 - **不动** `TBD(A5 自动补)` 的两种行(`依赖接口` REQ 级 / `依赖模块` 模块级)—— 由 A5 `downstream-gen` 生成 docs/05 + 完成模块 DAG 后回填
75 4. 用 `Grep` 再次扫 `TBD(A3 自动补)` 应 0 命中;仍有残留则打印残留位置清单并停下。 75 4. 用 `Grep` 再次扫 `TBD(A3 自动补)` 应 0 命中;仍有残留则打印残留位置清单并停下。
76 5. 打印回填统计:`A3 回填 <M> 处模块涉及表 + <N> 处 REQ schema_refs`。 76 5. 打印回填统计:`A3 回填 <M> 处模块涉及表 + <N> 处 REQ schema_refs`。
@@ -93,7 +93,7 @@ allowed-tools: Read Write Edit Grep Glob Skill AskUserQuestion @@ -93,7 +93,7 @@ allowed-tools: Read Write Edit Grep Glob Skill AskUserQuestion
93 93
94 产出: 94 产出:
95 ✓ docs/03-数据库设计文档.md 95 ✓ docs/03-数据库设计文档.md
96 - ✓ docs/01-需求清单/<module>-*.md 依赖表已回填 96 + ✓ docs/01-需求清单/<module>/REQ-*.md 依赖表已回填 + _module.md 涉及表已回填
97 97
98 ⏸ 现在请你审阅 docs/03(表 / 字段 / 索引 / 外键 / 业务注记)。 98 ⏸ 现在请你审阅 docs/03(表 / 字段 / 索引 / 外键 / 业务注记)。
99 重点关注: 99 重点关注:
@@ -125,4 +125,5 @@ allowed-tools: Read Write Edit Grep Glob Skill AskUserQuestion @@ -125,4 +125,5 @@ allowed-tools: Read Write Edit Grep Glob Skill AskUserQuestion
125 - `${CLAUDE_SKILL_DIR}/templates/docs-03-header-template.md` 125 - `${CLAUDE_SKILL_DIR}/templates/docs-03-header-template.md`
126 - `${CLAUDE_SKILL_DIR}/templates/docs-03-table-template.md` 126 - `${CLAUDE_SKILL_DIR}/templates/docs-03-table-template.md`
127 - `docs/04-技术规范.md` § 一+(命名规范输入) 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,7 +2,7 @@
2 2
3 Schema: `{{schema_name}}` 3 Schema: `{{schema_name}}`
4 Migration 清单: `sql/migrations/V*.sql`(由 Flyway 顺序 apply) 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 ## ER 关系概览 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,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 - `docs/03-数据库设计文档.md` 已就绪(A3 生成 + 人工审阅过)。 15 - `docs/03-数据库设计文档.md` 已就绪(A3 生成 + 人工审阅过)。
16 - `sql/migrations/V1__initial_schema.sql` 已生成并 apply(A4 完成)。 16 - `sql/migrations/V1__initial_schema.sql` 已生成并 apply(A4 完成)。
17 - `docs/05` / `docs/06 § 五` / `docs/10` 等下游文件尚不存在(本 skill 创建)。 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,13 +66,13 @@ allowed-tools: Read Write Edit Glob Grep Skill AskUserQuestion Bash(cat *) Bash(
66 66
67 ### B2. 回填模块头 + REQ 卡片的 TBD(A5) 字段 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 2. 用 `Grep` 在这些文件中搜索 `TBD(A5 自动补)` 的行号(不读全文)。两种行命中: 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 3. 对每个命中行按类型回填: 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 4. 打印回填统计:`A5 回填 <M> 处模块依赖 + <N> 处 REQ api_refs`。 76 4. 打印回填统计:`A5 回填 <M> 处模块依赖 + <N> 处 REQ api_refs`。
77 77
78 ### C. docs/06 — 页面清单 78 ### C. docs/06 — 页面清单
@@ -87,7 +87,7 @@ docs/08 已由 A0 project-init 创建(含 Plan 进度骨架)。本步骤只 @@ -87,7 +87,7 @@ docs/08 已由 A0 project-init 创建(含 Plan 进度骨架)。本步骤只
87 1. 用 `Read` 读取 `${CLAUDE_SKILL_DIR}/templates/docs-08-module-row-template.md`(单模块 bullet 行模板)。 87 1. 用 `Read` 读取 `${CLAUDE_SKILL_DIR}/templates/docs-08-module-row-template.md`(单模块 bullet 行模板)。
88 2. **按 `module_id` 字母序**对每个模块: 88 2. **按 `module_id` 字母序**对每个模块:
89 - 从步骤 A `req_order[]` 过滤出 `module_id` 匹配的 REQ 列表(保持步骤 A 算出的模块内 REQ 顺序)。 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 - 渲染 `{{req_checklist}}` 块:每行 ` - [ ] <req_id> <title>`(4 空格缩进对齐 `- 功能:`)。 91 - 渲染 `{{req_checklist}}` 块:每行 ` - [ ] <req_id> <title>`(4 空格缩进对齐 `- 功能:`)。
92 - 渲染整条 bullet,填充 `module_id` / `module_name` / `depends_on` / `path_scopes` / `req_checklist`。 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,7 +106,7 @@ docs/08 已由 A0 project-init 创建(含 Plan 进度骨架)。本步骤只
106 - docs/01 的每个 REQ 都出现在 docs/05(作为接口,如适用)、docs/10(作为验收项)。 106 - docs/01 的每个 REQ 都出现在 docs/05(作为接口,如适用)、docs/10(作为验收项)。
107 - `docs/02 § 二` 开发顺序清单的 `module_id` 集合 = `docs/08 § 二` 的 `module_id` 集合(数量、ID 全等);不相等 → 报错停下,列出差集。 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 a. **`TBD` → CC 自动补齐**:用 `Grep` 搜索 `TBD(A3 自动补)` 和 `TBD(A5 自动补)`。有命中则按 A3 / B2 同样逻辑就地补填(A3 查 docs/03 填 `依赖表:`;A5 查 docs/05 按 REQ-ID 填 `依赖接口:`),再 Grep 确认 0 命中;仍残留报错停下。 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,5 +12,5 @@
12 ## 填写说明 12 ## 填写说明
13 13
14 1. 每个模块占一行,`模块代码` 用大写英文缩写(如 SYS / PUR / INV / SAL / FIN / HR) 14 1. 每个模块占一行,`模块代码` 用大写英文缩写(如 SYS / PUR / INV / SAL / FIN / HR)
15 -2. `核心功能点` 只需列关键词,CC 会基于此扩展成完整 REQ 卡片 15 +2. `核心功能点` 只需列关键词,CC 会基于此拆分出 N 张 REQ 卡片骨架(卡片内输入 / 输出的主从表字段仍由人工填)
16 3. 填完后运行 `/erp-workflow:plan-start`,CC 会自动检测并进入需求生成阶段 16 3. 填完后运行 `/erp-workflow:plan-start`,CC 会自动检测并进入需求生成阶段
skills/plan/project-init/templates/docs-08-initial-template.md
@@ -15,7 +15,7 @@ @@ -15,7 +15,7 @@
15 - [ ] 项目概述已填写(CLAUDE.md § 🎯 项目概述) 15 - [ ] 项目概述已填写(CLAUDE.md § 🎯 项目概述)
16 - [ ] 技术栈已确认(docs/04 § 零) 16 - [ ] 技术栈已确认(docs/04 § 零)
17 - [ ] 需求清单索引已填写(docs/01-需求清单/index.md) 17 - [ ] 需求清单索引已填写(docs/01-需求清单/index.md)
18 - - [ ] REQ 卡片已生成(docs/01-需求清单/*.md,schema/api 字段标记为 TBD 18 + - [ ] REQ 卡片骨架已生成(docs/01-需求清单/<module>/REQ-*.md,业务内容留待人工填写
19 19
20 - [ ] A2 骨架生成 — skeleton-gen 20 - [ ] A2 骨架生成 — skeleton-gen
21 - [ ] 架构文档已生成(docs/04 § 一+、docs/06、docs/07、docs/09) 21 - [ ] 架构文档已生成(docs/04 § 一+、docs/06、docs/07、docs/09)
skills/plan/scope-lock/SKILL.md
1 --- 1 ---
2 name: scope-lock 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 user-invocable: false 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,7 +101,7 @@ allowed-tools: Read Write Edit Grep Skill AskUserQuestion
101 101
102 请按业务列出所有模块: 102 请按业务列出所有模块:
103 - 每行一个模块(如 SYS 系统管理 / PUR 采购 / SAL 销售) 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,16 +114,22 @@ allowed-tools: Read Write Edit Grep Skill AskUserQuestion
114 完成后,用 `Edit` 在 `docs/08-模块任务管理.md` 中勾选: 114 完成后,用 `Edit` 在 `docs/08-模块任务管理.md` 中勾选:
115 - ` - [ ] 需求清单索引已填写(docs/01-需求清单/index.md)` 115 - ` - [ ] 需求清单索引已填写(docs/01-需求清单/index.md)`
116 116
117 -### D. 生成 REQ 卡片并停下等人工审阅 117 +### D. 生成 REQ 卡片骨架并停下等人工审阅
118 118
119 1. 用 `Grep` 校验 `docs/01-需求清单/index.md` 无 `【人工填写:` 残留;有则回步骤 C。 119 1. 用 `Grep` 校验 `docs/01-需求清单/index.md` 无 `【人工填写:` 残留;有则回步骤 C。
120 2. 用 `Read` 读 `index.md` 解析模块索引。 120 2. 用 `Read` 读 `index.md` 解析模块索引。
121 3. 对每个模块: 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 4. 用 `Edit` 在 `docs/08-模块任务管理.md` 勾选(A1 子项 + A1 顶层): 131 4. 用 `Edit` 在 `docs/08-模块任务管理.md` 勾选(A1 子项 + A1 顶层):
126 - - ` - [ ] REQ 卡片已生成(docs/01-需求清单/*.md,schema/api 字段标记为 TBD)` 132 + - ` - [ ] REQ 卡片骨架已生成(docs/01-需求清单/<module>/REQ-*.md,业务内容留待人工填写)`
127 - `- [ ] A1 范围锁定 — scope-lock` 133 - `- [ ] A1 范围锁定 — scope-lock`
128 5. 打印停下横幅并**停止**: 134 5. 打印停下横幅并**停止**:
129 135
@@ -135,9 +141,14 @@ allowed-tools: Read Write Edit Grep Skill AskUserQuestion @@ -135,9 +141,14 @@ allowed-tools: Read Write Edit Grep Skill AskUserQuestion
135 ✓ CLAUDE.md § 🎯 项目概述 141 ✓ CLAUDE.md § 🎯 项目概述
136 ✓ docs/04 § 零 技术栈 142 ✓ docs/04 § 零 技术栈
137 ✓ docs/01-需求清单/index.md 模块索引 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 审阅是 Plan 阶段的关键人工关口,请认真逐张过一遍。 153 审阅是 Plan 阶段的关键人工关口,请认真逐张过一遍。
143 审阅完成后,运行以下命令继续进入 A2: 154 审阅完成后,运行以下命令继续进入 A2:
@@ -152,6 +163,7 @@ allowed-tools: Read Write Edit Grep Skill AskUserQuestion @@ -152,6 +163,7 @@ allowed-tools: Read Write Edit Grep Skill AskUserQuestion
152 - `CLAUDE.md` § 🎯 项目概述(写入目标) 163 - `CLAUDE.md` § 🎯 项目概述(写入目标)
153 - `docs/04-技术规范.md`(技术栈输出,供 skeleton-gen 读取使用) 164 - `docs/04-技术规范.md`(技术栈输出,供 skeleton-gen 读取使用)
154 - `docs/01-需求清单/index.md`(模块索引输入) 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 - `${CLAUDE_SKILL_DIR}/templates/req-card-template.md` 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
@@ -3,9 +3,3 @@ @@ -3,9 +3,3 @@
3 模块简述: {{module_brief}} 3 模块简述: {{module_brief}}
4 依赖模块: TBD(A5 自动补) 4 依赖模块: TBD(A5 自动补)
5 涉及表: TBD(A3 自动补) 5 涉及表: TBD(A3 自动补)
6 -  
7 -## 功能清单  
8 -  
9 -{{#each reqs}}  
10 -{{req_card}}  
11 -{{/each}}  
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 ### {{req_id}} {{title}} 15 ### {{req_id}} {{title}}
17 16
18 **目标**: {{goal}} 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 - **跨字段规则**: {{rules}} 45 - **跨字段规则**: {{rules}}
26 - **边界**: {{constraints}} 46 - **边界**: {{constraints}}
27 - **验收**: {{acceptance}} 47 - **验收**: {{acceptance}}
skills/plan/skeleton-gen/templates/docs-09-structure-template.md
@@ -27,7 +27,7 @@ skeleton-gen 基于 docs/04 § 零 技术栈推导目录树: @@ -27,7 +27,7 @@ skeleton-gen 基于 docs/04 § 零 技术栈推导目录树:
27 27
28 ``` 28 ```
29 docs/ 29 docs/
30 -├── 01-需求清单/ # REQ 卡片按模块分文件 30 +├── 01-需求清单/ # 每模块一子目录(_module.md 模块头 + REQ-*.md 卡片)
31 ├── 02-开发计划.md 31 ├── 02-开发计划.md
32 ├── 03-数据库设计文档.md 32 ├── 03-数据库设计文档.md
33 ├── 04-技术规范.md 33 ├── 04-技术规范.md