Aikodoc
SDD 能力底座

每件文档怎么写、什么时候写

19 件标准制品 —— 每件回答一个问题、有 ID 规范、严禁写什么

每个 change 涉及的文档总共就这 19 件,看你档位决定写哪些(怎么选档)。

每件文档只回答一个问题。 越界写会被 Validator 抓出来,下游也不知道该看你这件还是另一件。

产品 / BA 写的(PD 包 · 10 件)

文档回答什么千万别写ID 长什么样
vision.md为什么做、给谁、范围、什么时候发功能能力、NFR 数字、AI 模型VISION-* / GOAL-* / PERSONA-* / SCOPE-* / MILE-*
stories.md用户视角的场景与故事"系统 SHALL/MUST" 这种系统视角SCEN-* / STORY-*
requirements.md系统应做哪些功能完整 EARS / 表名 / API 字段REQ-FN-* / REQ-ALG-* / REQ-SEC-* / REQ-DOC-*
nfr.md系统属性的目标值是多少功能行为、实现策略REQ-NFR-PERF/AVAIL/SEC/OBS/COMPAT/I18N/A11Y-*
acceptance.md怎样算达标需求叙述、测试执行步骤、实现方案ACC-*
product-design.md产品层设计约束(原型 / IA / 交互)表结构、API 字段、视觉规范DESIGN-* / IA-* / INTERACT-* / INTEG-* / CONSTR-*
risks.md产品视角的风险与假设工程实施细节ASSUM-* / DEP-* / RISK-*
rollout.md怎么发布、监控、回滚、客服工程部署细节、代码级监控ROLL-* / METRIC-* / ALERT-* / SOP-*
glossary.md术语是什么意思mermaid 图(归 architecture)GLOSS-*
ai-spec.md为什么用 AI、怎么用、怎么评、怎么兜底具体模型品牌、Prompt 话术AI-FRAME-* / MODEL-* / DATA-* / EVAL-* / GUARD-*

起草技巧:在 Aiko Chat 里调 /aiko-pd-package <feature>-pd 让 AI 按你的 vision 一口气起 10 件骨架,你只改不写。

架构师写的(架构包 · 3 件)

文档回答什么千万别写ID
architecture.md系统级边界与共享机制capability 内部实现(归 design.mdARCH-*
adr.md关键决策被选择、为什么(含模型品牌选型)业务规则、普通任务ADR-*
quality-attributes.mdNFR 通过哪些架构策略保障重新定义目标值QA-PERF-* / QA-AVAIL-* / QA-SEC-* / QA-OBS-* / QA-COMPAT-*

起草技巧:调 /aiko-pd-to-arch <feature> 从 PD 包推架构骨架。

adr.md 每条决策建议这样写:

- id: ADR-007
  title: 折扣引擎选用 Rete 算法
  status: accepted
  date: 2026-05-20
  context: |
    需要支持 1000+ 条优惠券规则,实时计算延迟 < 50ms
  decision: |
    采用 Rete 算法的开源实现 Drools
  consequences:
    - 学习曲线高,但社区成熟
    - JVM 内存占用增加 ~200MB
  alternatives:
    - 自研规则引擎: 排除 (开发成本高)
    - SQL CASE: 排除 (规则爆炸)

开发写的(开发包 · 4 件)

文档回答什么千万别写ID
proposal.md这次工程 change 启动原因PD 需求事实(只引 ID)change id
specs/**/*.mdcapability 对外行为契约(EARS + Gherkin)业务背景、架构选型OpenSpec Requirement / Scenario
design.mdcapability 内部怎么实现系统级架构、需求目标章节标题 + trace
tasks.md怎么实施、怎么验证新方案、新需求checkbox / task id

起草技巧:调 /aiko-pd-to-dev <feature> 自动生成 spec + tasks + aiko.pipeline 骨架。

specs/ 里的 capability 这样写:

## Requirement: 折扣计算引擎 [satisfies: REQ-FN-007]

When a 购物车包含可叠加优惠券, the system shall 按优先级矩阵计算
最终折扣金额, returning 折扣后的订单总价.

### Scenario: 单张满减券生效
  Given 购物车总价 200 元
  And 用户持有"满 100 减 20"券
  When 用户选中该券
  Then 订单总价显示 180 元

tasks.md 必须按 pipeline 五段分节(看 推进开发任务)。

QA 写的(测试包 · 2 件)

文档回答什么千万别写ID
test-cases.md怎么测验收标准重述、实测结果TC-*
test-evidence.md实际跑了什么、结果如何用例步骤重述、标准改写EV-*

起草技巧:调 /aiko-pd-to-test <feature> 从 acceptance 自动生成 test-cases 骨架,AI 会把每条 ACC-* 拆成 1+ 条 TC-*

评审记录(通用 · 1 件)

文档干什么
review-log.md评审记录 / 升降档决策 / SKIPPED-CONDITIONAL 留痕

主要给评审者用,开发不用主动写,但升降档时记得加一条。

文档之间是怎么引用的

实线 = 强引用(下游 ID 必须存在);虚线 = 弱引用。

改了上游 ID,所有引用它的下游都会被 trace Validator 抓出来,IDE 会高亮。

字段是什么类型?entity schema

每件文档的字段类型 / 是否必填 / 枚举值都由 openspec/schemas/<lane>/entities/<artifact>.yaml 决定。比如 acceptance 的 schema:

entity: acceptance
fields:
  - name: id
    type: string
    pattern: "^ACC-\\d{3,}$"
    tier: core
    required: true
  - name: satisfies
    type: array
    items: { type: string, pattern: "^REQ-FN-\\d+$" }
    tier: core
    required: true
  - name: given/when/then
    type: string
    tier: extended    # m 档以上才必填
  - name: examples
    type: array
    tier: full        # 仅 l 档必填

tier 三档随你的 change scale 联动:

  • xs / s → 只必填 core
  • m → core + extended 必填
  • l → 全集

字段格式不对会被 entity-schema Validator 抓出来。

关联

On this page