news 2026/10/16 5:55:50

REA 重构就绪检查:为什么缺失证据必须报告 unknown 而不是 pass

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
REA 重构就绪检查:为什么缺失证据必须报告 unknown 而不是 pass

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决定,优先级是写死的:

  1. 任一必需阶段为fail→ 整体fail;
  2. 所有必需阶段为pass→ 整体pass;
  3. 否则按unknown、truncated、unsupported、skipped的顺序,命中哪个就返回哪个;
  4. 以上都不满足 → 兜底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 anunknownledger 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),仅供参考

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/10/16 5:53:59

Java与大数据学习路线:四阶段能力组装施工图

1. 这不是一张“万能地图”,而是一份踩过坑后画出的施工图“Java及大数据学习路线”——这七个字在招聘网站、技术社区、自学论坛里高频出现,但凡想转行进开发、想从传统后端往数据方向拓展、或者刚毕业不知该往哪扎的新人,几乎都会搜它。可搜…

作者头像 李华
网站建设 2026/10/16 5:51:51

从终端历史到SQLite:hister如何让命令检索与统计真正好用

1. 为什么我非要再写一个 history 管理工具这几年我几乎每天泡在终端里,遇到过太多次这样的场景:昨天刚跑通的一条复杂命令,今天想再用,CtrlR 翻了好几页硬是找不到;开了三个终端窗口干活,到晚上发现历史记…

作者头像 李华
网站建设 2026/10/16 5:50:08

编程学习与技术博客:从学习目标到系统化成长路径

1. 项目概述1.1 核心需求解析其实我纠结了很久才决定写下这篇开篇。为什么纠结?因为技术博客这个东西,一旦开了头,就意味着你开始把自己暴露在公开的视野里——今天学到的东西、踩过的坑、做过的项目,全部会变成可被检索、被审视、…

作者头像 李华
网站建设 2026/10/16 5:47:54

镜面反射揭秘:从高光到真实倒影

一句话:光打到光滑表面上,像台球撞墙一样按固定角度弹开。只有当你的眼睛正好在弹开的方向上,才能看到它。 金属的亮点、湿地面的倒影、湖面远处的反光、镜子里的人,都属于镜面反射。在游戏和图形学里,"镜面反射&…

作者头像 李华
网站建设 2026/10/16 5:47:14

从零实现BiLSTM上下文词嵌入:训练细节与多义词可视化分析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

作者头像 李华