Aptos Flow 规范推断评测体系设计:三组对照实验、变异充分性评分与双层沙箱隔离
Aptos Flow 规范推断评测体系设计三组对照实验、变异充分性评分与双层沙箱隔离【免费下载链接】aptos-coreAptos is a layer 1 blockchain built to support the widespread use of blockchain through better technology and user experience.项目地址: https://gitcode.com/GitHub_Trending/ap/aptos-core本文解析 aptos-core 仓库中aptos-move/flow/evaluation/spec-inference/目录下的评测架构设计文档DESIGN.md完整还原这套用于回答最弱前提Weakest-Precondition, WP推断能否帮助 AI Agent 写出正确 Move 规范、代价是多少的研究装置三组实验臂agent_only、hybrid_guided、hybrid_flexible的定义与对照口径、任务与语料库corpus-v1.1 / corpus-v3.2 Etna的构造标准、一轮实验round从调度到评分的执行细节、双层沙箱隔离与污染contamination论证以及可复现的工件与 go/no-go 检查清单。读完后你可以理解一个以代码为被测对象、以变异杀除率为头条指标的 Agent 能力评测是如何做到治疗盲treatment-blind、可审计、可复现的并能据此在仓库中定位每个机制对应的源码与配置文件。1. 评测体系回答什么问题整套装置围绕一个单一问题展开最弱前提推断WP inference是否能帮助 AI Agent 写出正确的 Move 规范代价是什么三个实验臂跑同一个任务、同一个模型、同一套配置唯一差异是工作流是否被规定、以及 WP 工具是否可用实验臂WP 可用工作流agent_only否Agent 无辅助地直接规范hybrid_guided是规定流程不变量 → WP → 修复 → 简化 → 检查hybrid_flexible是Agent 自选工作流agent_only臂没有简化步骤因为它从来拿不到机器生成的条件在这个臂里 WP 路由是缺席的而不是被不鼓励——工具既无法被列出也无法被调用。设计预置了三组对照contrast对照含义C1 H-F − A在目标导向工作流中提供 WP 的效果C2 H-G − H-F规定混合工作流而非放任自由的效果C3 H-G − A引导式混合 vs 直接 AI 的端到端比较C3不是纯粹的 WP 消融因为能力和工作流同时发生了变化它被作为带不确定度的效应量effect size报告而不是作为检验。设计真正要回答的问题是WP 能否在固定预算内提高成功率、引导是否改变成功率或效率、以及各系统在 token 成本、耗时、证明迭代次数和规范质量上的差异。1.1 臂边界是渲染出的 Flow 插件而不是提示词这是设计上最关键的可归因性保证臂的边界是一个渲染出来的 Flow 插件rendered plugin。每一轮从aptos-move/flow/cont/下的 Tera 模板源../../cont/即 cont/templates 与 cont/skills为每个臂生成一个插件落到evaluation-artifacts/round-id/plugins/level/arm并记录其plugin_manifest_sha256。控制器随后以claude --plugin-dir plugin启动会话并以/move-inf斜杠命令开场。按轮渲染rendering per round的意义在于技能可以在轮与轮之间改进而任何一轮内部都不会混入两个版本。各臂共享的参考材料逐字节相同——只有面向特定臂的工作流章节和move_package_wp工具的有无不同见 wp_tool.md它声明move_package_wp是推导条件并写回源码的推断通道。正是这一点让臂间差异可以被归因于工作流与 WP 可用性本身。配套的 README.md 给出了渲染命令的示例for arm in agent-only hybrid-guided hybrid-flexible; do move-flow plugin ROUND/plugins/acceptance/$arm \ --inference-tactic $arm --evaluation-mode \ --feedback-level acceptance --max-verification-timeout 20 \ --flow-source-commit COMMIT done2. 什么是一个任务一个任务被定义为一个目标函数其规范已被移除而它所在的包是完整且可证明的。结构如下corpus-vN/package/是单个可编辑的 Move 包以 vendor 方式内联全部依赖不声明任何外部依赖可干净地重定位corpus-vN/samples/task-id/README.md是面向人的任务配方recipe目标、源文件、依赖闭包、别名、允许的编辑、哈希、准备补丁。样本是叠加层overlay绝不是独立的包副本materialize_task复制共享包、应用准备补丁并把tree_hash与配方中记录的expected_sha256核对。它拒绝覆盖已存在的树Agent 的可编辑面是sources/**/*.move。目标文件一开始就没有任何目标函数规范sources/deps/下的依赖契约被刻意保留作为 Agent 推理所依据的可信不透明边界。准备工作preparation被刻意压到最小函数体逐字节复制且只允许两种变换两者都记录在模块头部——把载体结构体缩减为目标实际读取的字段、把全局配置读取改造成参数。这一点在 corpus-v3.2 的 READMEcorpus-v3.2/README.md中被再次确认提取是极小的函数体逐字节复制只有两样东西会变。3. 语料库从哪来3.1 谱系语料库来源状态corpus-v1.1Aptos framework experimental固定版本作为基准已被取代保留为基础设施仓库中保留的实例目录为corpus-v1.2/corpus-v3.2EtnaDecibel 私有 Move 代码的代号就是基准本体完整运行计划在此语料上执行V1 被取代的原因是致命的Aptos framework 是公开的它的.spec.move文件也是公开的——24 个被检查的 V1 目标里有 16 个其目标函数在上游已经有公开规范因此成功可能是回忆recall而不是推断inference。V1 仍然保留因为它是唯一的可发布语料库V3 的源不可再分发也是高阶/迭代器与全局状态覆盖的唯一来源——V3 的函数池在结构上不具备这类目标它 8000 多行人工编写的依赖契约是 prover-repairs.md 背后的证明基础设施。V2 是同一 Etna 源的早期切分已从仓库移除存在于 git 历史中。它饱和了——几乎所有格子对所有臂都成功一轮实验大部分格子不携带信息——而且它只按操作成功计分而更含糊的契约反而更容易通过。V3 同时回应了这两点目标被挑选得能抵抗猜测并配上变异体mutants使契约强度可测量。两套语料不共享任何文件。各自按各自固定版本 vendor 自己的依赖闭包V1 携带完整 framework 闭包与人工契约V3 vendor 一个裁剪过的标准库切片使包不声明任何依赖、可干净重定位——筛选器screen和运行控制器run controller都依赖这个性质。3.2 为什么用私有源Aptos framework 是公开的它的.spec.move文件和求解器自带的推断夹具fixtures也是公开的。这样的目标上的成功可能是回忆而非推断。Etna 不公开所以它的函数和规范是真新任务的候选。关键操作准则是**规范缺失而不是代码保密**。模型可能知道公开代码但它不可能回忆一份没人写过的规范。从本仓库测量未指定函数处处占多数——aptos-experimental213/213、aptos-trading108/109、move-stdlib208/289、aptos-stdlib510/781、aptos-framework1229/2024——所以这个准则并不苛刻。它正是 V1 失败的地方24 个被检查的 V1 目标中有 16 个其目标函数在上游就有已发布的规范。应用该准则后22 个当前目标里 19 个是私有 Etna 代码2 个是公开的aptos-experimentalextracted_bulk_order_utils因为它们在上游不带任何 spec 块1 个是这里自制的——唯一的目标是函数值目标Etna 无法提供。新颖性是源调查的目的依赖重量才是决定候选可否使用的约束。3.3 新颖性审计与依赖约束并非 Etna 全都新颖。move/aptos_market/是公开的aptos-experimental订单簿代码的 fork——16 个文件全部有公开对应物其中一些只相差几十行——因此被整体排除它携带着私有源本要逃避的暴露。其余八个包perp、spot、accounts、vault、campaign、trade_tracking、usdc、stablecoin_wrapper与aptos-move/framework不共享任何文件名构成候选池。私有包间的导入压力恰好集中在让不透明契约昂贵的东西上object::Object、fungible_asset、big_ordered_map、tables、coin、account、events、timestamps。按这些过滤模块后几乎什么都剩不下。两个观察恢复了池子模块导入不是函数依赖。一个带 49 行use的模块可能包含什么都不调用的函数。选择是逐函数的。提取优于 mock。当一个好函数位于重型模块中把它提升到最小样本模块而不是去 mock 该模块的依赖。只有当函数本身触碰 framework 状态时才需要 mock。三个包一无所获、不应再调查accounts、usdc、stablecoin_wrapper从头到尾是 object/fungible-store 编排trade_tracking是时钟上的聚合器与表。另外注意trade_tracking::unified_fees_config复制了 spot 的费率分层逻辑——取其一否则语料会得到两个样本却只有一份契约。3.4 选择准则候选按五条标准准入证明便宜。变异评分会对每个变异体重证一次目标接近超时的目标会被成倍放大。干净证明时间必须明显快。抵抗猜测。小到能装进脑子的目标不给 Agent 使用工具的理由。每个任务标注hard或guessable刻意保留少量guessable对照以便把装置性故障与真正困难的任务区分开。有区分力而非有代表性。形状相同、边界行为相反的成对目标以及源码从未提及 abort 的函数直接探测精确性。契约无法直接陈述的辅助推理。有些契约不能靠单一不变量证明需要spec function给累积值命名、引理lemma把它和自身联系起来——运行和的单调性是经典案例每个前缀都被整体界住排除中间溢出需要求解器不会做的归纳。发明这套脚手架是与写不变量不同的推断技能。优先选仍能强制它、但代价最便宜的目标推理本身应是难点而不是求解器时间。尤其偏好线性累积——非线性项会把成本成倍放大却不增加被测试内容。分层覆盖stratum coverage对齐清单中的特征分层。两个已知的覆盖缺口被如实陈述依赖轻量池不含函数值或内联迭代器材料该分层由自制目标而非提取目标覆盖folds_of覆盖仍须来自 framework 语料无导入层import-free tier按构造不含全局状态因此资源帧与modifies覆盖只能来自提取的配置读取目标。3.5 当前语料在测什么让 Agent 必须推理、而非模式匹配的组合。旗舰目标调用两个兄弟函数它免于下溢underflow的唯一原因是被调用方契约中建立的界其自身函数体里不可见——WP 会把该义务逐字留空仅从调用方无法消除它corpus-v3.2 中即VS-redeem-004其下溢界只来自被调用方的契约。镜像目标仅在注册时建立、函数任何位置都不可见的不变量下才无 abort。声称aborts_if false却没有匹配前置条件的契约是错的但看起来很对。对循环目标所有臂都会被告警缺少不变量——WP 不会交回一个建立在无约束状态上的规范每个能调用 WP 的臂还会拿到附在该告警上的有界展开bounded-unrolling证据直接展示循环头部的事实。该证据刻意不被反馈等级门控它解释为什么循环难而不是给出答案 withholding 它只会让诊断更差而不会让任务以值得测量的方式更难。因此各臂的差异在于 WP 是否可用而非它说了多少。corpus-v3.2 的完整目标表27 个目标、任务编号规则FAMILY-tag-NNN、21 个hard/ 4 个guessable对照、五个独有能力目标VS-redeem-004、BA-base-012、SM-select-022、QP-part-025、PM-curve-027记录在 corpus-v3.2/README.md 中值得与 §3.4 的准则对照阅读。4. 一轮如何执行一轮是任务 × 臂 × 重复数次运行每次是一个隔离的模型会话。4.1 调度harness/schedule.py以selection_seed round_id为种子构建随机化块block。块被打乱且每个块内的臂顺序也被打乱使运行序列中的位置不与臂混淆。4.2 会话harness/controller.py在固定限额控制器轮数、每个控制器轮内的模型轮数、墙钟秒数、输出 token 数下驱动多轮 Claude Agent SDK 会话。开场轮是/move-inf加上prompts/initial.txt。该提示对所有臂是同一段文本且只携带技能不可能知道的东西——目标是什么、包是什么、预算约束会话。原文仅三行Infer complete specifications for {target} in the package rooted at {package}, which is your current working directory; do not use .. as the package path. Continue until the result is complete, or the experiment budget is exhausted.所有规范性指令保持行为、保留用户手写规范、以完整证明收尾都属于技能skill于是插件保持唯一的臂边界每条规则只有一个事实源。config/default.json给出了当前执行限额的实际取值max_controller_turns: 6、max_model_turns_per_controller_turn: 60、max_output_tokens: 100000、max_wall_seconds: 3600、operational_timeout_seconds: 40、eventual_timeout_seconds: 40见 config/default.json。内建工具是白名单制文件类工具可用Bash、WebSearch、WebFetch与子代理生成被禁用——这样通往编译器与求解器的唯一通道就是 Flow 的 MCP 工具。从 config/default.json 可见白名单为Read、Glob、Grep、Edit、Write及任务类工具拒绝列表为Bash、WebSearch、WebFetch、Agent、Task。4.3 跟进策略arm-blind follow-up非确定性回答使固定转录本不合适所以每臂拿到相同的开场消息由臂盲arm-blind控制器从全新的工作区与求解器状态出发按结果从prompts/followups.json挑选标准跟进。followups.json 中的实际键与 DESIGN 所述完全对应compile_failure、forbidden_weakening、incomplete_contract、weak_contract、prover_failure、prover_timeout、no_progress。控制器永远不知道自己在提示哪个臂。策略要点真实的基础设施失败从同一快照重试一次编译失败回传精确的编译器诊断禁止弱化或越界编辑回传精确位置逻辑失败回传求解器诊断求解器超时报告目标与限额没有相关进展时给中性的继续提示操作成功或共享预算耗尽时停止永远不透露参考条款、变异结果、充分性得分或臂特定提示。4.4 隔离bubblewrap Landlock 双层harness/pilot_sandbox.py经scripts/pilot-sandbox到达把每个会话跑在 bubblewrap 与 Landlock 两个独立层之下。外层命名空间带--unshare-user/pid/ipc/uts、--new-session、--uid 0 --gid 0、--cap-drop ALL、tmpfs 的/tmp、运行工件下的全新HOME并只绑定挂载本轮自己的输入加claude、move-flow、boogie、z3四个二进制。/proc只读挂载因为 Boogie 的自包含 CoreCLR 在启动时读取/proc/self没有它就直接中止。内层 Landlock 规则集sandbox/landlock_exec.c把 agent 进程约束到比沙箱所持更少的范围它写自己的工作区、读自己的插件与move-flow而装置本体——harness、prompts、任务补丁、原始包、Boogie 可执行文件——完全够不着/proc里只拿到/proc/self与两个只读文件。Landlock 把/proc/self一次性解析为 wrapper 自己的 PID所以 agent 派生的任何进程都无法启动 Boogieagent 的BOOGIE_EXE因此是一个客户端经运行本地 socket 把每次调用交给控制器harness/boogie_proxy.py控制器在核对了工作目录位于运行目录内之后才执行可执行文件。预检preflight每次都完整证明这一切未挂载的主机文件必须打不开、agent 必须能读自己的/proc而读别的过程的必须被拒、move-flow必须能在 agent 规则集下从 shell 证明一个单行包——Z3 由move-flow探测、Boogie 经代理、再在 Boogie 下探 Z3这是工具真实运行的整条链而仅仅从 wrapper exec 一个求解器并不能演练到这条链。沙箱的完整威胁模型读写权限表、截断权限、凭据边界、非目标声明见 sandbox/README.md。4.5 工作区工作区每次运行、以及运行内每次重置都从基线全新复制。由于HOME是 tmpfs内部不存在~/.claude没有转录、没有记忆目录、没有历史、没有可恢复会话。运行 N 无法观察到运行 N−1。5. 结果如何评分两个层级被刻意分开。求解器预算是每个验证条件 40 秒跨任务统一——无逐任务覆盖与 config/default.json 中operational_timeout_seconds: 40一致。参考规范在 0.7–1.2 秒内即可证出所以对正确契约绰绰有余需要更久的目标是在演练技能文档记载的超时对策而不是被授予更大预算。会话墙钟预算远高于它让 agent 能负担多次尝试。当证明超出预算检查报告prover_timeout并携带求解器的量词例示与非线性算术证据使下一次尝试是有依据的而非盲目的。5.1 操作成功操作成功只有在全新评审进程fresh judge process确认以下六条全部在操作证明限额内成立时才授予包能编译请求的完整作用域通过验证不存在验证跳过或弱化构造运行时字节码不变编辑保持在允许作用域内必需的契约类别齐全。harness/judge.py委托给move-flow experiment check-candidate——与 agent 可见检查运行的是同一条命令见 judge.py 的类注释每个检查都通过 agent 可见候选检查调用的同一条命令执行判据发布在 agent 工作区之外无法通过编辑工作区而放宽。Agent 自己的成功声明永远不是分数。禁止捷径pragma verify false、部分 abort 契约、无条件的aborts_if true、空洞的结果条款、排除合法输入的杜撰前置条件。与其一起记录更大限额下的最终验证器成功输入/缓存创建/缓存读取/输出与总 token按本轮归档价目表重算的费用端到端、模型、Flow、编译、WP、求解器、hook 与 judge 时间工具与求解器调用次数、反例、超时、控制器轮数与模型轮数契约类别覆盖与规范大小对hybrid_flexible记录 WP 采用率与动作顺序——按意图处理intention to treat分析因为选择不调用WP 本身就是该臂的一部分。操作成功是必要的但弱的更含糊的契约更容易通过它。两个臂可以产出强度明显不同的契约却得到相同分数。5.2 变异充分性规范能否拒绝错误代码变异体mutant是对实现的补丁永远不针对规范。装置把变异体应用到包的副本上对 agent 完成的规范重跑求解器求解器失败 →killed契约足够精确以至于能察觉求解器成功 →survived契约对着错误代码依然验证通过。mutation_adequacy killed / essential而strict_success要求操作成功且每个必要essential变异体都死亡。当前每个任务三个变异体一个对应该契约必须钉住的一项义务分布在normal-result与abort类别间。变异体只有当人工编写的参考规范被证明能杀死它时才成为essential变异体与参考都在轮次开始之前、且不看到任何臂的输出的情况下编写——与语料选择治疗盲出于同一原因。评分在轮次之后运行因为 agent 与沙箱共享挂载命名空间隐藏材料永远不能和它一起挂载。变异是更可信指标的两个性质变异体是模型从未见过的代码所以问题无法靠记忆回答该指标在验证奖励含糊之处奖励精确。corpus-v3.2 进一步把变异体拆成两个不相交的集合见 corpus-v3.2/README.mdrefutation 集mutants/会把存活变异体作为失败回传给 agent等于把它变成训练材料因此评分必须使用留出集mutants-scoring/harness.controller拒绝两个根解析相等的运行author_mutants.py --disjoint-from拒绝与 refutation 变异体重复文件、偏移与编辑的评分变异体。5.3 成本测量本地执行不计费推理才计费。因此主要效率度量是推理 API 秒数、计费的输入/缓存/输出 token、以及按归档价目表重算的供应商费用。本地 Flow、WP、编译器、求解器、hook、judge 时间作为诊断记录端到端墙钟时间是安全限而非常态指标——它对提示缓存热度敏感见 §7。一个容易掉进去且难以察觉的核算陷阱运行时把每轮字段与会话累计字段混在同一条记录里——usage与duration_ms描述单轮而model_usage、total_cost_usd、duration_api_ms是已经包含之前所有轮次的会话总和。对后者求和会重复计账且误差随轮数增长。正确做法是取每个会话的最后一个值再加上跨基础设施重试的量重试会开启新会话。推理时间超过运行墙钟时间就是这个错误的特征。轮数是第一阶成本驱动且作用两次缓存读取 token 随轮数增长并且被计费。减少修复轮数在输出与缓存读取两个类别上同时省钱——这就是为什么各臂工作流收敛到单次收尾检查而不是 verify/check 交替。harness/mine.py按轮次使用、token 类别与失败类型给归档转录打标签harness/taxonomy.py把这些标签与反馈设计预先提出的诊断类别对照报告哪些从未触发、以及是否有任何任务本可触发它们。6. 重复与分析完整语料库轮次对每个任务和每个臂做五次全新运行。运行按(task, replicate)分块三个臂的顺序在块内随机化六种顺序在全调度中全部均衡。并发度固定同一块的成员不争夺同一本地求解器通道。失败消耗共享预算并被保留而不是被重试掉。任务是主要独立单元。对每个对照报告任务级成功率差异与 95% 任务聚类自助法task-cluster bootstrap区间并以块化随机化检验作为次要检查在预置对照C1与C2上控制族错误率family-wise error rateC3报告为效应量。时间与 token 到成功time and tokens to success按共同上限下的受限均值restricted means分析失败视为在该上限处删失censored。变异与特征分层分析是次要的。不要对全部运行报告朴素的二项区间同一任务的重复不是独立观测把它们当独立观测会把精度高估大约重复次数那么多。技能、提示、工具、限额与评分可以在轮次之间改进。记录每轮的有效配置及其与之前轮次的关系保留工件按配置给结果打标签。永远不要静默地合并实质不同的配置的结果。7. 有效性控制7.1 装置同一性每次运行记录config_sha256、controller_harness_sha256对harness/的tree_hash、controller_prompts_sha256、plugin_manifest_sha256、move_flow_sha256、mutant_manifest_sha256、initial_tree_sha256。轮中编辑 harness 会使同一性检查失败而不是静默混用装置版本——这正是预期行为也是为什么一次性分析脚本住在analysis/里、harness/之外见 analysis/README.md。7.2 治疗盲语料成员资格、筛选、替换、变异体与参考全部在不运行实验臂的情况下决定。筛选未通过的样本在清单中带非ready的screening_status调度器丢弃它——显式点名是错误而非覆盖使排除不会退化成操作员记忆。超过筛选阈值的目标只在臂运行之前、且只通过确定性的候补层级deterministic reserve hierarchy替换。7.3 轮次纪律技能、提示、工具、模型、限额可以在轮间改进但每个改动都开启一个新的、有记录的轮次。历史工件永不覆盖、永不安静合并。7.4 空洞性vacuity假设相互矛盾的契约会验证、会过检查、并且什么也不意味——该次运行记录的所有结果都因此无意义包括变异它会报告所有变异体存活。这是评分风险而非趣闻已有两个来源是这样被发现并修复的。move-flow experiment prove --check-inconsistency检测它harness.validate_mutants拒绝求解器报告不一致的参考。7.5 污染三种同名机制只有一种是活的反复被问一次运行能否被更早运行缓存的东西污染三种不同机制共用污染之名答案不同混淆它们会让装置看起来比实际更安全或更脆弱。供应商提示缓存——不是正确性威胁。一轮中约 95% 的输入 token 是缓存读取。这是预期的且几乎全部是会话内前缀重读——每个 agent 轮都重发迄今为止的对话。它无法污染结果KV 前缀缓存以精确 token 前缀为键返回冷计算本会产生的激活值语义上是透明的不存在让另一个会话的内容进入本会话的机制——缓存命中重放的是本会话自己的前缀而不是别人的续写。它确实影响墙钟热前缀服务更快且同臂运行共享很长的系统提示技能相同前缀。两条后果都已被处理墙钟时间是诊断与安全限而非常态指标§5schedule.py在块内打乱臂顺序让缓存热度散布到各臂而不是与某一个臂混淆。运行间状态残留——按构造关闭。这才是会污染结果的机制也是沙箱为排除它而存在的理由/home是tmpfsHOME/home/eval每次调用全新。内部不存在~/.claude无转录、无记忆目录、无历史、无可恢复会话。/tmp也是 tmpfs工作区每次运行、以及运行内每次重置都从基线全新复制materialize_task拒绝覆盖已存在的树并对照配方的expected_sha256核对tree_hash每次运行记录initial_tree_sha256。因此运行 N 看不到运行 N−1 的规范、构建目录或笔记沙箱预检在每次启动时重证隔离§4。相关问题——答案是否就在工作区里——答案是否目标文件对目标零规范行树中唯一的.spec.move是sources/deps/下的依赖契约刻意保留为可信不透明边界任务自己的参考规范与变异体永不挂载——agent 共享沙箱挂载命名空间这就是变异评分在轮后而非轮旁运行的原因。预训练记忆——真实、被缓解、未被消除。模型可能在训练中见过目标及其规范。这是不可消去的一种也是基准迁往私有源的原因。迁走之后剩余的量有界且被声明10 个目标中 8 个私有2 个公开的在上游无规范§3。三个论断限制其危害比较是主体内的within-subject。同任务、同模型、同配置只有工作流与 WP 可用性不同。记忆会同等抬高三个臂所以臂间对照——本研究的论断——幸存下来。它威胁的是关于 AI 规范能力的绝对论断而本设计不做这种论断。变异充分性大体免疫。变异体是模型没见过的代码这份契约能否拒绝错误代码无法从记忆回答。这是把变异而非操作成功当作头条指标的又一理由。混淆obfuscation被考虑过并被拒绝。重命名对上述前两种机制毫无作用对第三种也弱——模型识别的是结构而不是标识符且目标已被提取进语料专属模块、换了新名字。而它的代价真实改变所有树哈希、使契约审计失效、弄坏准备补丁、迫使重筛。开放项闭卷探针closed-book probe可以直接测量残留而非争论它新会话、无工具、只给模块头与目标签名要求产出规范。能复现参考即标记该目标为已记忆给出一个与结果一起报告的逐任务污染分。代价是每个目标一次廉价会话尚未运行。8. 工件与可复现性持久语料证据住在语料树内manifest.json源同一性与样本配方、metadata/清单、选择、契约审计、目标体证明输出、记录的修复、screening/治疗盲兼容性结果、patches/可重放的准备、mutants/。生成的轮材料住在evaluation-artifacts/round-id/每个运行一个目录含基线与最终树、工作区 diff、Claude 与控制器事件日志、候选检查、judge 判决与变异得分。8.1 可复现性记录每次运行归档轮次、任务、臂、重复、块顺序与限额所有实现、插件、提示、技能、模型、工具清单与源哈希Claude 事件、Flow 遥测、控制器决定、stdout/stderr、以及 UTC 与单调双时钟计时初始树同一性、最终 diff 与文件、全新 judge 结果原始模型标识与 token 类别无凭据。轮次清单额外记录源提交、Flow / Claude / SDK / Boogie / Z3 版本、沙箱同一性、随机化种子与调度、评分版本、以及当时价目表。原始 token 计数是稳定的资源结果美元费用是从它推导的。8.2 基准轮前的 go/no-go 清单每个被调度样本的screening_status为ready且筛选与本轮将运行的包同一性一致且不过时每个模块有已提交的参考规范每个必要变异体已对它验证并记录摘要agent_only无法列出、调用或到达 WP混合臂的工具清单彼此一致开场提示、非 WP 能力、限额与臂盲跟进跨臂相同战术、插件、运行时工具清单、技能哈希与运行清单一致每次运行都从记录的树哈希、全新会话与工作区开始验证跳过、部分 abort 契约、运行时编辑、隐藏文件访问都不能计为成功模型同一性、原始 token 类别、计时、失败、重试与终止原因完整参考与变异体对 agent 不可达且永不指导修复分析使用任务级分块并在上限处包含失败运行。Etna 源不入库。aptos-core公开而 Etna 不公开所以corpus-v3.2/package/sources/被 gitignore仓库里只有配方corpus-v3.2/build.py --verify就地重新生成并在任何摘要与清单不符时失败、点名具体文件见 corpus-v3.2/README.md 的 Reproducing the package 一节私有仓库aptos-labs/etna固定于提交1a71823845dc092c825996d433adaf9843ea78aabuild.py导出该提交的树而不是读工作目录脏树会被拒绝。任何基于该语料的公开工件都需要自己的披露决定——契约形状可以在不复现专有源码的前提下描述但包本身不披露就不可再分发。9. 实战入口如何跑起来设计文档声明命令级 runbook 在 README.md编辑规则在 CLAUDE.md。核心流程可概括为环境基础包无第三方依赖只有真实模型运行才需可选 SDK固定0.2.139与 config/default.json 的claude_agent_sdk_version一致python3 -m venv .venv .venv/bin/pip install -e .[claude] cc -O2 -Wall -Wextra -Werror sandbox/landlock_exec.c -o sandbox/landlock-exec验证语料可按字节重建python3 corpus-v3.2/build.py --verify每臂渲染插件§1.1 的命令调度move-inference-pilot --corpus-manifest corpus-v3.2/manifest.json --mutants-root corpus-v3.2/mutants-scoring --plugins ROUND/plugins.json ... --round-id ROUND_ID——--mutants-root开启严格评分并强制每个被调度任务都有清单预检、执行、审计move-inference-preflight-pilot→move-inference-run-pilot真实会话只在沙箱内运行→move-inference-audit-pilot --forbidden-path .../corpus-v3.2/mutants轮后评分.venv/bin/python -m harness.score_round --config ROUND/config.json --round-dir ROUND --mutants-root corpus-v3.2/mutants-scoring转录挖掘与失败分类学move-inference-mine-transcripts与move-inference-failure-taxonomy。模型选择GLM 或 Opus通过harness.model_profile select完成它会写出新配置、保留预算与源出处、且拒绝覆盖——因为换模型会改变配置摘要需要新的轮 ID。10. Etna 候选池附录以下内容继承自设计文档附录记录源调查的候选池。此处没有目标有公开对应物已晋升进语料库的目标标注(in corpus)。Tier A —— 无需准备即可用。零或近零导入、无全局状态、自包含 abort目标形状与探针blended_oracle_util::calculate_weighted_price双向量累积循环三个命名 abort 加 cast 溢出price_management::get_median_price嵌套比较全函数无 abortwork_unit_utils::get_max_order_placement_limit钳制地板除法work_unit_utils::consume_order_match_work_units经mut的饱和状态迁移溢出 abortliquidation_config::get_liquidation_margin双分支 ceil 比溢出与零除数 abortliquidation_config::get_liquidation_price复合除数的 ceil 比一个易漏的零杠杆 abortadl_tracker::get_bucket_index有界线性扫描满足谓词的最小索引trading_fees_manager::find_min_value/find_max_value同一循环、空向量行为相反——成对的精确性探针trading_fees_manager::calculate_min_net_taker_fee链式地板百分比微妙的下溢 abortfee_distribution::add枚举match带四个失配 abort 的部分幺半群oracle::calculate_deviation_bps绝对差比值用MAX_U64哨兵代替 abortpayout_math::computeu128上三段折线插值protected_trial::trial_size_for四元u128乘积、截断除法user_credits::credits_for_duration_days(in corpus)结构体不变量表上的最后匹配优先扫描spot_clearinghouse::compute_base_needed规范累加器不变量与溢出 abortspot_work_unit_utils::get_max_match_limit钳制除法全函数spot_fees_config::compute_fee_from_basis_points精确比值加两个代码未防护的 abortfunded_first_trade::checked_max_tier_leverage全称量化前置条件、最大后条件vault::convert_existing_shares_to_asset_amount(in corpus)按比例mul_div零除数边界Tier B —— 一行#[verify_only]包装后即可用该包对inline函数做规范的自有约定work_unit_utils::consume_work_units、price_management::apply_funding_rate_multiplier、perp_market_config::safe_round_to_granularity、liquidation::min_liquidation_units——找到的最富契约带闭式u256ceil 除法、退化除数回退、档位向上取整、最小尺寸地板与裁剪。Tier C —— 需要提取或 mock准备动作是把配置读取作为参数传入position_update::is_settle_price_inside_guaranteed_range、perp_market_config::round_size_to_lot、slippage_math::compute_limit_price_with_slippage、backstop_liquidator_profit_tracker::calculate_pnl(in corpus)、open_interest_tracker::get_max_open_interest_delta_for_market、spot_clearinghouse::compute_quote_needed(in corpus)——逐档地板之和刻意不是和的地板使批量总计与逐订单抵押对得上账——spot_engine::validate_order_input(in corpus)以及spot_market_config::register_market跨三个错误码、两次move_to的九个参数派生 abort。vault 份额数学簇(in corpus)是唯一在不带 framework 重量的情况下提供组合契约的地方高水位费用喂给份额铸造比再喂给赎回拆分拆分跨守恒性质只使用Vault上的mul_div与同模块谓词。现存的私有参考规范使用pragma aborts_if_is_strict因此是精确的而非部分的它们充当评分参考而非推断目标i64_math.spec.move带显式边界 abort 的有符号构造、mul_div、ceil_mul_div、min/max、符号分解、math.spec.move跨 ceil 与 floor 参数化的MulDivSpec模式、NonZero模式、Precision结构体不变量与perp_positions.spec.move。perp中其余.spec.move是带spec fun空壳的桩所以其函数仍可作为目标可用——其依赖已被指定正是干净不透明边界所需的状态。任何新 Etna 样本的实用约束。依赖未解析、未固定——无Move.lock、无build/、Move.toml指向移动中的分支——所以样本必须重指向固定的本地aptos-move/framework才可复现decibel_dex与aptos_market都解析到0x4e110。多数候选是package fun验证本身没问题但意味着提取的样本保留其模块同一性。结语这套评测装置的工程价值在于把Agent 能力研究中通常靠口头约定维持的每一个假设都做成了机器可验证的工件臂边界固化进渲染插件的哈希、判据固化进与 agent 同一命令的全新 judge 进程、隔离固化进每次启动重证的 Landlock 预检、统计有效性固化进任务是主要单元的聚类自助法、而记忆污染这种无法根除的威胁则被诚实地降维到主体内对照与变异免疫两个可论证的边界上。对想在其他语言或领域复刻此类评测的工程师仓库中最值得借鉴的三件事是评分变异体与参考在治疗盲下编写并双集合分离refutation / scoring、装置同一性哈希链config→harness→prompts→plugin→mutant→initial_tree、以及墙钟时间是安全限、token 才是结果的成本核算纪律。所有实现细节可继续深入 harness/、tests/ 与 corpus-v3.2/ 各目录每个模块都有对应的单元测试如 test_judge 相关的 controller 测试 与 test_validate_mutants.py。【免费下载链接】aptos-coreAptos is a layer 1 blockchain built to support the widespread use of blockchain through better technology and user experience.项目地址: https://gitcode.com/GitHub_Trending/ap/aptos-core创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考