REA 重构就绪检查:为什么缺失证据必须报告 unknown 而不是 pass
【免费下载链接】reaReverse engineer anything with agents, from app behavior down to native binaries.项目地址: https://gitcode.com/GitHub_Trending/rea2/rea
大多数就绪性检查都会做一件危险的事:没检查到的项,默认按通过算。REA 拒绝这种乐观——它的重构就绪(Reconstruction Readiness)检查采用 fail-closed 三态设计,缺失证据一律报告 unknown,绝不悄悄升级为 pass。
REA 是一个本地逆向工程工具包,把 Hopper、Ghidra、浏览器观察等能力统一成 MCP 接口;本文聚焦它的三态状态聚合机制。
三态到底有几态:pass 只是五种状态之一
直觉上"通过/失败"两态就够了,REA 的定义比这更细。状态枚举在 reconstructionReadinessSchemas.ts,共五种:
pass—— 证据齐全且检查通过;fail—— 检查完成,但结论是不通过;unknown—— 证据不足,无法下结论;unsupported—— 引擎不支持这项分析;truncated/skipped—— 分析被截断或被跳过。
多出来的中间态不是凑数,目的是让"检查没做完"和"检查做完但没通过"能被人区分开。
聚合优先级:fail 一票否决,兜底也是 unknown
整体结论由 reconstructionReadiness.ts 的aggregateStatus决定,优先级是写死的:
- 任一必需阶段为
fail→ 整体fail; - 所有必需阶段为
pass→ 整体pass; - 否则按
unknown、truncated、unsupported、skipped的顺序,命中哪个就返回哪个; - 以上都不满足 → 兜底
unknown。
注意第 3 条的顺序:unknown 排在所有中间态最前面,意味着"证据不足"比"被跳过"更优先暴露。官方文档 reconstruction-readiness.md 对这条聚合规则的原话是:
fail,unknown,unsupported,truncated, andskippednever aggregate topass.
翻译过来就是一句话:只要有任何一个阶段没拿到 pass,整体就别想拿到 pass。
没交卷 ≠ 满分:缺失阶段怎么算
更狠的在阶段级处理(源码 L70-L97)。九个必需阶段是固定清单,如果某个阶段压根没出现在输入里,它不会被视为通过:
- 该阶段被强制标记为
required: true; - 状态不满足 pass 时,直接落为
fail; - 并附带固定提示:
Supply the missing conformance stage.(补交缺失的阶段)。
这就像考试没交卷不等于满分,等于零分还多一笔欠账。
unknown 的三种典型触发
unknown不是报错,是工具在说"我还不能确定"。最常见的三种来源:
空证据包。义务台账文档 写道:
This empty request is useful for checking client integration. It is valid and returns an
unknownledger with zero obligations; absence of source Evidence never claims closure:零证据下谈"重构闭环"没有意义,所以结论只能是 unknown。
对比被截断或矛盾。
compare-authority-candidate阶段要求截断、权限不可用、发现矛盾时,verdict 强制降级为unknown,杜绝"看起来等价"的假阳性。阶段有发现但结论悬置。阶段级聚合中,只要该阶段存在 finding 且状态不满足 pass,就落为
unknown而不是猜测一个结果。
每条证据自身还带三档置信度——observed(直接观察到)、derived(推导得出)、inferred(推断),定义在 evidence.ts。置信度分层加状态分层,构成完整的证据可信度账本。
什么时候这条规则不成立
边界要讲清楚。unsupported和skipped虽然也挡在 pass 前面,但语义不同:前者是"我承认不支持这项分析",后者是"这轮主动跳过了"。它们不算谎报,所以不升级成fail,只降级整体状态。
另一个边界:这套 evaluator 是仓库内部验证器,随npm run verify:readiness运行,并不作为公开 CLI 或 MCP 工具暴露。它约束的是 REA 自己的九阶段一致性契约,不直接替你分析任意二进制——后者由具体的分析工具完成,本机制只负责把"检查做没做完"这件事说清楚。
代价:报告变啰嗦,换自动化不翻车
代价很直白:报告不能只有一盏红绿灯,每个状态都要附 reason_code 和 next_action,输出更长、更啰嗦。但对 Agent 自动化这是值得的——一个诚实的 unknown 告诉它该补什么证据,一个善意的 pass 会让它带着错误前提一路跑到底。
读者行动清单
- 看到
pass时 → 可以直接信任,必需阶段都有证据支撑; - 看到
fail时 → 按报告里的reason_code直接修,不用猜; - 看到
unknown时 → 顺着next_action补齐缺失证据即可,这不是报错; - 看到
unsupported/skipped时 → 确认是引擎限制还是被跳过,别和 fail 混为一谈; - 本地想验证全流程时 → 运行
npm run verify:readiness,跑完整九阶段闭环。
证据有权威等级、状态有失败封闭、结论可复算。missing evidence 落到 unknown,就是 REA 整条信任链的地基。
【免费下载链接】reaReverse engineer anything with agents, from app behavior down to native binaries.项目地址: https://gitcode.com/GitHub_Trending/rea2/rea
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考