speckit.analyze.md 6.44 KB
description: 在生成 tasks.md 之后,对 spec.md、plan.md、tasks.md 做一次非破坏性的跨文件一致性与质量分析。

用户输入

$ARGUMENTS

在继续之前,你必须先考虑用户输入(如果不为空)。

目标

在开始实现之前,识别三份核心产物(spec.mdplan.mdtasks.md)之间的不一致、重复、歧义和说明不足之处。本命令必须/speckit.tasks 成功生成完整的 tasks.md 之后才运行。

运行约束

严格只读不要修改任何文件。输出结构化的分析报告。可以提供可选的修复方案(用户必须明确同意后,才可以人工触发后续的编辑命令)。

宪法优先级:在本分析范围内,项目宪法(.specify/memory/constitution.md不可协商。任何与宪法冲突的问题都自动视为 CRITICAL,并要求调整 spec/plan/tasks,而不是淡化、重新解释或悄悄忽略原则。如果确实需要修改原则本身,必须在 /speckit.analyze 之外,通过单独、明确的宪法更新来完成。

执行步骤

1. 初始化分析上下文

在仓库根目录只运行一次 .specify/scripts/bash/check-prerequisites.sh --json --require-tasks --include-tasks,并解析 JSON 中的 FEATURE_DIR 和 AVAILABLE_DOCS。推导出绝对路径:

  • SPEC = FEATURE_DIR/spec.md
  • PLAN = FEATURE_DIR/plan.md
  • TASKS = FEATURE_DIR/tasks.md

如果缺少任何必需文件,直接报错并提示用户运行缺失的前置命令。 当参数里包含单引号(例如 "I'm Groot")时,使用转义写法:如 'I'\''m Groot'(或尽量用双引号:"I'm Groot")。

2. 加载产物(渐进式披露)

每个产物只加载最少且必要的上下文:

来自 spec.md:

  • 概览/背景
  • 功能需求
  • 非功能需求
  • 用户故事
  • 边界情况(如存在)

来自 plan.md:

  • 架构/技术栈选择
  • 数据模型引用
  • 阶段划分
  • 技术约束

来自 tasks.md:

  • 任务 ID
  • 任务描述
  • 阶段分组
  • 并行标记 [P]
  • 引用到的文件路径

来自宪法:

  • 加载 .specify/memory/constitution.md 用于原则校验

3. 构建语义模型

创建内部表示(输出中不要包含原始产物全文):

  • 需求清单:每条功能/非功能需求都要有稳定的 key(根据祈使句短语生成 slug;例如 “用户可以上传文件” → user-can-upload-file
  • 用户故事/动作清单:离散的用户动作及其验收标准
  • 任务覆盖映射:将每个任务映射到一个或多个需求/故事(通过关键字推断或显式引用模式,比如 ID、关键短语)
  • 宪法规则集:提取原则名称以及 MUST/SHOULD 等规范性语句

4. 检测遍历(Token 高效分析)

聚焦高信号问题。总计最多输出 50 条发现;其余聚合到溢出摘要中。

A. 重复检测

  • 识别近似重复的需求
  • 标记表达质量较低的需求,建议合并收敛表述

B. 歧义检测

  • 标记缺少可度量标准的模糊形容词(fast、scalable、secure、intuitive、robust 等)
  • 标记未解决的占位符(TODO、TKTK、???、<placeholder> 等)

C. 说明不足

  • 有动词但缺少对象或可度量结果的需求
  • 用户故事缺少与验收标准对齐的说明
  • 任务引用了 spec/plan 中未定义的文件或组件

D. 宪法对齐

  • 任意与宪法 MUST 原则冲突的需求或计划要素
  • 缺失宪法要求的必填章节或质量门禁

E. 覆盖缺口

  • 没有关联任务的需求
  • 未映射到任何需求/故事的任务
  • 未在任务中体现的非功能需求(例如性能、安全)

F. 不一致

  • 术语漂移(同一概念在不同文件中用不同名称)
  • plan 引用的数据实体在 spec 中缺失(或反之)
  • 任务顺序自相矛盾(例如未注明依赖却在基础初始化之前安排集成任务)
  • 需求相互冲突(例如一处要求 Next.js,另一处指定 Vue)

5. 严重级别判定

使用以下启发式规则为发现排序:

  • CRITICAL: 违反宪法 MUST、缺失核心产物,或关键需求零覆盖导致基线功能无法实现
  • HIGH: 重复或冲突的需求、含糊的安全/性能属性、不可测试的验收标准
  • MEDIUM: 术语漂移、缺少非功能需求的任务覆盖、边界情况说明不足
  • LOW: 风格/措辞改进、不影响执行顺序的轻微冗余

6. 产出精简分析报告

按以下结构输出 Markdown 报告(不写文件):

规格说明分析报告

ID 类别 严重级别 位置 摘要 建议
A1 重复 HIGH spec.md:L120-134 两条相似需求…… 合并表述;保留更清晰的版本

(每条发现一行;生成稳定 ID,并以类别首字母作为前缀。)

覆盖摘要表:

需求 Key 是否有任务 任务 ID 备注

宪法对齐问题:(如有)

未映射任务:(如有)

指标:

  • 需求总数
  • 任务总数
  • 覆盖率(至少关联 1 个任务的需求占比)
  • 歧义数量
  • 重复数量
  • 严重问题数量

7. 给出下一步动作

在报告末尾输出精炼的“下一步动作”区块:

  • 若存在 CRITICAL:建议在进入 /speckit.implement 之前先解决
  • 若只有 LOW/MEDIUM:可继续推进,但应给出改进建议
  • 给出明确命令建议:例如“用更精炼描述重新运行 /speckit.specify”“运行 /speckit.plan 调整架构”“手动编辑 tasks.md 为 ‘performance-metrics’ 补齐覆盖”

8. 提供修复建议

询问用户:“你希望我为前 N 个问题给出具体的修复编辑建议吗?”(不要自动应用。)

运行原则

上下文效率

  • 最小高信号 token:聚焦可执行发现,不做穷举式文档复述
  • 渐进式披露:逐步加载产物,不把全文倾倒进分析
  • token 高效输出:发现表最多 50 行,其余做溢出摘要
  • 确定性结果:在无变更前提下重复运行应得到一致的 ID 与统计

分析准则

  • 禁止修改文件(严格只读分析)
  • 禁止臆造缺失章节(缺失就如实报告)
  • 优先处理宪法违规则(一律 CRITICAL)
  • 用例子胜过穷举规则(引用具体实例而不是泛泛而谈)
  • 零问题也要输出报告(给出覆盖统计并明确通过)

上下文

$ARGUMENTS