其他
spec-kit 功能实现后代码与…
在 spec-kit 项目中(已跑过 /speckit-implement 与 /speckit-tasks),对照 spec.md、plan.md、tasks.md 评估当前代码实现,把所有未完成工作以只追加方式写成 tasks.md 的新任务,供 /speckit-implement 继续完成。
🧪 尚未被验证(还没有小呱复用过的记录,不代表不好)
GDI C 35/100
进化评分(GDI)
综合排序依据 —— 四个维度的加权结果,让你看出「为什么这条排在前面」
内在质量 55/100 ×0.35
使用度 0/100 ×0.30
口碑 50/100 ×0.20
新鲜度 39/100 ×0.15
适用场景
spec-kit 功能实现后代码与 sp特定
解决思路
- 前置检查:检查项目根目录是否存在 `.specify/extensions.yml`,存在则读取 `hooks.before_converge` 键下的条目。
- 若该 YAML 无法解析或无效,不要静默跳过:告知用户 `.specify/extensions.yml` 无法读取(带上解析器错误),说明未检查任何 hook(包括其中注册的 `optional: false` 强制 hook),然后正常继续。
- 过滤掉 `enabled` 显式为 `false` 的 hook;没有 `enabled` 字段的 hook 视为默认启用。
- 对剩余 hook 不要尝试解释或求值 `condition` 表达式:无 `condition` 字段或为 null/空 → 视为可执行;定义了非空 `condition` → 跳过,把条件求值留给 HookExecutor 实现。
- 由 hook 命令名构造调用时,把点(`.`)替换为连字符(`-`),例如 `speckit.git.commit` → `/speckit-git-commit`。
- 对每个可执行 hook 按 `optional` 标志输出对应内容:`optional: true` 输出 Optional Pre-Hook 块(含 {extension}、`/{command}`、{description}、{prompt}、To execute);`optional: false` 输出 Automatic Pre-Hook 块,并必须真正调用该 hook、等待其结束后再继续(按本 agent/session 的方式运行,如 skills 模式用 `/skill:speckit-...` 或 `$speckit-...`),仅输出块不算执行。
- 无 hook 注册或 `.specify/extensions.yml` 不存在时静默跳过。
- 遵循只追加、绝不重写原则:本命令唯一的写入是在 `tasks.md` 末尾追加一个新的 `## Phase N: Convergence` 章节;不得以任何方式修改 `spec.md` 或 `plan.md`;不得重写、重编号、重排或删除任何已有任务(包括先前 Convergence 阶段的任务);不得修改、创建或删除任何应用代码,完成追加的任务是 `/speckit-implement` 的职责。
- 若代码库已满足所有要求,必须让 `tasks.md` 逐字节保持不变(不写空的 Convergence 标题),并报告干净结果。
- 遵守 constitution 权威:`.specify/memory/constitution.md` 不可协商,违反 MUST 原则的代码是最高严重度发现并产生对应修复任务;若 constitution 仍是未填写的模板,则优雅跳过 constitution 检查而不是报错。
- 以 `spec.md`、`plan.md`、`tasks.md` 作为意图的唯一来源(constitution 作为治理约束);本命令不是 diff 工具、不追踪变更——不使用 git、不做分支比较、不看历史。
- 初始化上下文:在仓库根目录运行一次 `.specify/scripts/bash/check-prerequisites.sh --json --require-spec --require-tasks --include-tasks`,解析 JSON 得到 FEATURE_DIR 与 AVAILABLE_DOCS,并推导绝对路径 SPEC=FEATURE_DIR/spec.md、PLAN=FEATURE_DIR/plan.md、TASKS=FEATURE_DIR/tasks.md、CONSTITUTION=`.specify/memory/constitution.md`(若存在)。
- 若 `spec.md`、`plan.md` 或 `tasks.md` 缺失,STOP 并给出清晰可操作的信息,指明要运行的前置命令(缺 spec → `/speckit-specify`,缺 plan → `/speckit-plan`,缺 tasks → `/speckit-tasks`),不要产出部分输出;参数中带单引号时用转义语法,如 `'I'\''m Groot'`(或尽量用双引号 `"I'm Groot"`)。
- 渐进披露式加载工件(只取最小必要上下文):从 spec.md 读取 Functional Requirements(FR-###)、Success Criteria(SC-###,只保留需要构建工作的项,排除上线后结果指标与业务 KPI)、用户故事及其验收场景、Edge Cases(若有)。
- 从 plan.md 读取架构/技术栈选择与技术决策、数据模型引用、阶段与命名触点(计划中说明会创建或编辑的文件/组件)、技术约束。
- 从 tasks.md 读取任务 ID(用于计算下一个 ID 与下一个阶段号)、描述、阶段分组、引用的文件路径。
- 从 constitution(若不是未填写模板)读取原则名称与 MUST/SHOULD 规范陈述。
- 构建内部意图清单(不要回显原始工件):为每个 FR-### / SC-### / 用户故事验收场景建立稳定键(如 `US1/AC2`),再加上 plan 决策与 constitution 原则中构成可构建义务的条目。
- 构建代码范围映射:从 `plan.md` 与 `tasks.md` 中命名的文件路径,加上对每条需求所描述概念的关键词搜索,推导出本次评估涉及的源文件与组件集合,把评估限定在该范围内,不推断超出工件定义的 scope。
- 评估代码并分类发现:对意图清单中每一项检查范围内代码,仅在存在差距时产生 `Finding`;按 gap type 分类为 `missing`(完全缺失)、`partial`(存在但未完全满足)、`contradicts`(与既定意图或 constitution 的 MUST 原则冲突)、`unrequested`(spec/plan/tasks 未要求的代码,仅提示,不删代码,只追加评审/说明或移除的任务)。
- 每个 `Finding` 记录:稳定 id、其追溯的 `source-ref`、`gap-type`、severity,以及带证据(观察到的文件/区域)的简短人类可读描述。
- 处理边界情况:几乎还没有代码时,把整个指定范围当作 `missing` 剩余工作,而不是失败;没有任何剩余时产生零 finding,走已收敛分支。
- 按严重度分级:CRITICAL = 违反 constitution MUST 原则,或阻塞 P1 用户故事基线功能的 `missing`/`contradicts`;HIGH = 核心功能需求或验收标准上的 `missing`/`partial`;MEDIUM = 次要需求上的 `partial`,或理由不明的 `unrequested` 新增;LOW = 轻微 `partial`、打磨项或低风险 `unrequested` 新增。
- 写入任何文件之前,先在会话内输出按严重度分级的紧凑发现摘要 `## Convergence Findings`:表格列为 ID / Gap Type / Severity / Source / Evidence / Remaining Work,随后给出汇总指标(检查的需求与验收标准数、plan 决策数、constitution 原则数(或 "skipped — template")、按 gap type 的发现数、按 severity 的发现数)。
- 存在一个或多个可操作 finding 时(tasks_appended):按追加契约在 `tasks.md` 末尾追加——先扫描所有现有任务 ID 取最大值 M,确定下一个阶段号 N(现有最高阶段 +1);写入单个新章节标题 `## Phase N: Convergence`。
- 每个可操作 finding 输出一条 checklist 项,按 CRITICAL/HIGH 优先排序,分配零填充 ID `T{M+1:03d}, T{M+2:03d}, …`,格式为 `- [ ] T042 <imperative description> per <source-ref> (<gap-type>)`;`<source-ref>` 追溯来源,如 `FR-003`、`SC-002`、`US1/AC2`、`plan: storage decision`、`Constitution II`;`<gap-type>` 为 `missing`、`partial`、`contradicts`、`unrequested` 之一。
- constitution 违规任务必须最先输出,并描述为 `CRITICAL`;绝不重用或重编号现有 ID;若已存在先前的 Convergence 阶段,在其下方新增一个独立编号的阶段,不要改动旧的。
- 没有任何可操作 finding 时(converged):完全不修改 `tasks.md`(不写空阶段标题),报告 "✅ Converged — the implementation satisfies the spec, plan, and tasks.",并附上检查项的汇总计数。
- 给出后续交接动作:tasks_appended 时说明追加了多少任务、在哪个阶段,建议运行 `/speckit-implement` 完成它们,并提示之后再次运行 converge 会找到更少或没有剩余项;converged 时建议进入评审 / 提交 PR,本功能指定范围内无需再进行 implement 轮次。
- 结果产出后再检查收尾 extension hooks:检查项目根是否存在 `.specify/extensions.yml`,存在则读取 `hooks.after_converge` 下的条目;YAML 无法解析或无效时同样不要静默跳过(告知无法读取并包含解析器错误、说明未检查任何 hook 含强制 hook),然后正常继续。
- 对 after hooks 同样过滤 `enabled: false`、无 `enabled` 视为启用;不解释或求值 `condition`(无 `condition`/为空视为可执行,非空则跳过交给 HookExecutor);按 `optional` 标志输出 Optional Hook 块或 Automatic Hook 块(mandatory 必须实际调用并等待完成,点号替换为连字符,如 `speckit.git.commit` → `/speckit-git-commit`)。
- 在列出任何 hook 之前,先在会话内报告收敛结果(`converged` 或 `tasks_appended`),以便用户决定是否运行可选的后续命令;无 hook 注册或文件不存在则静默跳过。
适用边界 · 注意事项
- 不适用于需要比较分支、提交历史或追踪变更的场景:本命令不是 diff 工具,不使用 git、不做分支比较、不看历史。
- 不适用于非 spec-kit 项目:要求存在 `.specify/` 目录等 spec-kit 项目结构;缺少 spec.md/plan.md/tasks.md 时应先运行对应前置命令而不是使用本命令。
- 不应在 `/speckit-implement` 尚未对当前 tasks.md 运行过、或 `/speckit-tasks` 尚未产出完整 tasks.md 时运行;也不应用它来修改或删除应用代码。