name: canonical-spec-format description: 规范规范格式参考。在理解规范规范模式、字段要求、供应商无关规范结构或验证规范时使用。 allowed-tools: Read, Glob, Grep
规范规范格式
规范规范格式的参考指南 - 定义在ADR-115中的供应商无关中间表示。
何时使用此技能
关键词: 规范规范, 规范模式, 规范格式, 供应商无关, 规范字段, 规范验证, 规范结构, YAML规范, JSON模式
使用此技能当:
- 理解规范规范结构
- 根据模式验证规范
- 手动创建规范
- 映射供应商和规范格式
- 调试规范转换问题
快速参考
最小有效规范
id: "SPEC-001"
title: "功能标题"
type: feature
context:
problem: "问题描述(最少20个字符)"
motivation: "业务价值"
requirements:
- id: "REQ-001"
text: "系统应该做某事"
priority: must
ears_type: ubiquitous
acceptance_criteria:
- id: "AC-001"
given: "前置条件"
when: "动作"
then: "结果"
metadata:
status: draft
created: "2025-12-24"
provider: canonical
必需字段
| 字段 | 类型 | 描述 |
|---|---|---|
id |
string | 格式: SPEC-{number} |
title |
string | 人类可读标题 |
type |
enum | feature, bug, chore, spike, tech-debt |
context.problem |
string | 最少20个字符 |
context.motivation |
string | 业务价值 |
requirements |
array | 至少一个需求 |
metadata.status |
enum | draft, review, approved, implemented, deprecated |
metadata.created |
string | ISO 8601日期 |
metadata.provider |
string | 创建此规范的供应商 |
字段参考
根级别
id: "SPEC-001" # 必需: 唯一标识符
title: "功能标题" # 必需: 人类可读名称
type: feature # 必需: 规范类型
类型值:
| 类型 | 描述 |
|---|---|
feature |
新功能或能力 |
bug |
缺陷修复 |
chore |
维护任务 |
spike |
研究或调查 |
tech-debt |
技术债务减少 |
上下文部分
context:
problem: | # 必需: 最少20个字符
问题的清晰描述。
这解决了什么痛点?
motivation: | # 必需
业务价值或用户利益。
为什么我们应该投资这个?
background: | # 可选
附加上下文、历史、约束
需求部分
requirements:
- id: "REQ-001" # 必需: 规范内唯一
text: "EARS需求" # 必需: EARS格式
priority: must # 必需: must/should/could/wont
ears_type: event-driven # 必需: EARS模式类型
acceptance_criteria: # 必需: 至少一个
- id: "AC-001"
given: "前置条件"
when: "动作"
then: "结果"
and: # 可选: 附加条件
- "附加条件"
notes: "可选笔记" # 可选
优先级值 (MoSCoW):
| 优先级 | 描述 |
|---|---|
must |
不可协商,系统没有它会失败 |
should |
重要但不关键 |
could |
如果资源允许,可取 |
wont |
明确排除在范围外 |
EARS 类型值:
| 类型 | 模式 | 示例 |
|---|---|---|
ubiquitous |
The system SHALL… | “系统应该加密数据” |
state-driven |
WHILE…, the system SHALL… | “活动时,系统应该…” |
event-driven |
WHEN…, the system SHALL… | “点击时,系统应该…” |
unwanted |
IF…, THEN the system SHALL… | “如果错误,则系统应该…” |
complex |
组合 | “活动时,点击…” |
optional |
WHERE…, the system SHALL… | “启用时,系统应该…” |
设计部分 (可选)
design:
approach: | # 可选: 实现方法
如何实施的高级别描述
components: # 可选: 受影响的组件
- "组件 1"
- "组件 2"
dependencies: # 可选: 先决条件
- "外部依赖"
alternatives: # 可选: 考虑的替代方案
- name: "替代方法"
reason_rejected: "为何未选择"
可追溯性部分 (可选)
traceability:
adr_refs: # 可选: 相关ADRs
- "ADR-115"
requirement_refs: # 可选: 相关需求
- "FR-001"
- "NFR-001"
epic_ref: "EPIC-1118" # 可选: 父级EPIC
user_story_refs: # 可选: 相关用户故事
- "US-001"
元数据部分
metadata:
status: draft # 必需
created: "2025-12-24" # 必需: ISO 8601
provider: canonical # 必需
version: "1.0.0" # 可选: 语义版本
bounded_context: "WorkManagement" # 可选: 来自ADR-024
状态值:
| 状态 | 描述 |
|---|---|
draft |
初始创建,未审查 |
review |
审查/细化中 |
approved |
批准实施 |
implemented |
实施完成 |
deprecated |
不再有效 |
边界上下文值 (ADR-024):
- WorkManagement
- Orchestration
- Workflows
- Expertise
- ExecutionControl
- TriggerManagement
- Integrations
验证规则
ID 格式
| 字段 | 格式 | 示例 |
|---|---|---|
| 规范 ID | SPEC-{number} | SPEC-042 |
| 需求 ID | REQ-{number} | REQ-001 |
| 验收标准 ID | AC-{number} | AC-001 |
| ADR 参考 | ADR-{number} | ADR-115 |
| EPIC 参考 | EPIC-{number} | EPIC-1118 |
| 用户故事参考 | US-{number} | US-001 |
内容约束
| 字段 | 约束 |
|---|---|
context.problem |
最少20个字符 |
requirements |
至少一个需求 |
acceptance_criteria |
每个需求至少一个标准 |
metadata.created |
有效 ISO 8601 日期 |
EARS 模式验证
每个需求的 text 字段必须匹配其声明的 ears_type:
| ears_type | 必需模式 |
|---|---|
ubiquitous |
以 “The” + 实体 + “SHALL” 开头 |
state-driven |
以 “WHILE” 开头 |
event-driven |
以 “WHEN” 开头 |
unwanted |
包含 “IF” 和 “THEN” |
optional |
以 “WHERE” 开头 |
complex |
多个模式关键词 |
JSON 模式位置
schemas/canonical-spec.schema.json
供应商转换
规范格式作为所有供应商转换的中心:
┌─────────────┐
│ 规范 │
│ 规范 │
└──────┬──────┘
┌───────────────┼───────────────┐
│ │ │ │ │
▼ ▼ ▼ ▼ ▼
┌─────┐ ┌─────┐ ┌─────┐ ┌─────┐ ┌─────┐
│EARS │ │Ghrkn│ │Kiro │ │SpKit│ │ ADR │
└─────┘ └─────┘ └─────┘ └─────┘ └─────┘
所有供应商实现 ISpecificationProvider:
interface ISpecificationProvider
{
string ProviderName { get; }
Task<Result<CanonicalSpec>> ParseAsync(string input);
Task<Result<string>> GenerateAsync(CanonicalSpec spec);
Task<ValidationResult> ValidateAsync(CanonicalSpec spec);
bool CanParse(string input);
}
参考
详细文档:
仓库资源:
schemas/canonical-spec.schema.json- JSON 模式docs/adr/ADR-115-specification-provider-abstraction.md- 架构决策
最后更新: 2025-12-26