发现
通过苏格拉底式检查将非结构化的利益相关者输入转化为可追溯的需求。你不是一个转录员:要捕捉陈述的内容和隐含的内容,标记模糊之处,并生成候选故事,供 /refine-story 带入冲刺规划。输入不支持的内容不会进入;输入暗示的内容作为有根据的推断进入;输入未明确说明的内容则变成一个疑问。
输入:$ARGUMENTS
开始之前
阅读工作区中的 docs/agents/refinement.md:它定义了操作模式、语言(en-US 或 pt-BR,默认为 en-US)以及发布路径。如果缺失,请请求 /configure-refinement 并停止。如果参数是一个状态为 Status: open map(或 Status: mapa aberto)的规范,则直接跳转到“恢复决策地图”。如果输入来源于 /meeting-minutes,它已经区分了陈述的事实和假设:将假定的协议视为未确认。检查和生成的规范遵循配置的工作区语言。
步骤
-
加载与分类。 读取输入、
CONTEXT.md,并调用requirements-rigor的技能工具。扫描反模式(单独阅读requirements-rigor中的ANTI-PATTERNS.md)以及总是会触发问题的术语:此扫描为分类提供基础。通过计数摘录片段而非文本量进行分类:USABLE(每个摘录片段都能构建一个需求)、PARTIALLY USABLE(至少一个摘录片段能构建一个需求且至少一个不能)、UNUSABLE(没有摘录片段能构建需求)。UNUSABLE:陈述此结果并提供逐片段的原因分析,列出 3 到 5 个最简问题并附上接收者(输入提供者,除非术语表中可识别出领域角色),按照requirements-rigor中的QUESTIONNAIRE.md编写问卷,告知用户/requirements-discovery将在收到回复后重新运行,并停止发布进一步的工件;填充型故事对任何人都没有帮助。PARTIAL:继续,最终工件开头列出未使用的摘录片段以及每个片段中缺失的内容。 完成标志:分类在一行中陈述,如果不是 USABLE,则后续附上每个片段的原因分析。 -
广度优先映射。 在生成任何故事之前,扫描完整的输入:具有置信度评级(高、中、低;低表示该发现需要后续对话)的业务领域、具有类型(业务、技术、最终用户)及各自倡导内容的利益相关者、具有复杂度(S、M、L 或 XL)并在一行中给出理由的史诗;没有封闭列表或可衡量标准的摘录片段暂时不会变为史诗,在检查确定其规模之前,它们仍处于部分处理状态。当输入是二手信息时,记笔记的人以“来源”类型进入利益相关者表。两个声音在同一需求上立场相反:添加
[CONFLICT],记录双方立场而不单方面解决。由单个声音陈述的需求添加[VALIDATE WITH TEAM],如果确认至关重要:未满足的角色需求、由非决策者做出的范围决策;当两个声音涉及不相关的主题时,不要标记所有内容。业务需求和技术约束来自不同的利益相关者,具有不同的权重:区分它们。 完成标志:每个输入摘录片段都映射到一个领域和史诗,或者被列为未利用。 -
提问前先查找事实。 检查术语表、
.scratch/中的先前故事、工作区文档,以及在代码模式下,检查代码库:提到的集成是否已经存在?阈值是否已经实现?找到的事实成为带有引用来源的推荐答案。在无代码模式下,搜索仅限于工作区文件,不使用子代理;如果什么都没找到,在第一轮顶部用一行说明这一点。 完成标志:每个候选问题都被标记为已通过来源回答或待解决。 -
确定范围大小。 调用
socratic-examination的技能工具并进行广度优先检查:目标成果(本次发现要交付什么)、范围边界、冲突以及影响史诗大小的因素。SLA、渠道和边界情况代表深度,推迟到步骤 5。如果在本轮结束时,待解决问题边界适合在单个会话中解决,则继续步骤 5。如果存在大量的迷雾(预期要做出但尚未能表述的决策,因为它们依赖于待定答案),则打开地图:按照 TEMPLATE.md 发布规范,状态为Status: open map,为每个可表述的问题在issues/NN-decision-<slug>.md中创建一个待定决策文件,当依赖于另一个决策时标记Blocked by:,并将不可表述的迷雾放在“尚未指定”中。决策与迷雾的区别在于,你现在能否精确地表述这个问题,而不是能否回答它。映射迷雾是单个会话的目标:停止并告知用户/requirements-discovery <spec-path>每会话解决一个决策。 完成标志:要么问题边界适合在单个会话中解决,要么包含开放地图和待定决策文件的规范已存在。 -
检查。 继续
socratic-examination的轮次,逐个史诗进行深入检查:角色、能力、成果、输入提示的边界情况、依赖关系。解决的领域术语立即添加到CONTEXT.md中。没有与会者知道的事实接收[TO CONFIRM: whom](或[A CONFIRMAR: quem])并保留在待解决问题边界中。 完成标志:待解决问题边界为空,或用户请求关闭。 -
综合。 按照 TEMPLATE.md 编写发现规范,并按照
skills/refine-story/TEMPLATE.md为每个故事创建一个文件,状态为Status: candidate(或Status: candidata)并附上初步的 INVEST 评分卡。未能通过 INVEST 的故事不会成为干净的卡片:它仍然作为候选故事存在,并带有[INVEST-FAIL]和解决指南。包括未声明的依赖关系:集成、外部服务以及故事可实施所需的架构决策,每个都附带被阻塞的故事和所需的操作。候选故事中的每一行都必须与输入或有效的[INFERENCE: base]匹配;无依据的添加是镀金,必须删除。 完成标志:规范和候选故事存在于docs/agents/refinement.md定义的路径,并带有最终免责声明。 -
路由未完成项。 将
[TO CONFIRM]项路由给会话外部的接收者:按照requirements-rigor中的QUESTIONNAIRE.md为每个接收者编写一份问卷,与规范一同提供。 完成标志:没有未完成项仍然没有接收者或问卷。 -
报告。 创建的史诗数、候选故事数、打开的冲突以及后续步骤:每个故事使用
/refine-story,或者如果地图是开放的,使用/requirements-discovery <spec-path>。
恢复决策地图
当参数是一个状态为 Status: open map 的规范时:
- 读取完整规范和
issues/中的待定决策。当一个决策是开放的并且Blocked by:中的所有决策都已解决时,该决策变为未阻塞。 完成标志:你知道哪些决策是未阻塞的。 - 选择决策:用户指定的,或按编号第一个未阻塞的。在开始前将文件中的状态标记为
Status: in examination,以防止并发会话拾取它。 完成标志:文件状态已更新。 - 使用
socratic-examination解决它,每会话一个决策。研究型决策通过阅读带有引用的外部来源来解决,无需检查轮次。直接将答案记录在文件中的## Answer下,将状态标记为Status: resolved,并在规范的“检查决策”部分添加一行包含摘要和路径的内容。 完成标志:决策已解决并从规范链接。 - 答案可能会清除周围的迷雾:新可表述的项离开“尚未指定”并成为新的待定决策;超出范围的项移至“超出范围”。任何因答案而失效的决策都用一行理由关闭。 完成标志:没有待定决策与答案矛盾,并且迷雾已重新评估。
- 如果没有待定决策打开:将规范状态更新为
Status: in progress,并在同一会话中继续主要步骤的第 5 步(如果上下文允许),否则在下一个会话中使用相同的命令。 完成标志:规范离开开放地图状态,或者你报告还剩多少个决策。
待定决策格式:
# 决策 NN:<一句话形式的问题>
状态:<开放 | 检查中 | 已解决 | 已关闭>
阻塞者:<NN, NN 或 无>
类型:<检查 | 研究>
## 疑问
<必须决定什么以及为什么它会阻塞进展>
## 答案
<解决时:决策、决策者、日期>
最终声明
⚠️ 此输出是分析草稿。在进入冲刺前需要人工审核。验证:技术可行性、合规性以及未映射的依赖关系。