name: adr-create description: “从规范上下文创建架构决策记录。” argument-hint: “<规范文件> [–decision <决策摘要>]” allowed-tools: 读取, 全局搜索, 文本搜索, 写入, 编辑, 技能, 任务
创建架构决策记录
从规范上下文创建ADR(架构决策记录)。
何时创建ADR
当规范包含以下内容时创建ADR:
- 技术选择(数据库、框架、库)
- 架构模式(微服务、CQRS、事件溯源)
- 集成方法(同步 vs 异步、REST vs GraphQL)
- 安全决策(认证方法、加密)
- 显著权衡(性能 vs 简洁性)
- 偏离现有模式
MADR格式
使用Markdown Any Decision Records(MADR)格式:
# ADR-NNN: [标题以命令形式]
## 状态
[提议 | 接受 | 弃用 | 被ADR-XXX取代]
## 上下文
[作用力、促使此决策的情境]
## 决策
我们将[以命令形式决策]。
## 后果
### 正面
- [益处]
### 负面
- [缺点]
### 中性
- [权衡]
## 考虑的替代方案
### [替代方案1]
**优点:**[优势]
**缺点:**[劣势]
**拒绝原因:**[原因]
工作流程
-
加载规范
- 读取规范文件
- 识别决策点
-
提取决策
- 启动
adr-creator代理 - 找到明确决策(“我们将使用X”)
- 找到隐含决策(提到的技术)
- 收集上下文和约束
- 启动
-
研究替代方案
- 如果替代方案未记录:
- 识别合理替代方案
- 研究优缺点
- 记录拒绝原因
- 如果替代方案未记录:
-
生成ADR
- 应用MADR格式
- 链接到规范
- 交叉引用需求
-
保存ADR
- 分配ADR编号
- 保存到
docs/adr/(或用户指定位置) - 更新ADR索引
参数
$1- 规范文件路径--decision- 要记录的特定决策--output- 输出目录(默认:docs/adr/)--number- ADR编号(如未提供则自动分配)
示例
# 从规范提取ADR
/spec-driven-development:adr-create .specs/auth/spec.md
# 创建特定决策ADR
/spec-driven-development:adr-create .specs/auth/spec.md --decision "使用JWT进行会话令牌"
# 指定输出位置
/spec-driven-development:adr-create .specs/auth/spec.md --output docs/adr/
# 分配特定编号
/spec-driven-development:adr-create .specs/auth/spec.md --number 42
ADR示例
# ADR-015: 使用Redis进行会话缓存
<!--
生成自:SPEC-AUTH-001
需求:NFR-1(性能)、FR-3(会话管理)
创建日期:2024-01-15
-->
## 状态
提议
## 上下文
认证规范(SPEC-AUTH-001)要求会话令牌在50毫秒内验证(NFR-1)。当前仅数据库方法显示p95延迟为150毫秒,超出需求。
我们需要一种缓存策略以减少会话验证延迟。
## 决策
我们将使用Redis作为会话令牌的内存缓存。
- 缓存会话数据,TTL匹配会话过期时间
- 使用缓存旁路模式(懒加载)
- 在注销和密码更改时失效
## 后果
### 正面
- 预计会话验证延迟减少80%
- 减少会话查询的数据库负载
- 行业标准解决方案,文档丰富
- 团队有Redis经验
### 负面
- 额外的基础设施组件
- 缓存失效复杂性
- 内存成本随活跃会话扩展
### 中性
- 需要Redis集群以实现高可用性
- 需要设置监控和告警
## 考虑的替代方案
### 应用内内存缓存
每个应用实例的本地缓存。
**优点:** 无额外基础设施
**缺点:** 实例间不共享,重启时丢失
**拒绝原因:** 多实例部署需要共享缓存
### 数据库物化视图
数据库中预计算的会话数据。
**优点:** 无新技术
**缺点:** 仍有数据库延迟,刷新逻辑复杂
**拒绝原因:** 不符合50毫秒延迟需求
## 相关
- **规范:** SPEC-AUTH-001
- **需求:** NFR-1、FR-3
- **相关ADR:** ADR-012(Redis基础设施)
ADR索引更新
创建ADR时更新索引:
## ADR索引
| ADR | 标题 | 状态 | 规范 | 日期 |
| --- | --- | --- | --- | --- |
| ADR-014 | 使用PostgreSQL | 接受 | SPEC-001 | 2024-01-10 |
| ADR-015 | 使用Redis进行会话缓存 | 提议 | SPEC-AUTH | 2024-01-15 |
相关命令
/spec-driven-development:specify- 生成规范/spec-driven-development:plan- 生成设计/spec-driven-development:validate- 验证规范