SKILL.md
4.81 KB
name: erp-module-start description: 启动/恢复模块循环。按 docs/02 § 二 REQ 清单定位当前模块及其 REQ 序列,确保处于模块分支,扫 docs/superpowers/reviews/ 计算已完成 REQ,驱动第一个未完成 REQ 的功能循环;全部完成则调 erp-local-test-gate。幂等可重入。 user-invocable: false
allowed-tools: Read Write Skill Glob Grep Bash(git branch *) Bash(git checkout *) Bash(git rev-parse *) Bash(glab mr *)
所有输出必须使用中文。
erp-module-start
执行步骤
步骤 1:按 docs/02 § 二 REQ 序 + MR state 定位当前模块 + 本模块 REQ 列表
与 erp-coding-start 步骤 3 同构(完成判定权威是 MR: 字段 + glab mr view state,不看 checkbox):
- 用
Read读取docs/02-开发计划.md,用Grep(pattern^\|\s*[0-9]+\s*\|\s*\*\*(REQ-[A-Z0-9]+-[0-9]+)\*\*\s*\|\s*(module_\w+))抽取 § 二 表格数据行,按行号升序得req_order[]。 - 若
req_order为空 → 打印"⚠️ docs/02 § 二 REQ 开发顺序清单为空或无法解析,请检查"并停止。 - 初始化
module_merged[module_id → bool]空缓存。按序遍历req_order[]:-
module_merged[module_id]已缓存为true→ 跳过本 REQ。 -
module_merged[module_id]已缓存为false→current_module = module_id,结束遍历。 - 未缓存 → 读 docs/08 § 二 该模块条目的
- MR:字段: -
MR: —→module_merged[module_id] = false,current_module = module_id,结束遍历。 -
MR: !<iid>→Bash:glab mr view <iid> -F json 2>/dev/null,取.state:-
merged→ 缓存true,跳过本 REQ。 - 其他 → 缓存
false,current_module = module_id,结束遍历。
-
-
-
抽取本模块 REQ 序列
req_list[]:从req_order[]取出所有module_id == current_module的项,按原序组成(同模块 REQ 必须连续,见 A5 约束)。 - 用
Read读取 docs/08 § 二 该模块行 + 后续缩进行,提取module_name/depends_on(REQ 列表以 docs/02 为权威,不再读 docs/08)。
步骤 2:所有模块已完成短路
如果 req_order[] 全部遍历完 current_module 仍未赋值(即所有模块都 merged)→ 打印"所有模块已完成"摘要并停止。
步骤 3:确保处于模块分支
-
target_branch = module-<module_id>(例module-module_sys)。 - 用
Bash执行git branch --show-current得current_branch。 -
current_branch == target_branch→ 继续步骤 4。 - 否则用
Bash执行git rev-parse --verify <target_branch> 2>/dev/null:- 存在 →
git checkout <target_branch> - 不存在 →
git checkout -b <target_branch>
- 存在 →
- 若当前工作区有未提交改动且 checkout 失败 → 打印错误并停止(请用户手工处理 dirty state)。
步骤 4:初始化跨模块日志(幂等)
docs/superpowers/module-reports/<module_id>-cross-module.md — 不存在则从 ${CLAUDE_SKILL_DIR}/templates/cross-module-log-template.md 创建。
步骤 5:计算已完成 REQ 集合 done_reqs[](幂等断点恢复关键)
- 对
req_list[]每个req_id,用Glob查docs/superpowers/reviews/*-<req_id>.md。 - 命中后用
Grep(pattern^verdict:\s*approve,-i不敏感)检查首部 verdict。 - 两者都命中 → 加入
done_reqs[]。
步骤 6:渲染并打印模块横幅
Read ${CLAUDE_SKILL_DIR}/templates/module-start-banner-template.md,填充槽位;reqs[] 每项的 status 字段根据 done_reqs[] 填 x(已完成)或空格(未完成)。
步骤 7:推进主循环
- 从
req_list[]取第一个不在done_reqs[]中的 REQ 作为next_req。 -
没有
next_req(全部完成)→ 调用Skill(erp-local-test-gate)进入模块闸门。 -
有
next_req→ 调用Skill(erp-feature-brainstorm)启动该 REQ 的功能循环。功能循环链(brainstorm → plan → tdd → verify → review)完成后,erp-feature-review在verdict=approve分支会回调Skill(erp-module-start)—— 再次进入本 skill 时,步骤 5 会把刚通过的 REQ 加入done_reqs[],步骤 7 自动取下一 REQ,形成可重入推进。 - 任何中断(红旗 / 测试持续失败 / review 5 轮仍 request-changes)→ 停止本模块,不要静默跳下一 REQ。
参考
-
docs/02-开发计划.md § 二 开发顺序清单(分发权威) -
docs/08-模块任务管理.md § 二(模块元数据 +MR:字段;每模块行是- module_id ...bullet,无 checkbox;完成判定权威是 MR state) -
docs/superpowers/reviews/*.md(REQ 级进度事实——verdict=approve 即完成) ${CLAUDE_SKILL_DIR}/templates/module-start-banner-template.md${CLAUDE_SKILL_DIR}/templates/cross-module-log-template.md- 下游:
erp-feature-*、erp-local-test-gate