用途:把架构决策记录成简短、可长期保存的文档,供未来开发者与 AI 阅读,避免从代码中猜测原因。
前置门槛:仅在同时满足三点时才写 ADR——难以逆转(后期改动成本高,如迁移、重写、供应商锁定)、脱离上下文会令人意外(未来读者会疑惑为何这样做)、存在真实取舍(有真正的备选方案且因特定原因选定其一)。任一条不满足就说明并跳过;轻易可逆、显而易见或别无选择的决定不算 ADR,以避免 ADR 泛滥。
适用内容:架构形态(如 monorepo、事件溯源写模型+投影读模型)、模块/上下文之间的集成模式(如 Ordering 与 Billing 通过事件而非同步 HTTP 通信)、有锁定风险的技术选型(数据库、消息总线、认证提供商、部署目标,而非每个库)、边界与归属决策(如客户数据归 Customer 所有,其他上下文按 ID 引用)、对显而易见路径的有意偏离、代码中不可见的约束(合规、SLA 延迟要求)、以及拒绝理由不明显的备选方案。
工作流:1)复述决策一句话并逐条核对三个门槛,不满足则指出哪条失败并停止。2)定位 docs/adr/;已存在则扫描最大的 NNNN-*.md 文件名并加一;不存在则此时才创建,编号为四位补零(0001、0002…)。3)按模板写入 docs/adr/NNNN-<kebab-slug>.md,内容为标题加 1–3 句说明背景、决定与原因,slug 应简短易检索。4)可选章节仅在有真实价值时添加,如 Status frontmatter(proposed | accepted | deprecated | superseded by ADR-NNNN)、Considered Options、Consequences,大多数 ADR 不需要。5)向用户显示文件路径与渲染内容,不自动提交,由用户自行暂存。
规则:标题写决定本身而非问题;句子用现在时、紧凑、不模糊。限制:实际文件模板与详细内容需参考原始资料,本介绍未提供完整模板细节。