SKILL.md 13.1 KB

SKILL.md — PRD 撰写方法论

训练对象:prd-methodology-trial(独立试验节点) 依据:训练材料 knowhow_v1.md(4 流派调研 + e2e-demo 反面案例)+ benchmark_v1.md(6 维度评分标准) ——均在本体 train/{hunt,digest}/ 下,供人工审阅训练过程,不是本 SKILL 运行时依赖 目标读者:任何要把 BRD 翻译成 PRD 的角色(如 prd-planning),下笔前/自检时使用 目标:产出的 PRD 按 benchmark_v1.md 打分达到「优秀」档(≥80,及格线 65,见该文档三、3.3; 目标刻度取值理由见训练材料 evolve_report.md 一、目标分数对齐,位于 train/evolve/ 下) 训练验证:2 轮 Small Loop(真实反面案例重写 96 分 / 全新虚构场景 97 分),均远超及格线且 相互印证方法论不是对单一案例的记忆式过拟合,详见 train/evolve/ 下的 iteration_1_scores.json / iteration_2_scores.json / real_project_reflection.md


〇、先读懂你要解决的问题

prd-planning/agent.md 现有的"四类东西"检查表(功能清单/行为规则/异常边界/验收线索)只保证 结构完整,不保证内容够格。e2e-demo 真实案例(data/companies/e2e-demo/runs/run_c7d233619784/ nodes/rn_42eed93342c5/prd.md)证明了这一点:四类东西全部按字面要求写全,D1-D4 接近满分, 但正文写了"大图"、验收线索表里却没有任何一行提到图片——产出实测 0 个 <img> 标签; 文案要求只写"不能为空"——产出三段说明都卡在刚好非空的水平;BRD 的转化类业务度量 ("访客几十秒内判断是否是要找的产品")从未被翻译成任何 CTA 功能。这份 PRD 按 benchmark_v1.md 打分只有 50 分(待改进),低于及格线。

本方法论要解决的核心问题:让"正文写了什么"和"验收线索表验什么"在写 PRD 的过程中 天然对齐,而不是事后靠审查发现脱节。做法不是加一道审查工序,而是把 D5/D6 检查点内嵌进 写作步骤本身——写正文的同一时刻就顺手写验收线索,而不是先写完全部正文再回头补验收线索表。


一、使用前提

  • 你已经拿到上游 brd-planning 的 contract.json(exports.brd_path / in_scope / out_of_scope / success_metrics)。
  • success_metrics(BRD"做到什么算解决")里如果出现转化/体验类表述(访客要不要行动、 要不要产生某种感受、要不要在多长时间内做出判断),先圈出来,第五步会用到。
  • 上游契约缺关键项(out_of_scope 空着、success_metrics 全是形容词)不要硬补—— 这是 prd-planning 自身的既有规则(agent.md「说不清就别硬写」),本方法论不覆盖这条。

二、八步流程

Step 1 — 功能清单(对应 D1,权重 20)

每条功能一句话:"谁 + 在什么场景下 + 做什么"。自检:这条功能摊开来能不能实现成 ≥2 种不同的东西?能,就是写虚了,继续拆细直到只剩一种实现路径。

Step 2 — 行为规则(对应 D1)

给每条功能的输入→输出确定映射,含默认值。反面信号(agent.md 原文):"只写了 『支持导出』,没写导出什么列、什么顺序、什么编码"。凡是出现"支持 XX"这种动词而不接 具体规则的句子,视为未完成,必须继续展开。

Step 3 — 异常与边界扫描(对应 D2,权重 12)

固定过一遍五类:空 / 超长 / 越权 / 并发 / 失败重试。对每一类,二选一: (a) 写明确表现规则,或 (b) 显式写"不适用 + 理由"(例如纯静态展示页可以对"越权"写 "不适用:无鉴权/数据写入场景")。不允许整类不提——不提等于评分时判"整块省略", 命中 D2 最低档。

Step 4 — 描述性语言扫描 + 就地挂验收线索(对应 D5,权重 20,核心步骤)

这是本方法论新增、直接针对 e2e-demo 案例根因设计的步骤,必须在写 Step 6 验收线索表 之前完成,且要在写下每一句描述性正文的同时执行,不要写完全部正文再回头补。

操作:逐句重读 Step 1-3 已经写下的正文(尤其"视觉风格""体验""风格调性"这类段落), 标出所有描述性/形容词性用语——典型信号词:大 / 丰富 / 精美 / 有吸引力 / 简洁大气 / 专业 / 现代感 / 温馨 / 高级感 / 干净 / 舒适 / 有质感 / 沉浸感。

对标出的每一个描述性用语,做以下两件事之一,当场决定,不要拖到后面:

  1. 转成量化代理指标,用附录 A 的对照表或自己推导一个可编程核验的判据, 随手记在旁边(Step 6 会正式收进验收线索表)。例:"大图" → "页面存在至少 N 个 宽度 ≥ XXXpx 的图片/插画元素,图片区域占卡片可视面积 ≥ M%"。
  2. 改写正文,删除这个形容词,换成本来就该写的具体规则(这往往说明这句话 本来就该属于 Step 2 行为规则,而不是模糊的风格描述)。真实案例 p-bkhylu 证明这条 路径完全可行:那份 PRD 全文没有出现"大图/图文并茂"这类承诺句,只写了"如展示图形 元素须为自制内容"这种约束句,因此 D5 拿到 4 分——不是因为它承诺了丰富视觉又兜住了 验收,而是它压根没做兑现不了的承诺。找不到合理量化代理时,删词改写不是退而求其次, 是更诚实的选择。

判断做完没有的标准:把 Step 1-3 正文再读一遍,如果还能找到一个形容词性词语 在你脑子里没有对应的量化判据,就是没做完。

特殊情况:如果 PRD 正文本身不涉及任何视觉/体验描述(纯功能性/数据型需求, 例如后台管理类 PRD),这一步确认"正文零描述性词汇"后可以跳过,直接空真满分—— 不要为了走流程硬造一个视觉要求。

Step 5 — 内容深度与业务度量翻译(对应 D6,权重 15,核心步骤)

判据 A:内容深度下限。凡是 PRD 涉及文案/说明性内容的功能(标题、简介、说明文字、 空状态提示等),不能只写"不能为空"。必须至少二选一:

  • 给最小字数/字符数区间;或
  • 要求内容包含至少一个具体名词/数据/场景化描述(禁止清单:不能是纯套话,例如 "很棒的产品""专业可信赖"这类不含具体信息的形容词堆砌,见附录 B 反例清单)。

判据 B:业务度量翻译。回到〇/一步圈出的 BRD 转化/体验类 success_metrics。 对每一条,问:"功能清单里有没有一条能直接指出来的具体功能在承接这条度量?" 不能是"这几条功能加起来大概能覆盖"这种含糊说法——必须能指到具体一条 F-N。 常见承接形式:CTA 按钮 + 明确跳转目标、空状态引导、下一步入口。如果指不出来, 在功能清单里新增一条,不要跳过这一步指望验收线索表能补救——功能清单没有的东西, 验收线索也无从谈起。

若 BRD 本身不含转化/体验类度量(纯功能性需求),判据 B 视为不适用,只按判据 A 评分, 在 PRD 里显式写一句"BRD success_metrics 为功能性描述,本条不适用",不要留空造成 "是漏了还是不适用"的歧义(呼应 D2 同样的"不适用要显式声明"原则)。

⚠️ 新增功能不能绕开 Step 1/Step 2 的确定性要求:Step 5B 为了承接业务度量新增的功能 (典型如 CTA 按钮),必须像其它功能一样写清具体触发条件/跳转目标/展示位置——"跳转到 范围内某个锚点"这种表述本身就是 Step 1 定义的"摊开成多种实现"的反面信号,必须精确到 具体锚点 ID/具体位置。为了修 D6 新加的功能反而在 D1 留了口子,等于拆了东墙补西墙 (训练迭代1曾真实踩过这个坑,D1 因此从5分掉到4分,迭代2改正后两项都保住了满分)。

Step 6 — 验收线索表(对应 D3,权重 18)

把 Step 1-5 积累的所有判据(功能验收 + Step 4 量化代理指标 + Step 5 业务度量对应功能 的验收)汇总成表。每一行自检:"goal-benchmark 拿着这一行需不需要追问就能写出可度量 的验收维度?"——凡是还剩"看起来符合""体验良好"这类主观描述且没有数值/操作序列化的, 继续往下拆,拆到可编程核验或至少可复现操作序列为止。允许保留 1 处整体风格类判据带 轻微主观性(如"字号明显大于正文字号,视觉上一眼可辨"),但不能整表都是这种级别。

Step 7 — 需求可追溯性 + 技术中立性自检(对应 D4,权重 15)

  • 逐条对照 BRD in_scope:每一条能不能在 PRD 里指到至少一条具体功能/规则?指不到 就是漏了需求,回 Step 1 补。
  • 逐条对照 BRD out_of_scope:PRD 里有没有偷偷出现对应功能?出现就是扩了范围,删掉。
  • 通读全文找具体技术方案词(框架名、中间件名、数据结构选型、具体算法)。 出现就改写成行为描述(agent.md 原句示例:"用 Redis 缓存"→"同一查询 1 分钟内重复 请求返回一致结果")。

Step 8 — 提交前自检清单

逐条打勾,任何一条打不了勾就不能提交:

  • [ ] Step 1 每条功能只能摊开成一种实现(含 Step 5B 新增的功能,跳转目标/触发条件已精确到具体值)
  • [ ] Step 2 每条行为规则有输入→输出映射 + 默认值
  • [ ] Step 3 五类异常边界,每类"有规则"或"显式不适用",没有整类空白
  • [ ] Step 4 正文里找不到一个没有对应量化判据的描述性词语(或已确认正文零描述性词汇, 或已确认该词语已被删词改写而非留在正文里无人认领)
  • [ ] Step 5A 文案类功能都有最小字数/具体化要求,不是只写"非空"
  • [ ] Step 5B BRD 转化/体验类度量都能指到具体一条功能(或已显式声明不适用)
  • [ ] Step 6 验收线索表每行可编程核验或可复现操作序列,主观判据不超过 1 处
  • [ ] Step 7 in_scope 全覆盖、out_of_scope 零渗透、无技术选型越权

三、附录 A:描述性用语 → 量化代理指标 对照表(起始集,可扩充)

描述性用语 量化代理指标示例
大图 / 图文并茂 页面存在 ≥N 个宽度/高度 ≥ XXXpx 的图片/插画元素;图片区域占容器可视面积 ≥ M%
大字体 主标题字号(px/rem)显著大于正文字号,给出具体数值区间或倍数关系
大留白 / 呼吸感 区块间垂直间距 ≥ N px,可用 CSS 计算属性核验
色彩丰富 页面使用的主题色数量 ≥ N 种,或给出具体配色方案约束(而非留白判断)
简洁大气 / 有质感 / 高级感 通常无法直接量化,优先拆成"大字体+大留白+统一配色"等已量化的子判据组合表达,避免保留原词单独出现在正文却无验收行
有吸引力 / 专业可信赖 优先转成可核验的构成要素(是否含权威背书元素、是否含具体数据展示等),或如确无法量化则删除该形容词,改写为具体规则
沉浸感 / 现代感 同上,拆解为动效/配色/字体等已知可量化维度,不保留原词孤立存在

用法提示:如果一个描述性词语实在找不到合理的量化代理,优先删词改写(Step 4 方案 2), 不要为了凑一行验收线索硬造一个和词语本身脱节的判据(例如给"专业可信赖"硬配一条 "页面能正常加载无报错"——这种判据和词语原意无关,属于 train-05 里 D5=2 分档的反例)。 真实案例 p-bkhylu 证明"根本不做兑现不了的承诺"是可行且能拿高分的真实路径,不只是 理论兜底选项,详见 real_project_reflection.md 二。

附录 B:文案套话反例清单(判据 A 用)

以下类型的文案即使非空也不满足 Step 5A:"很棒的产品""专业的服务""优质的体验""值得信赖"—— 共同特征:不含任何具体名词/数据/场景,替换成任何其它产品都成立。要求文案至少含一个 具体名词(功能名/数据/使用场景)才算通过。

附录 C:业务度量关键词分类(判据 B 用)

转化/体验类关键词(命中任一即需要走 Step 5B):转化、点击、注册、购买、下单、留资、 几秒/几十秒内判断、决定是否、意愿、引导、下一步、说服、打动。 纯功能性关键词(不触发 Step 5B,仅按判据 A 评分):查得到、筛得出、导得出、算得对、 状态一致、响应正确。

附录 D:方法论边界(本轮训练明确不覆盖的问题)

真实案例 p-v1mpcl 暴露了一类与 PRD 内容质量完全无关的失败模式:规划节点自报成功但 产物没有真正落盘(planner-validator 抓到的 impl_bug)。这属于 DevLoop 引擎层的 产物存在性校验问题,不是"PRD 写得够不够格"的问题,本方法论不处理,也不应该处理—— 内容质量方法论的前提是"PRD 文档确实存在",这个前提本身的保障不在本方法论范围内。 详见 real_project_reflection.md 三。