name: coding-start description: B 阶段(Coding)瘦入口。校验 Plan 完成态与 git 就绪(docs/08 §一 A0~A5 全勾、在本地默认分支或自动切回 halt 残留功能分支、工作树干净)后,读取 docs/08 §二/§三 概述模块/前端进度,然后调用 workflows/coding.mjs Workflow 全自动、静默地跑完整个编码阶段(后端+前端功能循环、测试闸、里程碑 tag),跑完或 halt 时返回最终状态。本入口不写任何文件、不做编码决策。 user-invocable: true
allowed-tools: Read Glob Workflow Bash(git rev-parse *) Bash(git status *) Bash(git branch *) Bash(git checkout *) Bash(git tag *)
所有输出必须使用中文。
执行步骤
步骤 0:打印 B 阶段流程概览(模型直接输出,不用 cat)
直接向用户输出以下横幅(逐字输出文本本身,不要用任何命令读文件):
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
[coding-start] B 阶段(Coding)= 一个全自动静默 Workflow
Router → 读 docs/08 + git tag,算出未完成模块
每个模块:
后端功能循环 spec → plan → tdd → verify → review(≤5轮)
后端测试闸 test-gate(RED 自动重试 1 次,仍 RED → halt)
前端功能循环 同一流水线,phase=frontend(FE-NN,限 frontend/)
前端测试闸 test-gate
跨模块记录 → 模块报告 → 里程碑(merge --no-ff + milestone/<id> tag)
任一模块 halt → fail-fast 停在该模块,修复后重跑本入口即可续跑
全程无 Q&A:缺值表现为带诊断的 halt,不是对话框。
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
步骤 1:确认 docs/08 存在
用 Glob 检查 docs/08-模块任务管理.md。
- 不存在 → 输出「⚠️ 项目尚未初始化,请先运行
/erp-workflow:plan-start」并停下,不启动 Workflow。
步骤 2:Plan 完成态 + git 就绪校验(HARD GATE)
Read docs/08-模块任务管理.md,逐项校验,任一不满足即拦截、不启动 Workflow。
注:REQ 真实数据 / config 全锁 / docs/04 命令齐 / docs/05+02 已评审等内容闸由
plan-start终结硬闸把守;本步只校验「Plan 完成态(checkbox)+ git 就绪」,不重复内容校验。
-
docs/08 § 一 A0~A5 全部勾选
- 读 § 一 进度表,确认 A0/A1/A2/A3/A4/A5(含各自子项)均为
[x]。 - 任一未勾 → 缺口:
Plan 未完成(<未勾项>)→ 先运行 /erp-workflow:plan-start。
- 读 § 一 进度表,确认 A0/A1/A2/A3/A4/A5(含各自子项)均为
-
当前在本地默认分支(main / master);停在 halt 残留功能分支则自动切回
- 用
Bash(git rev-parse --show-toplevel)确认当前目录在 git 仓库中,并记录 stdout 作为projectRoot。 - 用
Bash(git rev-parse --verify refs/heads/main)/refs/heads/master依次检测本地默认分支,取第一个存在者作为<default>;两者都不存在则缺口:找不到本地默认分支 main/master。 - 用
Bash(git branch --show-current)读取当前分支<branch>,按下列三种情况处理:-
<branch>==<default>→ 通过。 -
<branch>形如module-*或等于frontend-phase(= 上次 halt 残留的功能分支;coding.mjs 在模块中途 halt 时 HEAD 停在功能分支,不会自动切回):先用Bash(git status --porcelain)检查工作树—— -
干净 → 用
Bash(git checkout <default>)切回默认分支(续跑点由 coding.mjs Router 从milestone/*/req-done/*tag 重算,与所在分支无关),通过;切换失败则缺口:无法自动切回默认分支 <default>:<stderr 摘要>。 -
不干净 → 缺口:
停在功能分支 <branch> 且工作树不干净,无法自动切回——请先提交或清理改动后重跑(dirty 前 20 行:<...>)。 - 其它分支 → 缺口:
当前分支 <branch> 不是默认分支 <default>。
-
- 用
-
工作树干净(Plan 产物已 commit)
- 用
Bash(git status --porcelain)检查(步骤 2 自动切回后应仍干净),stdout 非空即缺口:工作树不干净(列出前 20 行 dirty 路径)。
- 用
任一缺口 → 输出拦截横幅,逐条列出缺口与回填位置,停下,不启动 Workflow:
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
[coding-start] ⛔ 未满足进入 B 阶段的前置条件
<逐条列出缺口,格式:[项] 缺口描述 → 回填/处理位置>
例:[Plan 进度] A5 下游文档生成 未勾 → 先运行 /erp-workflow:plan-start
处理后重新运行 /erp-workflow:coding-start。
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
步骤 3:概述进度(信息提要)
仅当步骤 2 的 § 一 校验通过后,Read docs/08 § 二(后端模块元数据 + 里程碑: 字段)与 § 三(前端阶段 整体里程碑: 字段),并用 Bash(git tag -l "milestone/*") 读取本地里程碑 tag,概述:
- 后端:每个模块的
里程碑:是否已是milestone/<module_id>(已完成)还是—(待跑)。 - 前端:
§ 三 整体里程碑:是否已是milestone/frontend-phase(已完成)还是—(待跑)。
向用户简述「已完成 N 个模块 / 待跑 M 个模块;前端阶段:已完成 / 待跑」。
步骤 4:启动 Coding Workflow
用 Workflow 工具调用编码编排脚本。projectRoot 必须使用步骤 2 里 git rev-parse --show-toplevel 得到的绝对路径(coding.mjs 顶部对相对路径硬校验,传 . 会立即 halt)。
Workflow({
scriptPath: "${CLAUDE_PLUGIN_ROOT}/workflows/coding.mjs",
args: { projectRoot: "<git rev-parse --show-toplevel 的 stdout>" }
})
步骤 5:告知用户 Workflow 已启动
启动后向用户输出:
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
[coding-start] ✅ Coding Workflow 已启动
进度概述:<步骤 3 概述,如「待跑 3 模块 + 前端阶段」>
已程序化校验:
✓ 当前在本地默认分支(main / master;如停在 halt 残留功能分支已自动切回)
✓ 工作树干净,Plan 产物(docs/* + skeleton + DDL)已 commit
Workflow 将按模块顺序全自动、静默推进,跑完所有模块或在某模块
halt(测试闸持续 RED / review 5 轮未过 / 缺值阻塞等)时返回最终状态。
halt 后请按诊断修复,再重新运行 /erp-workflow:coding-start 续跑
(残留功能分支会自动切回默认分支,无需手动 checkout;但工作树须先清理干净)。
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
本 skill 到此结束,不调用任何下游 skill。
参考
-
docs/08-模块任务管理.md § 一(A0~A5 Plan 进度,步骤 2 读取) -
docs/08-模块任务管理.md § 二(后端模块元数据 + 里程碑字段,步骤 3 读取) -
docs/08-模块任务管理.md § 三(前端阶段整体里程碑,步骤 3 读取) -
workflows/coding.mjs(B 阶段编排脚本,步骤 4 启动) -
plan-start(姊妹入口,A 阶段) -
CLAUDE.md(项目指令)