Commit 0886fbde59a992c8ce0c15cc5a76a7d400f4830c
1 parent
26f7bfd7
feat(lite): merge module-start + frontend-start into phase-driver
Showing
5 changed files
with
153 additions
and
155 deletions
skills/coding/frontend-start/SKILL.md deleted
| 1 | ---- | ||
| 2 | -name: frontend-start | ||
| 3 | -description: 前端阶段循环入口。AI 自主推导 FE 业务功能清单写入 docs/08 § 三(已有则加载),定位未完成 FE 派发 fe-feature-brainstorm 或 test-gate(前端阶段)。幂等可重入。 | ||
| 4 | -user-invocable: false | ||
| 5 | -allowed-tools: Read Write Edit Skill Glob Grep AskUserQuestion Bash(git branch *) Bash(git checkout *) Bash(git rev-parse *) Bash(git status *) Bash(git symbolic-ref *) Bash(git tag *) Bash(find *) Bash(ls *) | ||
| 6 | ---- | ||
| 7 | - | ||
| 8 | -**所有输出必须使用中文。** | ||
| 9 | - | ||
| 10 | -# frontend-start | ||
| 11 | - | ||
| 12 | -## 执行步骤 | ||
| 13 | - | ||
| 14 | -### 步骤 1:检查 prototype | ||
| 15 | - | ||
| 16 | -项目根 `prototype/` 至少含 1 个 `*.html` → 通过,进入步骤 2;缺失 → 用 `AskUserQuestion` 让用户补齐 prototype 后重跑入口,停止。 | ||
| 17 | - | ||
| 18 | -### 步骤 2:准备 FE 清单 | ||
| 19 | - | ||
| 20 | -读 docs/08 § 三 "功能:" 项: | ||
| 21 | - | ||
| 22 | -- 已有 `- [ ] FE-NN ...` 或 `- [x] FE-NN ...` 行 → **加载**:逐行解析得 `fe_list[]`,每项 `{ fe_id, name, status, associated_reqs[], associated_prototypes[] }`。行格式不符 → 硬停打印问题行 | ||
| 23 | -- 仅有 HTML 注释占位(无 FE bullet)→ **推导**: | ||
| 24 | - 1. 读 `prototype/**/*.html` + `docs/01-需求清单/**/*.md` + `docs/05-API接口契约.md` | ||
| 25 | - 2. 以**业务功能**为单位拆分(同流程多屏可合 1 FE;一 HTML 多功能可拆多 FE;无 UI 的 REQ 不产生 FE)。每个 FE:`{ fe_id: FE-NN, name, associated_reqs[], associated_prototypes[] }`,prototype 路径可带 anchor 区分文件内多区域 | ||
| 26 | - 3. **写入 § 三 "功能:" 项**(替换占位 HTML 注释),行格式: | ||
| 27 | - | ||
| 28 | - ``` | ||
| 29 | - - [ ] FE-NN 功能名 | 关联 REQ:REQ-A, REQ-B | 关联原型:prototype/<file>.html | ||
| 30 | - ``` | ||
| 31 | - | ||
| 32 | - 保留 `- 整体里程碑: —` 不动;写入后解析得 `fe_list[]`,继续步骤 3 | ||
| 33 | - | ||
| 34 | -### 步骤 3:检查前端里程碑状态 | ||
| 35 | - | ||
| 36 | -读 § 三 `整体里程碑:` 字段并 `git tag -l 'milestone/frontend-phase'` 校验: | ||
| 37 | - | ||
| 38 | -- 字段为 `milestone/frontend-phase` 且 tag 存在 → 打印"前端阶段已完成"并停(冗余保护,正常由 coding-start 拦掉) | ||
| 39 | -- 否则(`—` 或 tag 不存在)→ 进入步骤 4 | ||
| 40 | - | ||
| 41 | -### 步骤 4:切到 frontend-phase 分支 | ||
| 42 | - | ||
| 43 | -目标分支 `frontend-phase`,分支管理逻辑同 module-start 步骤 3:已在 → 继续;存在 → checkout;不存在 → 切本地默认分支后 `git checkout -b frontend-phase`。任何错误硬停 + 诊断,不自动 stash / 覆盖。 | ||
| 44 | - | ||
| 45 | -### 步骤 5:识别已完成的 FE | ||
| 46 | - | ||
| 47 | -扫 `docs/superpowers/reviews/<日期>-FE-*.md`,`verdict: approve` 的收入 `done_fes[]`。每次进入重新计算,不缓存。 | ||
| 48 | - | ||
| 49 | -### 步骤 6:报告进度 | ||
| 50 | - | ||
| 51 | -按 `${CLAUDE_SKILL_DIR}/templates/frontend-start-banner-template.md` 渲染:当前分支 + prototype HTML 数 + FE 进度(done / total)+ 下一 FE。 | ||
| 52 | - | ||
| 53 | -### 步骤 7:进入下一环节 | ||
| 54 | - | ||
| 55 | -- 存在未完成 FE → `Skill(fe-feature-brainstorm)`,参数 `{ fe_id, name, associated_reqs[], associated_prototypes[] }` | ||
| 56 | -- 全 FE 完成 → `Skill(test-gate)` 带 `phase=frontend` | ||
| 57 | - | ||
| 58 | -## 参考 | ||
| 59 | - | ||
| 60 | -- `${CLAUDE_SKILL_DIR}/templates/frontend-start-banner-template.md` | ||
| 61 | -- `docs/08-模块任务管理.md § 三`(前端阶段元数据:整体里程碑 + FE 清单) | ||
| 62 | -- `prototype/`(HTML mockup,FE 拆分粒度与文件数无关) | ||
| 63 | -- `docs/superpowers/reviews/*-FE-*.md`(verdict=approve 即完成) | ||
| 64 | -- 上游:`coding-start`(步骤 4 派发,仅当后端完成 + 前端未完成);`fe-feature-review` approve 后回调 | ||
| 65 | -- 下游:`fe-feature-brainstorm`(每 FE)/ `test-gate`(phase=frontend,全完成时) | ||
| 66 | -- 前置门禁:本 skill 步骤 1 自承(coding-start 不做) |
skills/coding/frontend-start/templates/frontend-start-banner-template.md deleted
skills/coding/module-start/SKILL.md deleted
| 1 | ---- | ||
| 2 | -name: module-start | ||
| 3 | -description: 后端模块循环入口。定位当前未完成(未打里程碑 tag)模块与未完成 REQ,派发 feature-brainstorm 或 test-gate;幂等可重入。阶段路由由 coding-start 负责,本 skill 不感知前端阶段。 | ||
| 4 | -user-invocable: false | ||
| 5 | -allowed-tools: Read Write Skill Glob Grep Bash(git branch *) Bash(git checkout *) Bash(git rev-parse *) Bash(git status *) Bash(git symbolic-ref *) Bash(git tag *) | ||
| 6 | ---- | ||
| 7 | - | ||
| 8 | -**所有输出必须使用中文。** | ||
| 9 | - | ||
| 10 | -# module-start | ||
| 11 | - | ||
| 12 | -## 职责说明 | ||
| 13 | - | ||
| 14 | -本 skill 单一职责:推进**后端模块循环**。`coding-start` 已在派发前确认存在未完成后端模块;本 skill 不再做"后端是否全完"的判定,也不感知前端阶段。 | ||
| 15 | - | ||
| 16 | -## 执行步骤 | ||
| 17 | - | ||
| 18 | -### 步骤 1:定位当前模块与本模块 REQ 列表 | ||
| 19 | - | ||
| 20 | -按 `docs/02 § 二 开发顺序清单` 的 REQ 顺序扫描,找到第一个所属模块尚未打里程碑 tag 的模块作为 `current_module`,并抽取本模块 REQ 序列。 | ||
| 21 | - | ||
| 22 | -模块状态判定(`里程碑:` 字段 + `git tag -l 'milestone/<module_id>'` 存在性)参见 `CLAUDE.md § ✅ 阶段完成判定规则 § 状态语义`。 | ||
| 23 | - | ||
| 24 | -找到 `current_module` 后,从 docs/02 § 二 的 REQ 列表里取出所有 `module_id == current_module` 的项,按原序得 `req_list[]`(A5 约束保证同模块 REQ 连续)。模块名、需求卡目录等其它字段由后续步骤按需从 `docs/08 § 二` 或 `docs/01-需求清单/` 取,不在本步骤预读。 | ||
| 25 | - | ||
| 26 | -约束: | ||
| 27 | - | ||
| 28 | -- 模块完成 = `docs/08 § 二` 该模块 `里程碑:` 字段为 `milestone/<module_id>` 且 `git tag -l` 能查到该 tag;二者任一缺失即视为未完成 | ||
| 29 | -- 任何文件读取或解析失败 → 打印错误并停止 | ||
| 30 | - | ||
| 31 | -### 步骤 2:找不到未完成后端模块的处理 | ||
| 32 | - | ||
| 33 | -如果步骤 1 没找到任何未完成的后端模块——理论上不应触达此分支(`coding-start` 步骤 3 已确认存在未完成模块才会派发到本 skill),属于异常调用: | ||
| 34 | - | ||
| 35 | -- 打印诊断:"`module-start` 未发现未完成后端模块。请通过 `/erp-workflow:coding-start` 入口重新驱动——coding-start 会按 docs/08 § 二/§ 三 自动路由到正确阶段(后端 / 前端 / 全部完成)。" | ||
| 36 | -- 结束本 skill,不派发下游 | ||
| 37 | - | ||
| 38 | -### 步骤 3:确保处于模块分支 | ||
| 39 | - | ||
| 40 | -确保工作树位于 `target_branch = module-<module_id>`(例 `module-module_sys`)。 | ||
| 41 | - | ||
| 42 | -- 已在该分支 → 继续步骤 4 | ||
| 43 | -- 该分支已存在但当前不在 → checkout 过去 | ||
| 44 | -- 该分支不存在 → 先把工作树切到本地默认分支(main 或 master,已由 milestone-tag 的本地 merge 累积所有已完成模块),作为新分支的干净 base,再 `git checkout -b` 创建模块分支 | ||
| 45 | - | ||
| 46 | -任何错误(定位不到默认分支 / 切换前工作树脏 / checkout 失败)一律停下并打印诊断信息,不自动 stash、不强制覆盖。 | ||
| 47 | - | ||
| 48 | -### 步骤 4:计算已完成 REQ 集合 `done_reqs[]` | ||
| 49 | - | ||
| 50 | -对 `req_list[]` 中每个 REQ,检查 `docs/superpowers/reviews/` 下是否存在该 REQ 的 review 文件、且其 `verdict` 字段为 `approve`。两条件都满足 → 收入 `done_reqs[]`,步骤 6 推进时跳过这些 REQ。 | ||
| 51 | - | ||
| 52 | -每次进入本 skill 都重新计算(不缓存),保证中断/重跑后能从最新进度继续。 | ||
| 53 | - | ||
| 54 | -### 步骤 5:渲染并打印模块横幅 | ||
| 55 | - | ||
| 56 | -按 `${CLAUDE_SKILL_DIR}/templates/module-start-banner-template.md` 渲染输出。 | ||
| 57 | - | ||
| 58 | -### 步骤 6:派发 | ||
| 59 | - | ||
| 60 | -- 还有未完成 REQ → 调用 `Skill(feature-brainstorm)` 启动该 REQ 的功能循环 | ||
| 61 | -- 本模块 REQ 全部完成 → 调用 `Skill(test-gate)` 进入模块测试闸门 | ||
| 62 | - | ||
| 63 | -## 参考 | ||
| 64 | - | ||
| 65 | -- `docs/02-开发计划.md § 二 开发顺序清单`(分发权威) | ||
| 66 | -- `docs/08-模块任务管理.md § 二`(后端模块元数据,含 `里程碑:` 字段;完成判定以 tag 存在为准) | ||
| 67 | -- `docs/superpowers/reviews/*.md`(REQ 级进度事实——verdict=approve 即完成) | ||
| 68 | -- `${CLAUDE_SKILL_DIR}/templates/module-start-banner-template.md` | ||
| 69 | -- 下游: | ||
| 70 | - - `feature-brainstorm`(每个未完成 REQ) | ||
| 71 | - - `test-gate`(本模块全部 REQ approve 后;phase=backend 由分支推断) | ||
| 72 | -- 上游:`coding-start`(步骤 3 派发到此;后端模块全部打里程碑时不会派发到此) |
skills/coding/module-start/templates/module-start-banner-template.md deleted
skills/coding/phase-driver/SKILL.md
0 → 100644
| 1 | +--- | ||
| 2 | +name: phase-driver | ||
| 3 | +description: 统一阶段循环驱动(后端模块 / 前端阶段共用,由 phase 参数区分)。定位当前未完成单元并派发 feature-spec,全完成则派发 milestone。幂等可重入。 | ||
| 4 | +user-invocable: false | ||
| 5 | +allowed-tools: Read Write Edit Skill Glob Grep AskUserQuestion Bash(git branch *) Bash(git checkout *) Bash(git rev-parse *) Bash(git status *) Bash(git symbolic-ref *) Bash(git tag *) Bash(find *) Bash(ls *) | ||
| 6 | +--- | ||
| 7 | + | ||
| 8 | +**所有输出必须使用中文。** | ||
| 9 | + | ||
| 10 | +# phase-driver | ||
| 11 | + | ||
| 12 | +## 职责说明 | ||
| 13 | + | ||
| 14 | +统一阶段循环驱动,由 `phase` 参数区分后端模块循环(`phase=backend`)与前端阶段循环(`phase=frontend`)。由 `coding-start` 初次派发,`feature-review` approve 后回调,均携带 `{ phase }` 参数。幂等可重入。 | ||
| 15 | + | ||
| 16 | +--- | ||
| 17 | + | ||
| 18 | +## phase=backend(后端模块循环) | ||
| 19 | + | ||
| 20 | +### 步骤 B1:定位当前模块与 REQ 列表 | ||
| 21 | + | ||
| 22 | +读取 `docs/08-模块任务管理.md § 二`,按文中模块顺序扫描,找到第一个未完成的模块作为 `current_module`。 | ||
| 23 | + | ||
| 24 | +**模块完成判定**(双重校验,二者皆满足才算完成): | ||
| 25 | +- 该模块条目下 `里程碑:` 字段 == `milestone/<module_id>` | ||
| 26 | +- `git tag -l 'milestone/<module_id>'` 能查到对应 tag | ||
| 27 | + | ||
| 28 | +二者任一缺失 → 视为未完成。 | ||
| 29 | + | ||
| 30 | +找到 `current_module` 后,从 `docs/08 § 二` 该模块条目下的 REQ 子项中,按列出顺序提取 `req_list[]`(docs/08 § 二 是 REQ 顺序权威,不读 docs/02)。 | ||
| 31 | + | ||
| 32 | +约束: | ||
| 33 | +- 任何文件读取或解析失败 → 打印错误并停止 | ||
| 34 | + | ||
| 35 | +### 步骤 B2:未找到未完成后端模块的处理 | ||
| 36 | + | ||
| 37 | +若步骤 B1 未找到任何未完成后端模块(理论上由 `coding-start` / `feature-review` approve 后的回调触发,属异常路径): | ||
| 38 | + | ||
| 39 | +- 打印诊断:"`phase-driver(backend)` 未发现未完成后端模块。请通过 `/erp-workflow:coding-start` 入口重新驱动——coding-start 会按 docs/08 § 二/§ 三 自动路由到正确阶段。" | ||
| 40 | +- 结束本 skill,不派发下游 | ||
| 41 | + | ||
| 42 | +### 步骤 B3:确保处于模块分支 | ||
| 43 | + | ||
| 44 | +目标分支:`module-<module_id>`(例:`module-sys`) | ||
| 45 | + | ||
| 46 | +- 当前已在该分支 → 继续步骤 B4 | ||
| 47 | +- 该分支已存在但当前不在 → `git checkout module-<module_id>` | ||
| 48 | +- 该分支不存在 → 先切到本地默认分支(`main` 或 `master`,已由 `milestone` 的本地 merge 累积所有已完成模块)作为干净 base,再 `git checkout -b module-<module_id>` | ||
| 49 | + | ||
| 50 | +任何错误(定位不到默认分支 / 切换前工作树脏 / checkout 失败)→ 打印诊断信息后硬停,不自动 stash,不强制覆盖。 | ||
| 51 | + | ||
| 52 | +### 步骤 B4:计算已完成 REQ 集合 `done_reqs[]` | ||
| 53 | + | ||
| 54 | +对 `req_list[]` 中每个 REQ,检查 `docs/superpowers/reviews/` 下是否存在该 REQ 的 review 文件(文件名含 REQ id),且文件中 `verdict:` 字段为 `approve`。两条件皆满足 → 收入 `done_reqs[]`。 | ||
| 55 | + | ||
| 56 | +每次进入本 skill 都重新计算(不缓存),保证中断 / 重跑后能从最新进度继续。 | ||
| 57 | + | ||
| 58 | +### 步骤 B5:打印状态 | ||
| 59 | + | ||
| 60 | +内联打印(不引用任何模板文件),格式示例: | ||
| 61 | + | ||
| 62 | +``` | ||
| 63 | +[phase-driver] 阶段=backend | ||
| 64 | + 分支:module-<module_id> | ||
| 65 | + 进度:<done_count>/<total_count> REQ 完成 | ||
| 66 | + 下一:<first_incomplete_REQ_id> <REQ_title> | ||
| 67 | +``` | ||
| 68 | + | ||
| 69 | +### 步骤 B6:派发 | ||
| 70 | + | ||
| 71 | +- 存在未完成 REQ → `Skill(feature-spec)`,参数 `{ phase: "backend", id: <first_incomplete_REQ_id>, name: <REQ_title> }` | ||
| 72 | +- 本模块所有 REQ 全部完成 → `Skill(milestone)` | ||
| 73 | + | ||
| 74 | +--- | ||
| 75 | + | ||
| 76 | +## phase=frontend(前端阶段循环) | ||
| 77 | + | ||
| 78 | +### 步骤 F1:prototype 门禁 | ||
| 79 | + | ||
| 80 | +用 `find <project-root>/prototype -name "*.html"` 或 `ls <project-root>/prototype/` 检查项目根 `prototype/` 目录: | ||
| 81 | + | ||
| 82 | +- 找到 ≥1 个 `*.html` → 通过,进入步骤 F2 | ||
| 83 | +- 未找到(目录不存在或无 html 文件)→ `AskUserQuestion` 告知用户需要在 `prototype/` 下放置至少一个 HTML mockup 文件后重跑入口,然后停止 | ||
| 84 | + | ||
| 85 | +### 步骤 F2:准备 FE 清单 | ||
| 86 | + | ||
| 87 | +读 `docs/08-模块任务管理.md § 三` 中"功能:"项: | ||
| 88 | + | ||
| 89 | +**情形 A:已有 FE bullet** | ||
| 90 | + | ||
| 91 | +若已存在 `- [ ] FE-NN ...` 或 `- [x] FE-NN ...` 行 → **加载**:逐行解析得 `fe_list[]`,每项为 `{ fe_id, name, status, associated_reqs[], associated_prototypes[] }`。行格式不符规范 → 硬停并打印问题行。 | ||
| 92 | + | ||
| 93 | +**情形 B:仅有 HTML 注释占位(无 FE bullet)** | ||
| 94 | + | ||
| 95 | +→ **推导**: | ||
| 96 | + | ||
| 97 | +1. 读取 `prototype/**/*.html`、`docs/01-需求清单/**/*.md`、`docs/05-API接口契约.md` | ||
| 98 | +2. 以**业务功能**为单位拆分(同流程多屏可合 1 个 FE;一个 HTML 含多功能可拆多个 FE;无 UI 的 REQ 不产生 FE)。每个 FE 含:`{ fe_id: FE-NN, name, associated_reqs[], associated_prototypes[] }`,prototype 路径可带 anchor 区分文件内多区域 | ||
| 99 | +3. **写入 § 三 "功能:" 项**(替换 HTML 注释占位),每行格式: | ||
| 100 | + | ||
| 101 | + ``` | ||
| 102 | + - [ ] FE-NN 功能名 | 关联 REQ:REQ-A, REQ-B | 关联原型:prototype/<file>.html | ||
| 103 | + ``` | ||
| 104 | + | ||
| 105 | + 保留 `- 整体里程碑: —` 行不动;写入后解析得 `fe_list[]`,继续步骤 F3 | ||
| 106 | + | ||
| 107 | +### 步骤 F3:检查前端里程碑状态 | ||
| 108 | + | ||
| 109 | +读 `docs/08 § 三 整体里程碑:` 字段,并用 `git tag -l 'milestone/frontend-phase'` 校验: | ||
| 110 | + | ||
| 111 | +- 字段为 `milestone/frontend-phase` 且 tag 存在 → 打印"前端阶段已完成"并停止(冗余保护,正常由 `coding-start` 拦截) | ||
| 112 | +- 否则(字段为 `—` 或 tag 不存在)→ 进入步骤 F4 | ||
| 113 | + | ||
| 114 | +### 步骤 F4:确保处于 frontend-phase 分支 | ||
| 115 | + | ||
| 116 | +目标分支:`frontend-phase` | ||
| 117 | + | ||
| 118 | +- 当前已在该分支 → 继续步骤 F5 | ||
| 119 | +- 该分支已存在但当前不在 → `git checkout frontend-phase` | ||
| 120 | +- 该分支不存在 → 先切到本地默认分支(`main` 或 `master`)作为干净 base,再 `git checkout -b frontend-phase` | ||
| 121 | + | ||
| 122 | +任何错误(定位不到默认分支 / 工作树脏 / checkout 失败)→ 打印诊断信息后硬停,不自动 stash,不强制覆盖。 | ||
| 123 | + | ||
| 124 | +### 步骤 F5:识别已完成的 FE | ||
| 125 | + | ||
| 126 | +扫 `docs/superpowers/reviews/` 下文件名含 `-FE-` 的 review 文件(如 `<YYYY-MM-DD>-FE-NN.md`),`verdict: approve` 的收入 `done_fes[]`。每次进入重新计算,不缓存。 | ||
| 127 | + | ||
| 128 | +### 步骤 F6:打印状态 | ||
| 129 | + | ||
| 130 | +内联打印(不引用任何模板文件),格式示例: | ||
| 131 | + | ||
| 132 | +``` | ||
| 133 | +[phase-driver] 阶段=frontend | ||
| 134 | + 分支:frontend-phase | ||
| 135 | + prototype HTML 数:<n> 个 | ||
| 136 | + 进度:<done_count>/<total_count> FE 完成 | ||
| 137 | + 下一:<FE-NN> <FE_name> | ||
| 138 | +``` | ||
| 139 | + | ||
| 140 | +### 步骤 F7:派发 | ||
| 141 | + | ||
| 142 | +- 存在未完成 FE → `Skill(feature-spec)`,参数 `{ phase: "frontend", id: <FE-NN>, name: <FE_name>, associated_reqs: [...], associated_prototypes: [...] }` | ||
| 143 | +- 所有 FE 全部完成 → `Skill(milestone)` | ||
| 144 | + | ||
| 145 | +--- | ||
| 146 | + | ||
| 147 | +## 参考 | ||
| 148 | + | ||
| 149 | +- `docs/08-模块任务管理.md § 二`(后端模块元数据 + REQ 顺序权威,含 `里程碑:` 字段) | ||
| 150 | +- `docs/08-模块任务管理.md § 三`(前端阶段元数据:整体里程碑 + FE 清单) | ||
| 151 | +- `docs/superpowers/reviews/*.md`(REQ / FE 级进度事实——`verdict: approve` 即完成) | ||
| 152 | +- 上游:`coding-start`(初次派发,携带 `{ phase }`);`feature-review`(approve 后回调,携带 `{ phase }`) | ||
| 153 | +- 下游:`feature-spec`(每个未完成 REQ / FE);`milestone`(全部完成时) |