本文件定义“一个模块在本系统里应该长什么样”。
目标是让每个模块都具备:
- 可运行
- 可测试
- 可解释
- 可替换
- 可被 agent 读取
- 可被人审查
在本系统中,一个模块是一个独立能力单元,而不是任意单个文件。
模块必须满足:
- 有明确职责
- 有稳定输入
- 有稳定输出
- 能独立测试
- 能单独阅读和维护
每个模块必须有 6 类内容。
模块的主实现代码。
给人看的模块说明。
建议命名:
README.md
给 agent 和测试系统读的结构化约定。
推荐字段:
module_idmodule_typeresponsibilityinputsoutputsdependenciesfailure_modestest_entrypoints
当前阶段可以先写在文档里,后续再落成 JSON/YAML。
每个模块都必须有测试,不允许“只有集成跑通,没有模块测试”。
给 agent 读的结构化结果。
推荐格式:
- JSON
给人看的可读总结。
推荐格式:
- Markdown
必须结构化、稳定、便于比较。
推荐输出:
{
"module_id": "validator_agent",
"status": "passed",
"inputs_ok": true,
"outputs_ok": true,
"tests": {
"passed": 12,
"failed": 0
},
"artifacts": [
"validated_findings.json"
],
"risks": [],
"next_action": "allow_next_stage"
}必须强调结论、风险和建议。
推荐输出:
# validator_agent 模块结果
- 状态:通过
- 输入:findings + file snippets
- 输出:validated_findings.json
- 风险:无阻断项
- 建议:可以进入 triage 阶段每个模块至少要有以下 5 类测试中的一部分。
验证模块内部关键逻辑。
例如:
scan_env_usage()是否识别os.getenvscan_db_usage()是否忽略明显误报
验证输出结构是否稳定。
例如:
- 是否总是返回
findings+summary - 字段名是否变动
- 枚举值是否合法
验证在固定仓库输入上,结果是否符合预期。
例如:
- 某条规则应该命中
- 某个误报不应该再出现
验证模块与上下游模块连接后能否工作。
例如:
validator_agent能否接收findings并产出validated_findings
验证用户真实入口是否正常。
例如:
python main.py --repo ... --output ...
下面是当前仓库里已经比较明确的模块。
- 实现:
scanner/__init__.py - 职责:建立
RepoContext - 输入:仓库路径
- 输出:解析后的文件列表、模块索引、解析错误
- 实现:
scanner/imports.py - 输入:
RepoContext - 输出:
import_graph.json - 测试重点:
- 本地依赖识别
TYPE_CHECKING过滤- cycle 输入正确性
- 实现:
scanner/definitions.py - 输出:
definitions.json - 测试重点:
- class/function/method 计数
- 行号稳定性
- 实现:
scanner/calls.py - 输出:
call_graph.json - 测试重点:
- 常见调用表达式提取
- 调用边稳定性
- 实现:
scanner/envs.py - 输出:
env_usage.json - 测试重点:
os.getenvos.environ[...]os.environ.get- 配置文件豁免规则的上下游影响
- 实现:
scanner/db_usage.py - 输出:
db_usage.json - 测试重点:
- SQLAlchemy/Session 来源证明
- 常见误报过滤
- 实现:
scanner/utils_usage.py - 输出:
utils_usage.json - 测试重点:
- 只统计本地模块
- 外部
*.utils.*误报过滤
- 实现:
scanner/globals.py - 输出:
global_state.json - 测试重点:
- 模块级可变对象识别
- 函数内变更证据
- 常量/
__all__误报过滤
- 实现:
rules_engine/engine.py - 输出:
findings.json - 测试重点:
- RULE_A/B/C/D/E 命中
- 严重级别
- 误报回归
- 实现:
agents/validator_agent.py - 输入:
findings + file snippets - 输出:
validated_findings.json - 测试重点:
confirmation_statusconfidencevalidation_reasonfile_snippets- LLM / fallback 双路径
- 实现:
agents/planner_agent.py - 输入:
validated_findings的 actionable 子集 - 输出:
triage.json、action_plan.json - 测试重点:
- bounded plan
- file scope 限制
- step schema
- 实现:
agents/critic_agent.py - 输入:
action_plan - 输出:
critic_review.json - 测试重点:
- 状态枚举
- 风险级别
- policy 结果一致性
- 实现:
policy/engine.py - 输出:保护路径、超大 step 等约束结果
- 测试重点:
- protected path 命中
- oversized step 检测
- 实现:
report/renderer.py - 输出:
summary.md - 测试重点:
- 中文输出
- finding/validator 字段可见
- 空结果时仍可读
- 实现:
main.py - 输出:完整 artifacts + summary
- 测试重点:
- 参数校验
- 输出文件齐全
--check-llm-config
建议每个模块未来补一个 README,结构如下:
# 模块名
## 作用
一句话说明模块职责。
## 输入
- 输入 1
- 输入 2
## 输出
- artifact 1
- artifact 2
## 依赖
- 上游模块
- 下游模块
## 测试
- 单元测试位置
- 金标测试位置
- 集成测试位置
## 已知限制
- 限制 1
- 限制 2未来建议为每个模块都产出两份测试结果。
建议路径:
artifacts/module_tests/<module_id>.json
建议字段:
module_idstatuspassedfailedcoverageregressionsgate_decision
建议路径:
reports/module_tests/<module_id>.md
建议内容:
- 本轮修改点
- 测试通过情况
- 回归风险
- 是否允许进入下一轮
一个模块只有在满足以下条件时,才允许被视为“通过”:
- Contract 没破坏
- 测试通过
- 输出稳定
- 对上游/下游没有引入新的阻断回归
- 人类可以读懂该模块当前行为
模块不是代码碎片,而是:
有职责、有 contract、有测试、有 README、有双报告输出的独立能力单元。