SKILL.md 7.13 KB

name: coding-start description: B 阶段(Coding)瘦入口。校验 Plan 完成态(docs/08 §一 A0~A5 全勾)并取得 projectRoot 绝对路径后,读取 docs/08 §二/§三 概述模块/前端进度,然后调用 workflows/coding.mjs Workflow 全自动、静默地跑完整个编码阶段(后端+前端功能循环、测试闸、里程碑 tag);git 就绪(默认分支/工作树干净/功能分支创建与合并)由 coding.mjs runBranchSetup 在运行时把守。跑完或 halt 时返回最终状态。本入口不写任何文件、不做编码决策。 user-invocable: true

allowed-tools: Read Glob Workflow Bash(git rev-parse *) 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)
   前端骨架占位  router 全量 lazy 路由表 + FeStub 占位(保证中途可构建)
   前端功能循环  同一流水线,phase=frontend(FE-NN,限 frontend/);review 循环内含
                per-FE 行为验收(reviewer approve 时起本 FE 全栈验「按钮真生效/文字对」,
                硬问题可 fix 重验,行为 green 才打 req-done;不再是末尾独立门)
   前端测试闸    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 完成态校验 + 取 projectRoot(HARD GATE)

Read docs/08-模块任务管理.md 校验 Plan 完成态,并取得 projectRoot;任一不满足即拦截、不启动 Workflow

注:REQ 真实数据 / config 全锁 / docs/04 命令齐 / docs/05+02 已评审等内容闸plan-start 终结硬闸把守;本步只校验「Plan 完成态(checkbox)」,不重复内容校验。

注:git 就绪(在默认分支 / 工作树干净 / 功能分支创建与合并)由 coding.mjs runBranchSetup 在运行时把守——分支已存在则 checkout、不存在则从默认分支新建(与当前所停分支无关),工作树不干净会立即 HALT;续跑点由 Router 从 milestone/* tag + docs/08 字段重算,与所在分支无关。故本入口不再做 git 就绪预检,只取 projectRoot 供步骤 4。

  1. docs/08 § 一 A0~A5 全部勾选

    • 读 § 一 进度表,确认 A0/A1/A2/A3/A4/A5(含各自子项)均为 [x]
    • 任一未勾 → 缺口:Plan 未完成(<未勾项>)→ 先运行 /erp-workflow:plan-start
  2. 取得 projectRoot 绝对路径(取参数,非 gate)

    • Bash(git rev-parse --show-toplevel) 取仓库根,记录 stdout 作为 projectRoot(步骤 4 必须传入;coding.mjs 顶部对相对路径硬 HALT)。
    • 命令失败(当前目录不在 git 仓库内)→ 缺口:无法取得 projectRoot(当前目录不在 git 仓库内)

任一缺口 → 输出拦截横幅,逐条列出缺口与回填位置,停下,不启动 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 模块 + 前端阶段」>

 已程序化校验:
   ✓ Plan 完成态:docs/08 §一 A0~A5 全勾
   ✓ 已取得 projectRoot(仓库根绝对路径),传入 Workflow

 Workflow 将按模块顺序全自动、静默推进,跑完所有模块或在某模块
 halt(测试闸持续 RED / review 5 轮未过 / 缺值阻塞等)时返回最终状态。
 halt 后请按诊断修复,再重新运行 /erp-workflow:coding-start 续跑
 (git 分支由 coding.mjs 自行处理:残留功能分支直接续用、新模块从默认分支建,
  无需手动 checkout;但工作树不干净会在运行时 HALT,故重跑前请先清理工作树)。
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━

本 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(项目指令)