关于 design-invariants
design-invariants 是一项审查技能,用于检查设计提案或差异是否符合 Exarchos 特定的架构不变量。它引导审查者逐项检查五条不变量及其子项,并按严重性和位置记录发现。
主要功能
- 01按顺序审查 INV-1 至 INV-5
- 02覆盖 INV-5 的四个子项
- 03按严重性记录问题
- 04交叉关联 axiom 发现
适用场景
- 01提交设计前检查架构约束
- 02审查涉及事件存储的变更
- 03检查 MCP 表面或工具注册表改动
安装
复制下面的命令,在终端中运行。
$
npx skills add https:/ / github.com/ lvlup-sw/ exarchos --skill design-invariants安装后在 Claude Code 中输入/design-invariants确认已加载。
包含的文件
除 SKILL.md 外,安装时一起下载的参考资料和脚本。
references/INV-1-event-sourcing.mdINV-2-facade-equivalence.mdINV-3-basileus-forward.mdINV-4-platform-agnosticity.mdINV-5a-input-ergonomics.mdINV-5b-output-contract.mdINV-5c-aspire-verbs.mdINV-5d-action-discriminator.mddeterministic-checks.md详细介绍
设计不变量技能
根据 Exarchos 特有的架构不变量审查设计提案或差异。此技能仅适用于项目本身——这些不变量约束的是 Exarchos 本身,而不是 Exarchos 插件的使用者。
此技能是问题 #1118(将原则编纂成文)和 #1109(跨领域约束)的实践补充。参考内容也可作为 v2.11.0 #1275(MCP 资源)接口和 #1260 机器可读不变量生成器的基础——每个不变量都有一个稳定 ID 和结构化形式。
适用场景
- 在
/exarchos:ideate或/exarchos:plan期间,在确定设计之前。 - 在
/exarchos:review期间,与/axiom:audit一起使用。 - 审查涉及事件存储、MCP 接口、运行时 YAML 或复合工具注册表的 PR 时。
不适用场景
- 通用后端质量审查——使用
/axiom:*技能(见下方的互补性矩阵)。 - TDD / 规范合规性审查——使用
/exarchos:review或spec-review技能。 - 文案 / AI 写作痕迹审查——使用
/axiom:humanize。
调用方式
- 指明要审查的对象(设计路径、差异范围或 PR URL)。
- 按顺序检查 INV-1..INV-5,并为每个不变量记录 HIGH / MEDIUM / LOW 级别的问题。
- 对于 INV-5,检查所有四个子领域(5a 输入易用性、5b 输出契约、5c Aspire 动词、5d 操作判别符)。
- 交叉关联有重叠的 axiom 问题(例如,INV-1 下的拓扑问题也可能属于 DIM-1)。
- 使用与 axiom 相同的问题格式输出(严重级别 + 维度 + 文件:行号 + 描述 + required_fix)。
不变量参考
- INV-1 → references/INV-1-event-sourcing.md
- INV-2 → references/INV-2-facade-equivalence.md
- INV-3 → references/INV-3-basileus-forward.md
- INV-4 → references/INV-4-platform-agnosticity.md
- INV-5a → references/INV-5a-input-ergonomics.md
- INV-5b → references/INV-5b-output-contract.md
- INV-5c → references/INV-5c-aspire-verbs.md
- INV-5d → references/INV-5d-action-discriminator.md
- 确定性检查 → references/deterministic-checks.md
问题格式
使用 axiom 的词汇(HIGH / MEDIUM / LOW),避免审查者切换语境:
{
"verdict": "pass | conditional | fail",
"findings": [
{
"invariant": "INV-1",
"severity": "HIGH",
"file": "servers/exarchos-mcp/src/projections/foo.ts",
"line": 42,
"description": "Reducer mutates state in place inside the apply switch",
"required_fix": "Return a new state object via spread; deep-freeze input via assertReducerImmutable in tests",
"axiom_overlap": "DIM-1"
}
]
}
与 axiom 配合——互补性矩阵
分界在于:axiom 会问 “这段代码是否经过良好工程设计?”;此技能会问 “此设计是否遵循 Exarchos 的承载性不变量?” 设计可以符合 axiom 的要求,却仍违反事件溯源完整性(例如,一个类型完全正确的处理程序就地修改状态,而不是发出事件)。
| 发现 | Axiom 维度 | 设计不变量 |
|---|---|---|
| 创建降级 EventStore 的惰性回退 | DIM-1 拓扑 | INV-1(事件完整性发生静默丢失) |
skills-src 中硬编码的 Skill({...}) | — | INV-4 |
投影应用中的 catch 仅调用 console.log | DIM-2 可观测性 | INV-1(fold 抛出异常 → 必须触发 reducer-throw 降级路径) |
| 新增 CLI 动词,但没有对应的 MCP 实现 | — | INV-2 |
| 适配器本地用于投影状态的可变缓存 | DIM-1 拓扑 | INV-1 + INV-2(TaskStore-as-side-database 反模式) |
运行时读取 runtimes/claude.yaml 字段 | — | INV-3 |
| 工具描述未提供“请勿用于”指导 | — | INV-5a |
成功的 ToolResult 缺少 next_actions | — | INV-5b |
| v2.11.0 之后使用 NDJSON 的长时间运行操作 | — | INV-5b(应使用 Tasks SEP-1686) |
新增了本应作为 exarchos_workflow 操作的顶层工具 | — | INV-5d |
| 已移除的 Schema 字段仍被读取 | DIM-3 契约 | 如果是事件字段,则为 INV-1 |
以下问题由 axiom 负责,此技能不予处理:
| 问题 | 负责人 |
|---|---|
| 通用 SOLID、耦合、依赖方向(DIM-6) | axiom:critique |
| 通用错误处理、静默回退(DIM-2、DIM-7) | axiom:harden |
| 通用 Schema 与运行时漂移、类型断言安全性(DIM-3) | axiom:scan、axiom:critique |
| 通用测试真实性、过度使用 mock(DIM-4) | axiom:verify |
| 通用死代码、遗留模式(DIM-5) | axiom:distill |
| AI 文风痕迹(DIM-8) | axiom:humanize |
来源
调研报告:docs/research/2026-05-07-design-invariants-skill.md。待 #1118 中的原则文档落地至 docs/architecture/principles.md 后,请修订此技能——届时此技能将成为该文档的操作化投影,而不再重复陈述原则。
评论
支持 Markdown