Commit 73c9775039610086ff4bf95e035cd8b52da983c6
1 parent
c955b5af
feat(lite): merge plan phase into lite-design + lite-build-db, move REQ ordering into docs/08 §二
Showing
28 changed files
with
354 additions
and
704 deletions
skills/plan/db-design-gen/SKILL.md deleted
| 1 | ---- | |
| 2 | -name: db-design-gen | |
| 3 | -description: A3 DB 设计 + REQ 回填——基于 docs/01-需求清单/<module>/REQ-*.md 正向设计 docs/03-数据库设计文档.md(业务实体 → 表 + 字段 + 索引 + 外键 + 业务注记),并把回填值写入 REQ 卡片的「依赖表: TBD(A3 自动补)」与模块头的「涉及表: TBD(A3 自动补)」占位。生成完毕停下等人工审阅。 | |
| 4 | -user-invocable: false | |
| 5 | -allowed-tools: Read Write Edit Grep Glob Bash(cat *) | |
| 6 | ---- | |
| 7 | - | |
| 8 | -**所有输出必须使用中文。** | |
| 9 | - | |
| 10 | -# db-design-gen | |
| 11 | - | |
| 12 | -## 前置条件 | |
| 13 | - | |
| 14 | -- A1 `scope-lock` 已完成:`docs/01-需求清单/<module>/_module.md` + `docs/01-需求清单/<module>/REQ-*.md` 已生成,含 `TBD(A3 自动补)` 占位。 | |
| 15 | -- A2 `skeleton-gen` 已完成:`docs/04-技术规范.md § 一+` 命名规范已生成(本 skill 推导表/字段命名时严格遵循)。 | |
| 16 | - | |
| 17 | -## 执行步骤 | |
| 18 | - | |
| 19 | -### 步骤 0:打印当前位置流程图 | |
| 20 | - | |
| 21 | -用 `Bash` 执行 `cat` 命令向用户展示当前位置流程图(stdout 即 ASCII 框图): | |
| 22 | - | |
| 23 | -```bash | |
| 24 | -cat "${CLAUDE_PLUGIN_ROOT}/skills/plan/db-design-gen/banners/flow.txt" | |
| 25 | -``` | |
| 26 | - | |
| 27 | -### A. 读取设计输入 | |
| 28 | - | |
| 29 | -读: | |
| 30 | - | |
| 31 | -- `docs/04-技术规范.md` | |
| 32 | -- `docs/01-需求清单/index.md` 模块索引 | |
| 33 | -- `docs/01-需求清单/*/REQ-*.md` 所有 REQ 卡片 | |
| 34 | - | |
| 35 | -### B. 推导 schema | |
| 36 | - | |
| 37 | -基于步骤 A 读到的 REQ + 命名规范,**正向推导**业务实体 → 表 + 字段 + 索引 + 外键。要求: | |
| 38 | - | |
| 39 | -1. 严格套用 `docs/04` 的命名规范 | |
| 40 | -2. **主键**:模板内置 `iIncrement` 为主键。REQ 明确要求复合主键 / UUID / 业务主键时按 REQ;其他主键变更需同步改 docs-03-header / docs-03-table 两份模板 | |
| 41 | -3. **外键**:依据 REQ 中的引用关系(如「订单引用客户」),明确列出 `ON DELETE` / `ON UPDATE` 策略;不能确定时默认 `RESTRICT` | |
| 42 | -4. **索引**:根据 REQ 的查询模式推导业务索引;外键列默认建索引;标准列里 `sBrandsId` / `sSubsidiaryId` 这类多租户隔离列,按业务查询模式建组合索引 | |
| 43 | -5. **业务注记**:对每张表用一两句话说明业务用途、关键约束、与其他表的关系 | |
| 44 | - | |
| 45 | -如果某 REQ 表述模糊以致无法推断关键 schema 细节(如:枚举值范围 / 字段长度上限 / 必填性),先按合理默认推导并在该字段「业务含义」列加 `【人工填写:需用户审阅】` 标注,待步骤 E 用户审阅时调整;**不打断本次推导**。 | |
| 46 | - | |
| 47 | -### C. 渲染 docs/03 | |
| 48 | - | |
| 49 | -1. 读取 `${CLAUDE_SKILL_DIR}/templates/docs-03-header-template.md`,填充 `schema_name`(从 `.env.local` 读 `DB_SCHEMA`,无则填 `【人工填写:DB_SCHEMA】`)、`er_overview`(纯文本 ER 概览)。 | |
| 50 | -2. 渲染「表清单」:对每张表:读取并填充 `${CLAUDE_SKILL_DIR}/templates/docs-03-table-template.md`。 | |
| 51 | -3. 写入 `docs/03-数据库设计文档.md`。 | |
| 52 | - | |
| 53 | -完成后,用 `Edit` 在 `docs/08-模块任务管理.md` 中勾选: | |
| 54 | -- ` - [ ] docs/03-数据库设计文档.md 已生成` | |
| 55 | - | |
| 56 | -### D. 回填模块头 + REQ 卡片的 TBD 字段 | |
| 57 | - | |
| 58 | -1. 列出 `docs/01-需求清单/*/_module.md`(模块头)和 `docs/01-需求清单/*/REQ-*.md`(REQ 卡片)。 | |
| 59 | -2. 在这些文件中搜索 `TBD(A3 自动补)` 的并回填。 不动 `TBD(A5 自动补)` | |
| 60 | -3. 打印回填统计:`A3 回填 <M> 处模块"涉及表" + <N> 处 REQ"依赖表"`。 | |
| 61 | - | |
| 62 | -完成后,用 `Edit` 在 `docs/08-模块任务管理.md` 中勾选: | |
| 63 | -- ` - [ ] docs/01 各 REQ 卡片"依赖表" + 模块头"涉及表" 已回填` | |
| 64 | - | |
| 65 | -### E. 勾选 A3 顶层 + 停下等人工审阅 | |
| 66 | - | |
| 67 | -1. 完成后,用 `Edit` 在 `docs/08-模块任务管理.md` 中勾选 A3 顶层(A3 两个子项已在 C / D 步骤分别勾选): | |
| 68 | - - `- [ ] A3 DB 设计 + REQ 回填 — db-design-gen` | |
| 69 | - | |
| 70 | -2. 打印停下横幅并**停下**: | |
| 71 | - | |
| 72 | - ``` | |
| 73 | - ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ | |
| 74 | - [db-design-gen] ✅ A3 DB 设计完成 | |
| 75 | - | |
| 76 | - 产出: | |
| 77 | - ✓ docs/03-数据库设计文档.md | |
| 78 | - ✓ docs/01-需求清单/<module>/REQ-*.md 依赖表已回填 + _module.md 涉及表已回填 | |
| 79 | - | |
| 80 | - ⏸ 现在请你审阅 docs/03。 | |
| 81 | - 重点关注: | |
| 82 | - - 业务实体覆盖是否完整 | |
| 83 | - - 字段类型 / 长度 / 是否可空 / 默认值是否合理 | |
| 84 | - - 索引是否覆盖主要查询模式 | |
| 85 | - - 外键 ON DELETE / ON UPDATE 策略是否符合业务 | |
| 86 | - - 字段「业务含义」列含 `【人工填写:需用户审阅】` 标注的位置需逐一确认 | |
| 87 | - | |
| 88 | - 审阅完成后,再运行: | |
| 89 | - /erp-workflow:plan-start | |
| 90 | - | |
| 91 | - ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ | |
| 92 | - ``` | |
| 93 | - | |
| 94 | - **停止**,不调用任何下游 skill。 | |
| 95 | - | |
| 96 | -## 参考 | |
| 97 | - | |
| 98 | -- `${CLAUDE_SKILL_DIR}/templates/docs-03-header-template.md` | |
| 99 | -- `${CLAUDE_SKILL_DIR}/templates/docs-03-table-template.md` | |
| 100 | -- `docs/04-技术规范.md` § 一+(命名规范输入) | |
| 101 | -- `docs/01-需求清单/<module>/_module.md`(模块头:回填 `涉及表`) | |
| 102 | -- `docs/01-需求清单/<module>/REQ-*.md`(REQ 输入 + 回填 `依赖表`) |
skills/plan/db-design-gen/banners/flow.txt deleted
| 1 | -┌────────────────────────────────────────────────────────┐ | |
| 2 | -│ 📋 阶段 A:规划(一次性) │ | |
| 3 | -│ │ | |
| 4 | -│ A0 初始化项目 │ | |
| 5 | -│ ↓ │ | |
| 6 | -│ A1 锁范围(生成 REQ 卡片) → 人工审核 │ | |
| 7 | -│ ↓ │ | |
| 8 | -│ A2 生成骨架 │ | |
| 9 | -│ ↓ │ | |
| 10 | -│ ▶ A3 生成 DB 设计 → 人工审核 │ | |
| 11 | -│ ↓ │ | |
| 12 | -│ A4 初始化 DB │ | |
| 13 | -│ ↓ │ | |
| 14 | -│ A5 生成下游文档 │ | |
| 15 | -│ │ | |
| 16 | -│ 规划阶段到此结束 │ | |
| 17 | -└────────────────────────────────────────────────────────┘ |
skills/plan/db-init/banners/flow.txt deleted
| 1 | -┌────────────────────────────────────────────────────────┐ | |
| 2 | -│ 📋 阶段 A:规划(一次性) │ | |
| 3 | -│ │ | |
| 4 | -│ A0 初始化项目 │ | |
| 5 | -│ ↓ │ | |
| 6 | -│ A1 锁范围(生成 REQ 卡片) → 人工审核 │ | |
| 7 | -│ ↓ │ | |
| 8 | -│ A2 生成骨架 │ | |
| 9 | -│ ↓ │ | |
| 10 | -│ A3 生成 DB 设计 → 人工审核 │ | |
| 11 | -│ ↓ │ | |
| 12 | -│ ▶ A4 初始化 DB │ | |
| 13 | -│ ↓ │ | |
| 14 | -│ A5 生成下游文档 │ | |
| 15 | -│ │ | |
| 16 | -│ 规划阶段到此结束 │ | |
| 17 | -└────────────────────────────────────────────────────────┘ |
skills/plan/downstream-gen/SKILL.md deleted
| 1 | ---- | |
| 2 | -name: downstream-gen | |
| 3 | -description: A5 下游文档生成——基于 docs/01 和 docs/03 推导,一次性生成 docs/02 + docs/05 + docs/06 § 三 + docs/10,回填 REQ 卡片依赖接口,把模块清单追加到 docs/08 § 二。 | |
| 4 | -user-invocable: false | |
| 5 | -allowed-tools: Read Write Edit Glob Grep Skill AskUserQuestion Bash(cat *) Bash(cp *) | |
| 6 | ---- | |
| 7 | - | |
| 8 | -**所有输出必须使用中文。** | |
| 9 | - | |
| 10 | -# downstream-gen | |
| 11 | - | |
| 12 | -## 执行步骤 | |
| 13 | - | |
| 14 | -### 步骤 0:打印当前位置流程图 | |
| 15 | - | |
| 16 | -用 `Bash` 执行 `cat` 命令向用户展示当前位置流程图(stdout 即 ASCII 框图): | |
| 17 | - | |
| 18 | -```bash | |
| 19 | -cat "${CLAUDE_PLUGIN_ROOT}/skills/plan/downstream-gen/banners/flow.txt" | |
| 20 | -``` | |
| 21 | - | |
| 22 | -### A. docs/02 — 开发计划(含 REQ 级开发顺序清单) | |
| 23 | - | |
| 24 | -**清单颗粒度**:一行一个 REQ,同一模块的 REQ 必须**连续排列**。 | |
| 25 | - | |
| 26 | -1. 构建**模块依赖 DAG**。 | |
| 27 | -3. 对**每个模块内部**构建 REQ 间依赖,得到模块内 REQ 顺序。 | |
| 28 | -4. 合成 `req_order[]`:按 `module_topo_order[]` 依次铺开每个模块内的 REQ 序列(**同模块 REQ 连续**)。 | |
| 29 | -5. **环依赖打破**: | |
| 30 | - - **模块级**:若模块 DAG 存在环(module_A ↔ module_B),按启发式(字母序 / 被依赖次数多者先)破环排出 `module_topo_order`,并在**参与环的模块里第一个 REQ** 的 `note` 字段填入原因(如 "A↔B 互依赖:先做 A 的骨架")。 | |
| 31 | - - **REQ 级(同模块内)**:若模块内 REQ 互依赖,同样破环,`note` 填原因。 | |
| 32 | - - 非环 REQ `note` 留 `—`。 | |
| 33 | -6. 为 `req_order[]` 每项生成字段: | |
| 34 | - - `index`:行号(从 1 开始) | |
| 35 | - - `req_id`:如 `REQ-SYS-001` | |
| 36 | - - `module_id`:该 REQ 所属模块,如 `module_sys` | |
| 37 | - - `rationale`(**选中理由**):依赖驱动的简短描述,如 `所属模块无依赖,基础模块` / `依赖 REQ-SYS-001 已在前` / `所属模块依赖 module_sys 已在前` | |
| 38 | - - `note`(**备注**):默认 `—`;仅环依赖打破场景填原因 | |
| 39 | -7. 读取并填充 `${CLAUDE_SKILL_DIR}/templates/docs-02-template.md`。 | |
| 40 | -8. 写入 `docs/02-开发计划.md`。 | |
| 41 | - | |
| 42 | -完成后,用 `Edit` 在 `docs/08-模块任务管理.md` 中勾选: | |
| 43 | -- ` - [ ] docs/02 开发计划已生成` | |
| 44 | - | |
| 45 | -### B. docs/05 — API 接口契约 | |
| 46 | - | |
| 47 | -1. 读取 `${CLAUDE_SKILL_DIR}/templates/docs-05-header-template.md`,写入 `docs/05-API接口契约.md` 头部。 | |
| 48 | -2. 对所有模块的每个 REQ:读取并推断 `${CLAUDE_SKILL_DIR}/templates/docs-05-endpoint-template.md`,追加到 docs/05。 | |
| 49 | - | |
| 50 | -完成后,用 `Edit` 在 `docs/08-模块任务管理.md` 中勾选: | |
| 51 | -- ` - [ ] docs/05 API 契约已生成` | |
| 52 | - | |
| 53 | -### B2. 回填模块头 + REQ 卡片的 TBD(A5) 字段 | |
| 54 | - | |
| 55 | -1. 在`docs/01-需求清单/*/_module.md`(模块头)和 `docs/01-需求清单/*/REQ-*.md`(REQ 卡片)中搜索并回填 `TBD(A5 自动补)` | |
| 56 | -2. 打印回填统计:`A5 回填 <M> 处模块"依赖模块" + <N> 处 REQ"依赖接口"`。 | |
| 57 | - | |
| 58 | -完成后,用 `Edit` 在 `docs/08-模块任务管理.md` 中勾选: | |
| 59 | -- ` - [ ] REQ 卡片依赖接口已回填` | |
| 60 | - | |
| 61 | -### C. docs/06 — 页面清单 | |
| 62 | - | |
| 63 | -对每个有前端页面的模块:读取并填充 `${CLAUDE_SKILL_DIR}/templates/docs-06-module-pagelist-template.md`,追加到 `docs/06-UI交互规范.md` § 三。 | |
| 64 | - | |
| 65 | -完成后,用 `Edit` 在 `docs/08-模块任务管理.md` 中勾选: | |
| 66 | -- ` - [ ] docs/06 § 三 页面清单已填入` | |
| 67 | - | |
| 68 | -### D. docs/08 — 追加模块清单 | |
| 69 | - | |
| 70 | -读 `${CLAUDE_SKILL_DIR}/templates/docs-08-module-row-template.md`,按 `module_id` 字母序为每个模块渲染 bullet(模块元数据 + REQ 子项清单,REQ 序保持步骤 A 模块内顺序),追加到 docs/08。 | |
| 71 | - | |
| 72 | -完成后,用 `Edit` 在 `docs/08-模块任务管理.md` 中勾选: | |
| 73 | -- ` - [ ] 下方模块列表已填入` | |
| 74 | - | |
| 75 | -### E. docs/10 — 验收清单(项目级 SOP) | |
| 76 | - | |
| 77 | -```bash | |
| 78 | -cp "${CLAUDE_SKILL_DIR}/templates/docs-10-header-template.md" docs/10-验收检查清单.md | |
| 79 | -``` | |
| 80 | - | |
| 81 | -完成后,用 `Edit` 在 `docs/08-模块任务管理.md` 中勾选: | |
| 82 | -- ` - [ ] docs/10 验收清单已生成` | |
| 83 | - | |
| 84 | -### F. 验证 + 勾选 docs/08 进度 + 结束 Plan | |
| 85 | - | |
| 86 | -1. 一致性检查 + 自主修复循环(最多 3 轮,docs/01 是 REQ SSoT 不动): | |
| 87 | - | |
| 88 | - **检查项**: | |
| 89 | - - 每个 docs/01 REQ 都出现在 docs/05(作为接口,如适用) | |
| 90 | - - `docs/02 § 二` 的 `module_id` 集合 = `docs/08 § 二` 的 `module_id` 集合 | |
| 91 | - | |
| 92 | - **不一致 → 按差异类型自主修复**: | |
| 93 | - - **REQ 缺 docs/05 endpoint** → 按步骤 B 规则为该 REQ 推测,并追加到 docs/05 | |
| 94 | - - **module_id 缺 docs/08 § 二** → 按步骤 D 规则渲染该模块 bullet(含 REQ 子项),按 `module_id` 字母序插入正确位置 | |
| 95 | - - **module_id 缺 docs/02 § 二** → 重算该模块的 `req_order` 段(步骤 A 子流程),按拓扑序插入 docs/02 § 二 | |
| 96 | - | |
| 97 | - 修复后重跑检查;通过 → 进入 2;3 轮仍失败 → 停下,打印最终残留差异 + 已尝试的 3 轮修复摘要让用户介入。 | |
| 98 | - | |
| 99 | -2. **最终占位符扫描**(覆盖 Plan 阶段全部产出): | |
| 100 | - | |
| 101 | - a. **`TBD` → 自动补齐**:Grep 搜索 `TBD(A3 自动补)` 和 `TBD(A5 自动补)`。有命中则就地补填(A3 残留 → 查 docs/03 填 `依赖表`;A5 残留 → 查 docs/05 按 REQ-ID 填 `依赖接口`),再 Grep 确认 0 命中;仍残留报错停下。 | |
| 102 | - | |
| 103 | - b. **`【人工填写:...】` → QA 循环等用户补**: | |
| 104 | - | |
| 105 | - 循环执行直到搜索不到 `【人工填写:` 且用户选「继续」: | |
| 106 | - - 0 命中 → 直接放行进入步骤 3 | |
| 107 | - - 有命中 → 打印残留清单(`<文件:行号> — <内容摘要>`),用 `AskUserQuestion` 弹「继续」/「有疑问想先沟通」二选一;用户回答后重扫验证再决定放行 / 继续循环 | |
| 108 | - | |
| 109 | - **每次弹 QA 前都重扫一次**——保证用户看到的 N 是最新的,避免「用户以为填完但实际还有残留」直接放行。 | |
| 110 | - | |
| 111 | -3. 完成后,用 `Edit` 在 `docs/08-模块任务管理.md` 勾选 A5 父项: | |
| 112 | - - `- [ ] A5 下游文档生成 — downstream-gen` | |
| 113 | - | |
| 114 | -4. 打印 Plan 阶段终止横幅并**停下**(不自动进入 B 阶段): | |
| 115 | - | |
| 116 | - ``` | |
| 117 | - ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ | |
| 118 | - [downstream-gen] ✅ Plan 阶段(A0~A5)全部完成 | |
| 119 | - | |
| 120 | - 所有规划文档已就绪,docs/08 § 一 全部勾选。 | |
| 121 | - | |
| 122 | - ⚠️ 进入 B 阶段前必须完成: | |
| 123 | - 1. 审核 docs/01~10 + CLAUDE.md + sql/migrations/V1 + 各 scripts/* | |
| 124 | - | |
| 125 | - 2. 把全部 Plan 产物 commit 到本地默认分支(main / master): | |
| 126 | - git add -A && git commit -m "chore: plan phase done" | |
| 127 | - | |
| 128 | - 3. 运行 /erp-workflow:coding-start 进入 B 阶段 | |
| 129 | - ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ | |
| 130 | - ``` | |
| 131 | - | |
| 132 | -## 参考 | |
| 133 | - | |
| 134 | -- `${CLAUDE_SKILL_DIR}/templates/docs-02-template.md` | |
| 135 | -- `${CLAUDE_SKILL_DIR}/templates/docs-05-header-template.md` | |
| 136 | -- `${CLAUDE_SKILL_DIR}/templates/docs-05-endpoint-template.md` | |
| 137 | -- `${CLAUDE_SKILL_DIR}/templates/docs-06-module-pagelist-template.md`(追加到 docs/06 § 三) | |
| 138 | -- `${CLAUDE_SKILL_DIR}/templates/docs-08-module-row-template.md`(模块 bullet 行模板) | |
| 139 | -- `${CLAUDE_SKILL_DIR}/templates/docs-10-header-template.md` |
skills/plan/downstream-gen/banners/flow.txt deleted
| 1 | -┌────────────────────────────────────────────────────────┐ | |
| 2 | -│ 📋 阶段 A:规划(一次性) │ | |
| 3 | -│ │ | |
| 4 | -│ A0 初始化项目 │ | |
| 5 | -│ ↓ │ | |
| 6 | -│ A1 锁范围(生成 REQ 卡片) → 人工审核 │ | |
| 7 | -│ ↓ │ | |
| 8 | -│ A2 生成骨架 │ | |
| 9 | -│ ↓ │ | |
| 10 | -│ A3 生成 DB 设计 → 人工审核 │ | |
| 11 | -│ ↓ │ | |
| 12 | -│ A4 初始化 DB │ | |
| 13 | -│ ↓ │ | |
| 14 | -│ ▶ A5 生成下游文档 │ | |
| 15 | -│ │ | |
| 16 | -│ 规划阶段到此结束 │ | |
| 17 | -└────────────────────────────────────────────────────────┘ |
skills/plan/downstream-gen/templates/docs-02-template.md deleted
| 1 | -# 02-开发计划 | |
| 2 | - | |
| 3 | -## 一、模块依赖表 | |
| 4 | - | |
| 5 | -| 模块 ID | 模块名 | 依赖模块 | 依赖表 | | |
| 6 | -|---|---|---|---| | |
| 7 | -{{#each modules}} | |
| 8 | -| {{id}} | {{name}} | {{deps}} | {{tables}} | | |
| 9 | -{{/each}} | |
| 10 | - | |
| 11 | -## 二、开发顺序清单(CC 分发权威) | |
| 12 | - | |
| 13 | -> 本清单由 A5 `downstream-gen` 一次性生成。**每行是一个 REQ**,不是模块。CC 按表格行序从上到下扫描,对每个 REQ 所属模块查 `docs/08 § 二` 的 `里程碑:` 字段 + 本地 `git tag -l 'milestone/<id>'`:tag 存在则跳过,否则(`—` / tag 不存在)选为当前模块;`module-start` 会把该模块的所有 REQ 一次做完。 | |
| 14 | -> | |
| 15 | -> **约束**:同一模块的所有 REQ 必须**连续排列**。允许打破依赖拓扑(如环依赖、业务必须先做),但必须在「备注」列写明原因。 | |
| 16 | - | |
| 17 | -| # | REQ | 所属模块 | 选中理由 | 备注 | | |
| 18 | -|---|-----|---------|---------|------| | |
| 19 | -{{#each req_order}} | |
| 20 | -| {{index}} | **{{req_id}}** | {{module_id}} | {{rationale}} | {{note}} | | |
| 21 | -{{/each}} | |
| 22 | - | |
| 23 | -> **后端模块全部打里程碑后**:milestone-tag 自动回调 `coding-start` → coding-start 检测到 `backend_done=true && frontend_done=false` → 派发 `frontend-start`。`frontend-start` 步骤 1 自带 prototype/ 门禁(≥ 1 个 `*.html` mockup,缺失则 AskUserQuestion 提示用户补齐)。前端阶段以业务功能(不是 HTML 文件数)为粒度拆分 FE,每个 FE 跑一次 feature 循环(fe-feature-*),最后整个阶段打 1 个里程碑 tag(分支 `frontend-phase`,记录在 `docs/08 § 三 整体里程碑`)。 | |
| 24 | - | |
| 25 | -## 三、关键说明 | |
| 26 | -{{notes}} |
skills/plan/downstream-gen/templates/docs-06-module-pagelist-template.md deleted
skills/plan/downstream-gen/templates/docs-10-header-template.md deleted
| 1 | -# 10-验收检查清单 | |
| 2 | - | |
| 3 | -通用验收项(全项目适用): | |
| 4 | - | |
| 5 | -- [ ] `scripts/test.sh` 本地全绿 | |
| 6 | -- [ ] 所有 schema 改动都有对应 `sql/migrations/V_n__<desc>.sql` | |
| 7 | -- [ ] 所有新接口在 `docs/05` 中有契约定义 | |
| 8 | -- [ ] 所有新功能代码注释含 REQ-XXX-NNN | |
| 9 | -- [ ] 统一响应格式 `{code, message, data, timestamp}` | |
| 10 | -- [ ] 异常走全局处理器,不暴露堆栈到前端 | |
| 11 | -- [ ] 前端不存敏感信息到 localStorage | |
| 12 | - | |
| 13 | -> 本文档仅维护项目级验收 SOP。粒度更细的验收信息分散在: | |
| 14 | -> - **每 REQ 的业务验收点**:`docs/01-需求清单/<module>/<req_id>.md § 验收` | |
| 15 | -> - **每模块的实测验收(数据 / UI / 自动化用例位置)**:由 B 阶段 `module-report` 在该模块完成时填入模块完成报告 | |
| 16 | -> - **REQ 开发进度(feature-review approve 状态)**:`docs/08 § 二` |
skills/plan/db-init/SKILL.md renamed to skills/plan/lite-build-db/SKILL.md
| 1 | 1 | --- |
| 2 | -name: db-init | |
| 3 | -description: A4 DB 初始化——LLM 解析 docs/03-数据库设计文档.md → 生成 sql/migrations/V1__initial_schema.sql(DDL only,Flyway 初始 migration)→ 全量校验 DDL ↔ docs/03 一致性 → 验证 MySQL 连接 → 调 scripts/setup-test-db.sh 复用三层防护并 DROP+CREATE 空库 → apply V1。 | |
| 2 | +name: lite-build-db | |
| 3 | +description: 计划第 3 段——解析 docs/03 → V1 migration + validate.sh 校验 + apply 到本地 MySQL;生成 docs/05 API 契约 + 回填 REQ 依赖接口;计算模块/REQ 依赖顺序写入 docs/08 § 二(排序权威);最终占位符扫描后停下(计划完成)。 | |
| 4 | 4 | user-invocable: false |
| 5 | -allowed-tools: Read Write Edit Glob Skill Bash(mkdir *) Bash(mysql *) Bash(set *) Bash(. .env.local) Bash(grep *) Bash(bash *) Bash(./scripts/setup-test-db.sh) Bash(cat *) | |
| 5 | +allowed-tools: Read Write Edit Glob Grep Skill AskUserQuestion Bash(mkdir *) Bash(mysql *) Bash(set *) Bash(. .env.local) Bash(grep *) Bash(bash *) Bash(./scripts/setup-test-db.sh) Bash(cat *) Bash(cp *) | |
| 6 | 6 | --- |
| 7 | 7 | |
| 8 | 8 | **所有输出必须使用中文。** |
| 9 | 9 | |
| 10 | -# db-init | |
| 10 | +# lite-build-db | |
| 11 | 11 | |
| 12 | 12 | ## 执行步骤 |
| 13 | 13 | |
| 14 | 14 | ### 步骤 0:打印当前位置流程图 |
| 15 | 15 | |
| 16 | -用 `Bash` 执行 `cat` 命令向用户展示当前位置流程图(stdout 即 ASCII 框图): | |
| 16 | +用 `Bash` 执行以下命令(文件不存在时静默忽略,不报错): | |
| 17 | 17 | |
| 18 | 18 | ```bash |
| 19 | -cat "${CLAUDE_PLUGIN_ROOT}/skills/plan/db-init/banners/flow.txt" | |
| 19 | +cat "${CLAUDE_PLUGIN_ROOT}/skills/crosscut/plan-start/banners/flow-lite.txt" 2>/dev/null || true | |
| 20 | 20 | ``` |
| 21 | 21 | |
| 22 | +打印横幅:`▶ 计划阶段 ③ — lite-build-db`。 | |
| 23 | + | |
| 22 | 24 | ### A. DDL 生成(不依赖数据库连接) |
| 23 | 25 | |
| 24 | 26 | #### A.1 读 docs/03 并翻译为 DDL |
| ... | ... | @@ -44,7 +46,7 @@ cat "${CLAUDE_PLUGIN_ROOT}/skills/plan/db-init/banners/flow.txt" |
| 44 | 46 | 1. **头部注释**(6 行 SQL 注释): |
| 45 | 47 | - `-- Flyway migration V1 — initial schema for <project_name>`(从 `CLAUDE.md § 🎯 项目概述` 读) |
| 46 | 48 | - `-- Generated: <YYYY-MM-DDTHH:MM:SSZ>`(UTC ISO 8601 时间戳) |
| 47 | - - `-- Source: 由 A4 db-init 从 docs/03-数据库设计文档.md 翻译生成(schema SSoT 是 docs/03)` | |
| 49 | + - `-- Source: 由计划 ③ lite-build-db 从 docs/03-数据库设计文档.md 翻译生成(schema SSoT 是 docs/03)` | |
| 48 | 50 | - `-- This is the FIRST migration; subsequent schema changes must be written as new files sql/migrations/V2__<desc>.sql, V3__... etc.` |
| 49 | 51 | - `-- Apply: Flyway runs this automatically at Spring Boot startup.` |
| 50 | 52 | - `-- Do not hand-edit this file after it is committed; write a new migration instead.` |
| ... | ... | @@ -70,14 +72,13 @@ bash "${CLAUDE_SKILL_DIR}/scripts/validate.sh" \ |
| 70 | 72 | - `2` → 用法错(V1 / docs 路径找不到),打印路径并停下 |
| 71 | 73 | |
| 72 | 74 | 完成后(V1 写入并通过 validate.sh 校验),用 `Edit` 在 `docs/08-模块任务管理.md` 中勾选: |
| 73 | -- ` - [ ] sql/migrations/V1__initial_schema.sql 已生成` | |
| 74 | -- ` - [ ] DDL 与 docs/03 全量一致` | |
| 75 | +- ` - [ ] V1 migration 已生成并校验 + apply 到本地 MySQL`(步骤 C 完成后一并勾选) | |
| 75 | 76 | |
| 76 | 77 | ### B. 数据库环境检查 |
| 77 | 78 | |
| 78 | 79 | #### B.1 检查 .env.local 凭据 |
| 79 | 80 | |
| 80 | -用 `Glob` 检查 `.env.local` 是否存在;不存在 → 提示用户重新运行 A2 `skeleton-gen` 重建并停下。 | |
| 81 | +用 `Glob` 检查 `.env.local` 是否存在;不存在 → 提示用户重新运行计划 ② `lite-design` 重建并停下。 | |
| 81 | 82 | |
| 82 | 83 | 用 `Bash` 加载并校验 5 个必填字段非空: |
| 83 | 84 | |
| ... | ... | @@ -101,9 +102,6 @@ mysql -h"$DB_HOST" -P"$DB_PORT" -u"$DB_USER" -p"$DB_PASSWORD" -e "SELECT 1;" |
| 101 | 102 | - **成功** → 进入步骤 C |
| 102 | 103 | - **失败** → 打印具体错误(认证 / 主机不可达 / 端口拒接等),提示检查 `.env.local`,**停下**。 |
| 103 | 104 | |
| 104 | -完成后,用 `Edit` 在 `docs/08-模块任务管理.md` 中勾选: | |
| 105 | -- ` - [ ] .env.local 凭据已验证(mysql -e "SELECT 1" OK)` | |
| 106 | - | |
| 107 | 105 | ### C. 自动导入 MySQL |
| 108 | 106 | |
| 109 | 107 | #### C.1 DROP+CREATE 空库 |
| ... | ... | @@ -123,7 +121,7 @@ mysql -h"$DB_HOST" -P"$DB_PORT" -u"$DB_USER" -p"$DB_PASSWORD" "$DB_SCHEMA" \ |
| 123 | 121 | 非零退出 → 报错停下,打印 mysql stderr。 |
| 124 | 122 | |
| 125 | 123 | 完成后,用 `Edit` 在 `docs/08-模块任务管理.md` 中勾选: |
| 126 | -- ` - [ ] setup-test-db.sh 防护通过 + DROP+CREATE + apply V1 已执行` | |
| 124 | +- ` - [ ] V1 migration 已生成并校验 + apply 到本地 MySQL` | |
| 127 | 125 | |
| 128 | 126 | #### C.3 自检 SHOW TABLES |
| 129 | 127 | |
| ... | ... | @@ -137,18 +135,121 @@ EXPECTED=$(grep -c '^## `' docs/03-数据库设计文档.md) |
| 137 | 135 | |
| 138 | 136 | 行数不一致 → 报错停下;一致 → 进入步骤 D。 |
| 139 | 137 | |
| 140 | -### D. 勾选 docs/08 进度 + 进入 A5 | |
| 138 | +### D. 生成 docs/05 API 契约 + 回填 REQ 依赖接口 | |
| 139 | + | |
| 140 | +#### D.1 渲染 docs/05 | |
| 141 | + | |
| 142 | +1. 读取 `${CLAUDE_SKILL_DIR}/templates/docs-05-header-template.md`,填充 `base_path`(从 `docs/04 § 一` 推导 API 前缀,如 `/api/v1`)、`auth_note`(认证方式说明)、`pagination_note`(分页参数约定),写入 `docs/05-API接口契约.md` 头部。 | |
| 143 | +2. 对所有模块的每个 REQ:读取并推断 `${CLAUDE_SKILL_DIR}/templates/docs-05-endpoint-template.md`,追加到 docs/05。 | |
| 144 | + | |
| 145 | +完成后,用 `Edit` 在 `docs/08-模块任务管理.md` 中勾选: | |
| 146 | +- ` - [ ] docs/05 API 契约已生成 + 回填 REQ 依赖接口`(步骤 D.2 完成后一并勾选) | |
| 147 | + | |
| 148 | +#### D.2 回填模块头 + REQ 卡片的 TBD 字段 | |
| 149 | + | |
| 150 | +1. 在 `docs/01-需求清单/*/_module.md`(模块头)和 `docs/01-需求清单/*/REQ-*.md`(REQ 卡片)中搜索 `TBD(lite-build-db 自动补)` 并回填。**不动** `TBD(lite-design 自动补)`(应已由 lite-design 回填完毕)。 | |
| 151 | + - `_module.md` 的 `依赖模块` 字段:填入该模块所依赖的其他模块 ID(逗号分隔,无则填 `—`) | |
| 152 | + - `REQ-*.md` 的 `依赖接口` 字段:填入该 REQ 依赖的接口路径(逗号分隔,无则填 `—`) | |
| 153 | +2. 打印回填统计:`lite-build-db 回填 <M> 处模块"依赖模块" + <N> 处 REQ"依赖接口"`。 | |
| 154 | + | |
| 155 | +完成后,用 `Edit` 在 `docs/08-模块任务管理.md` 中勾选: | |
| 156 | +- ` - [ ] docs/05 API 契约已生成 + 回填 REQ 依赖接口` | |
| 157 | + | |
| 158 | +### E. 模块/REQ 依赖顺序 → docs/08 § 二 | |
| 159 | + | |
| 160 | +本步骤计算模块/REQ 依赖拓扑顺序,将结果写入 docs/08 § 二(该 § 二 行序是 coding-start 的排序权威,无单独开发计划文件)。 | |
| 161 | + | |
| 162 | +#### E.1 构建模块依赖 DAG + 拓扑排序 | |
| 163 | + | |
| 164 | +1. 读取所有 `docs/01-需求清单/*/_module.md`,提取每个模块的 `依赖模块` 字段(经步骤 D.2 已回填)。 | |
| 165 | +2. 构建**模块依赖 DAG**(有向无环图),节点 = 模块 ID,边 = 「A 依赖 B → B 先于 A」。 | |
| 166 | +3. 拓扑排序得到 `module_topo_order[]`。 | |
| 167 | +4. **环依赖打破**:若模块 DAG 存在环(module_A ↔ module_B),按启发式(字母序 / 被依赖次数多者先)破环排出 `module_topo_order`,并在**参与环的模块里第一个 REQ** 的 `note` 字段填入原因(如 "A↔B 互依赖:先做 A 的骨架")。 | |
| 168 | + | |
| 169 | +#### E.2 模块内 REQ 排序 | |
| 170 | + | |
| 171 | +对每个模块内部: | |
| 172 | +1. 读取该模块所有 `REQ-*.md`,提取每个 REQ 的 `依赖接口` + `依赖表` 字段,推导 REQ 间依赖关系。 | |
| 173 | +2. 拓扑排序得到模块内 `req_order[]`。 | |
| 174 | +3. **REQ 级环依赖打破**:若模块内 REQ 互依赖,按字母序 / 被依赖次数多者先破环,`note` 填原因;非环 REQ `note` 留 `—`。 | |
| 141 | 175 | |
| 176 | +#### E.3 渲染 docs/08 § 二 | |
| 177 | + | |
| 178 | +按 `module_topo_order[]` 依次为每个模块渲染 bullet,追加到 `docs/08-模块任务管理.md` § 二(追加在 § 二 的注释块之后,保留原有注释格式示例): | |
| 179 | + | |
| 180 | +读取 `${CLAUDE_SKILL_DIR}/templates/docs-08-module-row-template.md`,填充: | |
| 181 | +- `{{module_id}}`:模块 ID | |
| 182 | +- `{{module_name}}`:模块中文名 | |
| 183 | +- `{{depends_on}}`:依赖模块 ID 列表(逗号分隔,无则填 `—`) | |
| 184 | +- `{{path_scopes}}`:`backend/module/<id>/` | |
| 185 | +- `{{req_checklist}}`:按模块内 `req_order[]` 生成,每行 ` - [ ] REQ-XXX-NNN 功能名` | |
| 186 | + | |
| 187 | +每个模块 bullet 间空一行,一次性追加全部模块。 | |
| 188 | + | |
| 189 | +完成后,用 `Edit` 在 `docs/08-模块任务管理.md` 中勾选: | |
| 190 | +- ` - [ ] docs/08 § 二 模块清单(含 REQ 顺序)已生成` | |
| 142 | 191 | |
| 143 | -1. 完成后,用 `Edit` 在 `docs/08-模块任务管理.md` 中勾选(A4 子项 + A4 顶层): | |
| 144 | - - ` - [ ] SHOW TABLES 行数 == docs/03 表数量` | |
| 145 | - - `- [ ] A4 DB 初始化 — db-init` | |
| 192 | +### F. 一致性检查 + 占位符扫描 + 计划完成 | |
| 146 | 193 | |
| 147 | -2. 立即调用 `Skill(downstream-gen)` 进入 A5,不等用户手动输入。 | |
| 194 | +#### F.1 一致性检查(最多 3 轮自修复) | |
| 195 | + | |
| 196 | +**检查项**: | |
| 197 | +- 每个 docs/01 REQ 都出现在 docs/05(作为接口,如适用) | |
| 198 | +- docs/08 § 二 的 `module_id` 集合 = docs/01-需求清单/ 的模块目录集合 | |
| 199 | + | |
| 200 | +**不一致 → 按差异类型自主修复**: | |
| 201 | +- **REQ 缺 docs/05 endpoint** → 按步骤 D.1 规则为该 REQ 推测,并追加到 docs/05 | |
| 202 | +- **module_id 缺 docs/08 § 二** → 按步骤 E 规则渲染该模块 bullet,按拓扑序插入正确位置 | |
| 203 | + | |
| 204 | +修复后重跑检查;通过 → 进入 F.2;3 轮仍失败 → 停下,打印最终残留差异 + 已尝试的 3 轮修复摘要让用户介入。 | |
| 205 | + | |
| 206 | +#### F.2 最终占位符扫描 | |
| 207 | + | |
| 208 | +a. **`TBD` → 自动补齐**:Grep 搜索 `TBD(lite-design 自动补)` 和 `TBD(lite-build-db 自动补)`。有命中则就地补填(lite-design 残留 → 查 docs/03 填 `依赖表`;lite-build-db 残留 → 查 docs/05 按 REQ-ID 填 `依赖接口`),再 Grep 确认 0 命中;仍残留报错停下。 | |
| 209 | + | |
| 210 | +b. **`【人工填写:...】` → QA 循环等用户补**: | |
| 211 | + | |
| 212 | + 循环执行直到搜索不到 `【人工填写:` 且用户选「继续」: | |
| 213 | + - 0 命中 → 直接放行进入步骤 F.3 | |
| 214 | + - 有命中 → 打印残留清单(`<文件:行号> — <内容摘要>`),用 `AskUserQuestion` 弹「继续」/「有疑问想先沟通」二选一;用户回答后重扫验证再决定放行 / 继续循环 | |
| 215 | + | |
| 216 | + **每次弹 QA 前都重扫一次**——保证用户看到的 N 是最新的,避免「用户以为填完但实际还有残留」直接放行。 | |
| 217 | + | |
| 218 | +#### F.3 勾选 § 一 ③ 顶层 + 打印计划完成横幅 | |
| 219 | + | |
| 220 | +完成后,用 `Edit` 在 `docs/08-模块任务管理.md` 中勾选 ③ 顶层: | |
| 221 | +- `- [ ] 计划 ③ DB 初始化 + 下游文档 — lite-build-db` | |
| 222 | + | |
| 223 | +打印计划阶段终止横幅并**停下**(不自动进入 coding 阶段): | |
| 224 | + | |
| 225 | +``` | |
| 226 | +━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ | |
| 227 | + [lite-build-db] ✅ 计划阶段(①②③)全部完成 | |
| 228 | + | |
| 229 | + 所有规划文档已就绪,docs/08 § 一 全部勾选。 | |
| 230 | + | |
| 231 | + ⚠️ 进入 Coding 阶段前必须完成: | |
| 232 | + 1. 审核全部 Plan 产出(docs/01 / 03 / 04 / 05 / 08 + CLAUDE.md + sql/migrations/V1 + scripts/*) | |
| 233 | + | |
| 234 | + 2. 把全部 Plan 产物 commit 到本地默认分支(main / master): | |
| 235 | + git add -A && git commit -m "chore: plan phase done" | |
| 236 | + | |
| 237 | + 3. 运行 /erp-workflow:coding-start 进入编码阶段 | |
| 238 | +━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ | |
| 239 | +``` | |
| 240 | + | |
| 241 | +**停止**,不调用任何下游 skill。 | |
| 148 | 242 | |
| 149 | 243 | ## 参考 |
| 150 | 244 | |
| 151 | -- `${CLAUDE_SKILL_DIR}/scripts/validate.sh`(A.3 表名 + 每表列名集合校验脚本) | |
| 152 | 245 | - `docs/03-数据库设计文档.md`(DDL 翻译输入,SSoT) |
| 246 | +- `docs/01-需求清单/index.md`(模块索引) | |
| 247 | +- `docs/01-需求清单/<module>/_module.md`(模块依赖:回填 `依赖模块`;拓扑排序输入) | |
| 248 | +- `docs/01-需求清单/<module>/REQ-*.md`(REQ 依赖:回填 `依赖接口`;模块内 REQ 排序输入) | |
| 249 | +- `docs/08-模块任务管理.md` § 二(模块拓扑顺序追加目标;是 coding-start 的排序权威) | |
| 250 | +- `${CLAUDE_SKILL_DIR}/scripts/validate.sh`(A.3 表名 + 每表列名集合校验脚本) | |
| 251 | +- `${CLAUDE_SKILL_DIR}/templates/docs-05-header-template.md` | |
| 252 | +- `${CLAUDE_SKILL_DIR}/templates/docs-05-endpoint-template.md` | |
| 253 | +- `${CLAUDE_SKILL_DIR}/templates/docs-08-module-row-template.md`(模块 bullet 行模板) | |
| 153 | 254 | - `.env.local`(DB 凭据) |
| 154 | -- 产物:`sql/migrations/V1__initial_schema.sql`(由 Flyway 在 Spring Boot 启动时验证 / apply) | |
| 255 | +- 产物:`sql/migrations/V1__initial_schema.sql`(由 Flyway 在 Spring Boot 启动时 apply) | ... | ... |
skills/plan/db-init/scripts/validate.sh renamed to skills/plan/lite-build-db/scripts/validate.sh
skills/plan/downstream-gen/templates/docs-05-endpoint-template.md renamed to skills/plan/lite-build-db/templates/docs-05-endpoint-template.md
skills/plan/downstream-gen/templates/docs-05-header-template.md renamed to skills/plan/lite-build-db/templates/docs-05-header-template.md
skills/plan/downstream-gen/templates/docs-08-module-row-template.md renamed to skills/plan/lite-build-db/templates/docs-08-module-row-template.md
skills/plan/lite-design/SKILL.md
0 → 100644
| 1 | +--- | |
| 2 | +name: lite-design | |
| 3 | +description: 计划第 2 段——生成架构文档(docs/04 § 一+,含前端 Design Tokens + 环境配置)+ 工具脚本 + .env.local + sql/migrations/,然后从 REQ 正向设计 docs/03 并回填 REQ 依赖表,停下等人工审阅 docs/03。 | |
| 4 | +user-invocable: false | |
| 5 | +allowed-tools: Read Write Edit Glob Grep Skill AskUserQuestion Bash(mkdir *) Bash(cp *) Bash(cat *) Bash(bash *) | |
| 6 | +--- | |
| 7 | + | |
| 8 | +**所有输出必须使用中文。** | |
| 9 | + | |
| 10 | +# lite-design | |
| 11 | + | |
| 12 | +## 执行步骤 | |
| 13 | + | |
| 14 | +### 步骤 0:打印当前位置流程图 | |
| 15 | + | |
| 16 | +用 `Bash` 执行以下命令(文件不存在时静默忽略,不报错): | |
| 17 | + | |
| 18 | +```bash | |
| 19 | +cat "${CLAUDE_PLUGIN_ROOT}/skills/crosscut/plan-start/banners/flow-lite.txt" 2>/dev/null || true | |
| 20 | +``` | |
| 21 | + | |
| 22 | +打印横幅:`▶ 计划阶段 ② — lite-design`。 | |
| 23 | + | |
| 24 | +### A. 读取锁定的输入 | |
| 25 | + | |
| 26 | +用 `Read` 读取: | |
| 27 | +- `docs/04-技术规范.md` § 零 技术栈表 | |
| 28 | +- `docs/01-需求清单/index.md` 需求索引 | |
| 29 | +- `docs/01-需求清单/` 下所有 REQ 卡片(`docs/01-需求清单/*/REQ-*.md`) | |
| 30 | + | |
| 31 | +后续所有内容都基于它们推导。 | |
| 32 | + | |
| 33 | +### B. 生成 docs/04 § 一+(保留 § 零 不覆盖) | |
| 34 | + | |
| 35 | +docs/04 已由 lite-init 写入 § 零。本步骤追加 § 一 ~ 五。 | |
| 36 | + | |
| 37 | +lite 版的 docs/04 承担三类内容(不再生成独立的前端规范文件或环境配置文件): | |
| 38 | +- § 一~三:后端/前端/共同编码规范 | |
| 39 | +- § 四:前端 Design Tokens + 交互约定 | |
| 40 | +- § 五:环境配置 | |
| 41 | + | |
| 42 | +操作: | |
| 43 | +1. 读取 `docs/04-技术规范.md`(现有 § 零 完整内容)。 | |
| 44 | +2. 读取 `${CLAUDE_SKILL_DIR}/templates/docs-04-skeleton-template.md`。 | |
| 45 | +3. 基于技术栈,按大纲生成 § 一 ~ 五 的项目专属内容,剥掉 HTML 注释(注释是给 LLM 的提示,不应出现在最终文档里)。 | |
| 46 | +4. 拼接原有内容和新生成内容,写回 `docs/04-技术规范.md`。 | |
| 47 | + | |
| 48 | +完成后,用 `Edit` 在 `docs/08-模块任务管理.md` 中勾选: | |
| 49 | +- ` - [ ] 架构文档已生成(docs/04 § 一+ | scripts/*.sh | .env.local | sql/migrations/)`(步骤 C 完成后一并勾选) | |
| 50 | + | |
| 51 | +### C. 生成工具脚本 + 目录结构 | |
| 52 | + | |
| 53 | +#### C.1 复制固定文件 | |
| 54 | + | |
| 55 | +```bash | |
| 56 | +mkdir -p scripts sql/migrations src/styles | |
| 57 | +cp "${CLAUDE_SKILL_DIR}/templates/env-local-template" .env.local | |
| 58 | +cp "${CLAUDE_SKILL_DIR}/templates/scripts-setup-test-db-template.sh" scripts/setup-test-db.sh | |
| 59 | +``` | |
| 60 | + | |
| 61 | +注意:lite 版不生成 `src/styles/tokens.css`(前端 token 骨架由前端阶段处理)。 | |
| 62 | + | |
| 63 | +#### C.2 渲染 scripts/test.sh | |
| 64 | + | |
| 65 | +读取 `${CLAUDE_SKILL_DIR}/templates/scripts-test-template.sh`,基于步骤 A 的技术栈(docs/04 § 零)为 4 个命令槽推断命令后写到 `scripts/test.sh`(lite 版精简为 4 槽): | |
| 66 | + | |
| 67 | +- `{{backend_build}}` / `{{backend_lint}}` / `{{backend_test}}` — 后端各 stage 命令 | |
| 68 | +- `{{frontend_build}}` / `{{frontend_lint}}` / `{{frontend_test}}` — 前端各 stage 命令 | |
| 69 | +- `{{e2e_cmd}}` — E2E(无 E2E 工具则填 `echo "[test.sh] e2e 略"`) | |
| 70 | + | |
| 71 | +> 推断规则:根据 `docs/04 § 零`。 | |
| 72 | +> - 「后端*」存在 → 据后端技术栈推 backend 三槽(build / lint / test 命令) | |
| 73 | +> - 「前端*」存在 → 据前端技术栈推 frontend 三槽 | |
| 74 | +> - 缺席 stack → 三槽全填 `:`(语法合法即可) | |
| 75 | +> - `{{e2e_cmd}}` 通常仅前端,按上述前端规则或填 `echo "[test.sh] e2e 略"` | |
| 76 | +> | |
| 77 | +> 表结构异常(列名变更 / 无中文前缀)时停下,用 `AskUserQuestion` 让用户显式确认每 stack 命令。 | |
| 78 | + | |
| 79 | +#### C.3 赋权 | |
| 80 | + | |
| 81 | +```bash | |
| 82 | +bash -c "chmod +x scripts/*.sh" | |
| 83 | +``` | |
| 84 | + | |
| 85 | +完成后,用 `Edit` 在 `docs/08-模块任务管理.md` 中勾选: | |
| 86 | +- ` - [ ] 架构文档已生成(docs/04 § 一+ | scripts/*.sh | .env.local | sql/migrations/)` | |
| 87 | + | |
| 88 | +### D. 追加 .gitignore 忽略项 | |
| 89 | + | |
| 90 | +调用脚本完成合并: | |
| 91 | + | |
| 92 | +```bash | |
| 93 | +bash "${CLAUDE_SKILL_DIR}/scripts/merge-gitignore.sh" "${CLAUDE_SKILL_DIR}/templates/gitignore-append-template" | |
| 94 | +``` | |
| 95 | + | |
| 96 | +### E. 推导 schema + 渲染 docs/03 | |
| 97 | + | |
| 98 | +基于步骤 A 读到的 REQ + docs/04 § 一命名规范,**正向推导**业务实体 → 表 + 字段 + 索引 + 外键。要求: | |
| 99 | + | |
| 100 | +1. 严格套用 `docs/04 § 一` 的命名规范(匈牙利前缀 `i` int / `s` varchar / `t` datetime 等) | |
| 101 | +2. **主键**:模板内置 `iIncrement` 为主键。REQ 明确要求复合主键 / UUID / 业务主键时按 REQ;其他主键变更需同步改 docs-03-header / docs-03-table 两份模板 | |
| 102 | +3. **外键**:依据 REQ 中的引用关系(如「订单引用客户」),明确列出 `ON DELETE` / `ON UPDATE` 策略;不能确定时默认 `RESTRICT` | |
| 103 | +4. **索引**:根据 REQ 的查询模式推导业务索引;外键列默认建索引;标准列里 `sBrandsId` / `sSubsidiaryId` 这类多租户隔离列,按业务查询模式建组合索引 | |
| 104 | +5. **业务注记**:对每张表用一两句话说明业务用途、关键约束、与其他表的关系 | |
| 105 | + | |
| 106 | +如果某 REQ 表述模糊以致无法推断关键 schema 细节(如:枚举值范围 / 字段长度上限 / 必填性),先按合理默认推导并在该字段「业务含义」列加 `【人工填写:需用户审阅】` 标注,不打断本次推导。 | |
| 107 | + | |
| 108 | +渲染 docs/03: | |
| 109 | +1. 读取 `${CLAUDE_SKILL_DIR}/templates/docs-03-header-template.md`,填充 `schema_name`(从 `.env.local` 读 `DB_SCHEMA`,无则填 `【人工填写:DB_SCHEMA】`)、`er_overview`(纯文本 ER 概览)。 | |
| 110 | +2. 渲染「表清单」:对每张表,读取并填充 `${CLAUDE_SKILL_DIR}/templates/docs-03-table-template.md`。 | |
| 111 | +3. 写入 `docs/03-数据库设计文档.md`。 | |
| 112 | + | |
| 113 | +完成后,用 `Edit` 在 `docs/08-模块任务管理.md` 中勾选: | |
| 114 | +- ` - [ ] docs/03 数据库设计已生成(REQ → 表/字段/索引/外键,回填 REQ 依赖表)` | |
| 115 | + | |
| 116 | +### F. 回填模块头 + REQ 卡片的 TBD 字段 | |
| 117 | + | |
| 118 | +1. 列出 `docs/01-需求清单/*/_module.md`(模块头)和 `docs/01-需求清单/*/REQ-*.md`(REQ 卡片)。 | |
| 119 | +2. 在这些文件中搜索 `TBD(lite-design 自动补)` 并回填为实际表名。**不动** `TBD(lite-build-db 自动补)`。 | |
| 120 | + - `_module.md` 的 `涉及表` 字段:填入该模块涉及的所有表名(逗号分隔) | |
| 121 | + - `REQ-*.md` 的 `依赖表` 字段:填入该 REQ 操作的表名(逗号分隔) | |
| 122 | +3. 打印回填统计:`lite-design 回填 <M> 处模块"涉及表" + <N> 处 REQ"依赖表"`。 | |
| 123 | + | |
| 124 | +### G. 勾选 § 一 ② 顶层 + 停下等人工审阅 | |
| 125 | + | |
| 126 | +1. 完成后,用 `Edit` 在 `docs/08-模块任务管理.md` 中勾选 ② 顶层: | |
| 127 | + - `- [ ] 计划 ② 脚手架 + 数据库设计 — lite-design` | |
| 128 | + | |
| 129 | +2. 打印停下横幅并**停下**: | |
| 130 | + | |
| 131 | + ``` | |
| 132 | + ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ | |
| 133 | + [lite-design] ✅ 计划 ② 完成 | |
| 134 | + | |
| 135 | + 产出: | |
| 136 | + ✓ docs/04-技术规范.md(§ 一+ | § 四 Design Tokens | § 五 环境配置) | |
| 137 | + ✓ scripts/setup-test-db.sh + scripts/test.sh(已赋权) | |
| 138 | + ✓ .env.local(含占位符,凭据请自填) | |
| 139 | + ✓ sql/migrations/(目录已建) | |
| 140 | + ✓ .gitignore(已追加忽略项) | |
| 141 | + ✓ docs/03-数据库设计文档.md | |
| 142 | + ✓ docs/01 各 REQ 卡片"依赖表" + 模块头"涉及表" 已回填 | |
| 143 | + | |
| 144 | + ⏸ 现在请你审阅 docs/03。 | |
| 145 | + 重点关注: | |
| 146 | + - 业务实体覆盖是否完整 | |
| 147 | + - 字段类型 / 长度 / 是否可空 / 默认值是否合理 | |
| 148 | + - 索引是否覆盖主要查询模式 | |
| 149 | + - 外键 ON DELETE / ON UPDATE 策略是否符合业务 | |
| 150 | + - 字段「业务含义」列含 `【人工填写:需用户审阅】` 标注的位置需逐一确认 | |
| 151 | + - .env.local 中的凭据占位符请直接编辑文件填写(凭据不进会话) | |
| 152 | + | |
| 153 | + 审阅完成后,再运行: | |
| 154 | + /erp-workflow:plan-start | |
| 155 | + | |
| 156 | + ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ | |
| 157 | + ``` | |
| 158 | + | |
| 159 | + **停止**,不调用任何下游 skill。 | |
| 160 | + | |
| 161 | +## 参考 | |
| 162 | + | |
| 163 | +- `docs/04-技术规范.md` § 零(技术栈输入) | |
| 164 | +- `docs/01-需求清单/index.md`(模块索引输入) | |
| 165 | +- `docs/01-需求清单/<module>/_module.md`(模块头:回填 `涉及表`) | |
| 166 | +- `docs/01-需求清单/<module>/REQ-*.md`(REQ 输入 + 回填 `依赖表`) | |
| 167 | +- `${CLAUDE_SKILL_DIR}/templates/docs-04-skeleton-template.md`(大纲:§ 一~三 编码规范 + § 四 Design Tokens + § 五 环境配置) | |
| 168 | +- `${CLAUDE_SKILL_DIR}/templates/docs-03-header-template.md` | |
| 169 | +- `${CLAUDE_SKILL_DIR}/templates/docs-03-table-template.md` | |
| 170 | +- `${CLAUDE_SKILL_DIR}/templates/scripts-test-template.sh`(推断命令填充槽位;缺席 stack 填 `:`) | |
| 171 | +- `${CLAUDE_SKILL_DIR}/templates/scripts-setup-test-db-template.sh`(0 槽位) | |
| 172 | +- `${CLAUDE_SKILL_DIR}/templates/env-local-template`(0 槽位) | |
| 173 | +- `${CLAUDE_SKILL_DIR}/templates/gitignore-append-template`(0 槽位) | |
| 174 | +- `${CLAUDE_SKILL_DIR}/scripts/merge-gitignore.sh`(.gitignore 逐行判重合并脚本) | ... | ... |
skills/plan/skeleton-gen/scripts/merge-gitignore.sh renamed to skills/plan/lite-design/scripts/merge-gitignore.sh
skills/plan/db-design-gen/templates/docs-03-header-template.md renamed to skills/plan/lite-design/templates/docs-03-header-template.md
skills/plan/db-design-gen/templates/docs-03-table-template.md renamed to skills/plan/lite-design/templates/docs-03-table-template.md
skills/plan/skeleton-gen/templates/docs-04-skeleton-template.md renamed to skills/plan/lite-design/templates/docs-04-skeleton-template.md
| 1 | 1 | <!-- |
| 2 | -本文件是 docs/04-技术规范.md 的 § 一+ 大纲。 | |
| 3 | -skeleton-gen 读取 docs/04 § 零(技术栈表)和 docs/01-需求清单/index.md(模块索引), | |
| 2 | +本文件是 docs/04-技术规范.md 的 § 一+ 大纲(lite 版)。 | |
| 3 | +lite-design 读取 docs/04 § 零(技术栈表)和 docs/01-需求清单/index.md(模块索引), | |
| 4 | 4 | 按下述大纲生成本项目专属的规范内容。LLM 不要原样拷贝提示文字,只保留 section 标题。 |
| 5 | +lite 版将前端 Design Tokens + 环境配置内容折叠到本文件 § 四 + § 五, | |
| 6 | +不再生成独立的前端规范文件或环境配置文件。 | |
| 5 | 7 | --> |
| 6 | 8 | |
| 7 | 9 | ## 一、后端规范 |
| 8 | 10 | |
| 9 | 11 | ### 1.1 规则 |
| 10 | -<!-- 后端通用约定:保留下方占位符不要代填,由人工在 skeleton-gen § E 填写;每条一个 bullet,按需复制本行新增更多。 --> | |
| 12 | +<!-- 后端通用约定:保留下方占位符不要代填,由人工在 lite-design § E 填写;每条一个 bullet,按需复制本行新增更多。 --> | |
| 11 | 13 | - 【人工填写:一条后端通用约定,按需复制本行新增更多;无则填「无」】 |
| 12 | 14 | |
| 13 | 15 | ### 1.2 分层结构 |
| ... | ... | @@ -45,10 +47,10 @@ skeleton-gen 读取 docs/04 § 零(技术栈表)和 docs/01-需求清单/ind |
| 45 | 47 | ### 2.5 样式与主题 |
| 46 | 48 | <!-- 基于 § 零 UI 库给出 CSS 变量约定: |
| 47 | 49 | - 命名格式 `--color-<scope>-<role>-<state>`(scope=form/table-row/...,role=bg/fg/border,state=edit/readonly/hover/selected) |
| 48 | - - 文件位置 `src/styles/tokens.css`,由 skeleton-gen 生成空骨架,色值由 docs/06 § 四锁定后填入 | |
| 50 | + - 文件位置 `src/styles/tokens.css`,由 lite-design 生成空骨架,色值由 § 四锁定后填入 | |
| 49 | 51 | - 组件样式中只用 var(--color-xxx),禁止硬编码 hex/rgba |
| 50 | 52 | - 与 UI 库主题对接(如 Ant Design ConfigProvider.theme.token)的映射方式 |
| 51 | - 具体 token 表见 docs/06 § 四。 --> | |
| 53 | + 具体 token 表见 § 四。 --> | |
| 52 | 54 | |
| 53 | 55 | ## 三、共同约定 |
| 54 | 56 | |
| ... | ... | @@ -67,3 +69,54 @@ skeleton-gen 读取 docs/04 § 零(技术栈表)和 docs/01-需求清单/ind |
| 67 | 69 | ### 3.5 配置与安全 |
| 68 | 70 | <!-- 配置:DB 连接 / 端口 / 密钥 / 第三方 URL 等一律放 `application.yml` + `.env.local`,代码里**禁止硬编码**。 |
| 69 | 71 | 前端安全:`localStorage` 不存敏感信息(token / 身份 / 个人数据),推荐 HttpOnly Cookie 或 内存 + 刷新 token 模式;接口响应禁止回显后端异常堆栈(与 § 1.5 一致)。 --> |
| 72 | + | |
| 73 | +## 四、前端 Design Tokens / 交互约定 | |
| 74 | + | |
| 75 | +> 所有色值统一以 CSS 变量定义于 src/styles/tokens.css;命名规范见 § 2.5。 | |
| 76 | +> 本项目所有页面布局以项目根 `prototype/` 目录下的静态 HTML mockup 为权威。 | |
| 77 | +> 前端阶段实现时直接以 prototype/ HTML 推导组件树与样式。本节仅承载跨页面通用规则与 Design Tokens。 | |
| 78 | + | |
| 79 | +### 4.1 通用交互规则 | |
| 80 | + | |
| 81 | +#### 4.1.1 操作反馈 | |
| 82 | +<!-- 成功/失败消息;危险操作二次确认;长耗时按钮 loading 态。 --> | |
| 83 | + | |
| 84 | +#### 4.1.2 数据展示 | |
| 85 | +<!-- 空状态 / 加载 / 异常 的统一组件与文案。 --> | |
| 86 | + | |
| 87 | +#### 4.1.3 权限控制(前端) | |
| 88 | +<!-- 菜单级 / 按钮级 / 路由级的控制方式,关联后端 RBAC。 --> | |
| 89 | + | |
| 90 | +### 4.2 全局调色板 | |
| 91 | +<!-- 与 § 零 UI 库主题对齐:列名 = 语义 / 变量名 / 默认值 / 用途。 | |
| 92 | + 至少含:主色/成功/警告/错误/主文字/次文字/边框/背景。 --> | |
| 93 | + | |
| 94 | +### 4.3 组件级状态色 | |
| 95 | +<!-- 场景 × 状态映射表:列名 = 序号 / 组件 / 编辑bg / 只读bg / 悬浮bg / 编辑fg / 只读fg / 悬浮fg / 备注。 | |
| 96 | + 单元格写 token 名(var(--color-xxx) 形式),不写 hex;"—" 表示该状态不适用。 | |
| 97 | + 表后追加「Token 默认值」表,列出每个 --color-xxx 在 tokens.css 的默认值。 --> | |
| 98 | + | |
| 99 | +### 4.4 引用约定 | |
| 100 | +<!-- 一句话三条: | |
| 101 | + - 组件样式只用 var(--color-xxx),禁止硬编码 | |
| 102 | + - 新增 token 须先登记到 § 4.2/4.3 再补 tokens.css | |
| 103 | + - 修改色值只改 tokens.css 一处,不允许组件覆盖 --> | |
| 104 | + | |
| 105 | +## 五、环境配置 | |
| 106 | + | |
| 107 | +### 5.1 依赖清单 | |
| 108 | + | |
| 109 | +<!-- 表格:| 层 | 依赖 | 版本 | 说明 |;覆盖 运行时 / 构建 / 容器 / CLI 工具。 --> | |
| 110 | + | |
| 111 | +### 5.2 端口约定 | |
| 112 | + | |
| 113 | +<!-- 表格:| 服务 | 端口 | 说明 |;至少列 后端 HTTP / 前端 dev / 数据库 / 缓存 / 反代。 --> | |
| 114 | + | |
| 115 | +### 5.3 环境变量 | |
| 116 | + | |
| 117 | +运行时凭据(数据库连接、JWT 密钥等)全部放在仓库根的 `.env.local`,不入 git。 | |
| 118 | +字段清单与占位符见该文件,真实值由开发者本地填写。 | |
| 119 | + | |
| 120 | +### 5.4 常用命令 | |
| 121 | + | |
| 122 | +<!-- 表格:| 命令 | 说明 |;包含 启动后端 / 启动前端 / 打包 / 运行测试 / 重置测试数据。 --> | ... | ... |
skills/plan/skeleton-gen/templates/env-local-template renamed to skills/plan/lite-design/templates/env-local-template
skills/plan/skeleton-gen/templates/gitignore-append-template renamed to skills/plan/lite-design/templates/gitignore-append-template
skills/plan/skeleton-gen/templates/scripts-setup-test-db-template.sh renamed to skills/plan/lite-design/templates/scripts-setup-test-db-template.sh
skills/plan/skeleton-gen/templates/scripts-test-template.sh renamed to skills/plan/lite-design/templates/scripts-test-template.sh
skills/plan/skeleton-gen/SKILL.md deleted
| 1 | ---- | |
| 2 | -name: skeleton-gen | |
| 3 | -description: A2 骨架生成——基于 docs/04 § 零 技术栈 + docs/01-需求清单/index.md 模块索引,生成项目专属的架构文档(docs/04 § 一+、docs/06、docs/07、docs/09)和工具脚本。固定工具文件走 cp,架构文档由 LLM 按大纲生成。 | |
| 4 | -user-invocable: false | |
| 5 | -allowed-tools: Read Write Edit Skill Grep Glob AskUserQuestion Bash(mkdir *) Bash(cp *) Bash(touch *) Bash(chmod *) Bash(cat *) Bash(bash *) | |
| 6 | ---- | |
| 7 | - | |
| 8 | -**所有输出必须使用中文。** | |
| 9 | - | |
| 10 | -# skeleton-gen | |
| 11 | - | |
| 12 | -## 执行步骤 | |
| 13 | - | |
| 14 | -### 步骤 0:打印当前位置流程图 | |
| 15 | - | |
| 16 | -用 `Bash` 执行 `cat` 命令向用户展示当前位置流程图(stdout 即 ASCII 框图): | |
| 17 | - | |
| 18 | -```bash | |
| 19 | -cat "${CLAUDE_PLUGIN_ROOT}/skills/plan/skeleton-gen/banners/flow.txt" | |
| 20 | -``` | |
| 21 | - | |
| 22 | -### A. 读取锁定的输入 | |
| 23 | - | |
| 24 | -用 `Read` 读取: | |
| 25 | -- `docs/04-技术规范.md` § 零 技术栈表 | |
| 26 | -- `docs/01-需求清单/index.md` 需求索引 | |
| 27 | -- `docs/01-需求清单/` 需求卡片 | |
| 28 | - | |
| 29 | -后续所有内容都基于它们推导。 | |
| 30 | - | |
| 31 | -### B.1 生成 3 个全新架构文档(docs/06 / 07 / 09) | |
| 32 | - | |
| 33 | -对下表每个目标文件: | |
| 34 | -1. 读取对应的大纲模板 | |
| 35 | -2. 基于步骤 A 的输入,按大纲生成项目专属内容 | |
| 36 | -3. 剥掉 HTML 注释(注释是给 LLM 的提示,不应出现在最终文档里) | |
| 37 | -4. 写入目标路径 | |
| 38 | - | |
| 39 | -| 目标文件 | 大纲模板 | | |
| 40 | -|---|---| | |
| 41 | -| `docs/06-UI交互规范.md`(§ 一 ~ 四,§ 五 占位) | `${CLAUDE_SKILL_DIR}/templates/docs-06-static-template.md` | | |
| 42 | -| `docs/07-环境配置.md` | `${CLAUDE_SKILL_DIR}/templates/docs-07-env-template.md` | | |
| 43 | -| `docs/09-项目目录结构.md` | `${CLAUDE_SKILL_DIR}/templates/docs-09-structure-template.md` | | |
| 44 | - | |
| 45 | -项目专属标识(根包名 / 命名空间)保留 `【人工填写:<说明>】` 占位,等人工在 docs/09 顶部补填一次后,其他文件复用。 | |
| 46 | - | |
| 47 | -### B.2 追加 docs/04 § 一+(保留 § 零 不覆盖) | |
| 48 | - | |
| 49 | -docs/04 已由 scope-lock 写入 § 零。本步骤追加 § 一 ~ 三。 | |
| 50 | - | |
| 51 | -1. 读取 `docs/04-技术规范.md`(现有 § 零 完整内容)。 | |
| 52 | -2. 读取 `${CLAUDE_SKILL_DIR}/templates/docs-04-skeleton-template.md`。 | |
| 53 | -3. 基于技术栈,按大纲生成 § 一 ~ 三 的项目专属内容,剥掉 HTML 注释。 | |
| 54 | -4. 拼接原有内容和新生成内容,写回 `docs/04-技术规范.md`。 | |
| 55 | - | |
| 56 | -完成后,用 `Edit` 在 `docs/08-模块任务管理.md` 中勾选: | |
| 57 | -- ` - [ ] 架构文档已生成(docs/04 § 一+、docs/06、docs/07、docs/09)` | |
| 58 | - | |
| 59 | -### C. 生成工具脚本 | |
| 60 | - | |
| 61 | -#### C.1 复制 | |
| 62 | - | |
| 63 | -```bash | |
| 64 | -mkdir -p scripts sql/migrations src/styles | |
| 65 | -touch sql/migrations/.gitkeep | |
| 66 | -cp "${CLAUDE_SKILL_DIR}/templates/env-local-template" .env.local | |
| 67 | -cp "${CLAUDE_SKILL_DIR}/templates/scripts-setup-test-db-template.sh" scripts/setup-test-db.sh | |
| 68 | -cp "${CLAUDE_SKILL_DIR}/templates/styles-tokens-template.css" src/styles/tokens.css | |
| 69 | -``` | |
| 70 | - | |
| 71 | -#### C.2 渲染 scripts/test.sh | |
| 72 | - | |
| 73 | -读取 `${CLAUDE_SKILL_DIR}/templates/scripts-test-template.sh`,基于步骤 A 的技术栈(docs/04 § 零)为 7 个占位推断命令后写到 `scripts/test.sh`: | |
| 74 | - | |
| 75 | -- `{{backend_build}}` / `{{backend_lint}}` / `{{backend_test}}` 后端各 stage 命令 | |
| 76 | -- `{{frontend_build}}` / `{{frontend_lint}}` / `{{frontend_test}}` 前端各 stage 命令 | |
| 77 | -- `{{e2e_cmd}}` E2E(无 E2E 工具则填 `echo "[test.sh] e2e 略"`) | |
| 78 | - | |
| 79 | -> 推断规则:根据 `docs/04 § 零` 。 | |
| 80 | -> - 「后端*」存在 → 据后端技术栈推 backend 三槽(build / lint / test 命令) | |
| 81 | -> - 「前端*」存在 → 据前端技术栈推 frontend 三槽 | |
| 82 | -> - 缺席 stack → 三槽全填 `:`(运行期 `[ -d X ]` 守卫对接;语法合法即可) | |
| 83 | -> - `{{e2e_cmd}}` 通常仅前端,按上述前端规则或填 `echo "[test.sh] e2e 略"` | |
| 84 | -> | |
| 85 | -> 表结构异常(列名变更 / 无中文前缀)时停下,用 `AskUserQuestion` 让用户显式确认每 stack 命令。 | |
| 86 | - | |
| 87 | -#### C.3 赋权 | |
| 88 | - | |
| 89 | -```bash | |
| 90 | -chmod +x scripts/*.sh | |
| 91 | -``` | |
| 92 | - | |
| 93 | -完成后,用 `Edit` 在 `docs/08-模块任务管理.md` 中勾选: | |
| 94 | -- ` - [ ] 工具脚本已生成(scripts/*.sh、.env.local)` | |
| 95 | -- ` - [ ] 样式 token 骨架已生成(src/styles/tokens.css)` | |
| 96 | - | |
| 97 | -### D. 追加 .gitignore 忽略项 | |
| 98 | - | |
| 99 | -调用脚本完成合并: | |
| 100 | - | |
| 101 | -```bash | |
| 102 | -bash "${CLAUDE_SKILL_DIR}/scripts/merge-gitignore.sh" "${CLAUDE_SKILL_DIR}/templates/gitignore-append-template" | |
| 103 | -``` | |
| 104 | - | |
| 105 | -完成后,用 `Edit` 在 `docs/08-模块任务管理.md` 中勾选: | |
| 106 | -- ` - [ ] .gitignore 已配置` | |
| 107 | - | |
| 108 | -### E. 占位符补填 + QA 闸门 | |
| 109 | - | |
| 110 | -#### E.1 扫描 + 分组 | |
| 111 | - | |
| 112 | -用 `Grep` 在以下 8 个路径扫 `【人工填写:`,记录命中(文件 / 行号 / 说明): | |
| 113 | -- `docs/04-技术规范.md` / `docs/06-UI交互规范.md` / `docs/07-环境配置.md` / `docs/09-项目目录结构.md` | |
| 114 | -- `scripts/*.sh` / `.gitignore` | |
| 115 | -- `.env.local` | |
| 116 | - | |
| 117 | -分两组: | |
| 118 | -- **敏感组**:`.env.local` 路径命中(凭据 / 密钥)。**不弹 QA**(凭据不进会话),E.3 提示用户自填。 | |
| 119 | -- **非敏感组**:其余文件。按说明文字聚合为「根占位」(相同说明 = 同一值,多处共用)或「派生占位」(说明表达派生关系,如"后端 java 根包路径"派生自"根包名")。 | |
| 120 | - | |
| 121 | -无命中 → 跳 E.4。 | |
| 122 | - | |
| 123 | -#### E.2 问根占位 + 推派生 + 批量 Edit | |
| 124 | - | |
| 125 | -- 每个根占位用 `AskUserQuestion` 问(给合理默认值 + 自由输入),用 `Edit` 批量替换所有命中位置 | |
| 126 | -- 派生占位**不问**,CC 基于根占位值推断后 `Edit`;不能可靠推断则回退当独立根占位问 | |
| 127 | - | |
| 128 | -#### E.3 敏感占位提示(不弹 QA) | |
| 129 | - | |
| 130 | -若敏感组非空:打印提示横幅,列出 `.env.local` 待填字段名 + 告诉用户"直接编辑文件,凭据不进会话"。 | |
| 131 | - | |
| 132 | -#### E.4 验证 + QA 闸门 | |
| 133 | - | |
| 134 | -循环直到两条件**同时**满足: | |
| 135 | -(a) `Grep` 重新扫 8 路径,0 命中 | |
| 136 | -(b) 用户 `AskUserQuestion` 选「继续」 | |
| 137 | - | |
| 138 | -每次弹 QA 前重扫;有残留则打印残留位置清单(文件:行号 — 说明)+ 再弹 QA。 | |
| 139 | - | |
| 140 | -QA 横幅涵盖:产出文件清单(docs/04 / 06 / 07 / 09 + scripts/*.sh + .env.local + .gitignore)、占位状态(N=0 或待填清单)、「继续」/「有疑问先沟通」两选项。 | |
| 141 | - | |
| 142 | -通过后(N=0 且用户选「继续」),用 `Edit` 在 `docs/08-模块任务管理.md` 中勾选: | |
| 143 | -- `- [ ] A2 骨架生成 — skeleton-gen` | |
| 144 | - | |
| 145 | -### F. 进入 A3 | |
| 146 | - | |
| 147 | -输出 `skeleton-gen: 完成`,立即调用 `Skill(db-design-gen)`。 | |
| 148 | - | |
| 149 | -## 参考 | |
| 150 | - | |
| 151 | -- `docs/04-技术规范.md` § 零(技术栈输入) | |
| 152 | -- `docs/01-需求清单/index.md`(模块索引输入) | |
| 153 | -- `${CLAUDE_SKILL_DIR}/templates/docs-04-skeleton-template.md`(大纲) | |
| 154 | -- `${CLAUDE_SKILL_DIR}/templates/docs-06-static-template.md`(大纲) | |
| 155 | -- `${CLAUDE_SKILL_DIR}/templates/docs-07-env-template.md`(大纲) | |
| 156 | -- `${CLAUDE_SKILL_DIR}/templates/docs-09-structure-template.md`(大纲) | |
| 157 | -- `${CLAUDE_SKILL_DIR}/templates/scripts-test-template.sh`(推断命令填充 7 槽:backend/frontend × build/lint/test + e2e;缺席 stack 填 `:`) | |
| 158 | -- `${CLAUDE_SKILL_DIR}/templates/scripts-setup-test-db-template.sh`(0 槽位) | |
| 159 | -- `${CLAUDE_SKILL_DIR}/templates/env-local-template`(0 槽位) | |
| 160 | -- `${CLAUDE_SKILL_DIR}/templates/gitignore-append-template`(0 槽位) | |
| 161 | -- `${CLAUDE_SKILL_DIR}/templates/styles-tokens-template.css`(0 槽位,样式 token 骨架) | |
| 162 | -- `${CLAUDE_SKILL_DIR}/scripts/merge-gitignore.sh`(.gitignore 逐行判重合并脚本) |
skills/plan/skeleton-gen/banners/flow.txt deleted
| 1 | -┌────────────────────────────────────────────────────────┐ | |
| 2 | -│ 📋 阶段 A:规划(一次性) │ | |
| 3 | -│ │ | |
| 4 | -│ A0 初始化项目 │ | |
| 5 | -│ ↓ │ | |
| 6 | -│ A1 锁范围(生成 REQ 卡片) → 人工审核 │ | |
| 7 | -│ ↓ │ | |
| 8 | -│ ▶ A2 生成骨架 │ | |
| 9 | -│ ↓ │ | |
| 10 | -│ A3 生成 DB 设计 → 人工审核 │ | |
| 11 | -│ ↓ │ | |
| 12 | -│ A4 初始化 DB │ | |
| 13 | -│ ↓ │ | |
| 14 | -│ A5 生成下游文档 │ | |
| 15 | -│ │ | |
| 16 | -│ 规划阶段到此结束 │ | |
| 17 | -└────────────────────────────────────────────────────────┘ |
skills/plan/skeleton-gen/templates/docs-06-static-template.md deleted
| 1 | -<!-- | |
| 2 | -本文件是 docs/06-UI交互规范.md 的 § 一~二 大纲(§ 三由 downstream-gen 追加)。 | |
| 3 | -skeleton-gen 读取 docs/04 § 零 和 docs/01 index,按下述大纲生成项目专属内容。 | |
| 4 | -布局/页面骨架以项目根的 prototype/ 静态 HTML mockup 为权威,本文件仅承载跨页面通用规则与 Design Tokens。 | |
| 5 | ---> | |
| 6 | - | |
| 7 | -# 06-UI交互规范 | |
| 8 | - | |
| 9 | -> 本项目所有页面布局以项目根 `prototype/` 目录下的静态 HTML mockup 为权威。前端阶段(fe-feature-*)实现时直接以 prototype/ HTML 推导组件树与样式。本文件仅承载跨页面通用规则与 Design Tokens。 | |
| 10 | - | |
| 11 | -## 一、通用交互规则 | |
| 12 | - | |
| 13 | -### 1.1 操作反馈 | |
| 14 | -<!-- 成功/失败消息;危险操作二次确认;长耗时按钮 loading 态。 --> | |
| 15 | - | |
| 16 | -### 1.2 数据展示 | |
| 17 | -<!-- 空状态 / 加载 / 异常 的统一组件与文案。 --> | |
| 18 | - | |
| 19 | -### 1.3 权限控制(前端) | |
| 20 | -<!-- 菜单级 / 按钮级 / 路由级的控制方式,关联后端 RBAC。 --> | |
| 21 | - | |
| 22 | -## 二、Design Tokens | |
| 23 | - | |
| 24 | -<!-- 所有色值统一以 CSS 变量定义于 src/styles/tokens.css;命名规范见 docs/04 § 2.5。 --> | |
| 25 | - | |
| 26 | -### 2.1 全局调色板 | |
| 27 | -<!-- 与 § 零 UI 库主题对齐:列名 = 语义 / 变量名 / 默认值 / 用途。 | |
| 28 | - 至少含:主色/成功/警告/错误/主文字/次文字/边框/背景。 --> | |
| 29 | - | |
| 30 | -### 2.2 组件级状态色 | |
| 31 | -<!-- 场景 × 状态映射表:列名 = 序号 / 组件 / 编辑bg / 只读bg / 悬浮bg / 编辑fg / 只读fg / 悬浮fg / 备注。 | |
| 32 | - 单元格写 token 名(var(--color-xxx) 形式),不写 hex;"—" 表示该状态不适用。 | |
| 33 | - 表后追加「Token 默认值」表,列出每个 --color-xxx 在 tokens.css 的默认值。 --> | |
| 34 | - | |
| 35 | -### 2.3 引用约定 | |
| 36 | -<!-- 一句话三条: | |
| 37 | - - 组件样式只用 var(--color-xxx),禁止硬编码 | |
| 38 | - - 新增 token 须先登记到 § 2.1/2.2 再补 tokens.css | |
| 39 | - - 修改色值只改 tokens.css 一处,不允许组件覆盖 --> | |
| 40 | - | |
| 41 | -## 三、页面清单 | |
| 42 | -(由 `downstream-gen` 按模块追加段落) |
skills/plan/skeleton-gen/templates/docs-07-env-template.md deleted
| 1 | -<!-- | |
| 2 | -本文件是 docs/07-环境配置.md 的大纲。 | |
| 3 | -skeleton-gen 基于 docs/04 § 零 技术栈表推导各节内容: | |
| 4 | - § 一 依赖清单 → 从技术栈的每一行技术推导运行时和构建依赖 | |
| 5 | - § 二 端口约定 → 从后端/前端/数据库/缓存/反向代理 各取默认端口 | |
| 6 | - § 四 常用命令 → 基于构建工具、包管理器给出开发者最常用命令 | |
| 7 | ---> | |
| 8 | - | |
| 9 | -# 07-环境配置 | |
| 10 | - | |
| 11 | -## 一、依赖清单 | |
| 12 | - | |
| 13 | -<!-- 表格:| 层 | 依赖 | 版本 | 说明 |;覆盖 运行时 / 构建 / 容器 / CLI 工具。 --> | |
| 14 | - | |
| 15 | -## 二、端口约定 | |
| 16 | - | |
| 17 | -<!-- 表格:| 服务 | 端口 | 说明 |;至少列 后端 HTTP / 前端 dev / 数据库 / 缓存 / 反代。 --> | |
| 18 | - | |
| 19 | -## 三、环境变量 | |
| 20 | - | |
| 21 | -运行时凭据(数据库连接、JWT 密钥等)全部放在仓库根的 `.env.local`,不入 git。 | |
| 22 | -字段清单与占位符见该文件,真实值由开发者本地填写。 | |
| 23 | - | |
| 24 | -## 四、常用命令 | |
| 25 | - | |
| 26 | -<!-- 表格:| 命令 | 说明 |;包含 启动后端 / 启动前端 / 打包 / 运行测试 / 重置测试数据。 --> |
skills/plan/skeleton-gen/templates/docs-09-structure-template.md deleted
| 1 | -<!-- | |
| 2 | -本文件是 docs/09-项目目录结构.md 的大纲。 | |
| 3 | -skeleton-gen 基于 docs/04 § 零 技术栈推导目录树: | |
| 4 | - § 二 后端目录 → 按后端框架的惯例(如 Spring Boot 的 src/main/java) | |
| 5 | - § 三 前端目录 → 按前端框架的惯例(如 Vite + React 的 src/) | |
| 6 | - § 四 docs 目录 → 沿用插件标准 | |
| 7 | - § 五 命名约定 → 按后端语言的包/命名空间习惯 | |
| 8 | - | |
| 9 | -模块划分参考 docs/01-需求清单/index.md 的模块索引,将业务模块落到代码目录。 | |
| 10 | ---> | |
| 11 | - | |
| 12 | -# 09-项目目录结构 | |
| 13 | - | |
| 14 | -## 一、仓库顶层 | |
| 15 | - | |
| 16 | -<!-- 用代码块画出顶层目录树,含 CLAUDE.md / README.md / .env.local / scripts / docs / sql / backend / frontend 等。 --> | |
| 17 | - | |
| 18 | -## 二、后端目录 | |
| 19 | - | |
| 20 | -<!-- 基于后端框架的目录树;按 docs/01 index 的模块代码把业务模块列出(module/user/、module/order/ 等)。 --> | |
| 21 | - | |
| 22 | -## 三、前端目录 | |
| 23 | - | |
| 24 | -<!-- 基于前端框架的目录树;pages/ 下按业务模块建子目录。 --> | |
| 25 | - | |
| 26 | -## 四、docs/ 结构 | |
| 27 | - | |
| 28 | -``` | |
| 29 | -docs/ | |
| 30 | -├── 01-需求清单/ # 每模块一子目录(_module.md 模块头 + REQ-*.md 卡片) | |
| 31 | -├── 02-开发计划.md | |
| 32 | -├── 03-数据库设计文档.md | |
| 33 | -├── 04-技术规范.md | |
| 34 | -├── 05-API接口契约.md | |
| 35 | -├── 06-UI交互规范.md | |
| 36 | -├── 07-环境配置.md | |
| 37 | -├── 08-模块任务管理.md | |
| 38 | -├── 09-项目目录结构.md | |
| 39 | -├── 10-验收检查清单.md | |
| 40 | -└── superpowers/ # CC 运行时产物 | |
| 41 | -``` | |
| 42 | - | |
| 43 | -## 五、命名与放置约定 | |
| 44 | - | |
| 45 | -<!-- 根包 / 命名空间用【人工填写:】占位;Controller / Service / Mapper / DTO / VO / 前端组件 / 前端页面 的放置规则。 --> |
skills/plan/skeleton-gen/templates/styles-tokens-template.css deleted
| 1 | -/* | |
| 2 | - * src/styles/tokens.css — Design Tokens | |
| 3 | - * 命名规范见 docs/04-技术规范.md § 2.5 | |
| 4 | - * 色值锁定见 docs/06-UI交互规范.md § 四 | |
| 5 | - * | |
| 6 | - * 命名格式:--color-<scope>-<role>-<state> | |
| 7 | - * <scope> 组件域:form / table-row / table-header / ... | |
| 8 | - * <role> 作用:bg(背景)/ fg(前景/字体)/ border | |
| 9 | - * <state> 状态:edit / readonly / hover / selected(无状态时省略) | |
| 10 | - * | |
| 11 | - * 约束: | |
| 12 | - * - 组件样式中只用 var(--color-xxx),禁止硬编码 hex / rgba | |
| 13 | - * - 修改色值只改本文件,不允许在组件级覆盖 | |
| 14 | - * - 新增 token 须先登记到 docs/06 § 4.1 / 4.2,再补到此处 | |
| 15 | - */ | |
| 16 | - | |
| 17 | -:root { | |
| 18 | - /* === 1. 全局调色板(与 Ant Design 主题对齐) === */ | |
| 19 | - --color-primary: #1890ff; | |
| 20 | - --color-success: #52c41a; | |
| 21 | - --color-warning: #faad14; | |
| 22 | - --color-error: #ff4d4f; | |
| 23 | - --color-text: rgba(0, 0, 0, 0.85); | |
| 24 | - --color-text-secondary: rgba(0, 0, 0, 0.45); | |
| 25 | - --color-border: #d9d9d9; | |
| 26 | - --color-bg-base: #f0f2f5; | |
| 27 | - | |
| 28 | - /* === 2. 组件级状态色(与 docs/06 § 4.2 一一对应) === */ | |
| 29 | - | |
| 30 | - /* form:输入框 / 备注框 / 时间框 / 下拉框共用 */ | |
| 31 | - --color-form-bg-edit: #ffffff; | |
| 32 | - --color-form-bg-readonly: #f1f2f8; | |
| 33 | - --color-form-bg-hover: #f5f5f5; /* 仅下拉框使用 */ | |
| 34 | - --color-form-fg: #000000; | |
| 35 | - | |
| 36 | - /* table */ | |
| 37 | - --color-table-row-bg-selected: #86d5fb; | |
| 38 | - --color-table-row-bg-hover: #fff7e6; | |
| 39 | - --color-table-row-bg-readonly: #f1f2f8; /* = rgb(241, 242, 248) */ | |
| 40 | - --color-table-row-fg: #000000; | |
| 41 | - --color-table-header-bg: #f5f5f5; | |
| 42 | - --color-table-header-fg: rgba(0, 0, 0, 0.85); /* = #000000D9 */ | |
| 43 | -} |