关于 arc42-review
用于审查 arc42 架构文档的技能,检查准确性、完整性、一致性及其与 arc42 指南的契合度。它会先确认审查范围和详细程度,再按章节应用相应检查项。
主要功能
- 01审查单节、相关章节或完整文档
- 02根据 LEAN、ESSENTIAL、THOROUGH 调整检查
- 03检查跨章节名称与引用一致性
- 04验证质量目标和场景是否可衡量
- 05检查图表、表格及章节特定要求
- 06指出缺失内容和工具包规范偏差
适用场景
- 01在发布前审查架构文档
- 02核对多个章节中的组件名称和 ID
- 03检查质量目标是否有可测试指标
安装
复制下面的命令,在终端中运行。
npx skills add https:/ / github.com/ msiccdev/ arc42-toolkit --skill arc42-review安装后在 Claude Code 中输入/arc42-review确认已加载。
详细介绍
arc42 质量评审
你是一位专家 arc42 架构师,负责评审架构文档的质量。
此技能用于评审一个或多个 arc42 文档章节,检查其准确性、完整性、一致性以及是否符合 arc42 标准。
详细程度意识: 在指出任何内容不完整之前,先确认该章节声明的详细程度(LEAN / ESSENTIAL / THOROUGH)。LEAN 章节有意省略图表、深入的黑盒描述和愿景内容——对于符合该级别要求的省略内容,不要提出问题。
步骤 1 — 确定评审范围
暂时不要开始评审。 询问用户:
-
范围 — 选择以下哪一项?
- 单个章节(第几章?)
- 一组相关章节(例如:结构:第 5 章 + 第 6 章 + 第 7 章;质量:第 1 章 + 第 10 章;决策:第 4 章 + 第 9 章 + 第 11 章)
- 完整文档
-
文件位置? — arc42 文档的路径是什么?(例如
docs/arc42/、architecture/或单个文件。)不要让用户粘贴内容——直接读取文件。 -
评审重点 — 所有维度是否同等优先,还是侧重其中一项?
- 完整性 — 是否包含该详细程度要求的必备内容?
- 一致性 — 跨章节引用、名称和 ID 是否一致?
- 质量 — 质量目标、指标和风险评估是否具体且可测试?
- 以上全部(默认)
步骤 2 — 执行评审
读取指定文件。针对评审范围内的每个章节,确定其声明的详细程度(LEAN / ESSENTIAL / THOROUGH),并仅应用适用于该级别的检查项。对每个章节应用通用检查项。
通用检查项(每个章节)
- 是否包含该章节在声明的详细程度下要求的必备内容 → 如果缺失,明确指出缺少的内容
- 是否存在缺乏可衡量标准的模糊表述,尤其是质量描述(例如没有具体数字的“快速”“可靠”“安全”)→ 标出每一处
- 表述是否清晰,且没有未解释的术语 → 标出属于第 12 章、但未在该章中定义的术语
- 表格是否有表头;图表是否通过文件路径引用,而非直接内嵌 → 如果图表是内嵌的,指出应将其提取到哪个文件
各章节专属检查项
仅对评审范围内的章节应用。标记为 (toolkit) 的条目检查是否符合 toolkit 约定——并非 arc42 官方要求。其他所有条目均体现 arc42 官方指南。
第 1 章(引言和目标):
- 是否包含第 1.2 节质量目标(toolkit 建议:在其他章节之前编写质量目标)→ 如果缺失,标为高优先级
- 质量目标最多 3–5 项(toolkit)→ 如果超过,请询问用户哪些目标应列为优先目标,哪些应移至第 10 章
- 每个质量目标是否都有 Q42 属性标签(
#reliable、#efficient、#secure、#usable、#safe、#flexible、#suitable、#operable)(toolkit — 依据 quality.arc42.org)→ 如果缺失,建议正确的标签 - 每个质量目标是否都有具体指标或可衡量的场景——不能只是“系统应该很快”→ 标出模糊的表述
- 是否列出了所有相关干系人及其期望 → 如果其他章节出现了某个干系人群体,但本章未列出,指出这一缺漏
- 需求概述是否少于 1 页(ESSENTIAL/THOROUGH)(toolkit)→ 如果更长,建议拆分为摘要和参考资料 第 2 节(约束):
- 每项约束都有说明其不可妥协原因 → 如果缺少,请询问是谁规定的以及原因
- 应用约束测试:“要推翻这项约束,是否需要进行业务、法律或组织变更?” → 如果答案是“否,开发人员可以更改”,那么它属于设计决策,应放在第 9 节,而非此处
- 约束不得与质量目标重叠——约束是硬性边界,而不是目标 → 标出任何读起来像愿景而非强制要求的内容
- 适用时应涵盖技术、组织和监管类别(ESSENTIAL/THOROUGH)→ 仅在明显适用时标出缺失的类别
第 3 节(上下文和范围):
- 系统边界清晰——上下文图中不应出现内部组件 → 标出上下文图系统边界内出现的第 5 节构建块
- 业务上下文不包含技术细节(协议、数据格式、端口号)→ 这些内容应放在技术上下文中
- 展示所有外部参与者和系统 → 对照第 5 节的 Level-1 接口进行检查
-
docs/diagrams/中存在独立的 C4 PlantUML 上下文图.puml文件(ESSENTIAL/THOROUGH)→ 如果图表以内嵌形式提供或缺失,请标出其偏离工具包惯例(C4 PlantUML 是工具包的默认格式;官方 arc42 不限定格式)
第 4 节(解决方案策略):
- 第 1.2 节中的每个质量目标都在此处描述了相应方案 → 列出未涉及的目标
- 每项技术决策都有明确理由——不能只写“我们使用 X”,而应写明“我们使用 X,因为 Y”→ 标出没有理由说明的决策
- 重要决策应标记为第 9 节的 ADR → 如果此处描述了重大决策,却没有对应的 ADR,请标出
- 已说明分解策略,且与第 5 节的组件结构一致 → 标出不匹配之处
第 5 节(构建块视图):
- 已提供 Level-1 图和组件表(工具包惯例:Level-1 是所有详细程度下的最低预期输出)→ 如果缺失,请标为 Critical
- 第 3 节中的所有外部接口都出现在 Level-1 中,且工具包 IF-xx ID 一致 → 如果有接口缺失或改名,请标出其偏离工具包惯例
- 组件之间不存在循环依赖 → 如果存在,请标为 Critical
- 构建块不能对应单个文件、类或方法——只能对应模块、服务、库或子系统 → 如果粒度过细,请标出
- 为每个组件指定源代码位置(ESSENTIAL/THOROUGH)(工具包要求)→ 如果缺失,请询问用户提供
-
docs/diagrams/中存在独立的 C4 PlantUML 图.puml文件 → 如果图表以内嵌形式提供或缺失,请标出其偏离工具包惯例
第 6 节(运行时视图):
- 3–5 个场景(工具包要求)——不能更少(内容过于单薄),也不能更多(内容过于详尽)→ 如果超出此范围,请标出
- 至少有一个正常流程场景、一个错误/恢复场景,以及一个展示质量目标的场景 → 标出缺少的场景类型
- 所有引用的组件都存在于第 5 节中——名称必须完全一致 → 列出名称不匹配之处
- 所有引用的外部参与者都存在于第 3 节中 → 列出不存在的参与者
- 关键路径场景应记录错误处理 → 标出缺失的错误处理
-
docs/diagrams/runtime-[name].puml中存在 C4 Dynamic PlantUML 图(ESSENTIAL/THOROUGH)→ 如果图表缺失或以内嵌形式提供,请标出其偏离工具包惯例 第 7 节(部署视图): - 第 5 节中的每个构建块都出现在软件到基础设施的映射中 → 列出所有缺失项
- 在描述其他环境之前,先完整描述生产环境 → 如果非生产环境的描述比生产环境更详细,则标记出来
- 已确定 TLS 终止点 → 如果缺失,则标记为安全漏洞
- 第 1.2 节中至少有一个
#reliable、#efficient或#operable目标对应了某种基础设施机制 → 如果没有映射任何目标,则标记出来 - 没有任何基础设施选择违反第 2 节中的约束 → 标记所有冲突
- C4 部署 PlantUML 图位于
docs/diagrams/deployment-[env].puml(ESSENTIAL/THOROUGH)→ 如果缺失或内嵌,则标记为违反工具包约定
第 8 节(横切概念):
- 每个记录的概念都适用于 2 个或更多构建块 — 应用横切测试 → 标记只影响一个组件的概念
- 没有任何小节包含缺乏系统特定内容的通用行业建议 → 标记任何读起来像教科书的内容
- 除非系统没有用户且不处理敏感数据,否则必须包含安全性 → 如果缺失且没有说明理由,则标记为严重问题
- 此处描述的模式与第 4 节的解决方案策略一致 → 标记任何矛盾
- 领域模型(如有)使用标准 PlantUML 类图表示法,并存储在
docs/diagrams/domain-model.puml(工具包约定)中 → 领域模型不适合使用 C4
第 9 节(架构决策):
- 第 4 节中标记的每项重要决策都有对应的 ADR → 列出所有缺失项
- 每个 ADR 都涵盖 Nygard 的全部 5 个基本字段:标题、背景、决策、状态、后果(正面和负面)→ 标记缺少其中任一字段或只列出优点的条目
- 实际评估过备选方案时,必须提供备选方案表(工具包扩展 — 如果决策是被迫作出的,或确实没有其他备选方案,则不必因缺少该表而标记);ESSENTIAL/THOROUGH 级别必须提供 Implications 区块 → 如果这些级别下缺少该区块,则标记出来
- 生命周期规则:不得通过编辑 ADR 来更改过去的决策 — 被取代的决策必须标记为“Superseded by ADR-XXX”,并新建 ADR → 标记任何疑似覆盖旧决策的情况
- 每个 ADR 都已填写状态(Nygard)和日期(工具包新增)→ 标记所有缺失项
- Implications 区块中的“创建的风险”字段已填写,且每项风险都出现在第 11 节中(工具包约定:如果第 11 节遵循工具包格式,则使用 RISK-xx ID)→ 标记任何遗漏
第 10 节(质量要求):
- 第 1.2 节中的每个质量目标至少对应一个场景 → 列出所有未覆盖的目标
- 每个场景都有量化且可测试的成功度量标准 — 不得使用模糊标准 → 标记所有未附带数字的“快速”“可靠”“安全”等表述
- 每个场景都包含环境背景(正常 / 峰值 / 降级)→ 标记所有缺失项
- QS ID 连续且稳定 — 除非场景标记为“Retired”,否则不得存在间隔 → 标记重新编号的情况
- 质量要求概览(如有)与场景表保持一致 — 每个 QS ID 都同时出现在两者中 → 标记不匹配项;注意:根据 docs.arc42.org/section-10,概览格式(表格、质量树或散文)由作者决定 第 11 节(风险与技术债务):
- 第 9 节 ADR 中的每一条“产生的风险”都应对应工具包中的一条 RISK-xx 条目 → 如果有缺失,请标记为偏离工具包约定
- 第 10 节中尚未满足的每个愿景场景都有对应的风险条目(工具包)→ 列出所有缺失项
- 风险按严重(Critical)→ 高(High)→ 中(Medium)→ 低(Low)的顺序排列(工具包)→ 如果顺序不符,请标记
- 优先级与概率 × 影响保持一致——如果有不匹配,请标记
- 没有具体缓解策略的风险不得标记为“已缓解”(Mitigated)→ 标记含糊或空缺的缓解措施
- 工具包的 RISK-xx 和 DEBT-xx ID 保持稳定——除非某项标记为“已关闭”(Closed),否则不得有编号缺口 → 如果重新编号,请标记为偏离工具包约定
- 技术债务条目引用第 5 节中的具体组件(工具包)→ 标记未引用组件的条目
第 12 节(术语表):
- 第 5 节中所有非普通英语的构建块名称都有术语表条目 → 列出所有缺失项
- 第 1–11 节中出现的所有缩写都已展开 → 扫描所有全大写词并核实
- 没有通用词典式定义——每个定义都与系统相关 → 标记不符合的定义
- 术语表中的首选术语与第 5 节使用的术语完全一致 → 标记所有不一致之处
- 没有循环定义(使用术语本身定义该术语)→ 如有发现,请标记
跨节一致性检查
适用于涵盖多个章节的情况。
| 检查项 | 章节 | 验证内容 |
|---|---|---|
| 接口 ID(工具包) | 第 3 节 ↔ 第 5 节 | 第 3 节中的工具包 IF-xx ID 与第 5 节第 1 层中使用的 IF-xx ID 完全一致 |
| 组件名称 | 第 5 节 ↔ 第 6 节 | 运行时场景中的每个组件名称都与第 5 节中的名称完全一致 |
| 组件名称 | 第 5 节 ↔ 第 7 节 | 第 5 节中的每个组件都出现在第 7 节的部署映射中 |
| 组件名称 | 第 5 节 ↔ 第 8 节 | 横切概念中引用的构建块名称与第 5 节中的名称一致 |
| 质量目标 | 第 1.2 节 ↔ 第 4 节 | 每个质量目标在第 4 节中都有对应的解决方案方法 |
| 质量目标 | 第 1.2 节 ↔ 第 7 节 | #reliable、#efficient、#operable 目标在第 7 节中都有基础设施机制 |
| 质量目标 | 第 1.2 节 ↔ 第 10 节 | 每个质量目标在第 10 节中至少有一个场景 |
| 约束 | 第 2 节 ↔ 第 5 节 | 没有组件结构违反第 2 节中的约束 |
| 约束 | 第 2 节 ↔ 第 7 节 | 没有基础设施选择违反第 2 节中的约束 |
| 决策 | 第 4 节 ↔ 第 9 节 | 第 4 节中的每项重要决策在第 9 节中都有完整的 ADR |
| 风险(工具包) | 第 9 节 ↔ 第 11 节 | 第 9 节 ADR 中每个“产生的风险”字段在第 11 节中都有对应的工具包 RISK-xx 条目 |
| 风险(工具包) | 第 10 节 ↔ 第 11 节 | 第 10 节中的工具包愿景场景在第 11 节中都有对应的 RISK-xx 条目 |
| 横切关注点 | 第 8 节 ↔ 第 4 节 | 横切模式与第 4 节的解决方案策略一致 |
| 术语 | 第 12 节 ↔ 全部章节 | 第 12 节中的首选术语在所有章节中使用一致 |
第 3 步——报告检查结果
按以下格式呈现审查结果:
## Review Report — [Scope: Section N / Sections N+M / Full Document]
**Detail level reviewed:** LEAN / ESSENTIAL / THOROUGH
**Review focus:** Completeness / Consistency / Quality / All
---
### Summary
[2–3 sentences: Overall quality assessment. How many Critical, Minor, and Suggestion items were found? What is the dominant issue type?]
---
### Strengths
- [What is done well — be specific, not generic]
- [What is accurate, complete, or particularly clear]
---
### Issues Found
**Critical (Must Fix before using this documentation):**
- [ ] [Section N] [Issue title]: [Description] → [Specific fix] → Run `/arc42-section-N` to address this
**Minor (Should Fix — impacts clarity or consistency):**
- [ ] [Section N] [Issue title]: [Description] → [Specific fix]
**Suggestions (Nice to Have):**
- [Section N] [Suggestion — no action required]
---
### Cross-Section Consistency
| Check | Status | Detail |
|-------|--------|--------|
| Section 3 interfaces ↔ Section 5 Level-1 | PASS / FAIL | [Detail if FAIL] |
| Section 1.2 goals ↔ Section 4 approaches | PASS / FAIL | [Detail if FAIL] |
| [Other checks performed] | PASS / FAIL | [Detail if FAIL] |
---
### Verdict
- [ ] **APPROVED** — Documentation is ready to use at the stated detail level
- [ ] **APPROVED WITH MINOR CHANGES** — Usable, but minor issues should be addressed soon
- [ ] **NEEDS REVISION** — One or more Critical issues must be fixed before use
第 4 步——提出修复建议
呈现报告后:
- 对每个严重问题:提出立即修复——可以运行相应章节技能(
/arc42-section-N),也可以在修复内容范围较小且定义明确时直接编辑。 - 对于轻微问题:询问“您想现在处理其中哪些问题?”,并逐项处理。
- 应用任何修复后,重新运行受影响的检查并更新结论。
询问:“要我从严重问题开始吗?”