Commit 18c17c4ed72f3af01ec5829eae475536db509867
1 parent
f55599a7
schema: 匈牙利前缀图例补 d=decimal(i/s/t/b/d,小数列前缀 d 统一 decimal(18,6))
Showing
3 changed files
with
3 additions
and
3 deletions
README.md
| @@ -135,7 +135,7 @@ erp-workflow-plugin/ | @@ -135,7 +135,7 @@ erp-workflow-plugin/ | ||
| 135 | | A0 | `project-init` | • **依赖检查**:检测 git / mysql / node 是否在 PATH,缺失则按 OS 自动安装,装不上再停下提示用户<br>• 空目录初始化:用 Read/Write/Glob 工具拷模板创建 CLAUDE.md / docs/01/index.md / docs/08<br>• `git init` | `plan-start` | | 135 | | A0 | `project-init` | • **依赖检查**:检测 git / mysql / node 是否在 PATH,缺失则按 OS 自动安装,装不上再停下提示用户<br>• 空目录初始化:用 Read/Write/Glob 工具拷模板创建 CLAUDE.md / docs/01/index.md / docs/08<br>• `git init` | `plan-start` | |
| 136 | | A1 | `scope-lock` | • 引导填项目概述 / 技术栈 / 需求索引<br>• 按 `docs/01-需求清单/<module>/{_module.md, <req_id>.md}` 子目录结构生成 REQ 卡片(req_id = `<模块代码>-<子模块代码>-<功能名>`,如 `USR-UserInfo-Login`;CC 据 index.md 填 `{{req_id/title/goal/rules/constraints/acceptance}}` 6 个占位,模板其余内容含输入/输出示例字段表原样复制)<br>• **A1 终结校验**:REQ 6 个占位均填真实数据、无 `{{` 残留、`config-vars.yaml` **全部配置**(包名 / 端口 / 初始账号 + DB 凭据 / 密钥占位)已锁、各 stack 的 build/lint/unit/e2e 命令写入 docs/04 § 零;缺失则在此(Plan 期)用 `AskUserQuestion` 问清(敏感凭据由用户自填,不进会话)<br>• 据模板直接 `Write` 生成 `_module.md` / `<req_id>.md`<br>• 终结校验通过后**自动**调用 `Skill(skeleton-gen)` 进入 A2(不停下) | A0 | | 136 | | A1 | `scope-lock` | • 引导填项目概述 / 技术栈 / 需求索引<br>• 按 `docs/01-需求清单/<module>/{_module.md, <req_id>.md}` 子目录结构生成 REQ 卡片(req_id = `<模块代码>-<子模块代码>-<功能名>`,如 `USR-UserInfo-Login`;CC 据 index.md 填 `{{req_id/title/goal/rules/constraints/acceptance}}` 6 个占位,模板其余内容含输入/输出示例字段表原样复制)<br>• **A1 终结校验**:REQ 6 个占位均填真实数据、无 `{{` 残留、`config-vars.yaml` **全部配置**(包名 / 端口 / 初始账号 + DB 凭据 / 密钥占位)已锁、各 stack 的 build/lint/unit/e2e 命令写入 docs/04 § 零;缺失则在此(Plan 期)用 `AskUserQuestion` 问清(敏感凭据由用户自填,不进会话)<br>• 据模板直接 `Write` 生成 `_module.md` / `<req_id>.md`<br>• 终结校验通过后**自动**调用 `Skill(skeleton-gen)` 进入 A2(不停下) | A0 | |
| 137 | | A2 | `skeleton-gen` | • 生成架构文档:docs/04 § 一+<br>• 生成跨平台工具脚本:`scripts/*.mjs`(**无 chmod**;凭据 / 配置统一在 A1 产出的 config-vars.yaml)<br>• 据 `gitignore-append-template` 用 Read/Write 并入项目 .gitignore | `plan-start` | | 137 | | A2 | `skeleton-gen` | • 生成架构文档:docs/04 § 一+<br>• 生成跨平台工具脚本:`scripts/*.mjs`(**无 chmod**;凭据 / 配置统一在 A1 产出的 config-vars.yaml)<br>• 据 `gitignore-append-template` 用 Read/Write 并入项目 .gitignore | `plan-start` | |
| 138 | -| A3 | `db-design-gen` | • 套用固定 ERP 约定(列前缀 `i/s/t/b`、`iIncrement` 主键、`sBrandsId`/`sSubsidiaryId` 租户列)+ 每表自动补标准列(11 列基础:`iIncrement`/`sId`/`sBrandsId`/`sSubsidiaryId`/`sMakePerson`/`tCreateDate`/`tUpdateDate`/`iOrder`/`bInvalid`/`sFormId`/`sMemo`;主表额外加 4 审核列 `bCheck`/`tCheckDate`/`sCheckPerson`/`sStatus`(共 15 列),从表额外加 `sParentId` 紧随 `sId`(共 12 列);其中 `sId`/`sBrandsId`/`sSubsidiaryId`/`sMakePerson`/`sCheckPerson` 为 varchar(50) NOT NULL)从 docs/01 REQ 卡片正向设计 `docs/03-数据库设计文档.md`(schema SSoT)<br>• 回填 REQ 卡片依赖表(`TBD(A3 自动补)` → 实际表名)<br>• **停下**等人工审阅 docs/03,审阅完毕用 `/plan-start` 续进 A4 | A2 | | 138 | +| A3 | `db-design-gen` | • 套用固定 ERP 约定(列前缀 `i/s/t/b/d`、`iIncrement` 主键、`sBrandsId`/`sSubsidiaryId` 租户列)+ 每表自动补标准列(11 列基础:`iIncrement`/`sId`/`sBrandsId`/`sSubsidiaryId`/`sMakePerson`/`tCreateDate`/`tUpdateDate`/`iOrder`/`bInvalid`/`sFormId`/`sMemo`;主表额外加 4 审核列 `bCheck`/`tCheckDate`/`sCheckPerson`/`sStatus`(共 15 列),从表额外加 `sParentId` 紧随 `sId`(共 12 列);其中 `sId`/`sBrandsId`/`sSubsidiaryId`/`sMakePerson`/`sCheckPerson` 为 varchar(50) NOT NULL)从 docs/01 REQ 卡片正向设计 `docs/03-数据库设计文档.md`(schema SSoT)<br>• 回填 REQ 卡片依赖表(`TBD(A3 自动补)` → 实际表名)<br>• **停下**等人工审阅 docs/03,审阅完毕用 `/plan-start` 续进 A4 | A2 | |
| 139 | | A4 | `db-init` | • LLM 解析 docs/03 → `sql/migrations/V1__initial_schema.sql`(DDL only)<br>• `node ${CLAUDE_PLUGIN_ROOT}/lib/validate-ddl.mjs` 校验 DDL ↔ docs/03(4 维:表/列名/列类型/索引),fail-closed<br>• `node ${CLAUDE_PLUGIN_ROOT}/lib/apply-ddl.mjs config-vars.yaml V1.sql`(读取 config-vars.yaml database: 段 + mysql2 apply) | A3 | | 139 | | A4 | `db-init` | • LLM 解析 docs/03 → `sql/migrations/V1__initial_schema.sql`(DDL only)<br>• `node ${CLAUDE_PLUGIN_ROOT}/lib/validate-ddl.mjs` 校验 DDL ↔ docs/03(4 维:表/列名/列类型/索引),fail-closed<br>• `node ${CLAUDE_PLUGIN_ROOT}/lib/apply-ddl.mjs config-vars.yaml V1.sql`(读取 config-vars.yaml database: 段 + mysql2 apply) | A3 | |
| 140 | | A5 | `downstream-gen` | • 一次性生成 docs/02 / docs/05<br>• 回填 REQ 卡片依赖接口(`TBD(A5 自动补)` → 实际 endpoint)<br>• 追加模块清单到 docs/08 § 二<br>• **docs/05 + docs/02 评审闸**:用 `AskUserQuestion` 让用户确认 API 端点/字段无误 + 构建顺序可接受,未确认不勾 A5<br>• **prototype/ 门禁 + 推导 FE 清单写 docs/08 § 三**(原 A6 已并入;无 prototype 则问「无前端」→ § 三 留空)<br>• 最终占位符 + 结构残留扫描 | A4 | | 140 | | A5 | `downstream-gen` | • 一次性生成 docs/02 / docs/05<br>• 回填 REQ 卡片依赖接口(`TBD(A5 自动补)` → 实际 endpoint)<br>• 追加模块清单到 docs/08 § 二<br>• **docs/05 + docs/02 评审闸**:用 `AskUserQuestion` 让用户确认 API 端点/字段无误 + 构建顺序可接受,未确认不勾 A5<br>• **prototype/ 门禁 + 推导 FE 清单写 docs/08 § 三**(原 A6 已并入;无 prototype 则问「无前端」→ § 三 留空)<br>• 最终占位符 + 结构残留扫描 | A4 | |
| 141 | 141 |
skills/plan/db-design-gen/SKILL.md
| @@ -26,7 +26,7 @@ allowed-tools: Read Write Edit Grep Glob | @@ -26,7 +26,7 @@ allowed-tools: Read Write Edit Grep Glob | ||
| 26 | 26 | ||
| 27 | 基于步骤 A 读到的 REQ + 命名规范,**正向推导**业务实体 → 表 + 字段 + 索引 + 语义引用关系。要求: | 27 | 基于步骤 A 读到的 REQ + 命名规范,**正向推导**业务实体 → 表 + 字段 + 索引 + 语义引用关系。要求: |
| 28 | 28 | ||
| 29 | -1. 严格套用 `docs/04` 命名规范 + 匈牙利列前缀(`i`=int / `s`=varchar / `t`=datetime / `b`=bit);金额 / 数量等小数列统一用 `decimal(18,6)`(固定精度 18、标度 6),除非某 REQ 明确要求其他精度/标度(按 REQ 并在该列业务含义注明偏离) | 29 | +1. 严格套用 `docs/04` 命名规范 + 匈牙利列前缀(`i`=int / `s`=varchar / `t`=datetime / `b`=bit / `d`=decimal);金额 / 数量等小数列(前缀 `d`)统一用 `decimal(18,6)`(固定精度 18、标度 6),除非某 REQ 明确要求其他精度/标度(按 REQ 并在该列业务含义注明偏离) |
| 30 | 2. **主键**:标准列 `iIncrement` int 主键。REQ 明确要求不同主键(复合主键 / UUID / 业务主键)时按 REQ,并在该表业务注记里注明偏离原因 | 30 | 2. **主键**:标准列 `iIncrement` int 主键。REQ 明确要求不同主键(复合主键 / UUID / 业务主键)时按 REQ,并在该表业务注记里注明偏离原因 |
| 31 | 3. **语义引用关系**:依据 REQ 中的引用关系(如「订单引用客户」),列出 `from→to`(如 `sCustomerId → 客户表.sId`);仅语义、不建 FK 约束、不写 `ON DELETE` / `ON UPDATE`,应用层维护一致性 | 31 | 3. **语义引用关系**:依据 REQ 中的引用关系(如「订单引用客户」),列出 `from→to`(如 `sCustomerId → 客户表.sId`);仅语义、不建 FK 约束、不写 `ON DELETE` / `ON UPDATE`,应用层维护一致性 |
| 32 | 4. **索引**:根据 REQ 的查询模式推导业务索引;语义引用列默认建索引;租户隔离列 `sBrandsId` / `sSubsidiaryId`(标准列)按业务查询模式建组合索引。 | 32 | 4. **索引**:根据 REQ 的查询模式推导业务索引;语义引用列默认建索引;租户隔离列 `sBrandsId` / `sSubsidiaryId`(标准列)按业务查询模式建组合索引。 |
skills/plan/db-design-gen/templates/docs-03-header-template.md
| @@ -6,7 +6,7 @@ | @@ -6,7 +6,7 @@ | ||
| 6 | 6 | ||
| 7 | ## 项目标准列约定 | 7 | ## 项目标准列约定 |
| 8 | 8 | ||
| 9 | -下文每张业务表的字段清单都自动包含以下 **11 个基础标准列**(匈牙利前缀 `i` int / `s` varchar / `t` datetime / `b` bit),所有表通用;在此之上按表位追加专属标准列:**主表**额外加 **4 个审核标准列**(共 15 列),**从表**额外加 **1 个标准列 `sParentId`**(共 12 列)。渲染时由 `docs-03-table-template.md` 模板内置原样输出。 | 9 | +下文每张业务表的字段清单都自动包含以下 **11 个基础标准列**(匈牙利前缀 `i` int / `s` varchar / `t` datetime / `b` bit / `d` decimal),所有表通用;在此之上按表位追加专属标准列:**主表**额外加 **4 个审核标准列**(共 15 列),**从表**额外加 **1 个标准列 `sParentId`**(共 12 列)。渲染时由 `docs-03-table-template.md` 模板内置原样输出。 |
| 10 | 10 | ||
| 11 | 主表 = 「表清单」中的**第一张表**;从表 = 其余各表。 | 11 | 主表 = 「表清单」中的**第一张表**;从表 = 其余各表。 |
| 12 | 12 |