Commit 88f6dc2d2e01c15ecb179200bc778d5748e7e73c

Authored by zichun
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 填写说明
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  
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 18 | `${CLAUDE_SKILL_DIR}/templates/docs-04-stack-template.md` | `docs/04-技术规范.md` |
21 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 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 31 ### C. 初始化 Git(如尚未初始化)
72 32  
73   -用 `Bash` 执行 `git rev-parse --is-inside-work-tree`。
  33 +执行 `git rev-parse --is-inside-work-tree`。
74 34 - 退出码 `0` 且 stdout 为 `true` → 已在 git 仓库中,跳过。
75 35 - 非 `0` → 用 `Bash` 执行 `git init`。
76 36  
77 37 不要用 `.git/` 目录是否存在判断:git worktree / 子模块 / 某些托管环境会使用 `.git` 文件,目录探测会误判。
78 38  
79   -完成后,用 `Edit` 在 `docs/08-模块任务管理.md` 中勾选(A0 子项 + A0 顶层):
  39 +在 `docs/08-模块任务管理.md` 中勾选(A0 子项 + A0 顶层):
80 40 - ` - [ ] Git 已初始化`
81 41 - `- [ ] A0 项目初始化 — project-init`
82 42  
... ...
skills/plan/project-init/templates/CLAUDE-template.md
... ... @@ -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 22 3. **æ¯ä¸ªåŽç«¯æŽ¥å£** 必须先在 `docs/05-API接å£å¥‘约.md` 定义,å†ç¼–ç å®žçް
37 23 4. **æ¯ä¸ªåŠŸèƒ½å¯è¿½æº¯åˆ° `REQ-XXX-NNN`**——commit tag + ä»£ç æ³¨é‡Šï¼ˆå¦‚ `// REQ-SYS-001: 用户登录`)+ plan/spec 文件åå‡ç”¨æ­¤ tag
38 24 5. **é‡åˆ°è·¨æ¨¡å—改动**(动到éžå½“剿¨¡å—的代ç ï¼‰â€”—按 § 🟡 软规则 **S2** 执行(å…许改,但必须留痕)
39   -6. **é‡åˆ°æŠ€æœ¯æ ˆå¤–组件引入**(`docs/04 § é›¶` 技术栈表外的框架 / 中间件 / 关键库),按 § 🟡 软规则 **S1** 执行(å…许引入,但必须先 AskUserQuestion)
40 25  
41 26 ### ä½ ç¦æ­¢åšçš„ 🚫
42 27  
43 28 1. **主会è¯ç›´æŽ¥ `mysql -e` 跑业务 DDL**(åªè¯»æŸ¥è¯¢ / 临时本地调试除外)——业务 schema 必须走 `sql/migrations/V_n__*.sql`,详è§ä¸‹æ–¹ Schema 演化规约
44   -2. **手动 Edit `docs/08 § 二/§ 三` çš„ `里程碑:` / `整体里程碑:` 字段**,必须è¦ç”± `coding.mjs` çš„ milestone stage 自动回写
45 29  
46 30 ### Schema 演化规约(Flyway migration)
47 31  
... ... @@ -77,34 +61,3 @@ B 阶段由 `/erp-workflow:coding-start` å¯åЍ `workflows/coding.mjs`:按模å
77 61 | `test` | **åªåŠ¨æµ‹è¯•ä»£ç **——补用例 / ä¿® fixture,ä¸ç¢°å®žçް |
78 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 8 |----------|----------|--------------------|
9 9 | 【人工填写:模块代码】 | 【人工填写:模块名称】 | 【人工填写:核心功能点】 |
10 10 | SYS | 系统管理 | 用户/角色/权限/部门/字典 等 |
11   -
12   -## 填写说明
13   -
14   -填完模块行后运行 `/erp-workflow:plan-start`。
... ...