关于 adr-critique
adr-critique 用于审查已有的架构决策记录,尤其适合旧记录或导入的 ADR。它逐行标记规则违反、理由不足、关系不一致及与 LikeC4 模型的偏差,并要求架构师批准后才修改。
主要功能
- 01逐行审查 ADR
- 02检查决策理由与共享规则
- 03比对相关 ADR 及关系
- 04检测与 LikeC4 模型的偏差
- 05仅应用架构师批准的修改
适用场景
- 01在依赖旧 ADR 前进行审查
- 02审核从其他团队导入的 ADR
- 03定期检查 ADR 文档集质量
安装
复制下面的命令,在终端中运行。
npx skills add https:/ / github.com/ josiahsiegel/ claude-plugin-marketplace --skill adr-critique安装后在 Claude Code 中输入/adr-critique确认已加载。
附带文件references/audit-checklist.md
详细介绍
adr-critique
针对遗留/外部/既有 ADR 的逐行审查工具。用于发现违反共享的“ADR 不是什么”规则、缺少理由说明、与相邻 ADR 不一致,以及与 LikeC4 模型存在偏差的问题。只修改架构师批准的行。
何时使用此技能
- 早于
adr-drafting的 ADR(遗留文档集) - 从其他团队导入的 ADR
- 由通用 LLM 工具生成、未经质疑的 ADR
- 定期对整个文档集进行质量检查
何时不使用此技能
- 已由
adr-drafting(第 6 阶段)自我审查过的 ADR——它们已通过筛选。 - 想要从头重写的 ADR——请改用
adr-drafting,并取代原 ADR。
风格规则
- 逐字引用有问题的行。 绝不转述 ADR 的内容。架构师必须看到受到批评的原文。
- 指出具体违反的规则。 引用
../_shared/adr-is-not.md中的章节(例如,“规则 5——泛泛引用最佳实践”)。 - 改写必须短于原文。 如果改写更长,那就是重新起草,而非审查——请转交给
adr-drafting。 - 每条消息只标记一个问题。 绝不批量列出违规之处。必须逐行获得架构师批准。
- 不作肯定评价。 不说“总体而言 ADR 很棒,只是有几个小问题”。不说“这是一个可靠的决策”。审查要么发现问题,要么没有。
术语
- 组件——C4 容器(可部署单元),而非代码类。
- 架构特征——要优化的非功能质量(延迟、成本、可维护性等)。
- 冲突——两个 ADR 彼此冲突,且都没有取代另一个;必须明确指出。
- 缺少理由说明——决策部分的论证依赖“最佳实践”或“行业标准”,而没有将业务关切与架构特征对应起来。
- 偏差——ADR 与 LikeC4 模型对现有组件或组件间关系的描述不一致。
六个阶段
阶段 1——阅读
加载目标 ADR。然后通过 supersedes、amends 和 relates-to 链接查找相邻 ADR,并逐一阅读。审查需要了解关联图的上下文。
如果 ADR 引用了 LikeC4 文件,则查找 **/*.c4 并阅读所引用的模型。
阶段 2——逐行标记
从上到下检查 ADR。每遇到一行违反规则,就使用此模板发出一条标记:
Original: <verbatim line from ADR>
Violates: <rule number and name from adr-is-not.md, OR "missing-why" / "drift" / "tension">
Rewrite: <shorter, stricter replacement -- or "delete">
Apply? (yes / no / adjust)
等待架构师回复。只有在对方回复后,才能继续处理下一条标记。
如果架构师选择 adjust,则接受其改写(但仍须满足短于原文的要求)。
阶段 3——检查理由是否缺失
重点检查决策部分。有效论证会将业务关切与架构特征联系起来。无效论证包括:
- “这是行业标准。”
- “这是微服务的最佳实践。”
- “大多数团队都这么做。”
- “这是推荐的方法。”
对于每一行无效内容,都用 Violates: missing-why 标记。改写时要补上缺失的联系(“由于合规要求数据驻留在 EU,此数据库支持按区域配置副本”),或者删除该行。
完整的理由缺失审查请参阅 references/audit-checklist.md。
阶段 4 — 一致性检查
检查 ADR 及其图邻居,查找以下问题:
- 冲突 — 两份 ADR 声称采用互不兼容的决策,且没有一份取代另一份。标记两份 ADR,并询问哪份取代另一份。
- 缺失的关系(frontmatter) — 后续决策声称取代 0004,但其 frontmatter 中没有
supersedes: ["0004"];related/amended 链接不是有效的 YAML 列表;或者关系的唯一证据存在于正文行(例如Related ADRs: [ADR-0004](0004-foo.md))或决策日志README.md索引中。Gray-matter 风格的解析器只读取 frontmatter——仅存在于正文或索引中的链接不会为这类解析器生成图边。标记所有仅以正文描述的关系,并将其提升至 frontmatter(supersedes/amends/relates-to),使用补零到四位的字符串 ID。 - Frontmatter / 正文镜像不匹配 — doc-master 要求两处内容一致。标记以下各项:
- Frontmatter 填写了
supersedes、amends或relates-to,但正文没有包含### Relationships子章节的## More Information章节来镜像这些关系,并使用 doc-master 的链接前缀词汇(Supersedes、Superseded by、Amends、Amended by、Related to)。这些 ADR 对正文扫描解析器(ADR Manager 等)不可见。 - 正文有
### Relationships章节列出 ADR 之间的链接,但对应的 frontmatter 关系键为空或缺失。这些 ADR 对 gray-matter 风格的解析器(ADR Explorer 等)不可见。 - 两处内容的关系集合不一致(例如,frontmatter 中为
supersedes: ["0004"],但正文写着Supersedes [ADR-0005])。标记差异,并询问哪一处正确。
- Frontmatter 填写了
- 重复的权威声明 — 两份 ADR 声称对同一组件或决策具有权威性。其中一份必须让步。
有关一致性检查项,请参见 references/audit-checklist.md。
阶段 5 — LikeC4 漂移检查
对 **/*.c4 和任何 likec4.config.* 进行 Glob 匹配。将 ADR 中提及的组件名称与 LikeC4 模型进行比较:
- ADR 提及了 C4 模型中不存在的组件 → 指出存在漂移,并询问哪个来源为准。
- C4 模型中有 ADR 与之矛盾的组件 → 指出存在漂移。
不要自动更新任何一方。由架构师决定哪一方是事实来源。
阶段 6 — 应用已批准的更改
解决所有标记的问题后,在一次编辑中应用架构师批准的修改:
- 只修改已批准的行。
- 不要在文件中添加审核标记、
[reviewed]戳记或注释。 - 保留 frontmatter 和结构章节。
- 如果 ADR 的状态为
accepted,不要编辑正文,而应起草一份取代它的新 ADR。审核可以建议取代,但不能在未说明的情况下执行。
输出规范
- 绝不批量编辑。 逐行批准是确保审核有用的准则。
- 绝不编辑 Accepted ADR 的正文。 允许对 Accepted ADR 进行的修改:修正拼写错误、修正与图兼容的标题、仅修改元数据中的关系链接(且须得到项目治理规则的明确许可)、在标题中添加易于理解的
superseded by注释,或在底部通过明确的标题添加带日期的“Amendments”注释。其他任何修改都应作为新 ADR 处理。 - 指出问题,不做决定。 标记冲突、漂移和缺少理由的问题,由架构师决定如何解决。
- 最后汇报。 应用修改后,输出一行摘要:“已审核 NNNN-title.md。提出 项标记,应用 项。尚有 项待处理:<列表>。”
参考资料
references/audit-checklist.md— 阶段 3–5 使用的完整分章节检查项../_shared/adr-is-not.md—Violates:字段所引用的规范规则集adr-draftingskill — 用于全新起草的 ADR,而非审核 ADRc4-modelskill — 用于解决阶段 5 中发现的 LikeC4 漂移