用途
该技能用于发现并推进代码库的架构深化机会:把浅模块(接口复杂度接近实现复杂度)重构为深模块,目标是提升可测试性与 AI 可导航性。它基于项目的领域模型,并使用一套共享的架构词汇。
架构词汇与原则
技能要求在所有建议中精确使用以下术语:module(模块)、interface(接口)、depth(深度)、seam(接缝)、adapter(适配器)、leverage(杠杆)、locality(局部性)。不要漂移成“component”“service”“API”或“boundary”。
相关原则包括:删除测试(deletion test)、“接口即测试面”、“一个适配器 = 假设接缝,两个 = 真实接缝”。测试替身算作第二个实现:一个接口若有一个生产适配器且被测试替换,就是真实接缝,而非假设接缝;只有单一调用方且无替换的接口才在该项上不通过删除测试。该规则与 /setup-solid 写入 CLAUDE.md 的规则一致,两者不得冲突。
GLOSSARY.md 中的领域语言为好的接缝命名;docs/adr/ 中的 ADR 记录本命令不应重新争论的决策。
使用方式
1. 探索
先划定范围(YAGNI)。深化模块的回报在于让未来修改更容易,因此应额外重视近期变更过的代码区域。
- 若用户指定了方向(某模块、子系统、痛点),直接采用,跳过下面的推断。
- 否则回溯一段提交历史(git log --oneline),找出代码库热点——反复出现的文件与区域,优先关注这些路径。若变更分散无明显热点,则扩大范围。
- 先阅读项目领域词汇表(GLOSSARY.md)以及所触及区域的 ADR。
- 然后启动子代理遍历代码库。不要遵循僵硬启发式,而是有机探索并记录摩擦点:理解一个概念是否需要在许多小模块间来回跳转;模块是否浅(接口几乎与实现一样复杂);是否为可测试性而抽出纯函数,但真正的 bug 藏在调用方式中(缺乏局部性);紧耦合模块是否跨接缝泄漏;哪些部分未测试或难以通过当前接口测试。
- 对疑似浅模块应用删除测试:删除它会集中复杂度,还是只是移动复杂度?“是,集中”才是想要的信号。
2. 以 HTML 报告呈现候选方案
将自包含 HTML 文件写入操作系统临时目录,避免落入仓库。从 $TMPDIR 解析临时目录,回退到 /tmp(Windows 上为 %TEMP%),写入 <tmpdir>/architecture-review-<timestamp>.html,使每次运行生成新文件。为用户打开它(Linux 用 xdg-open <path>,macOS 用 open <path>,Windows 用 start <path>),并告知绝对路径。
报告通过 CDN 使用 Tailwind 进行布局与样式,通过 CDN 使用 Mermaid 绘制图/流程/时序图(当关系呈图状时)。将 Mermaid 与手工 CSS/SVG 视觉混合:图状关系用 Mermaid,更具编辑感的视觉(质量图、剖面图、折叠动画)用手工 div/SVG。每个候选方案都有前后对比可视化。
每个候选方案渲染为一张卡片,包含:
- Files:涉及哪些文件/模块
- Problem:当前架构为何造成摩擦
- Solution:将发生什么变化的平实英文描述
- Benefits:以局部性与杠杆解释,以及测试将如何改善
- Before / After diagram:并排、手绘,展示浅与深
- Recommendation strength:Strong、Worth exploring、Speculative 之一,以徽章呈现
报告结尾为 Top recommendation 部分:先处理哪个候选及原因。
领域词汇使用 GLOSSARY.md,架构词汇使用上述术语。若 GLOSSARY.md 定义了“Order”,应说“the Order intake module”,而不是“the FooBarHandler”或“the Order service”。
ADR 冲突:若候选与现有 ADR 矛盾,仅当摩擦足够真实、值得重新审视 ADR 时才呈现,并在卡片中清楚标记(例如警告提示:“contradicts ADR-0007, but worth reopening because…”)。不要列出 ADR 禁止的每一个理论重构。
完整 HTML 脚手架、图表模式与样式指南见 HTML-REPORT.md。
此时不要提出接口。文件写好后,询问用户:“Which of these would you like to explore?”
3. Grilling 循环
用户选定候选后,调用 Skill 工具并传入“grilling”,与其一起走决策树:约束、依赖、深化模块的形态、接缝背后是什么、哪些测试能存活。
副作用随决策成形而内联发生,保持领域模型最新:
- 若以 GLOSSARY.md 中不存在的概念命名深化模块,将该术语加入 GLOSSARY.md;文件不存在则惰性创建。
- 对话中若厘清了模糊术语,就地更新 GLOSSARY.md。
- 用户以有分量的理由拒绝候选时,提议记录 ADR,措辞为:“Want me to record this as an ADR so future architecture reviews don't re-suggest it?” 仅当未来探索者确实需要该理由以避免重复建议时才提议;跳过临时理由(“not worth it right now”)与不言自明的理由。
- 想为深化模块探索替代接口时,使用 design-it-twice 方法:并行启动子代理起草替代接口,然后比较。
适用场景
适用于需要系统性发现架构摩擦、推进模块深化重构的代码库维护与架构评审场景,尤其适合近期变更频繁、模块偏浅、测试困难或 AI 导航不畅的项目。
限制
资料未提供该技能的收费、价格、平台支持范围或效果保证等信息。