maat-tools/maat
GitHub: maat-tools/maat
maat 是一款架构约定检查工具,通过将团队隐性的分层与模块边界规则编码为可执行检查,追踪代码库偏离约定的过程并留存完整的决策历史。
Stars: 3 | Forks: 0
# maat
```
被接受的发现结果是有时间限制的,这是刻意为之:当时间窗口到期时,`maat check` 会因为它们而报错,团队必须重新审视。这里没有永久的“忽略”选项——一个你从不再去重新审视的例外,仅仅是披着文书外衣的侵蚀罢了。
ledger 保存着关于发现结果、声明的约定以及决定的纯追加历史记录。请把它和代码库一起提交,这样这些决定就能随着它们所描述的架构一起传承。
## 官方插件
| 软件包 | 作用 |
|---|---|
| `@maat-tools/collector-ts` | 从 TypeScript 项目中读取事实 |
| `@maat-tools/collector-git` | 从 git 历史记录中读取事实 |
| `@maat-tools/coupling-rules` | 针对层级、包边界和依赖方向的规则 |
| `@maat-tools/connascence-rules` | 针对那些必须一起更改但代码中并未声明的耦合规则 |
| `@maat-tools/git-rules` | 针对代码 churn 以及随着时间推移总是频繁一起更改的文件的规则 |
| `@maat-tools/presets-ts` | 为 TypeScript 准备的现成模式定义 |
| `@maat-tools/enricher-llm` | 借助 AI 提取事实(仅限提取事实——决定仍由规则做出) |
| `@maat-tools/insights` | 跨规则分析和模式检测 |
| `@maat-tools/file-ledger` | 纯追加的历史文件后端 |
maat 暴露了用于第三方收集器、规则、洞察分析和 ledger 后端的公共接口——内置的软件包使用的接口与你将使用的完全相同。第三方软件包不在官方的可重复性保证范围内,因此在将它们信任地应用于 CI 之前,请务必先行审查。
## 命令
| 命令 | 用途 |
|---|---|
| `maat check` | 运行收集器和规则。`--ledger` 用于将发现结果与 ledger 同步;`--show ` 用于选择打印的版块。 |
| `maat axiom declare` | 在 ledger 中记录由人工编写的约定。 |
| `maat axiom supersede` | 将某项约定标记为已被更新的决定所取代。 |
| `maat axiom revoke` | 撤销不再适用的约定。 |
| `maat baseline` | 在有限时间内(1–90 天)接受当前的发现结果,从而强制进行周期性审查。 |
| `maat resolve` | 将某一条确切的发现标记为已刻意修复。 |
| `maat visualize` | 打印当前的 ledger 状态:发现结果、约定以及可选的洞察分析。 |
## 文档
- [快速开始](docs/guide/getting-started.md)
- [适应度函数](docs/guide/fitness-functions.md) —— maat 如何与《演进式架构》相关联
- [命令](docs/commands/)
- [确定性](docs/guide/determinism.md) —— 为什么规则会被刻意设计得很无趣
- [插件系统](docs/guide/plugins.md)
- [架构决策](docs/adr/)
## 状态
maat 还处于 1.0 版本之前的阶段。CLI 可以运行检查、将发现结果与 ledger 同步,并通过基线和修复流程流转各项决定。目前收集器和规则接口还在不断完善中,因此软件包的 API 可能仍会发生变化。
## 许可证
Apache-2.0
Linter 检查代码行。maat 则负责检查你的团队就代码库达成的约定。
每个团队都有任何 Linter 都不知道的规则。*领域层绝不直接与数据库交互。这两个模块绝不能互相耦合。这项策略仅能在一处实现。* 这些规则散落在代码审查的评论、新人入职的交流以及少数人的脑海中——并且它们在悄无声息地瓦解,每次伴随着一个看似合理的 PR 而逐渐崩坏。 maat 让你能够将这些约定以代码的形式记录下来,在每次运行时进行检查,并保留一份关于每次违规以及你团队对此做出的每一项决定的已提交历史记录。 ## 为什么会有 maat 大多数深受难以更改的代码库困扰的团队都面临着相同的困境:同类 Bug 反复出现,时间都花在四处救火上,却没人深究原因——工作似乎就是如此。当有人最终手动审查架构时,他们会找到原因:那些大家心照不宣的规则,在岁月中被一点一滴地破坏,而其中每一次单独的修改看起来都没问题。 然而,这种审查通常最终还是会失效——不是因为审查本身有误,而是因为它缺乏证据支撑。你无法展示每条规则是*何时*开始被打破的、恶化得有多快,或者它让团队付出了什么代价。这就成了一个工程师的单方面说辞对抗现状的局面。 maat 就是这项审查的自动化版本,并且自带证据。它的存在是为了回答一位优秀技术主管在每次提交时都会在脑海中思考的问题,并留下可追溯的记录: ## 它的样子 在一个真实的代码库上运行 `maat check`:
标签:MITM代理, SOC Prime, 云安全监控, 代码审查, 开发工具, 技术债务, 文档结构分析, 架构治理, 自动化攻击, 静态分析