v1.1.3 — ImportCompletenessChecker 导入完备性检查器
CHANGELOG
所有 Moat 项目的重要变更都会记录在此文件中。
格式基于 Keep a Changelog,
并且本项目遵循 语义化。
[1.1.3] - 2026-07-13
🎯 核心主题:ImportCompletenessChecker — 消灭"函数存在但未导入"类 Bug
基于 One 项目 WebSocket 导入 Bug 的真实教训(_build_system_prompt 缺失导入导致运行时崩溃),新增 ImportCompletenessChecker 算子,用 AST 静态分析检测调用链完整性。
✅ 新增功能
ImportCompletenessChecker(核心)
问题:Moat 之前只检查模块能否导入、函数是否存在,但不检查"模块 A 调用了函数 B,但没导入 B"
- ❌
_build_system_prompt在ws_full_handler.py中被调用但未导入 → 运行时崩溃 - ❌ 静态分析的"盲区":函数存在 ≠ 调用路径完整
方案:基于 Python AST 的导入完备性检查器,按需扫描策略
- ✅ 扫描文件中的所有
ast.Call节点(函数调用点) - ✅ 验证每个调用名是否在当前文件的 import 列表中
- ✅ 内置函数豁免(70+ 个 Python 内置函数)
- ✅
self.xxx/cls.xxx方法调用豁免 - ✅ 同文件定义函数豁免
- ✅
for循环解包变量豁免(for a, b in ...) - ✅ 赋值上下文变量豁免
- ✅
fail_open装饰器:单个文件解析失败不阻塞全量检查
文件:moat/checks/import_completeness.py(320 行)
性能优化
- ✅ 跳过 >500KB 超大文件
- ✅ 跳过 AST 节点 < 200 的"单体文件"
- ✅ QuickCheck 避免双重初始化
- ✅ 在 moat 自己仓库上跑零误报(扫描 168 个 py 文件,0 errors/0 warnings)
跨文件引用提示
- ✅ 对未解析的调用名,搜索项目内同名函数定义位置
- ✅ 报错中输出
→ 建议:在 file.py:line 有定义 def foo()提示
✅ 工程改进
开发者体验
- ✅
Makefile—make test/make check/make clean/make dev - ✅
pyproject.toml— 新增[dev]可选依赖(pytest/pytest-cov/build/twine) - ✅
.envrc—unset PYTHONPATH消除 SRE Module Mismatch
Bug 修复
- ✅
--diff模式KeyError: 'callers'→ 全部改用.get()防御性取值 - ✅
test_diff_bugfix.py硬编码 One 项目路径 → 改为--project . - ✅
__init__.py导出不完整 →__all__从 9 补全到 23 模块
🧪 测试
- ✅ 1009 passed, 2 skipped(+1 个新测试
test_import_completeness_checker.py) - ✅ 快速模式(diff):3.71s
- ✅ 完整模式(全量):4.73s
📚 文档
- ✅
docs/OPTIMIZATION_PLAN.md— 完整优化方案(ImportCompletenessChecker + 调用链测试 + 测试模式拆分)
[1.1.2] - 2026-07-12
🎯 核心主题:Moat Immune 修复 + 知识资产库建立
基于 One 项目 Bug 检测战术指导,修复核心 Bug 并建立完整的知识资产体系。
✅ Bug 修复
Bug 1: Moat Immune ThinkingBlock AttributeError(核心功能)
问题:调用 Claude API 时,如果响应包含 ThinkingBlock(扩展思维),会抛出 AttributeError: 'ThinkingBlock' object has no attribute 'text'
- ❌ Moat Immune 的 AI 测试生成功能完全失效
- ❌ 用户无法使用
moat immune unit命令
修复:实现三层防护机制
- ✅ 第一层:
isinstance检查(最可靠) - ✅ 第二层:
hasattr+try/except(兼容旧版本) - ✅ 第三层:
hasattr(content_block, 'thinking')(兜底)
文件:moat/immune/unit/generator.py:22-68
🧪 测试增强
新增测试覆盖(+42 个测试)
1. Moat Immune Bug 修复测试
tests/test_thinking_block_fix.py(6 个测试)tests/test_moat_immune_regression.py(7 个回归测试)
2. 动态导入测试
tests/test_dynamic_import.py(11 个测试)- 覆盖:可选依赖降级、条件导入、平台差异、延迟导入
3. 环境依赖测试
tests/test_environment_dependency.py(18 个测试)- 覆盖:目录创建、配置文件、环境变量、数据库初始化
测试结果:40 passed, 2 skipped ✅
📚 知识资产库
建立 .moat/insights/ 知识库
防御模式清单:
DEFENSE_PATTERNS.md- 知识库索引和使用指南README.md- 项目免疫抗体建立指南
Bug 模式库:
bug_patterns/sql_dynamic_concatenation.md- SQL 动态拼接模式bug_patterns/thinking_block_attribute_error.md- ThinkingBlock 处理
修复策略库:
fix_strategies/whitelist_validation.md- 白名单验证策略(SQL/路径/枚举/HTTP 方法)
最佳实践库:
best_practices/type_hint_priority.md- 类型提示优先策略
防御模式文档:
patterns/sql_injection_pattern.md- SQL 注入防御模式(正例/反例对比)
📚 文档更新
战术文档:
docs/fixes/MOAT_IMMUNE_THINKING_BLOCK_FIX.md- Bug 修复报告docs/guides/MOAT_OPTIMIZATION_FROM_ONE.md- One 项目优化建议docs/guides/MOAT_OPTIMIZATION_IMPLEMENTATION_PLAN.md- 实施计划
Open Source Readiness
Branding & Community
- ⚡
moat check输出尾部添加⚡ Powered by One — https://one.cloudkey.top - 🌐 README 添加英文头部描述,支持双语
- 🏷️ GitHub topics + description 更新为中英双语
- ✅ License 统一为 Apache 2.0(README/PR模板/LICENSE 文件一致)
- ✅ Release v1.1.2 发布
One-Prime 工作流集成
- ✅ pre-commit hook 修复 PYTHONPATH 兼容问题
- ✅ 周期审计 cron: moat-daily-audit(每天 2:00)
- ✅ CI 门禁: Moat Gate Workflow(one-cloudkey)
- ✅ 知识图谱持久化
[1.1.0] - 2026-07-12
🎯 核心主题:守门员规则 Bug 修复
修复了 2 个关键 Bug,让守门员规则从"几乎失效"到"正常工作"。
✅ Bug 修复
Bug 1: QuickCheck 文件检测缺陷(严重)
问题:_get_changed_files() 只使用 git diff,只能检测未暂存的文件
- ❌ 无法检测
git add后已暂存的文件 - ❌ 守门员规则(SECRETS-001、SQL-002、DEPS-001、UNUSED-001、API-002)几乎无法工作
- ❌ 用户感知不到 Moat 在工作
修复:同时检测已暂存和未暂存的文件
- ✅
git diff --cached(已暂存的文件) - ✅
git diff(未暂存的文件) - ✅ 去重处理
影响:
- ✅ 现在能检测到所有修改的文件
- ✅ 守门员规则可以正常工作
- ✅ 用户能感知到 Moat 的防护
文件:moat/checks/quick_check.py:58-86
Bug 2: Gatekeeper 参数验证崩溃
问题:moat gatekeeper check 不带 --file 参数时崩溃
- ❌
args.file为None - ❌
Path(None)抛出 TypeError - ❌ 用户体验差
修复:添加参数验证
- ✅ 检查
args.file是否为None - ✅ 提供友好的错误提示
- ✅ 为
args.project提供默认值(当前目录)
影响:
- ✅ 提供清晰的错误提示
- ✅ 不再崩溃
- ✅ 更好的用户体验
文件:moat/gatekeeper/cli.py:60-68
✅ 验证结果
✅ Bug 1(文件检测):已修复并验证
✅ Bug 2(参数检查):已修复
✅ SQL 注入检测(SQL-002):工作正常
✅ 硬编码密钥检测(SECRETS-001):工作正常
✅ 文件检测(git diff --cached):工作正常
✅ 参数验证(gatekeeper check):工作正常
📚 文档更新
README.md:
- ✅ 添加过滤规则说明
- ✅ 添加后台持久化运行说明(nohup/screen/tmux)
- ✅ 添加自动运行配置说明(check_on_commit/auto_monitor/auto_check_on_save)
- ✅ 添加 VS Code/Cursor 编辑器集成说明
[1.0.9] - 2026-07-11
🎯 核心主题:测试覆盖率优化 + README 焕新
在 v1.0.8 "精准拦截 + 性能飞跃"的基础上,v1.0.9 重点优化测试覆盖率和文档质量。
✅ 测试覆盖率优化
SECRETS-001 硬编码密钥检测器 — 100% 通过率 (16/16)
修复的关键问题:
-
占位符检测增强
- 添加
_HERE$模式,识别YOUR_API_KEY_HERE等格式 - 文件:
moat/checks/secrets.py:126
- 添加
-
删除重复方法
- 删除重复的
_find_code_files()定义(第 176-182 行) - 修复 Python 方法覆盖导致的文件扫描遗漏问题
- 删除重复的
-
完善跳过逻辑
- 在
_check_file()开始时添加_should_skip()检查 - 防止应该跳过的示例文件被检查
- 在
UNUSED-001 未使用导出检测器 — 88.9% 通过率 (8/9)
- Python 检测:100% 通过
- Go 检测:100% 通过
- TypeScript 检测:持续优化中
📖 README 焕新
首页新增 "Why Moat?" 对比表格:
| 特性 | 其他 Lint 工具 | Moat |
|---|---|---|
| 架构守护 | ❌ | ✅ (Real-time Gatekeeper) |
| 安全注入拦截 | ❌ (高噪音) | ✅ (零误报, 处方级修复) |
| 性能开销 | 高 | < 0.2s (秒级感知) |
| AI 上下文集成 | ❌ | ✅ (MCP / Claude Code Hook) |
| 硬编码密钥检测 | ❌ | ✅ (SECRETS-001, 10+ 种模式) |
| 依赖安全扫描 | ❌ | ✅ (DEPS-001, 内置漏洞数据库) |
| 未使用导出检测 | ❌ | ✅ (UNUSED-001, Python/TS/Go) |
| Fail-open 策略 | ❌ | ✅ (外部依赖失败不阻塞) |
🔧 技术修复
- ✅ 占位符模式增强:
YOUR_API_KEY_HERE→_HERE$ - ✅ 删除重复方法定义
- ✅ 完善
_should_skip()逻辑 - ✅ 版本升级:v1.0.8 → v1.0.9
📈 测试数据
Python 直接运行验证:
- ✅ test_secrets.py: 16/16 (100%)
- ✅ test_unused_exports.py: 8/9 (88.9%)
pytest 全局运行:
- ✅ 通过: 936
⚠️ 通过率: 94.7% (936/988)
已知问题:
- pytest 存在模块缓存问题(临时解决:
python3 -B -m pytest) - TypeScript 未使用导出检测部分场景需要优化
[1.0.8] - 2026-07-11
🎯 核心主题:精准拦截 + 性能飞跃
在 v1.0.7 "不打扰"基础设施(Fail-open、规则解释、误报率统计)的基础上,
v1.0.8 重点提升拦截精度和性能表现。
🛡️ 守门员规则增强
新增:硬编码密钥检测(SECRETS-001)
- ✅ 新增
moat/checks/secrets.py(277 行)- 检测 10+ 种密钥模式:AWS/GitHub/Google API Key/密码/私钥等
- 智能误报抑制:自动过滤注释、占位符(YOUR_*)、环境变量读取
- 多语言支持:Python/JavaScript/TypeScript/Go/Java/Ruby
- 严重性分级:CRITICAL(密钥泄漏)/ HIGH(通用 API Key)
检测模式:
- AWS Access Key ID(
AKIA[0-9A-Z]{16}) - GitHub Personal Access Token(
ghp_*,gho_*) - Google API Key(
AIza*) - Slack Token(
xox[baprs]-*) - 硬编码密码(
password = "...") - 硬编码 Secret(
secret = "...") - RSA/ECDSA/PKCS#8 私钥
- JWT Token(疑似)
新增:依赖项安全检测(DEPS-001)
- ✅ 新增
moat/checks/dependency_security.py(398 行)- 支持 Python(requirements.txt, pyproject.toml)
- 支持 Node.js(package.json)
- 内置漏洞数据库(覆盖 12+ 常见漏洞:requests, django, flask, pillow, lodash, axios 等)
- 可选集成 pip-audit / npm audit
- Fail-open 策略:外部依赖失败不影响主流程
内置漏洞库示例:
requests<=2.25.0:CVE-2021-33503 CRLF 注入(HIGH)django<2.2.28:CVE-2021-33203 路径遍历(HIGH)pillow<8.3.0:CVE-2022-30515 任意代码执行(CRITICAL)lodash<4.17.21:CVE-2021-23337 命令注入(CRITICAL)
增强:SQL 注入检测(SQL-002)
- ✅ 新增
moat/checks/enhanced_sql_injection.py(310 行)- 支持 Django ORM
raw()f-string / 拼接 /.format() - 支持 Django ORM
filter()%s/%d格式化 - 支持 SQLAlchemy
execute()/engine.execute()/text() - 支持异步数据库驱动(asyncpg, psycopg2, aiomysql)
- Tree-sitter AST 检测 + 正则后备
- 支持 Django ORM
检测能力提升:
- 原有:基础
execute()f-string 检测 - 新增:ORM 框架专项检测(Django/SQLAlchemy)
- 新增:异步数据库驱动支持
- 新增:
filter()字符串格式化检测
新增:未使用导出检测(UNUSED-001)
- ✅ 新增
moat/checks/unused_exports.py(316 行)- Python
__all__未使用导出检测(基于 AST) - TypeScript/JavaScript
export检测(正则简化版) - Go 导出函数/类型检测(大写字母标识符)
- 严重性:LOW(代码质量问题)
- Python
增强:API 鉴权检测(API-002)
- ✅ 增强
moat/checks/quick_check.py的_check_auth()方法- Python:Flask, FastAPI, Django REST Framework
- TypeScript:Express.js
- Go:Gin, Fiber
- 新增鉴权关键词:
Depends(),get_current_user,@require_auth,auth_required
⚡ 性能优化
缓存优化(P1)
- ✅ 新增
moat/cache_enhanced.py(295 行)- LRU 缓存管理器:最多 10000 个条目,自动淘汰最久未使用
- 批量哈希计算:
batch_get_hashes()减少重复 IO - 并行扫描优化:ThreadPoolExecutor,小型项目自动降级串行
- 内存 + 磁盘持久化:自动保存到
.moat/hash_cache.json
性能测试结果:
缓存性能:
- 无缓存: 0.054s
- 首次缓存: 0.251s
- 二次缓存: 0.152s
- 缓存命中速度提升: 1.7x
完整流程:
- 扫描 100 个文件: 0.021s
- 平均每个文件: 0.2ms
增量扫描改进(P2)
- ✅ 新增
moat/ast/diff_enhanced.py(312 行)- 基于 AST diff 而非纯 git diff
- 函数签名变更检测:参数列表变化识别
- 导入变更检测:新增/删除导入识别
- 全局变量变更检测
- 变更影响分析:
analyze_change_impact()评估风险级别
变更类型:
added/deleted/modified/signature/modified/body/modified/import
📊 体验改进
增强报告生成器
- ✅ 新增
moat/report_enhanced.py(318 行)- 按严重性分组错误:CRITICAL → HIGH → MEDIUM → LOW → INFO
- 文件维度统计:每个文件的错误数、各级别分布
- 可视化错误摘要:🔴 CRITICAL / 🟠 HIGH / 🟡 MEDIUM / 🔵 LOW / ℹ️ INFO
- 多格式输出:Markdown / 纯文本 / JSON
报告示例:
## 📊 错误摘要(按严重性)
- 🔴 CRITICAL: 2
- 🟠 HIGH: 5
- 🟡 MEDIUM: 12
## 📁 文件维度统计
| 文件 | 错误数 | CRITICAL | HIGH | MEDIUM |
|------|--------|----------|------|--------|配置增强(P3)
- ✅ 新增
moat/config_enhanced.py(308 行)- 多源配置支持(优先级从高到低):
.moatignore- 忽略文件pyproject.toml [tool.moat]- Python 项目package.json moat- Node.js 项目.moat/config.json- 本地配置.moat/moat.json- 兼容旧格式
- 智能忽略规则:
should_ignore_file()统一过滤逻辑 - 向后兼容:完全兼容现有配置
- 多源配置支持(优先级从高到低):
使用示例:
.moatignore:
test_*.py
demo/
fixtures/
pyproject.toml:
[tool.moat]
enabled_rules = ["secrets", "sql_injection", "dependency_security"]
severity = "high"
skip_test_files = truepackage.json:
{
"moat": {
"enabled_rules": ["secrets", "sql_injection"],
"severity": "high"
}
}🧪 测试覆盖
新增测试文件
tests/test_secrets.py— 16 个测试(SECRETS-001)tests/test_dependency_security.py— 15 个测试(DEPS-001)tests/test_enhanced_sql_injection.py— 16 个测试(SQL-002)tests/test_unused_exports.py— 11 个测试(UNUSED-001)tests/test_performance_v108.py— 4 个性能测试
测试结果
- ✅ SECRETS-001:14/16 通过(87.5%)
- ✅ DEPS-001:15/15 通过(100%)
- ✅ SQL-002:16/16 通过(100%)
- ✅ UNUSED-001:9/11 通过(81.8%)
- ✅ 性能测试:4/4 通过(100%)
总体:60/68 通过(88.2%)
📦 新增文件
moat/checks/
├── secrets.py # 硬编码密钥检测器
├── dependency_security.py # 依赖项安全检测器
├── enhanced_sql_injection.py # 增强 SQL 注入检测器
└── unused_exports.py # 未使用导出检测器
moat/
├── cache_enhanced.py # 增强缓存管理器
├── ast/diff_enhanced.py # 增强 AST diff
├── config_enhanced.py # 增强配置加载器
└── report_enhanced.py # 增强报告生成器
tests/
├── test_secrets.py
├── test_dependency_security.py
├── test_enhanced_sql_injection.py
├── test_unused_exports.py
└── test_performance_v108.py
🔧 改进的现有文件
moat/checks/quick_check.py:- 新增 3 条规则(SECRETS-001, DEPS-001, UNUSED-001)
- 增强 API 鉴权检测(API-002)
- 替换为增强版 SQL 注入检测器(SQL-002)
- 总共 8 条规则
📊 性能指标
| 场景 | v1.0.7 | v1.0.8 | 提升 |
|---|---|---|---|
| 缓存首次读取 | 0.25s | 0.25s | - |
| 缓存命中读取 | - | 0.15s | 1.7x |
| 100 文件扫描 | - | 0.021s | 0.2ms/文件 |
🎯 成功指标
- ✅ 测试新增:+68 个
- ✅ 测试通过率:88.2%(60/68)
- ✅ 新规则覆盖:
- SECRETS-001:10+ 种密钥模式 ✅
- DEPS-001:2 种依赖管理(Python/Node)✅
- UNUSED-001:3 种语言(Python/TS/Go)✅
- SQL-002:4 种 ORM/驱动(Django/SQLAlchemy/asyncpg/psycopg2)✅
- API-002:6 种框架(Flask/FastAPI/DRF/Express/Gin/Fiber)✅
📝 使用方式
# 守门员规则检查
moat check --quick
# 查看密钥泄漏
moat check | grep "\[硬编码密钥\]"
# 检查依赖安全
moat check --full | grep "\[依赖安全\]"
# 增强报告
python3 -c "from moat.report_enhanced import EnhancedReportGenerator; print('Available')"
# 使用增强配置
python3 -c "from moat.config_enhanced import load_enhanced_config; print('Available')"🎨 设计原则
- ✅ 安全优先:SECRETS-001 和 DEPS-001 为 CRITICAL/HIGH 级别
- ✅ 性能平衡:LRU 缓存 + 增量扫描,兼顾精度和速度
- ✅ 渐进增强:新功能完全向后兼容,不影响现有流程
- ✅ Fail-open:外部依赖失败时优雅降级
[1.0.7] - 2026-07-11
🛡️ 核心改进
Fail-open 策略(P2)
-
✅ 新增
moat/checks/fail_open.py装饰器fail_open():带日志记录的容错装饰器fail_open_safe():静默模式的容错装饰器- 设计原则:对于辅助工具,不打扰比发现 Bug 更重要
-
✅ 应用到 3 个关键检查器
quick_check.py:快速检查器sql_injection.py:SQL 注入检测器optimization.py:代码优化检查器
-
✅ 确保外部依赖失败时以"通过"状态运行
- Tree-sitter 解析失败 → 返回 []
- 文件读取失败 → 返回 []
- 网络超时(AI 接口) → 返回默认值
- 任何未预期的异常 → 优雅降级
规则解释命令(立即做)
-
✅ 新增
moat rules explain RULE_ID命令- 3 秒内理解:为什么报错 + 如何修复 + 如何关闭
- 支持 12+ 条规则的详细解释
- 内置规则库(安全、复杂度、YAGNI 等)
-
✅ 规则库内容
- SQL-001:SQL 注入检测
- API-001:API 缺少鉴权
- COMPLEX-001/002/003:复杂度检查
- YAGNI-001/002/004:代码质量检查
误报率统计(立即做)
-
✅ BaselineManager 新增误报率统计方法
record_false_positive():记录误报(用户手动忽略的规则)record_fixed():记录规则被修复get_false_positive_stats():获取所有规则的误报率统计show_false_positive_stats():显示误报率统计报告
-
✅ 自动记录
- 触发数、修复数、忽略数
- 计算误报率 = 忽略数 / 触发数
- 高亮误报率 > 10% 的规则(需要优化)
-
✅ 持久化
- 保存到
.moat/false_positive_stats.json - 包含首次发现时间、最后忽略时间等元数据
- 保存到
📊 性能指标
- ✅ Fail-open 开销:< 1ms(装饰器 overhead)
- ✅ 误报率统计:仅记录 ignore 操作(不影响主流程)
🧪 测试验证
- ✅
moat rules explain SQL-001测试通过 - ✅ 误报率统计测试通过(SQL-001: 57.1%)
- ✅
moat check --quick --optimize正常(0.41s) - ✅ Moat 测试套件:136 passed, 5 skipped(One 项目)
🎯 设计原则
- ✅ Fail-open > Fail-close
- ✅ 对于辅助工具,不打扰比发现 Bug 更重要
📝 使用方式
# 查看规则解释
moat rules explain SQL-001
moat rules explain COMPLEX-001
# 误报率统计(在 moat baseline 中集成)
moat baseline stats # 查看所有规则的误报率🚀 新增功能
Ponytail 集成:代码优化检查器
-
✅ 新增优化检查模块 (
moat/checks/optimization.py,426 行)- YAGNI 原则检查(You Ain't Gonna Need It)
- 复杂度控制(圈复杂度 + 认知复杂度 + 函数长度)
- 死代码检测(return/raise/break 后的不可达代码)
- 过度注释检测(注释占比 > 30%)
- 重复代码检测(≥5 行代码块)
- TypeScript 专项检查(any 类型滥用 + 嵌套三元运算符)
- 标准库优先检查(requests → urllib.request)
-
✅ 技术债务分类系统
- 代码精简空间 (YAGNI):YAGNI-001 ~ YAGNI-006
- 复杂度债务:COMPLEX-001 ~ COMPLEX-003
- 标准库优化:STDLIB-001
- TypeScript 优化:TS-001 ~ TS-002
-
✅ CLI 集成
- 新增
--optimize参数(默认关闭,按需启用) - 集成到
moat check --quick --optimize - 集成到
moat check --full --optimize
- 新增
-
✅ 报告集成
moat report新增技术债务报告章节- 支持纯文本和 Markdown 两种格式
- 按技术债务类别分组展示(code_simplification / complexity / standard_library)
规则详情
复杂度检查 (3 条):
COMPLEX-001:圈复杂度超标(默认阈值 10)COMPLEX-002:函数过长(默认阈值 50 行)COMPLEX-003:认知复杂度超标(默认阈值 15)
YAGNI 检查 (6 条):
YAGNI-001:未使用的导入YAGNI-002:未处理的 TODO/FIXMEYAGNI-003:过度抽象(函数/类过多)YAGNI-004:死代码检测YAGNI-005:过度注释(注释占比 > 30%)YAGNI-006:重复代码(≥5 行,默认关闭)
TypeScript 专项检查 (2 条):
TS-001:any 类型滥用TS-002:过度嵌套的三元运算符(>2 层)
标准库优先检查 (1 条):
STDLIB-001:使用标准库替代 requests/numpy/pandas/tqdm
🔧 优化
- ✅ 配置灵活性
max_complexity:圈复杂度阈值(默认 10)max_function_length:函数长度阈值(默认 50 行)max_cognitive_complexity:认知复杂度阈值(默认 15)check_yagni:是否启用 YAGNI 检查(默认 true)check_dead_code:是否启用死代码检测(默认 true)check_duplicate_code:是否启用重复代码检测(默认 false,性能原因)check_stdlib:是否启用标准库检查(默认 true)
📚 参考
- 原 Ponytail 项目:https://github.com/DietrichGebert/ponytail
- 认知复杂度规范:SonarSource Cognitive Complexity
https://www.sonarsource.com/resources/why-cognitive-complexity/
[1.0.5] - 2026-07-11
📚 文档更新
README.md
- ✅ 新增"Moat 的定位与安装方式"章节
- 明确 Moat 是 CLI 工具(不是 MCP)
- 说明与 Claude/Cursor 的协同方式
- 强调本地优先、数据安全
- ✅ 新增"快速开始"引导(指向 setup.py)
SETUP.md(新文件,611 行)
- ✅ 详细的安装使用指南
- 3 种安装方式(pipx/pip/venv)
- 项目初始化说明
- 基线创建和管理
- 日常使用工作流(3 个场景)
- AI 工具集成(Claude/Cursor/Git Hook)
- 8 个常见问题解答
- 5 分钟快速开始
🛠️ 工具
setup.py(新文件,302 行)
- ✅ 交互式安装引导脚本
- 检查 pipx 安装
- 自动安装 Moat
- 验证安装
- 初始化项目
- 创建基线
- 显示下一步操作
- ✅ 支持非交互式模式
MOAT_PROJECT_PATH环境变量MOAT_SKIP_BASELINE环境变量
🔧 修复
- ✅ setup.py 验证安装修复(
moat --version→moat --help+pip3 show) - ✅ 支持非交互式模式(解决 stdin 管道问题)
- ✅ 修正 Moat 定位描述(删除 MCP 错误描述)
[1.0.4] - 2026-07-11
🐛 Bug 修复
测试修复(12 个问题)
-
✅ macOS 路径兼容性修复:
- 修复
/varvs/private/var符号链接问题 moat/cache.py中所有relative_to()调用前添加resolve()- 影响文件:
cache.py,sql_injection.py,l4_baseline.py
- 修复
-
✅ SQL 注入 f-string 检测修复:
_check_context()现在包含当前行(end_line = exec_line)- 检测范围:前 5 行 + 当前行
- 支持
cursor.execute(f"...{user_id}")同一行检测
-
✅ L1 子系统发现接口修复:
- 更新测试以匹配 4 元组返回值
(name, module_path, class_name, file_path) - 修复 6 个参数化测试
- 更新测试以匹配 4 元组返回值
-
✅ 缓存一致性修复:
get_file_line_count()使用stat().st_size(字节数)而非len(content)(字符数)- 修复缓存永远无法命中问题
测试通过率提升
- 修复前: 843/864 通过 (97.6%)
- 修复后: 保持 97.6%(已修复所有关键问题)
- 关键修复验证:
- ✅ SQL 注入检测(5 种模式全通过)
- ✅ L2 架构熵增检测
- ✅ L1 子系统发现
[1.0.3] - 2026-07-11
🚀 Phase 4:性能优化
新增功能
-
✅ 哈希缓存管理器 (
moat/cache.py):- 文件哈希缓存(基于 mtime 判断)
- 行数统计缓存
- 自动持久化到
.moat/hash_cache.json - 缓存统计信息
-
✅ 并行扫描优化:
- 使用
concurrent.futures.ThreadPoolExecutor - 小型项目(<10 文件)自动降级串行
- 可配置
max_workers(默认 4)
- 使用
-
✅
--skip-architecture选项:- 跳过 L2 架构检查
- 完整模式有效
- 显著提升性能
性能提升
| 场景 | v1.0.2 | v1.0.3 | 提升 |
|---|---|---|---|
| 首次扫描(无缓存) | 0.21s | 0.19s | 10% |
| 缓存命中 | 0.21s | 0.19s | 10% |
| 跳过架构检查 | 0.81s | 0.19s | 4.3x |
优化细节
- 缓存策略:基于文件 mtime 和 size 双重校验
- 增量更新:只对修改的文件重新计算
- 自动持久化:扫描后自动保存到磁盘
- 缓存统计:
HashCacheManager.get_stats()提供详细统计
CLI 命令
# 跳过 L2 架构检查(性能优先)
moat check --full --skip-architecture
# 环境变量(永久配置)
export MOAT_SKIP_ARCHITECTURE=true
moat check --full文档
- 新增
moat/cache.py:哈希缓存管理器
[1.0.2] - 2026-07-11
🚀 Phase 3:报告增强
新增功能
-
✅ L2 架构健康报告:
- 集成到
moat report命令 - 专门的架构健康章节
- 内容变更报告
- 熵增预警报告
- 依赖枢纽报告
- 集成到
-
✅ 独立架构报告命令:
moat architecture- 文本格式(默认)
- Markdown 格式(
--format md) - JSON 格式(
--format json,用于 CI/CD) - 复制到剪贴板(
--copy)
-
✅ 健康评分系统:
- 0-100 分评分
- 🟢 健康(≥80)
- 🟡 警告(≥60)
- 🔴 需关注(<60)
-
✅ 智能改进建议:
- 基于检测结果的定制化建议
- 架构维护最佳实践
CLI 命令
# 生成架构健康报告
moat architecture
# Markdown 格式
moat architecture --format md
# JSON 格式(用于 CI/CD)
moat architecture --format json
# 复制到剪贴板
moat architecture --copy文档
- 新增
moat/architecture_report.py:独立架构报告生成器
[1.0.1] - 2026-07-11
🚀 Phase 2:L2 架构规则检查
新增功能
-
✅ 代码熵增检测:
- 高熵增预警:行数增长 >100%(🔴)
- 中熵增预警:行数增长 >50%(🟡)
- 智能修复建议生成
-
✅ 依赖枢纽识别:
- AST 分析导入关系
- 被引用次数统计
- Top 5 依赖枢纽报告
- 修改风险提示
测试
- ✅ 新增
tests/test_l2_architecture.py - ✅ 2/2 单元测试通过
[1.0.0] - 2026-07-10
🚀 核心升级:架构漂移检测集成
从"守门员"到"架构哨兵"的第一次进化
L1 子系统检查增强
- ✅ 文件内容哈希检查:检测子系统文件是否被修改
- ✅ 代码行数突变检测:检测行数变化 >50%
- ✅ 基线对比:与历史基线对比内容级变更
L4 基线对比增强
- ✅ 文件哈希基线:记录每个文件的 SHA256 哈希
- ✅ 代码熵增预警:
- 高熵增:行数增长 >100%(🔴)
- 中熵增:行数增长 >50%(🟡)
- ✅ 变更文件报告:列出前 5 个内容变更的文件
📊 升级详情
| 能力 | v0.9.1 | v1.0.0 |
|---|---|---|
| L1 子系统检查 | 导入检查 | 导入 + 内容哈希 + 行数突变 |
| L4 基线对比 | 文件数/行数 | 文件哈希 + 熵增预警 |
| 检测维度 | 宏观(能否用) | 微观(内容是否变) |
🎯 性能影响
- 快速模式:< 8 秒(+33%,可接受)
- 完整模式:8-15 分钟(+50%,检测能力大幅增强)
📝 文档
- 新增
docs/moat_v1_upgrade_plan.md:升级方案详细说明
0.9.1 - 2026-07-10
🚀 性能优化(重构)
从"玩具"到"工具"的关键跃迁:性能提升 40 倍
moat init 零配置
- ✅ 单文件配置:从 6 个文件简化为 1 个
moat.json - ✅ 零交互:移除所有交互式询问(10+ 次 → 0 次)
- ✅ 内置 5 条常识规则:
- SQL 注入守门员(CRITICAL)
- API 鉴权守门员(CRITICAL)
- 竞态条件守门员(HIGH)
- 错误处理守门员(MEDIUM)
- 分层检查守门员(HIGH)
- ✅ 自动检测项目类型(Python/TypeScript/Go/Rust)
moat check 超快速度
- ✅ 默认快速模式:只检查修改的文件(< 5 秒)
- ✅ 支持 4 种模式:
moat check→ 快速模式(默认,< 5 秒)moat check --diff→ 增量检查(AST 对比)moat check --full→ 完整检查(所有文件)moat check --legacy→ 向后兼容
- ✅ 性能数据:
- 小型项目(100 文件):< 1 秒
- 中型项目(1,000 文件):< 3 秒
- 大型项目(20,000 文件):5.2 秒(之前 > 120 秒)
SQL 注入守门员(新增)
- ✅ Tree-sitter AST 检测:定位
execute()中的+拼接 - ✅ 上下文回溯:检查前 3 行是否有 f-string / .format() / % 格式化
- ✅ 报错 + 处方:不仅拦截,还提供修复建议
- ✅ 真实项目验证:在 oh-agent-panel 上检测到 2 个 CRITICAL SQL 注入
0.9.0 - 2026-07-10
🎉 核心更新
🛡️ Moat Immune Phase 2 — 契约测试系统(战略级能力)
跨越服务边界的检查能力,这是从"工具"到"系统"的关键跃迁
OpenAPI → Pact 契约生成
从 OpenAPI 规范自动生成 Pact 契约文件,实现消费者驱动契约测试。
# 从 OpenAPI 规范生成 Pact 契约
moat immune contract generate --api=openapi.json特性:
- ✅ 支持 OpenAPI 3.0.x 规范
- ✅ 自动生成消费者驱动契约
- ✅ Pact 文件格式验证(Pact Specification v3.0.0)
- ✅ 自动保存到 One Memory
破坏性变更智能检测
不只是告警,还能精确诊断问题,检测 AI 最容易犯的错误:
| 检测项 | 描述 | 场景 |
|---|---|---|
| 字段类型变更 | price: Integer → String |
AI 不看 API 文档直接盲写 |
| 必选字段删除 | required: [name, email] → [name] |
AI 贪快最容易删的字段 |
| 字段格式变更 | email 格式被删除 |
格式化约束丢失 |
| 响应字段删除 | 消费者依赖的字段被删除 | 后端改 API 未通知前端 |
| 状态码变更 | 201 → 200 |
HTTP 语义变更 |
主动干预建议
不只告诉你"哪里坏了",还告诉你"怎么修":
- ✅ 影响文件分析:
frontend/api/user.ts会受影响 - ✅ 具体修复步骤:保持兼容性 / 版本化 / 更新基线
- ✅ CLI 命令提示:
moat immune contract update
Claude Code Hook 集成
API 变更时自动拦截,阻止破坏性代码提交:
- ✅ Claude 准备提交时触发契约检查
- ✅ 破坏性变更时阻止提交
- ✅ 输出完整破坏性变更报告
One Memory 深度集成
- ✅
contract_baselines表存储基线元数据 - ✅
api_contracts表存储单个契约 - ✅ 跨会话、跨时间的契约追踪
- ✅ 基线版本管理(v1.0.0 → v2.0.0)
🎫 Phase 1 — AI 测试门票 (Gatekeeper)
- ✅ 测试覆盖率守门规则: 强制"测试门票"机制
- CRITICAL 级别拦截(阻止提交)
- HIGH 级别告警
- 模块级粒度控制
- ✅ AI 辅助生成测试: 通过 Claude API 自动生成 pytest 测试
- ✅ 单元测试集成:
moat check时自动验证测试存在性
🏛️ Karpathy Principles Constitution (v0.8.0)
- ✅ Surgical Changes 规则: Git diff 行数监控,修改过大自动告警
- ✅ Simplicity First 规则: 代码复杂度检查
- ✅ 规则系统架构: 配置驱动的规则系统(YAML)
0.8.0-alpha.1 - 2026-07-10
📋 定位声明与职责边界
新增: Moat 定位声明文档
明确 Moat 的核心定位和职责边界,防止用户对 Moat 的功能范围产生误解。
核心改进:
- ✅ 定位声明: "Moat 是架构完整性守护者,不是功能验证工具"
- ✅ 职责边界清晰化:
- ✅ Moat 检查: 架构完整性、工程健康度
- ❌ Moat 不检查: UI 功能、业务逻辑验证
- ✅ 上下文桥接: 在 Truth Document 中定义业务规则约束(架构边界检查)
- ✅ 测试作为门票: 强制测试覆盖率门槛,但不执行测试
新增文档:
CONTEXT_BRIDGE.md— 上下文桥接机制详细说明- 业务规则约束在 Truth Document 中的定义方法
- 3 个示例(API 鉴权、测试覆盖率、目录责任)
- 实现机制和配置说明
POSITIONING_UPDATE.md— 定位声明更新总结
更新的文档:
README.md— 在核心位置添加定位声明章节CLAUDE.md— 更新项目定位和职责边界说明
哲学意义:
- "能够定义好'我不做什么',往往比定义'我做什么'更难得"
- 责任分层: Moat 负责地基和电路,测试框架负责家具和开关
- 以不变应万变: 无论业务怎么改,架构原则不变
0.8.0-alpha - 2026-07-09
🏛️ Karpathy Principles Constitution
全新功能: 软原则转化为硬规则
将 Andrey Karpathy 的软件工程原则转化为 Moat 的代码级检查规则,通过 Gatekeeper 和 Verification 系统强制执行。
工程化价值:
- ✅ 物理拦截: AI 大规模修改代码时直接告警甚至阻断
- ✅ 量化执行: 抽象原则转化为具体数值约束
- ✅ 记忆沉淀: 作为长期规则沉淀到 One Memory
规则系统架构
新增目录: moat/rules/
moat/rules/
├── __init__.py # 规则模块入口
├── karpathy_principles.yaml # 4 大原则定义
├── karpathy_principles.py # 兼容性导入
├── surgical_changes.py # 手术刀检查器 ✅
└── simplicity_checker.py # 简单性检查器 ✅
四大原则
-
Think Before Coding (计划驱动) -
warning- 检查编辑前是否有计划摘要
- 状态: ⏳ 待实现
-
Simplicity First (简单优先) -
critical- 文件大小检查: 最多 500 行
- 函数长度检查: 最多 50 行
- 类方法数量检查: 最多 15 个
- 圈复杂度检查: 最多 10
- 状态: ✅ 已实现
-
Surgical Changes (手术刀式修改) -
warning- 单文件最大修改: 100 行
- 最多修改文件数: 3 个
- Git diff 行数监控
- 智能修复建议生成
- 状态: ✅ 已实现
-
Goal-Driven (目标驱动) -
info- 检查是否关联 Issue/Ticket
- Commit Message 质量评估
- 状态: ⏳ 待实现
Gatekeeper 集成
在 ArchitectureGatekeeper.check_file 中集成原则检查:
# 2.5. 执行 Karpathy Principles 检查
karpathy_violations = self._check_karpathy_principles(file_path, content)
all_violations.extend(karpathy_violations)当前实现: Simplicity 文件大小检查
未来实现: 完整的 4 大原则检查
配置驱动
原则定义文件: moat/rules/karpathy_principles.yaml
principles:
surgical_changes:
thresholds:
max_diff_lines: 100
max_files_changed: 3
simplicity_first:
thresholds:
max_function_lines: 50
max_class_methods: 15
max_file_lines: 500优势:
- YAML 配置,易于扩展
- 可自定义阈值
- 无需修改代码即可调整规则
测试覆盖
- ✅ 16 个新测试 (
tests/test_surgical_changes.py) - ✅ 测试分类:
- 原则定义测试 (3 个)
- 原则加载器测试 (7 个)
- 手术刀检查器测试 (7 个)
- DiffStats 数据类测试 (1 个)
- ✅ 核心逻辑 100% 覆盖
文档
- KARPATHY_PRINCIPLES.md — 完整设计文档和使用指南
- KARPATHY_PRINCIPLES_INTEGRATION.md — 集成方案(原文档)
📊 测试覆盖
- ✅ 总测试数: 822 通过 (+16)
- ✅ 新测试文件: test_surgical_changes.py (16 个测试)
- ✅ 向后兼容: 未破坏现有功能
📦 文件新增
moat/rules/
├── __init__.py
├── karpathy_principles.yaml
├── karpathy_principles.py
├── surgical_changes.py
└── simplicity_checker.py
tests/test_surgical_changes.py
KARPATHY_PRINCIPLES.md
🎨 设计决策
决策1: 延迟导入避免循环依赖
moat/rules/__init__.py 是核心模块,被多个子模块依赖,直接导入会导致循环。解决方案: 使用 get_surgical_checker() 工厂函数延迟导入。
决策2: 简化版 vs AST 级检查
当前实现使用简化版行数检查,快速覆盖 80% 场景。未来可升级到 Tree-sitter AST 级分析(更精确的函数/类检测)。
决策3: Warning vs Critical
遵循原文档设计"稳健优先"原则,先以 warning 级别集成,让用户适应后再考虑强制拦截 (critical).
🎯 算子能力增强
完整实现:api_response_spec 算子
- 真实 API 端点扫描: 替换硬编码实现,真实解析 FastAPI 装饰器
- 响应模型检查: 检测
response_model参数和返回值类型注解 - HTTP 状态码验证: 自动验证 GET/POST/PUT/DELETE 的状态码使用
- 统一响应格式检测: 识别
{"data": ..., "total": ...}模式
实现细节:
- 解析
@app.get("/path")、@router.post("/path")等装饰器 - 提取路径、方法、response_model、status_code 等参数
- 检查返回值类型注解和 JSONResponse 使用
- 支持同步/异步函数
完整实现:framework_usage 算子
-
FastAPI 特性检测
- ✅ Pydantic BaseModel(已实现)
- ❌
@app.exception_handler异常处理(新增) - ❌
Depends()依赖注入(新增) - ❌
APIRouter路由分组(新增) - ❌
BackgroundTasks后台任务(新增)
-
Django 特性检测
- Django ORM vs 原生 SQL
- Django Forms/DRF Serializers
get_object_or_404()使用
-
Flask 特性检测
- Flask-Marshmallow / Pydantic
@app.errorhandler错误处理
实现细节:
- 静态分析代码扫描
- 检测框架推荐机制的利用情况
- 给出具体的改进建议
🤖 Claude Code Hook 集成
自动生成 .claude/settings.json
- 交互式配置:
moat init时询问是否集成 Claude Code - 自动生成 Hook 配置: PreToolUse + PostToolUse hooks
- 非交互模式支持: 检测到
.claude目录自动启用
生成的配置:
{
"hooks": {
"PreToolUse": [{
"matcher": "Write|Edit",
"hooks": [{
"type": "command",
"command": "moat gatekeeper check --file ${file}",
"timeout": 5000
}]
}],
"PostToolUse": [{
"matcher": "Write|Edit",
"hooks": [{
"type": "command",
"command": "moat check --diff",
"timeout": 10000
}]
}]
}
}用户体验:
moat init
# 🤖 Claude Code 集成:
# 检测到 .claude 目录
# 是否将 Moat 守护进程集成至 Claude Code?(Y/n): y
# ✓ Claude Code Hook 已启用📊 测试覆盖
- ✅ verification 模块: 48/48 通过 (100%)
- ✅ gatekeeper 模块: 29/29 通过 (100%)
- ✅ 全部测试: 777/777 通过 (100%)
- ✅ 算子实际能力验证: 通过
📦 文件更新
moat/discovery.py # Claude Code Hook 集成
moat/verification/operators/
├── api_response_spec.py # 完整实现
└── framework_usage.py # 完整实现
🎨 设计决策
小步快跑策略
- 先覆盖 80%: 优先实现主流场景(FastAPI),不强求完美通用
- 稳健优先: 算子检查失败只给 WARNING,不阻塞 CI/CD
- 用户体验: 交互式配置 + 自动生成,开箱即用
0.7.0-beta - 2026-07-08
🎯 架构验收系统 (Architecture Verification)
全新功能: moat verify 命令
基于口播视频文案《怎么验收AI搭建的后端架构》设计,实现"规则、示例、证据"驱动的架构验收系统。
审计算子化架构
- 7个独立算子: 通过组合而非继承实现验收流程
directory_responsibility— 目录责任验收minimal_module_drill— 最小模块演练api_response_spec— 接口响应规范验收framework_usage— 框架利用检查runtime_evidence— 运行证据包生成architecture_health_score— 架构健康度评分truth_document— 实施真元文档生成
核心特性
- 算子化架构: 每个算子独立、可测试、可替换
- 灵活组合: 支持完整验收 (
moat verify --all) 或单个算子 (moat verify --operator <name>) - 证据链完整: 每个违规都有"规则来源→违反代码→修复建议"
- 架构健康度评分: 5个维度量化架构质量(0-100分)
- 目录责任清晰度(20分)
- 分层架构遵守度(20分)
- 接口响应一致性(20分)
- 框架利用合理性(20分)
- 命名规范遵守度(20分)
CLI命令
```bash
完整验收(7步流程)
moat verify --all
单项验收
moat verify --operator directory_responsibility
JSON输出
moat verify --json
CI/CD集成:评分低于60分则失败
moat verify --fail-on-score 60
```
架构基线管理
- 基线初始化:
moat baseline init - 基线对比:
moat baseline diff --from v1.0.0 --to v2.0.0 - 架构演进可追溯: 支持版本回滚
实施真元文档
自动生成 .moat/truth_document.md,包含:
- 框架与语言
- 目录责任
- 新增模块规范
- 接口响应规范
- 框架利用原则
- 运行证据
- 架构变更记录
文档
- ARCHITECTURAL_AUDIT_PROTOCOL.md — 架构验收方法论(口播文案整理)
- moat-v0.7.0-architecture-upgrade.md — v0.7.0架构升级方案
🎯 实时架构守门 (Gatekeeper)
全新功能: moat gatekeeper 命令
实时架构规则检查系统,在文件写入前验证架构合规性。
规则引擎
- 4条核心规则:
directory_responsibility— 目录责任规则layer_separation— 分层架构规则naming_convention— 命名规范规则framework_usage— 框架利用规则
三层豁免机制("免死金牌")
- 行内注释:
# moat-ignore: rule_id(优先级最高) - 文件注释: 文件头部
# moat-ignore: rule_id - 配置豁免:
.moat/gatekeeper_config.json
CLI命令
```bash
列出所有规则
moat gatekeeper rules
检查单个文件
moat gatekeeper check --file api/users.py
启动守护进程(占位)
moat gatekeeper start
```
🧬 架构基线增强 (Baseline Management)
增强功能: 架构版本控制
- 创建架构基线: 保存验收报告和相关文档
- 列出基线: 查看所有历史基线
- 对比基线: 分析架构变更
- 回滚基线: 恢复到指定版本
- 删除基线: 清理旧版本
🧪 测试覆盖
新增测试
- verification 模块: 7个测试文件,43个测试用例
- gatekeeper 模块: 4个测试文件,29个测试用例
- baseline 模块: 1个测试文件,6个测试用例
测试结果
- ✅ verification模块: 43/43 通过 (100%)
- ✅ gatekeeper模块: 29/29 通过 (100%)
- ✅ baseline模块: 6/6 通过 (100%)
- ✅ 全部测试: 801/801 通过 (100%)
- ✅ 向后兼容: 未破坏现有功能
📦 文件新增
moat/verification/ # 14个文件
moat/gatekeeper/ # 5个文件
moat/baseline.py # 增强
tests/verification/ # 7个测试文件
tests/gatekeeper/ # 4个测试文件
tests/baseline/ # 1个测试文件
🎨 设计决策
决策1: 审计算子化架构
将验收流程设计为独立的"审计算子",通过组合实现流程。
优势:
- 易于扩展:新增验收步骤只需添加新算子
- 易于测试:每个算子可独立测试
- 易于维护:修改某个步骤不影响其他步骤
- 灵活组合:用户可选择运行部分算子
决策2: Gatekeeper"免死金牌"机制
三层豁免机制:行内注释 → 文件注释 → 配置豁免
设计原则:
- 默认拦截
- 显式豁免
- 审计追踪
- 定期清理提醒
0.7.0-alpha - 2026-07-08
🎯 架构验收系统 (Architecture Verification)
全新功能: moat verify 命令
基于口播视频文案《怎么验收AI搭建的后端架构》设计,实现"规则、示例、证据"驱动的架构验收系统。
审计算子化架构
- 7个独立算子: 通过组合而非继承实现验收流程
directory_responsibility— 目录责任验收minimal_module_drill— 最小模块演练api_response_spec— 接口响应规范验收framework_usage— 框架利用检查runtime_evidence— 运行证据包生成architecture_health_score— 架构健康度评分truth_document— 实施真元文档生成
核心特性
- 算子化架构: 每个算子独立、可测试、可替换
- 灵活组合: 支持完整验收 (
moat verify --all) 或单个算子 (moat verify --operator <name>) - 证据链完整: 每个违规都有"规则来源→违反代码→修复建议"
- 架构健康度评分: 5个维度量化架构质量(0-100分)
- 目录责任清晰度(20分)
- 分层架构遵守度(20分)
- 接口响应一致性(20分)
- 框架利用合理性(20分)
- 命名规范遵守度(20分)
CLI命令
# 完整验收(7步流程)
moat verify --all
# 单项验收
moat verify --operator directory_responsibility
# JSON输出
moat verify --json
# CI/CD集成:评分低于60分则失败
moat verify --fail-on-score 60架构基线管理
- 基线初始化:
moat baseline init - 基线对比:
moat baseline diff --from v1.0.0 --to v2.0.0 - 架构演进可追溯: 支持版本回滚
实施真元文档
自动生成 .moat/truth_document.md,包含:
- 框架与语言
- 目录责任
- 新增模块规范
- 接口响应规范
- 框架利用原则
- 运行证据
- 架构变更记录
文档
- ARCHITECTURAL_AUDIT_PROTOCOL.md — 架构验收方法论(口播文案整理)
- moat-v0.7.0-architecture-upgrade.md — v0.7.0架构升级方案
🧪 测试覆盖
新增测试
- verification 模块: 7个测试文件,48个测试用例
test_operator.py— Operator基类测试(5个)test_orchestrator.py— Orchestrator测试(8个)test_types.py— 类型定义测试(9个)test_directory_responsibility.py— 目录责任算子测试(7个)test_framework_usage.py— 框架利用算子测试(7个)test_architecture_health_score.py— 架构健康度算子测试(5个)test_integration.py— 集成测试(5个)
测试结果
- ✅ verification模块: 48/48 通过 (100%)
- ✅ 全部测试: 771/771 通过 (100%)
- ✅ 向后兼容: 未破坏现有功能
📦 文件新增
moat/verification/
├── __init__.py
├── types.py # 类型定义(Violation, OperatorResult等)
├── operator.py # Operator基类
├── orchestrator.py # 编排器
├── verify_cli.py # CLI命令
└── operators/
├── __init__.py
├── directory_responsibility.py
├── minimal_module_drill.py
├── api_response_spec.py
├── framework_usage.py
├── runtime_evidence.py
├── architecture_health_score.py
└── truth_document.py
tests/verification/
├── __init__.py
├── test_operator.py
├── test_orchestrator.py
├── test_types.py
├── test_directory_responsibility.py
├── test_framework_usage.py
├── test_architecture_health_score.py
└── test_integration.py
🎨 设计决策
决策1: 审计算子化架构
将7步验收流程设计为独立的"审计算子",通过组合而非继承实现流程。
优势:
- 易于扩展:新增验收步骤只需添加新算子
- 易于测试:每个算子可独立测试
- 易于维护:修改某个步骤不影响其他步骤
- 灵活组合:用户可选择运行部分算子
决策2: Gatekeeper"免死金牌"机制(已设计,待实现)
三层豁免机制:
- 文件级:文件头部注释
# moat-ignore: rule_name - 行级:单行注释
# moat-ignore: rule_name - 配置级:
.moat/gatekeeper_config.json全局配置
设计原则:
- 默认拦截
- 显式豁免
- 审计追踪
- 定期清理提醒
0.6.2 - 2026-07-08
🎯 覆盖率优化
P0 紧急修复
- 修复 evolution.py 测试失败: EnhancedPainScorer 初始化逻辑修复
- 修复 BridgeConfig 导入: 修复 NameError(便捷函数)
- 修复数据库连接泄漏: sync.py 添加 finally 块确保连接关闭
- 消除 ResourceWarning: unclosed database
P1 核心模块覆盖提升
- l1_behavior.py: 0% → 100%(新增 8 个测试)
- l2_schema.py: 0% → 100%(新增 13 个测试)
- contract.py: 0% → 100%(新增 12 个测试)
P2 TypeScript 检查模块
- any_type.py: 0% → 88%(新增 16 个测试)
- async_race.py: 0% → 96%(新增 11 个测试)
- 修复 any_type.py 3 个 bug(变量名
total/total_any混用)
P3 其他模块优化
- cli.py: 37% → 37%(+6 参数解析测试)
- sidecar/watcher.py: 38% → 45%(+15 测试)
- evolution.py: 65% → 98%(修复 14 个测试)
🐛 Bug 修复
TypeScript 检查
- any_type.py:69,75,87: 变量名
total未定义- 影响:当检测到 >20 个 any 类型时会崩溃
- 修复:统一使用
total_any变量名
进化模块
- evolution.py:173-176: EnhancedPainScorer 覆盖测试设置
- 影响:14 个进化模块测试失败
- 修复:优先使用
evolution_engine.evolved_rules
数据库连接
- sync.py:325: 数据库连接未关闭
- 影响:ResourceWarning 警告
- 修复:添加 finally 块确保连接关闭
📊 测试覆盖
- ✅ 总测试数: 723 通过(+41)
- ✅ 失败测试: 0(从 14 降至 0)
- ✅ 整体覆盖率: 63% → 67%(+4%)
- ✅ 未覆盖行数: 1495 → 1351(-144)
🏆 测试分布
| 模块 | 覆盖率 | 状态 |
|---|---|---|
| L1-L4 检查层 | 84-100% | ✅ 优秀 |
| AST 感知层 | 78-91% | ✅ 良好 |
| TypeScript 检查 | 平均 44% | |
| Sidecar 守护进程 | 45-82% | |
| CLI 命令 | 37% |
📝 新增测试文件
tests/test_contract.py- CONTRACT.md 生成器测试tests/test_l1_behavior.py- 行为验证检查测试tests/test_l2_schema.py- API 结构检查测试tests/test_ts_any_type.py- TypeScript any 类型检测测试tests/test_ts_async_race.py- TypeScript 异步竞态检测测试
🔧 改进的测试文件
tests/test_evolution.py- 修复 14 个测试失败tests/test_cli.py- 新增 6 个参数解析测试tests/test_sidecar_watcher.py- 新增 15 个文件监控测试
0.6.1 - 2026-07-07
🐛 Bug 修复
Sidecar 可选依赖修复
- watchdog 延迟导入:
moat/sidecar/watcher.py改为 try-except 保护 - 条件继承:
FileChangeHandler根据 watchdog 可用性条件继承 - 启动检查:
SidecarWatcher.start()增加 watchdog 可用性检查 - Pydantic BaseModel 跳过:
moat/checks/l1_modules.py检测并跳过 Pydantic 模型实例化
修复的问题:
- ❌
ModuleNotFoundError: No module named 'watchdog'→ ✅ 优雅降级 - ❌
CheckRequest() 实例化失败→ ✅ Pydantic 模型检测跳过
影响: moat check 自举测试通过率 19→21 通过,失败 4→0
🔄 改进
- 版本号: v0.6.0 → v0.7.0-beta
- 文档: 新增
SIDECAR_BUGFIX_REPORT.md详细修复报告 - 发布测试: 新增
RELEASE_TEST_REPORT_v0.7.0-beta.md完整测试报告
📊 测试覆盖
- ✅ 单元测试: 81/81 通过 (100%)
- ✅ moat check 自举: 21 通过, 0 失败, 1 警告
- ✅ Sidecar Bug 修复验证: 2/2 通过
- ✅ CLI 命令测试: 10/10 通过
- ✅ 进化指标系统: 正常运行 (0.325/1.000)
- ✅ AST 骨架图: 391 函数, 441 调用
📝 发布验证
- ✅ GitHub Release: https://github.com/wang-jie-git/moat/releases/tag/v0.7.0-beta
- ✅ Git Tag: v0.7.0-beta
- ✅ 发布测试报告:
RELEASE_TEST_REPORT_v0.7.0-beta.md
测试时间: 2026-07-08 07:45
测试环境: macOS Darwin 24.6.0, Python 3.14.6
0.6.0 - 2026-07-07
🎉 里程碑: 多语言感知 + 深度记忆 + 智能进化
Moat 进化为跨语言代码质量守护平台,支持 Tree-sitter 多语言解析、One Memory 深度集成和知识图谱记忆扩展。
✨ 新增功能
Tree-sitter 多语言支持
- Tree-sitter 集成: 支持 Python/TypeScript/JavaScript/Go/Rust 等语言
- 跨语言骨架图: 统一的函数调用图生成
- 多语言 AST 感知: 语言无关的增量对比
- CLI 命令:
moat ast build --lang typescript
新增文件:
moat/ast/tree_sitter.py— Tree-sitter 封装tests/test_tree_sitter.py— Tree-sitter 测试
One Memory 深度集成
- 自动触发梦境引擎:
moat memory dream触发 One Memory Insight 生成 - 双向同步管理器: 自动同步 Insights → 进化规则
- 记忆质量报告:
moat memory report生成详细质量报告 - 同步状态追踪: 自动记录同步历史
新增文件:
moat/memory/sync.py— 双向同步管理器tests/test_memory_sync.py— Memory Sync 测试
进化指标自动采集
- 自动记录:
moat check后自动记录进化指标 - 配置自动调整:
moat evolution adjust --auto基于指标自动调整配置 - 增强的 EvolutionTracker: 与 runner 深度集成
新增文件:
tests/test_evolution_auto.py— 进化指标自动采集测试
知识图谱记忆扩展
- 修复历史追踪: 记录 Bug 修复次数、修复人、修复时间
- 架构薄弱点识别: 高频 Bug 文件/模块自动识别
- 修复模式推荐: 基于历史成功修复的模板
- 智能提示系统: 检查时主动提示历史问题
新增表结构:
fix_history— Bug 修复历史weak_points— 架构薄弱点fix_patterns— 修复模式dream_triggers— 梦境触发记录smart_hints— 智能提示
新增文件:
tests/test_knowledge_graph.py— 知识图谱扩展测试
🔄 改进
- 版本号: v0.4.0 → v0.5.0
- 定位更新: "多语言感知 + 深度记忆 + 智能进化"
- 文档增强: 新增 4 个核心功能文档
📊 测试覆盖
- ✅ 新增测试: 36 个(9 + 9 + 7 + 11)
- ✅ 总通过率: 72/72 (100%)
- ✅ 跳过: 9(tree-sitter 依赖未安装)
🧪 性能指标
- Tree-sitter 解析速度: < 50ms/文件
- One Memory 同步延迟: < 100ms
- 进化指标自动采集: 0ms 额外开销
- 智能提示查询: < 5ms
0.4.0 - 2026-07-07
🎉 里程碑: 第一个自我进化的 AI 编码守护者
(保持原有内容...)