Commit 4e007af88181b221066c8a844028443b2e7d5e0a

Authored by zichun
1 parent e69a73c7

coding-start: auto-return from halt-residue branch on resume + rename gate, prune Bash(pwd)

README.md
@@ -81,7 +81,7 @@ Claude Code 插件:ERP / 后端管理系统全流程开发框架。 @@ -81,7 +81,7 @@ Claude Code 插件:ERP / 后端管理系统全流程开发框架。
81 ``` 81 ```
82 erp-workflow-plugin/ 82 erp-workflow-plugin/
83 ├── .claude-plugin/ 83 ├── .claude-plugin/
84 -│ └── plugin.json # 插件清单,显式列出 9 个 skill 路径 84 +│ └── plugin.json # 插件清单,显式列出 8 个 skill 路径
85 ├── README.md # 本文档 85 ├── README.md # 本文档
86 ├── workflows/ 86 ├── workflows/
87 │ └── coding.mjs # 阶段 B:整个编码阶段编排为单个静默 Workflow 87 │ └── coding.mjs # 阶段 B:整个编码阶段编排为单个静默 Workflow
@@ -105,14 +105,14 @@ erp-workflow-plugin/ @@ -105,14 +105,14 @@ erp-workflow-plugin/
105 └── coding-start/ # 启动 workflows/coding.mjs 105 └── coding-start/ # 启动 workflows/coding.mjs
106 ``` 106 ```
107 107
108 -## Skill 清单(9 个) 108 +## Skill 清单(8 个)
109 109
110 ### 入口(2 个) 110 ### 入口(2 个)
111 111
112 | Skill | 作用 | 谁调用 | 112 | Skill | 作用 | 谁调用 |
113 |---|---|---| 113 |---|---|---|
114 | `plan-start` | **A 阶段入口 + Plan 终结硬闸**。读 docs/08 § 一 找第一个未勾 A 子项 → 派发对应 A skill;A 全部完成时校验 4 项前移闸门(REQ 真实数据、`config-vars.yaml` 全部配置(含 DB 凭据 / 密钥)全锁、docs/04 § 零 命令齐、docs/05+02 已评审),全过才提示运行 `/erp-workflow:coding-start`,否则指出缺口不放行 | **用户手动** `/erp-workflow:plan-start` | 114 | `plan-start` | **A 阶段入口 + Plan 终结硬闸**。读 docs/08 § 一 找第一个未勾 A 子项 → 派发对应 A skill;A 全部完成时校验 4 项前移闸门(REQ 真实数据、`config-vars.yaml` 全部配置(含 DB 凭据 / 密钥)全锁、docs/04 § 零 命令齐、docs/05+02 已评审),全过才提示运行 `/erp-workflow:coding-start`,否则指出缺口不放行 | **用户手动** `/erp-workflow:plan-start` |
115 -| `coding-start` | **B 阶段瘦入口**(`allowed-tools: Read Glob Workflow Bash(git ...) Bash(pwd)`)。校验 Plan 终结闸(docs/08 § 一 全勾、git 在默认分支、工作树干净)→ 读 docs/08 § 二/§ 三 + `git tag -l 'milestone/*'` 概述阶段进度(Workflow Router 再用 `req-done/*` 判定功能级 resume)→ 调用 `Workflow({scriptPath:"${CLAUDE_PLUGIN_ROOT}/workflows/coding.mjs", args:{projectRoot}})` 启动整个编码阶段 → 告知"已在后台启动" | **用户手动** `/erp-workflow:coding-start` | 115 +| `coding-start` | **B 阶段瘦入口**(`allowed-tools: Read Glob Workflow Bash(git ...)`)。校验 Plan 完成态 + git 就绪(docs/08 § 一 全勾、git 在默认分支或自动切回 halt 残留功能分支、工作树干净)→ 读 docs/08 § 二/§ 三 + `git tag -l 'milestone/*'` 概述阶段进度(Workflow Router 再用 `req-done/*` 判定功能级 resume)→ 调用 `Workflow({scriptPath:"${CLAUDE_PLUGIN_ROOT}/workflows/coding.mjs", args:{projectRoot}})` 启动整个编码阶段 → 告知"已在后台启动" | **用户手动** `/erp-workflow:coding-start` |
116 116
117 ### Plan 阶段 A skill(A0~A5,共 6 个) 117 ### Plan 阶段 A skill(A0~A5,共 6 个)
118 118
skills/coding/coding-start/SKILL.md
1 --- 1 ---
2 name: coding-start 2 name: coding-start
3 -description: B 阶段(Coding)瘦入口。校验 Plan 终结闸(docs/08 §一 A0~A5 全勾、已在本地默认分支、工作树干净)后,读取 docs/08 §二/§三 概述模块/前端进度,然后调用 workflows/coding.mjs Workflow 全自动、静默地跑完整个编码阶段(后端+前端功能循环、测试闸、里程碑 tag),跑完或 halt 时返回最终状态。本入口不写任何文件、不做编码决策。 3 +description: B 阶段(Coding)瘦入口。校验 Plan 完成态与 git 就绪(docs/08 §一 A0~A5 全勾、在本地默认分支或自动切回 halt 残留功能分支、工作树干净)后,读取 docs/08 §二/§三 概述模块/前端进度,然后调用 workflows/coding.mjs Workflow 全自动、静默地跑完整个编码阶段(后端+前端功能循环、测试闸、里程碑 tag),跑完或 halt 时返回最终状态。本入口不写任何文件、不做编码决策。
4 user-invocable: true 4 user-invocable: true
5 -allowed-tools: Read Glob Workflow Bash(pwd) Bash(git rev-parse *) Bash(git status *) Bash(git branch *) Bash(git tag *) 5 +allowed-tools: Read Glob Workflow Bash(git rev-parse *) Bash(git status *) Bash(git branch *) Bash(git checkout *) Bash(git tag *)
6 --- 6 ---
7 7
8 **所有输出必须使用中文。** 8 **所有输出必须使用中文。**
@@ -35,22 +35,28 @@ allowed-tools: Read Glob Workflow Bash(pwd) Bash(git rev-parse *) Bash(git statu @@ -35,22 +35,28 @@ allowed-tools: Read Glob Workflow Bash(pwd) Bash(git rev-parse *) Bash(git statu
35 用 `Glob` 检查 `docs/08-模块任务管理.md`。 35 用 `Glob` 检查 `docs/08-模块任务管理.md`。
36 - 不存在 → 输出「⚠️ 项目尚未初始化,请先运行 `/erp-workflow:plan-start`」并**停下**,不启动 Workflow。 36 - 不存在 → 输出「⚠️ 项目尚未初始化,请先运行 `/erp-workflow:plan-start`」并**停下**,不启动 Workflow。
37 37
38 -### 步骤 2:Plan 终结闸校验(HARD GATE) 38 +### 步骤 2:Plan 完成态 + git 就绪校验(HARD GATE)
39 39
40 -`Read` `docs/08-模块任务管理.md`,逐项校验,任一不满足即**拦截、不启动 Workflow**: 40 +`Read` `docs/08-模块任务管理.md`,逐项校验,任一不满足即**拦截、不启动 Workflow**。
  41 +
  42 +> 注:REQ 真实数据 / config 全锁 / docs/04 命令齐 / docs/05+02 已评审等**内容闸**由 `plan-start` 终结硬闸把守;本步只校验「Plan 完成态(checkbox)+ git 就绪」,不重复内容校验。
41 43
42 1. **docs/08 § 一 A0~A5 全部勾选** 44 1. **docs/08 § 一 A0~A5 全部勾选**
43 - 读 § 一 进度表,确认 A0/A1/A2/A3/A4/A5(含各自子项)均为 `[x]`。 45 - 读 § 一 进度表,确认 A0/A1/A2/A3/A4/A5(含各自子项)均为 `[x]`。
44 - 任一未勾 → 缺口:`Plan 未完成(<未勾项>)→ 先运行 /erp-workflow:plan-start`。 46 - 任一未勾 → 缺口:`Plan 未完成(<未勾项>)→ 先运行 /erp-workflow:plan-start`。
45 47
46 -2. **当前在本地默认分支(main / master)** 48 +2. **当前在本地默认分支(main / master);停在 halt 残留功能分支则自动切回**
47 - 用 `Bash(git rev-parse --show-toplevel)` 确认当前目录在 git 仓库中,并记录 stdout 作为 `projectRoot`。 49 - 用 `Bash(git rev-parse --show-toplevel)` 确认当前目录在 git 仓库中,并记录 stdout 作为 `projectRoot`。
48 - - 用 `Bash(git branch --show-current)` 读取当前分支。  
49 - - 用 `Bash(git rev-parse --verify refs/heads/main)` / `refs/heads/master` 依次检测本地默认分支,取第一个存在者;两者都不存在则缺口:`找不到本地默认分支 main/master`。  
50 - - 当前分支不等于默认分支 → 缺口:`当前分支 <branch> 不是默认分支 <default>`。 50 + - 用 `Bash(git rev-parse --verify refs/heads/main)` / `refs/heads/master` 依次检测本地默认分支,取第一个存在者作为 `<default>`;两者都不存在则缺口:`找不到本地默认分支 main/master`。
  51 + - 用 `Bash(git branch --show-current)` 读取当前分支 `<branch>`,按下列三种情况处理:
  52 + - `<branch>` == `<default>` → 通过。
  53 + - `<branch>` 形如 `module-*` 或等于 `frontend-phase`(= 上次 halt 残留的功能分支;coding.mjs 在模块中途 halt 时 HEAD 停在功能分支,不会自动切回):先用 `Bash(git status --porcelain)` 检查工作树——
  54 + - **干净** → 用 `Bash(git checkout <default>)` 切回默认分支(续跑点由 coding.mjs Router 从 `milestone/*` / `req-done/*` tag 重算,与所在分支无关),通过;切换失败则缺口:`无法自动切回默认分支 <default>:<stderr 摘要>`。
  55 + - **不干净** → 缺口:`停在功能分支 <branch> 且工作树不干净,无法自动切回——请先提交或清理改动后重跑(dirty 前 20 行:<...>)`。
  56 + - 其它分支 → 缺口:`当前分支 <branch> 不是默认分支 <default>`。
51 57
52 3. **工作树干净(Plan 产物已 commit)** 58 3. **工作树干净(Plan 产物已 commit)**
53 - - 用 `Bash(git status --porcelain)` 检查,stdout 非空即缺口:`工作树不干净(列出前 20 行 dirty 路径)`。 59 + - 用 `Bash(git status --porcelain)` 检查(步骤 2 自动切回后应仍干净),stdout 非空即缺口:`工作树不干净(列出前 20 行 dirty 路径)`。
54 60
55 任一缺口 → 输出拦截横幅,逐条列出缺口与回填位置,**停下**,不启动 Workflow: 61 任一缺口 → 输出拦截横幅,逐条列出缺口与回填位置,**停下**,不启动 Workflow:
56 62
@@ -96,12 +102,13 @@ Workflow({ @@ -96,12 +102,13 @@ Workflow({
96 进度概述:<步骤 3 概述,如「待跑 3 模块 + 前端阶段」> 102 进度概述:<步骤 3 概述,如「待跑 3 模块 + 前端阶段」>
97 103
98 已程序化校验: 104 已程序化校验:
99 - ✓ 当前在本地默认分支(main / master 105 + ✓ 当前在本地默认分支(main / master;如停在 halt 残留功能分支已自动切回
100 ✓ 工作树干净,Plan 产物(docs/* + skeleton + DDL)已 commit 106 ✓ 工作树干净,Plan 产物(docs/* + skeleton + DDL)已 commit
101 107
102 Workflow 将按模块顺序全自动、静默推进,跑完所有模块或在某模块 108 Workflow 将按模块顺序全自动、静默推进,跑完所有模块或在某模块
103 halt(测试闸持续 RED / review 5 轮未过 / 缺值阻塞等)时返回最终状态。 109 halt(测试闸持续 RED / review 5 轮未过 / 缺值阻塞等)时返回最终状态。
104 - halt 后请按诊断修复,再重新运行 /erp-workflow:coding-start 续跑。 110 + halt 后请按诊断修复,再重新运行 /erp-workflow:coding-start 续跑
  111 + (残留功能分支会自动切回默认分支,无需手动 checkout;但工作树须先清理干净)。
105 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 112 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
106 ``` 113 ```
107 114