Commit 88f6dc2d2e01c15ecb179200bc778d5748e7e73c
1 parent
2f5b758d
project-init: simplify A0 SKILL + CLAUDE / index templates
- A0 SKILL: drop inline cross-platform dep-check script + OS install guides; dep check now auto-installs missing tools (was detect-only); trim 用 Edit/用 Bash 等工具名提示 - CLAUDE template: remove B 阶段流程 / 占位符约定 / 🚩 中断机制 / 🟡 软规则(S1,S2) / 硬规则#6 / 禁止项#2 等小节 - docs-01 index: drop trailing 填写说明
Showing
3 changed files
with
7 additions
and
98 deletions
skills/plan/project-init/SKILL.md
| @@ -9,9 +9,7 @@ allowed-tools: Read Write Glob Edit Skill Bash(node *) Bash(git init) Bash(git r | @@ -9,9 +9,7 @@ allowed-tools: Read Write Glob Edit Skill Bash(node *) Bash(git init) Bash(git r | ||
| 9 | 9 | ||
| 10 | ## 执行步骤 | 10 | ## 执行步骤 |
| 11 | 11 | ||
| 12 | -### A. 幂等复制模板文件(用 Glob + Read + Write,跨平台无 shell) | ||
| 13 | - | ||
| 14 | -对下表每个文件:先用 `Glob` 判断目标路径是否已存在;**已存在则跳过**;不存在则用 `Read` 读模板、用 `Write` **原样**写到目标路径(`Write` 会自动创建缺失的父目录)。 | 12 | +### A. 幂等复制模板文件 |
| 15 | 13 | ||
| 16 | | 模板 | 目标路径 | | 14 | | 模板 | 目标路径 | |
| 17 | |---|---| | 15 | |---|---| |
| @@ -20,63 +18,25 @@ allowed-tools: Read Write Glob Edit Skill Bash(node *) Bash(git init) Bash(git r | @@ -20,63 +18,25 @@ allowed-tools: Read Write Glob Edit Skill Bash(node *) Bash(git init) Bash(git r | ||
| 20 | | `${CLAUDE_SKILL_DIR}/templates/docs-04-stack-template.md` | `docs/04-技术规范.md` | | 18 | | `${CLAUDE_SKILL_DIR}/templates/docs-04-stack-template.md` | `docs/04-技术规范.md` | |
| 21 | | `${CLAUDE_SKILL_DIR}/templates/docs-08-initial-template.md` | `docs/08-模块任务管理.md` | | 19 | | `${CLAUDE_SKILL_DIR}/templates/docs-08-initial-template.md` | `docs/08-模块任务管理.md` | |
| 22 | 20 | ||
| 23 | -完成后,用 `Edit` 在 `docs/08-模块任务管理.md` 中勾选: | 21 | +完成后,在 `docs/08-模块任务管理.md` 中勾选: |
| 24 | - ` - [ ] 项目文件骨架已创建(CLAUDE.md + docs/01-需求清单/index.md + docs/04-技术规范.md)` | 22 | - ` - [ ] 项目文件骨架已创建(CLAUDE.md + docs/01-需求清单/index.md + docs/04-技术规范.md)` |
| 25 | 23 | ||
| 26 | -### B. 依赖检查(跨平台,只检测不自动安装) | ||
| 27 | - | ||
| 28 | -检测 git/mysql/node 是否在 PATH; 缺失则打印 OS 对应安装指引并停下. | ||
| 29 | - | ||
| 30 | -用 `Bash` 跑下面这段 `node` 脚本: | ||
| 31 | - | ||
| 32 | -```bash | ||
| 33 | -node -e ' | ||
| 34 | -const { spawnSync } = require("node:child_process"); | ||
| 35 | -const plat = process.platform; | ||
| 36 | -const has = (cmd) => { | ||
| 37 | - const r = plat === "win32" | ||
| 38 | - ? spawnSync("where", [cmd], { stdio: "ignore" }) | ||
| 39 | - : spawnSync("sh", ["-c", "command -v " + cmd], { stdio: "ignore" }); | ||
| 40 | - return r.status === 0; | ||
| 41 | -}; | ||
| 42 | -const guide = { | ||
| 43 | - darwin: { git: "xcode-select --install 或 brew install git", | ||
| 44 | - mysql: "brew install mysql", | ||
| 45 | - node: "brew install node 或见 https://nodejs.org" }, | ||
| 46 | - linux: { git: "sudo apt-get install git / sudo yum install git / sudo apk add git", | ||
| 47 | - mysql: "sudo apt-get install mysql-client / sudo yum install mysql", | ||
| 48 | - node: "sudo apt-get install nodejs 或见 https://nodejs.org" }, | ||
| 49 | - win32: { git: "winget install Git.Git 或见 https://git-scm.com/download/win", | ||
| 50 | - mysql: "winget install Oracle.MySQL 或见 https://dev.mysql.com/downloads/", | ||
| 51 | - node: "winget install OpenJS.NodeJS 或见 https://nodejs.org" }, | ||
| 52 | -}[plat] || {}; | ||
| 53 | -const tools = ["git", "mysql", "node"]; | ||
| 54 | -const missing = tools.filter((t) => !has(t)); | ||
| 55 | -const mark = (t) => (missing.includes(t) ? "✗" : "✓"); | ||
| 56 | -console.log("[project-init] 依赖检查 (" + plat + "): " + tools.map((t) => t + " " + mark(t)).join(" ")); | ||
| 57 | -if (missing.length) { | ||
| 58 | - console.error("[project-init] 缺失依赖,请先安装后重跑:"); | ||
| 59 | - for (const t of missing) console.error(" - " + t + " : " + (guide[t] || "见对应官网")); | ||
| 60 | - process.exit(1); | ||
| 61 | -} | ||
| 62 | -' | ||
| 63 | -``` | 24 | +### B. 依赖检查 |
| 64 | 25 | ||
| 65 | -- 退出码 `0`(全部 ✓)→ 进入步骤 C | ||
| 66 | -- 退出码 `1`(有缺失)→ 已打印缺失工具 + OS 安装指引,**停下**,提示用户安装后重跑本 skill | 26 | +检测 git/mysql/node 是否在 PATH; 缺失则自动安装;如果安装失败失败再停下并提示用户. |
| 67 | 27 | ||
| 68 | -完成后,用 `Edit` 在 `docs/08-模块任务管理.md` 中勾选: | 28 | +完成后,在 `docs/08-模块任务管理.md` 中勾选: |
| 69 | - ` - [ ] 依赖检查通过` | 29 | - ` - [ ] 依赖检查通过` |
| 70 | 30 | ||
| 71 | ### C. 初始化 Git(如尚未初始化) | 31 | ### C. 初始化 Git(如尚未初始化) |
| 72 | 32 | ||
| 73 | -用 `Bash` 执行 `git rev-parse --is-inside-work-tree`。 | 33 | +执行 `git rev-parse --is-inside-work-tree`。 |
| 74 | - 退出码 `0` 且 stdout 为 `true` → 已在 git 仓库中,跳过。 | 34 | - 退出码 `0` 且 stdout 为 `true` → 已在 git 仓库中,跳过。 |
| 75 | - 非 `0` → 用 `Bash` 执行 `git init`。 | 35 | - 非 `0` → 用 `Bash` 执行 `git init`。 |
| 76 | 36 | ||
| 77 | 不要用 `.git/` 目录是否存在判断:git worktree / 子模块 / 某些托管环境会使用 `.git` 文件,目录探测会误判。 | 37 | 不要用 `.git/` 目录是否存在判断:git worktree / 子模块 / 某些托管环境会使用 `.git` 文件,目录探测会误判。 |
| 78 | 38 | ||
| 79 | -完成后,用 `Edit` 在 `docs/08-模块任务管理.md` 中勾选(A0 子项 + A0 顶层): | 39 | +在 `docs/08-模块任务管理.md` 中勾选(A0 子项 + A0 顶层): |
| 80 | - ` - [ ] Git 已初始化` | 40 | - ` - [ ] Git 已初始化` |
| 81 | - `- [ ] A0 项目初始化 — project-init` | 41 | - `- [ ] A0 项目初始化 — project-init` |
| 82 | 42 |
skills/plan/project-init/templates/CLAUDE-template.md
| @@ -13,20 +13,6 @@ | @@ -13,20 +13,6 @@ | ||
| 13 | 13 | ||
| 14 | --- | 14 | --- |
| 15 | 15 | ||
| 16 | -## 🔄 B é˜¶æ®µå¼€å‘æµç¨‹ | ||
| 17 | - | ||
| 18 | -B 阶段由 `/erp-workflow:coding-start` å¯åЍ `workflows/coding.mjs`:按模å—循环跑 spec → plan → tdd → verify → reviewï¼ˆåŒæž„ `featureLoop`),åŽç«¯æ¯æ¨¡å—一个里程碑 tag,å‰ç«¯æ•´ä½“一个里程碑 tagã€‚é‡Œç¨‹ç¢‘å—æ®µä¸Žå项清å•记录在 `docs/08 § 二`(åŽç«¯ï¼‰/ `§ 三`(å‰ç«¯ï¼‰ï¼›é˜¶æ®µå®Œæˆåˆ¤å®šä»¥ `里程碑:` / `整体里程碑:` å—æ®µ + 本地 `git tag -l 'milestone/<id>'` 为准,å项勾选åªä½œå¯è§†åŒ–进度。详细路由 / testGate / 䏿–è¡Œä¸ºè§ `README.md` 与 `workflows/coding.mjs`。 | ||
| 19 | - | ||
| 20 | ---- | ||
| 21 | - | ||
| 22 | -## ðŸ·ï¸ å ä½ç¬¦ç»Ÿä¸€çº¦å®š | ||
| 23 | - | ||
| 24 | -项目文档里两ç§äººå·¥å¡«å†™å ä½ï¼š | ||
| 25 | -- `ã€äººå·¥å¡«å†™ï¼š<简çŸè¯´æ˜Ž>】` — ä»… A 阶段文档;B 阶段 plan/spec ç¦æ¢å‡ºçŽ°ï¼ŒæŸ¥ä¸åˆ°çœŸå€¼æ—¶ç”¨ `AskUserQuestion` 问用户。 | ||
| 26 | -- `TBD(<责任人>)` — 由对应 skill / `coding.mjs` stage 自动就地补填(如 `TBD(A3 自动补)`);模å—å®ŒæˆæŠ¥å‘Š § ⑦ 检查 `TBD(CC è¡¥)` 残留。 | ||
| 27 | - | ||
| 28 | ---- | ||
| 29 | - | ||
| 30 | ## 📠编ç è¡Œä¸ºçº¦æŸ | 16 | ## 📠编ç è¡Œä¸ºçº¦æŸ |
| 31 | 17 | ||
| 32 | ### ä½ å¿…é¡»åšçš„ ✅ | 18 | ### ä½ å¿…é¡»åšçš„ ✅ |
| @@ -36,12 +22,10 @@ B 阶段由 `/erp-workflow:coding-start` å¯åЍ `workflows/coding.mjs`:按模å | @@ -36,12 +22,10 @@ B 阶段由 `/erp-workflow:coding-start` å¯åЍ `workflows/coding.mjs`:按模å | ||
| 36 | 3. **æ¯ä¸ªåŽç«¯æŽ¥å£** 必须先在 `docs/05-API接å£å¥‘约.md` 定义,å†ç¼–ç 实现 | 22 | 3. **æ¯ä¸ªåŽç«¯æŽ¥å£** 必须先在 `docs/05-API接å£å¥‘约.md` 定义,å†ç¼–ç 实现 |
| 37 | 4. **æ¯ä¸ªåŠŸèƒ½å¯è¿½æº¯åˆ° `REQ-XXX-NNN`**——commit tag + ä»£ç æ³¨é‡Šï¼ˆå¦‚ `// REQ-SYS-001: 用户登录`)+ plan/spec 文件åå‡ç”¨æ¤ tag | 23 | 4. **æ¯ä¸ªåŠŸèƒ½å¯è¿½æº¯åˆ° `REQ-XXX-NNN`**——commit tag + ä»£ç æ³¨é‡Šï¼ˆå¦‚ `// REQ-SYS-001: 用户登录`)+ plan/spec 文件åå‡ç”¨æ¤ tag |
| 38 | 5. **é‡åˆ°è·¨æ¨¡å—改动**(动到éžå½“剿¨¡å—的代ç )——按 § 🟡 软规则 **S2** 执行(å…许改,但必须留痕) | 24 | 5. **é‡åˆ°è·¨æ¨¡å—改动**(动到éžå½“剿¨¡å—的代ç )——按 § 🟡 软规则 **S2** 执行(å…许改,但必须留痕) |
| 39 | -6. **é‡åˆ°æŠ€æœ¯æ ˆå¤–组件引入**(`docs/04 § é›¶` æŠ€æœ¯æ ˆè¡¨å¤–çš„æ¡†æž¶ / ä¸é—´ä»¶ / 关键库),按 § 🟡 软规则 **S1** 执行(å…许引入,但必须先 AskUserQuestion) | ||
| 40 | 25 | ||
| 41 | ### ä½ ç¦æ¢åšçš„ 🚫 | 26 | ### ä½ ç¦æ¢åšçš„ 🚫 |
| 42 | 27 | ||
| 43 | 1. **主会è¯ç›´æŽ¥ `mysql -e` 跑业务 DDL**(åªè¯»æŸ¥è¯¢ / 临时本地调试除外)——业务 schema 必须走 `sql/migrations/V_n__*.sql`,详è§ä¸‹æ–¹ Schema 演化规约 | 28 | 1. **主会è¯ç›´æŽ¥ `mysql -e` 跑业务 DDL**(åªè¯»æŸ¥è¯¢ / 临时本地调试除外)——业务 schema 必须走 `sql/migrations/V_n__*.sql`,详è§ä¸‹æ–¹ Schema 演化规约 |
| 44 | -2. **手动 Edit `docs/08 § 二/§ 三` çš„ `里程碑:` / `整体里程碑:` å—æ®µ**,必须è¦ç”± `coding.mjs` çš„ milestone stage 自动回写 | ||
| 45 | 29 | ||
| 46 | ### Schema 演化规约(Flyway migration) | 30 | ### Schema 演化规约(Flyway migration) |
| 47 | 31 | ||
| @@ -77,34 +61,3 @@ B 阶段由 `/erp-workflow:coding-start` å¯åЍ `workflows/coding.mjs`:按模å | @@ -77,34 +61,3 @@ B 阶段由 `/erp-workflow:coding-start` å¯åЍ `workflows/coding.mjs`:按模å | ||
| 77 | | `test` | **åªåŠ¨æµ‹è¯•ä»£ç **——补用例 / ä¿® fixture,ä¸ç¢°å®žçް | | 61 | | `test` | **åªåŠ¨æµ‹è¯•ä»£ç **——补用例 / ä¿® fixture,ä¸ç¢°å®žçް | |
| 78 | | `chore` | **æµç¨‹ç»´æŠ¤**——构建 / ä¾èµ– / 工具 / è¯æ®æ¡£æ¡ˆ / 里程碑元数æ®ç‰éžä¸šåŠ¡åŠ¨ä½œ | | 62 | | `chore` | **æµç¨‹ç»´æŠ¤**——构建 / ä¾èµ– / 工具 / è¯æ®æ¡£æ¡ˆ / 里程碑元数æ®ç‰éžä¸šåŠ¡åŠ¨ä½œ | |
| 79 | 63 | ||
| 80 | ---- | ||
| 81 | - | ||
| 82 | -## 🚩 䏿–机制 | ||
| 83 | - | ||
| 84 | -功能循环(æ¯ä¸ªåŠŸèƒ½ REQ-XXX çš„ Brainstorm → Plan → TDD → Verify → AI 自审)默认 **é™é»˜ç¼–程**,但触å‘以下任何一æ¡å¿…é¡»**立刻åœä¸‹ã€è®°å½•åŽŸå› ã€ç‰äººå†³ç–**,ä¸å¾—自行绕过: | ||
| 85 | - | ||
| 86 | -| # | 䏿– | 例å | | ||
| 87 | -| - | --- | --- | | ||
| 88 | -| 1 | **测试åå¤å¤±è´¥** | åŒä¸€æµ‹è¯•åŒä¸€åŠŸèƒ½å†…è¿žç» **10 次**ä¿®å¤å¤±è´¥ | | ||
| 89 | -| 2 | **è¦æ”¹å¯†é’¥ / 账密 / 包å** | 密钥 / 账密 在 `.env.local`ã€åŒ…å / 命å空间 / 端å£ç‰åœ¨ `config-vars.yaml` é‡Œç”±äººå·¥æ ‡æ³¨å¿…é¡»å¡«çš„å—æ®µï¼ˆè§„åˆ™è§ `docs/07-环境é…ç½®.md`) | | ||
| 90 | -| 3 | **外部接å£ä¸å¯è¾¾** | 第三方 API æ— æ³•è¿žæŽ¥ã€è¯ä¹¦å¤±æ•ˆç‰çŽ¯å¢ƒé—®é¢˜ï¼Œå¹¶æ— æ³•è‡ªè¡Œè§£å†³ | | ||
| 91 | - | ||
| 92 | -> 其余需è¦äººç±»åˆ¤æ–的场景一律走普通 `AskUserQuestion` Q&A,ä¸ä¸æ–ã€ä¸å†™ Blocker 文件。 | ||
| 93 | - | ||
| 94 | -**触å‘䏿–时的固定动作:** | ||
| 95 | - | ||
| 96 | -1. `coding.mjs` å代ç†åœ¨å½“å‰åŠŸèƒ½çš„ plan æ–‡ä»¶é‡Œè¿½åŠ ä¸€èŠ‚ `## 🚩 Blocker`ï¼ˆè®°å½•åŽŸå› / 阻塞点),并 throw 进入 HALT ç»ˆæ¢æ€ | ||
| 97 | -2. 整阶段 fail-fast:halt åŽåœæ¢åŽç»æ‰€æœ‰æ¨¡å—/功能的é™é»˜æ‰§è¡Œ | ||
| 98 | -3. Workflow 返回结构化诊æ–(halt åŽŸå› + blocker 文件路径),ç‰äººä¿®å¤åŽé‡è·‘ `/erp-workflow:coding-start` 从æ–点ç»è·‘ | ||
| 99 | - | ||
| 100 | ---- | ||
| 101 | - | ||
| 102 | -## 🟡 软规则(å…许继ç»ï¼Œä½†æœ‰å¼ºåˆ¶åŽç»åŠ¨ä½œï¼‰ | ||
| 103 | - | ||
| 104 | -以下情况 **ä¸è§¦å‘䏿–**,CC å¯è‡ªè¡Œç»§ç»æŽ¨è¿›ï¼Œä½†å¿…须在约定ä½ç½®ç•™ç—•,模å—å®Œæˆæ—¶ç»Ÿä¸€å®¡è®¡ã€‚ | ||
| 105 | - | ||
| 106 | -| # | 软规则 | å…许动作 | 强制åŽç» | | ||
| 107 | -| - | ----- | ------- | ------- | | ||
| 108 | -| S1 | **æŠ€æœ¯æ ˆå¤–ç»„ä»¶å¼•å…¥** | 用 `AskUserQuestion` 给用户三选一:接å—引入 / æ¢æ–¹æ¡ˆ / æ‹’ç» | â‘ **接å—** → åŒä¼šè¯ç›´æŽ¥åœ¨ `docs/04 § é›¶` è¿½åŠ ä¸€è¡Œ → ç»§ç»æµç¨‹ â‘¡ **æ¢æ–¹æ¡ˆ / æ‹’ç»** → 视为常规æ§ä¹‰æ¾„æ¸…ï¼Œç»§ç» Q&A æ”¶æ•› â‘¢ ä¸å†™ Blockerã€ä¸ä¸æ–æµç¨‹ | | ||
| 109 | -| S2 | **è·¨æ¨¡å—æ”¹åЍ** | **é»˜è®¤ä¸æ”¹**ï¼Œä»…ä¸ºå½“å‰æ¨¡å—实现所必需时å…许修改 | `coding.mjs` çš„ cross-module stage 在模å—å¾ªçŽ¯å†…è®°å½•æ”¹åŠ¨å¹¶è¡¥ã€ŒåŽŸå› / å½±å“评估ã€ï¼Œã€Œè·¨æ¨¡å—改动ã€èŠ‚å®Œæ•´è´´å…¥ã€Šæ¨¡å—å®ŒæˆæŠ¥å‘Šã€‹ | | ||
| 110 | - |
skills/plan/project-init/templates/docs-01-index-template.md
| @@ -8,7 +8,3 @@ | @@ -8,7 +8,3 @@ | ||
| 8 | |----------|----------|--------------------| | 8 | |----------|----------|--------------------| |
| 9 | | 【人工填写:模块代码】 | 【人工填写:模块名称】 | 【人工填写:核心功能点】 | | 9 | | 【人工填写:模块代码】 | 【人工填写:模块名称】 | 【人工填写:核心功能点】 | |
| 10 | | SYS | 系统管理 | 用户/角色/权限/部门/字典 等 | | 10 | | SYS | 系统管理 | 用户/角色/权限/部门/字典 等 | |
| 11 | - | ||
| 12 | -## 填写说明 | ||
| 13 | - | ||
| 14 | -填完模块行后运行 `/erp-workflow:plan-start`。 |