模糊工单
让通知设置更清楚。 用户应该知道自己订阅了什么。
这些例子展示 Spec Coding 的核心动作:把弱 AI 编码提示词改写成评审者、测试人员和编码代理都能遵守的文件。
让通知设置更清楚。 用户应该知道自己订阅了什么。
spec.md - 目标:按事件展示邮件、站内信和推送偏好。 - 非目标:不新增通知供应商。 - 风险:迁移时重复发送通知。 acceptance-criteria.md - Given 现有用户关闭了邮件 When 偏好完成迁移 Then 每个事件的邮件仍保持关闭。 test-evidence.md - 迁移 dry run - 旧移动端截图 - 重复通知回归测试
优化 API 错误。 让客户端更容易处理。
spec.md - 目标:统一 code、message、trace_id 和 retryable。 - 非目标:不改变 endpoint 行为。 - 约束:旧 SDK 仍能解析响应。 acceptance-criteria.md - Given 请求参数校验失败 When API 返回 422 Then 响应包含 code、message、field_errors、trace_id。 test-evidence.md - 400/401/409/422 契约测试 - SDK 兼容 fixture - 变更示例的发布说明
给报表加 CSV 导出。 大客户也要能用。
spec.md - 目标:支持最多 100 万行的异步 CSV 导出。 - 非目标:不做 PDF 导出。 - 风险:长任务和过期筛选条件。 tasks.md - 保存导出请求和筛选条件 - worker 使用 retry 和 idempotency key - 文件准备好后通知用户 test-evidence.md - 100 万行压测 - worker 失败重试测试 - 过期下载链接检查
看一个涉及金额的 checkout 需求,如何变成包含校验、总价计算和回滚证据的有边界规格。
打开优惠码案例看一个 API 错误清理需求,如何变成包含 fixtures、SDK 检查和 OpenAPI 示例的兼容契约。
打开 API 错误案例看一个宽泛设置页需求,如何变成包含退订保留、重复发送证据和 worker 检查的迁移规格包。
打开通知案例看一个模糊字段需求,如何变成 expand、backfill、switch、cleanup 分阶段迁移计划。
打开数据库案例看一个过宽的 AI 生成 PR,如何变成包含允许路径、非目标和 changed-file 证据的评审规格包。
打开 AI PR 案例看一个 CSV 导出需求,如何变成包含权限、状态流转、队列证据和失败处理的异步 job 规格。
打开导出案例小 UI 或文案改动,用一段 before/after 就够了。只要实现可能悄悄改变金额、权限、用户同意、外部契约、数据迁移或后台任务,就应该升级成完整规格包。
如果 SDK、外部集成或另一个团队会消费结果,就要补兼容说明和 fixture,而不是只写一段解释。
如果要回填旧数据,就把规格拆成 expand、dry run、switch 和 cleanup,并给每个阶段写回滚信号。
如果涉及计费、通知、隐私或同意状态,证据必须证明旧选择没有被覆盖。
模式看起来重复,是因为失败模式本来就很重复:需求写了想要的结果,却把边界、风险和证明方式留在脑子里。改写不需要变成完整 PRD,它只需要回答评审者原本会在第一个 AI 生成 diff 过大之后才追问的问题。
好的改写会写清角色、当前状态、触发动作和可观察结果,也会写清什么不应该变化。对 AI 编码来说,非目标往往是规格包里最重要的一行,因为它能阻止助手“顺手”重建相邻系统。
用户意图、运行风险,以及上线后必须可观察到的结果。
非目标、约束、验收标准、允许实现切片,以及合并前需要的证据。
“做得更好”“处理边界情况”“优化体验”这类没有绑定可测试状态的空话。
如果 QA 写测试前还必须追问作者,验收标准仍然太模糊。
如果评审者找不到非目标或允许文件边界,规格包就挡不住过大的 diff。
如果 evidence 只写“测试通过”,就补上具体命令、fixture、截图、日志查询或指标。
不要先复制领域细节,要复制改写动作。先写下团队平时会直接丢给 AI 编码工具的那句模糊需求,然后用四个过滤器处理它:行为到底改什么、什么不在范围内、最可能的失败模式是什么、PR 合并前应该看到什么证明。
小改动可以把改写结果放在一个 issue 评论里;高风险改动建议拆成多个文件,让每个产物只负责一件事。spec 负责行为和边界,tasks 负责实现切片,acceptance 负责可观察结果,evidence 负责证明。角色分开后,规格包更容易评审,也更容易在实现发现新约束时更新。
这些示例也展示了什么时候应该停止写。只要评审者能理解目标行为、拒绝范围漂移,并说出需要哪些验证证据,再继续堆 prose 反而会让规格变差。目标不是长文档,而是足够结构化,让代码生成少执行隐藏假设。
这些问题会让改写看起来更整洁,但实现风险没有真正降低。评审时应该看边界、证据和可测试性,而不是只看文字是否像文档。
标题变专业,但边界没有增加,留给实现者的歧义仍然一样多。
任务只有在目标行为和非目标明确之后才有意义,否则只是把假设拆得更细。
如果没人负责测试、截图、日志查询或复查日期,证据清单就很容易变成口号。
把示例迁移到自己的需求时,先不要问“这段写得像不像规格”,而要问“评审者能不能凭它阻止错误实现”。如果非目标没有挡住一个真实诱惑,验收标准没有给 QA 一个可执行场景,证据没有指向具体测试或截图,那么改写仍然停留在文案层。
最可靠的做法,是让一个没有参与需求讨论的人读这份规格。如果他能说出要改什么、不改什么、风险在哪里、合并前看什么证明,说明规格已经足够指导 AI 编码。如果他还需要追问背景,说明还应该补上下文,而不是急着开始实现。
这些示例作为实用教学材料维护,重点展示具体 before/after 动作,而不是泛泛的最佳实践列表。