name: plan-start description: A 阶段入口 + Plan 终结硬闸 user-invocable: true
allowed-tools: Skill Read Glob Grep
所有输出必须使用中文。
第一步:读取 docs/08 + 决定分发目标
分发判定
-
docs/08 是否存在 用
Glob检查docs/08-模块任务管理.md。- 如果不存在 → 后续 =
project-init。
- 如果不存在 → 后续 =
根据 § 一 找到当前进度
判定算法(务必按此执行,不要凭"表里含 Axx"判断;docs/08 § 一 模板始终列出 A0~A5 全部行,"含"恒为真):
- 用 Read / Grep 把
docs/08-模块任务管理.md § 一全文读出,按文件顺序自上而下扫描,找到第一个- [ ]未勾子项(仅扫 § 一)。 - 该子项归属的父项
Axx(A0~A5)即为当前阶段,按下表派发到对应 skill。 - 若 § 一 所有
[ ]都已变成[x](含父项与全部子项)→ 进入 §2.1 Plan 终结闸。
第一个未勾子项归属 |
后续 |
阶段 |
|---|---|---|
| 无 docs/08(文件不存在) | project-init |
A0 |
| A0 父项或其任一子项 | project-init |
A0 |
| A1 父项或其任一子项 | scope-lock |
A1 |
| A2 父项或其任一子项 | skeleton-gen |
A2 |
| A3 父项或其任一子项 | db-design-gen |
A3 |
| A4 父项或其任一子项 | db-init |
A4 |
| A5 父项或其任一子项 | downstream-gen |
A5 |
§ 一 全部 [x]
|
无分发 → §2.1 Plan 终结闸 | - |
第二步:分发通知 + 调用目标 skill
2.1 Plan 已完成 — 终结硬闸(HARD GATE)
A 阶段 checkbox 全部 [x] 后先跑下面 4 项前移闸门; 全过才放行, 任一未过则拦截.
第 1 步:逐项校验前移闸门(用 Read / Glob / Grep,禁止跳过任何一项)
逐项检查,记录每项 通过 / 缺口。任一缺口即整闸 不通过。
-
REQ 卡片真实数据(来自 A1 scope-lock)
-
Glob找出全部 REQ 卡片(如docs/01-需求清单/**/*.md)。 - 对每张卡片
Grep命中以下任一即缺口:【人工填写/TBD/{{({{= 6 个标量占位未替换;TBD= A3/A5 应回填的依赖表/依赖接口仍未补——A1 时这些TBD(A3/A5 自动补)是合法保留,到本闸必须已解析,故此处比 scope-lock E.1 多查TBD/【人工填写)。 - 缺口表述示例:
USR-UserInfo-Login 仍含 TBD / {{title}} 占位未替换。
-
-
全部配置全锁(来自 A1 写入
config-vars.yaml的非敏感配置 + 敏感凭据,单一文件)-
Readconfig-vars.yaml(项目全部配置,含敏感凭据,随项目提交):校验所有字段均无【人工填写/TBD;除database.password可显式为空串外,其余字段不得为空——含非敏感项(backend/frontend包名 / 端口、admin_init.username、database.host/port/user/schema)与敏感项(admin_init.password、secrets.*)。 - 任一未填即缺口。
-
-
docs/04 §零 命令齐(来自 A1 收集的每栈构建/lint/单测/e2e 命令)
-
Readdocs/04-技术规范.md,定位§ 零命令区。 - 校验:每个技术栈的 build / lint / unit / e2e 命令均显式存在且非占位。缺命令或留
TBD即缺口(Coding 期 test-gate / featureLoop 依赖这些命令,缺即无法静默跑)。
-
-
docs/05 + docs/02 已评审(来自 A5 downstream-gen 的评审闸)
-
Readdocs/05-API接口契约.md与docs/02-开发计划.md。 - 校验:(a) docs/05 每个端点都有请求/响应 schema、无
【人工填写/TBD;(b) docs/02 每个 REQ 都在构建顺序 DAG 中、cycle-breaking 顺序有note说明。缺任一即缺口。
-
(前端无独立 Plan 文档闸:布局/交互以项目根 prototype/ 为权威,FE 清单由 A5 写入 docs/08 § 三,Coding 阶段前端循环直接消费 prototype/ + tokens.css + docs/04。)
第 2 步(A):全部通过 → 放行
仅当第 1 步 4 项全部 通过 时,向用户输出完成横幅:
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
[plan-start] ✅ Plan 阶段全部完成,前移闸门全部通过
已校验通过:
✓ REQ 卡片均为真实数据(无占位/示例残留)
✓ config-vars.yaml 全部配置(含 DB 凭据 / 密钥 / 包名 / 端口 / 初始账号)全锁
✓ docs/04 §零 各栈 build/lint/unit/e2e 命令齐全
✓ docs/05 API 契约 + docs/02 构建顺序已评审
运行 /erp-workflow:coding-start 进入 B 阶段 (coding-start 会校验 git 状态).
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
不调任何下游 skill。
第 2 步(B):存在缺口 → 拦截,不提示进 B 阶段
只要第 1 步出现任一缺口,禁止输出上面的放行横幅、禁止提示运行 coding-start。改为输出拦截横幅,逐条列出缺口与回填位置,让用户先补齐:
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
[plan-start] ⛔ Plan 终结闸未通过 — 暂不能进入 B 阶段
Coding 阶段全自动静默,缺失项无法在编码期补问,必须现在锁死。
以下缺口需补齐后重新运行 /erp-workflow:plan-start:
<逐条列出每个缺口,格式:[闸门] 缺口描述 → 回填位置>
例:
[REQ 真实数据] USR-UserInfo-Login 仍含 {{goal}} 占位未替换 → docs/01-需求清单/...
[配置] database.password 仍是占位(如本地空密码请显式填 `''`)→ config-vars.yaml
[docs/04 §零] node 栈缺 e2e 命令 → docs/04-技术规范.md §零
补齐后再次运行 /erp-workflow:plan-start 重新校验。
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
输出拦截横幅后停下,不调任何下游 skill,不提示 coding-start。
2.2 正常派发(后续 非空)
打印简短分发通知:
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
[plan-start] → 派发到 <后续>
未勾项:<docs/08 中第一个 - [ ] 行内容>
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
立即用 Skill 工具调用 后续。
参考
-
docs/08-模块任务管理.md(进度追踪) -
CLAUDE.md(项目指令) - 后续 skills(通过
Skill工具按名称调用)