Goal Loop
把决策文档编译成三层工件:
implementation-plan.md:稳定的 Gate 合同,回答做什么、边界是什么、如何验证和何时停止。goal-runbook.md:唯一的执行状态与证据账本,只回答当前执行到哪里、已有何种证据。goal-prompt.md:方便人工复制的固定入口,只指向前两份文档;不绑定 Gate,也不重复合同。
本 skill 只建立或验证执行控制面,不实施 Gate,不重做已批准决策。
定位输入
用户提供 effort 目录、map.md、ADR/spec 或已有 implementation-plan.md。解析 Git 仓库根目录并定位 effort;无法唯一定位时停止,列出检查过的路径。
读取适用的 CLAUDE.md、AGENTS.md、CONTEXT.md / CONTEXT-MAP.md,以及 effort 中的 map、spec、implementation plan 和它们链接的本地 ADR、decision、issue 与验收依赖。CONTEXT.md 只提供术语和领域事实,不单独产生 Gate。
支持两种已收敛入口:
- Decision-only:Gate、范围、验证和 Exit 能从已接受 ADR、spec 或已解决 issue 得到。
- Wayfinder:map 的
Not yet specified为空或明确为“无”,参与执行顺序和验收的 decision 全部已解决。
本地决策链接缺失、ADR 未接受、decision 未解决,或文档仍有 TBD、TODO、open question、pending decision 时停止,逐项报告缺口。不得用经验补齐产品决定、验收政策或回退边界。
编译计划
若 implementation-plan.md 不存在,完整读取 references/implementation-plan-schema.md,从已收敛决策生成计划。若已存在,只读取和验证,不覆盖。
计划独占所有稳定 Gate 合同:Objective、Inputs、Scope boundary、Constraints、Slice policy、Verification、Evidence rule、Stop conditions、Rollback 和 Exit conditions。项目命令与技术约束只写入计划,不进入固定 prompt。
若旧计划包含 Current Execution State,初始化 runbook 时可以导入一次;Gate 名称、顺序和状态必须一致,passed / blocked 必须已有对应证据。导入后不再更新计划。
编译或验证账本
完整读取 references/runbook-schema.md。
goal-runbook.md 不存在时:
- 从计划读取 Gate 编号、名称、依赖和合同位置。
- 写入源码基线、唯一 Goal Ledger 和每个 Gate 的 Progress Log。
- 没有可导入状态时只将 G0 标为
active,其余标为planned。 - 不复制计划中的 Objective、Constraints、Verification 或其它 Gate 合同。
goal-runbook.md 已存在时:
- 对比源码路径集合和 SHA-256;计划或决策漂移时保持账本原样并停止。
- 验证 Gate 顺序、计划引用、严格线性依赖、状态机和 Progress Log 证据。
- 账本只能呈现
passed* active planned*、passed* blocked planned*或passed+。
计划是合同的唯一来源;账本是状态和证据的唯一来源。两者不得相互复制字段或双写状态。
写入固定 prompt
完整读取 references/goal-prompt-template.md,只替换 {{EFFORT_PATH}},写入或替换 goal-prompt.md。
固定 prompt 必须:
- 在同一 effort 的所有 Gate 中保持完全相同;
- 不出现 G0/G1 等具体 Gate、Gate 名称或 Objective;
- 不展开 Inputs、Constraints、Verification、Stop conditions、Rollback 或 Exit conditions;
- 保留跨项目稳定的执行循环和行为约束:最小 slice、范围控制、验证失败闭环、职责分片、保留无关实现、不弱化测试、人工验收交接终止和禁止 push;
- 要求在 Goal 启动时锁定当前唯一 active Gate,并只执行该 Gate;人工验收时只请求一次确认,先记录交接证据,再使用宿主 agent 提供的成功终态结束本次 Goal(不得标记为
blocked、paused或继续运行),最后输出包含 Gate、自动化结果、验收入口、最小清单、明确回复格式和“Goal 已结束、Gate 仍 active”的交接结果并结束普通会话。此时 Gate 必须保持active,后续只能由用户带着明确验收结果手动重新触发新的 Goal;没有 Goal 状态机制时直接结束当前任务,不创建等待循环。Gate 通过后将当前 Gate 标为passed、直接后继标为active,汇总证据并显式结束整个 Goal,不得把后继 Gate 纳入同一 Goal。
goal-prompt.md 是可删除、可重建的复制便利文件。它不属于源码基线,不被计划或 runbook 引用,也不参与状态验证。
最终回复说明是编译还是验证,给出计划、runbook 和固定 prompt 的路径,并输出 prompt 内容。只优化工件时不得实施 Gate。