关于 doc-ears
用于 SDD 第 3 层的 EARS 需求编写技能,将 PRD 内容整理为原子化、可测试且可追溯的规范陈述。它规定五种需求模式、量化约束、文档结构和 BDD 就绪质量门槛。
主要功能
- 01编写五类 EARS 需求
- 02要求陈述原子化且可测试
- 03使用量化质量属性约束
- 04维护需求 ID 与 PRD 追溯
- 05验证文档结构和就绪评分
适用场景
- 01将 PRD 功能转成行为需求
- 02明确事件、状态和错误处理规则
- 03为需求设置可测量的性能目标
- 04为后续 BDD 场景准备需求
安装
复制下面的命令,在终端中运行。
npx skills add https:/ / github.com/ vladm3105/ aidoc-flow-framework --skill doc-ears安装后在 Claude Code 中输入/doc-ears确认已加载。
详细介绍
doc-ears
用途
创建 EARS(需求语法简易方法) 文档,即 SDD 流程的第 3 层。EARS 使用 WHEN-THE-SHALL-WITHIN 语法,将 BRD/PRD 需求形式化为精确、原子、可测试的陈述,为转换为 BDD 做好准备。
层级:第 3 层——形式化 Context(BRD)→ Container(PRD)过渡的细化步骤;自身不属于任何 C4 层级。 上游:PRD(第 2 层)。(根据必要上游契约,可通过 @ 标签链传递追溯到上游 BRD。) 下游:BDD → ADR → SPEC → TDD → IPLAN → Code。
每条 EARS 陈述都必须可测试(可推导出 Given-When-Then)、可衡量(约束可量化)、可追溯(@prd)且原子化(每条陈述只包含一个概念)。
使用时机
在以下情况下使用 doc-ears:
- PRD(第 2 层)已存在,且你需要正式需求(上游 BRD 可通过 PRD 自身的
@brd标签传递追溯到)。 - 将产品功能转换为精确的行为陈述。
- 确立事件驱动、状态驱动、可选/功能门控、错误处理或系统级规则。
若要从 PRD、提示词或 IPLAN 端到端生成文档,请使用
../doc-ears-autopilot/SKILL.md。
前置条件
编写前,请阅读:
- 模板(事实依据):
${CLAUDE_PLUGIN_ROOT}/framework/layers/03_EARS/EARS-TEMPLATE.yaml - 层级 README:
${CLAUDE_PLUGIN_ROOT}/framework/layers/03_EARS/README.md - ID 和标签规范:
${CLAUDE_PLUGIN_ROOT}/framework/governance/ID_NAMING_STANDARDS.md - 编写风格:
${CLAUDE_PLUGIN_ROOT}/framework/governance/AUTHORING_STYLE.md - 驱动此 EARS 的上游 PRD(以及通过 PRD 自身的
@brd标签追溯到的源 BRD)。
确认没有 ID 冲突:ls docs/03_EARS/ 2>/dev/null。只引用确实存在的上游文档;绝不要编造 PRD-XXX 或 TBD 之类的占位符。
层级指南
必需结构(5 个编号章节 + 术语表附录)
document_control 是第 1 节(状态、版本、日期 YYYY-MM-DD、优先级、单个 @prd: 来源、BDD 就绪度评分、修订历史表)。
然后依次为:
- 目的与上下文 · 3. 需求(五种模式)· 4. 质量属性(表格)· 5. 可追溯性。
另需包含术语表附录章节(glossary: 模板键——必需,不编号)。章节编号和标识符以 EARS-TEMPLATE.yaml 自带的 # Section N: 编号为准——模板是事实依据。
各章节的内容和内嵌编写指南参见 EARS-TEMPLATE.yaml。
五种 EARS 模式(第 3 节)
| 模式 | 语法 | 用途 |
|---|---|---|
| 事件驱动 | WHEN [trigger], THE [component] SHALL [action] WITHIN [timing]. | 用户/API/计时器事件 |
| 状态驱动 | WHILE [state], THE [component] SHALL [behavior] WITHIN [context]. | 持续性/依赖模式的行为 |
| 可选 | WHERE [feature enabled], THE [component] SHALL [behavior]. | 功能标志控制/配置门控的行为 |
| 非预期情况 | IF [error], THE [component] SHALL [recovery] WITHIN [timing]. | 故障、边缘情况、回退方案 |
| 普遍性 | THE [component] SHALL [behavior] for [scope]. | 全局不变量、日志记录、审计 |
真正包含多条件的需求会组合这些模式(例如
WHILE [state], WHEN [event], THE … SHALL …)——这是组合,而非第六种模式。
EARS 使用 THE … SHALL … 作为响应子句,绝不使用 THEN 连接词。
每项需求都必须是原子化的(只包含一个可测试的概念),并带有元素 ID 和逐项的 @prd: … 可追溯性行。适用时,使用模板中的边界值矩阵、状态转换(包含错误状态)和回退路径模式。
可量化语言(第 3 / 4 节)
正确使用 SHALL / SHALL NOT / SHOULD / MAY。将含糊的 延迟替换为百分位数:real-time → p50<100ms/p95<300ms/p99<1000ms;immediately →
<500ms;fast/quickly → 精确延迟。第 4 节(质量属性:
性能、安全性、可靠性)采用表格形式,并设定可测量的目标:
延迟/响应时间使用 p50/p95/p99 表示法,而非延迟
边界(周期/迭代次数、事件窗口、批次大小、*.count)则
以具体值 + 单位量化(不适用百分位数)。将可变值作为 @threshold: PRD.NN.category.key 标签传递(标签中不使用 PRD 章节编号)。
元素 ID 和标签
- 分层元素 ID:
EARS.{doc_id}.{section_id}.{hash}(例如EARS.01.03.c4d8;需求 = 第03节,质量属性 = 第04节)。为每个元素生成一个稳定的 4 位十六进制标识符,且在其所属章节内不重复(HASH01);发生冲突时扩展为 8 位。不要在此提示词中计算 SHA-256——哈希形式是由确定性工具流程生成的规范化目标,字节精确字段提取仅针对 BRD §7 定义(EARS 将在第 2 阶段及后续阶段处理)。权威来源:framework/governance/ID_NAMING_STANDARDS.md。 - EARS 属于第 3 层,因此必须带有必需的上游
@prd标签(遵循必要上游契约)。文档控制中只能有一个@prd:(额外标签放在各需求的标签中);不使用范围。上游 BRD 的沿袭关系可通过 PRD 自身的@brd标签传递追溯——不要在 EARS 元素上输出@brd:。 - 已移除的模式(请勿使用):
Event-XXX、State-XXX、UB-XXX、REQ-XXX;旧式三段式EARS.NN.xxxx;数字类型代码EARS.NN.25.SS; 短横线形式EARS-NN-XXX。
创建流程
- 阅读上游文档——驱动这些需求的 PRD(以及通过其
@brd标签关联的源 BRD)。 - 预留 ID——下一个可用的
EARS-NN(两位数字:EARS-01、EARS-99、EARS-102)。 按层独立(CLEANUP-PR-F 第 18 项): 在你所属层的索引中选择下一个可用编号——上游编号不是你的编号 (文档编号按层顺序递增且彼此独立;参见framework/governance/ID_NAMING_STANDARDS.md§Cross-layer cardinality)。 - 创建嵌套文件夹——每份 EARS 文档都必须放在
docs/03_EARS/EARS-NN_{slug}/中,不受文档大小影响。单文件形式: 在其中创建EARS-NN_{slug}.md;按章节拆分(>25 KB):创建EARS-NN.S_{section}.md- 索引模板:
${CLAUDE_PLUGIN_ROOT}/framework/layers/03_EARS/EARS-00_index.TEMPLATE.md。
- 索引模板:
- 先完成文档控制(第 1 节),然后根据模板完成 §2–§5 及末尾的术语表。
- 按五种模式对需求进行分类;编写原子化的
THE … SHALL …陈述(适用时注明 WITHIN 时限),并添加@threshold:约束。 - 填写质量属性(表格形式;延迟 → 百分位数,非延迟边界 → 值 + 单位)和可追溯性
(遵循必要上游契约添加
@prd)。 - 在同一次变更中更新 EARS 索引
docs/03_EARS/EARS-00_index.md。 - 验证(见下文),并一并提交 EARS 文档和索引。
验证
此技能就是验证器(不含运行时代码)。请针对 ${CLAUDE_PLUGIN_ROOT}/framework/layers/03_EARS/README.md 和 ${CLAUDE_PLUGIN_ROOT}/framework/governance/ID_NAMING_STANDARDS.md 执行验证。
- Document Control 是第一个部分。
- 5 个部分均存在且内容非空。
- 每条陈述均使用 WHEN-THE-SHALL-WITHIN 语法;SHALL/SHOULD/MAY 使用正确。
- 需求已分类(Event、State、Optional、Unwanted、Ubiquitous)且为原子项。
- 元素 ID 符合
EARS.NN.SS.xxxx;不含已移除的模式。 - 存在必需的上游标签:
@prd(根据必要上游契约);不含范围。 - Document Control 中只有一个
@prd:;约束可量化(不含“快”等模糊表述)。 - 不含对尚不存在的工件的数字下游引用。
- 已创建或更新可追溯性矩阵 / 索引;没有失效链接。
错误代码(严重级别均为 error):XDOC-006 标签格式无效 · XDOC-008 内部链接失效 · XDOC-009 缺少可追溯性部分。
**质量门禁(阻断性):**继续之前,BDD-Ready 评分必须 ≥ 90/100。如果发现问题,请修复并重新检查;如果无法修复,请记录下来以供人工审核。
下一项技能
../doc-bdd/SKILL.md — BDD 会引用此 EARS(@ears: EARS.NN.SS.xxxx),并将每条陈述转换为可执行的 Given-When-Then 场景。(BDD 所需的上游仅为 @ears;更上游的溯源信息可通过 @-标签链传递获取。)
适配
读取 .aidoc/profile.yaml;仅遵循此技能的可调项
(section_toggles、glossary)。忽略未知键;如果没有配置文件,则使用
框架默认值。权威来源:
${CLAUDE_PLUGIN_ROOT}/framework/governance/ADAPTATION.md。
相关资源
- 模板 / 编写规则:
${CLAUDE_PLUGIN_ROOT}/framework/layers/03_EARS/EARS-TEMPLATE.yaml - 层级 README:
${CLAUDE_PLUGIN_ROOT}/framework/layers/03_EARS/README.md - 索引模板:
${CLAUDE_PLUGIN_ROOT}/framework/layers/03_EARS/EARS-00_index.TEMPLATE.md - ID 与标签标准:
${CLAUDE_PLUGIN_ROOT}/framework/governance/ID_NAMING_STANDARDS.md - 质量门禁:
../doc-ears-audit/SKILL.md· 修复:../doc-ears-fixer/SKILL.md - 生成流水线:
../doc-ears-autopilot/SKILL.md - 图表(状态 / 时序):
../charts-flow/SKILL.md
快速参考
| 目的 | 使用 WHEN-THE-SHALL-WITHIN 语法将需求形式化 |
| 层级 | 3(细化;无 C4 层级) |
| 上游标签 | @prd(根据必要上游契约) |
| 关键规则 | 每条陈述均应原子化、可测试且可量化 |
| 必须包含 | Document Control(置于首位)、五种模式、5 个部分 |
| 质量门禁 | BDD-Ready ≥ 90/100 |
| 下一步 | doc-bdd |