用途与实际影响
这项功能怎样使用
为什么需要它
如果第二次尝试读到第一次留下的文件,就无法知道是谁做成的;任务停在电脑端,也不一定代表外部执行或资源已经真正结束。
举个实际例子
我取消了一次云端任务,电脑上的进度已经停了,却还不能马上重跑。页面会把“本地已停”和“云端是否真正结束”分开显示;只要后一项说不清,就保留清理未确认,免得第二次提交把同一件事做两遍。
最后我会得到什么
当前可以核对一轮正式比较需要哪些冻结题目、隔离目录、执行身份和停止证据,并说明阻断原因。待方法与 CI 问题解决后,单次运行才可交回各自的真实产物和状态;目录混用、任务未结束或清理说不清时不能参加比较。
正常时
在具备正式运行条件后,每次尝试都有自己的输入、目录、文件和已确认的结束状态,才成为可检查样本。
发现问题时
旧文件混入、写到别人的目录、只完成部分题目或资源未停稳时,保留诊断并判这次尝试不可比较。
入口不可用或证据不足时
原任务无法继续或外部是否结束不可核实时,说明未决状态;不会偷偷换一条路线补做成成功。
从哪里开始
在 CACB 项目的 AI 对话中说:想用已收录的工程题筹备一轮复查,请先告诉我当前能否正式运行、每次尝试怎样隔离。
需要准备什么
- 想检验的能力或已收录题目
- 想看的执行路线(如已有选择)
从开始到拿到结果
- 1
先核对能否正式运行
检查题目版本、执行路线与当前方法是否足以比较;评分口径冲突和 CI 缺口未解决时只交准备结论,不启动正式比较。
- 2
条件具备时隔离执行
同一输入分别交给选定路线,每次写自己的空目录;通过任务身份查看进度和终态。
- 3
交付与接续
交回独立产物与状态;跨目录写入、旧产物混用或清理未确认时停下,不进入比较。
技术实现与依据
这里保留实现、关键条件、精确入口、历史记录和验证结果。
campaign / workspace / archive 与三类 executor 合同已有源码;当前提交的 CI lint 门仍未闭合,本页未启动任何正式路线关键规则与设计选择
每个执行配置使用唯一目录。
三条路线共用 start / wait / cancel / result 语义,但不共用身份或清理回执。
start 只在所有绑定通过后返回 handle,wait 只给状态快照。
workspace 是临时施工区,不是唯一归档。
中断优先精确恢复,不合并 partial。
原生终态要求宿主确认且无活跃后代;本地终态要求进程树和 GPU lease 清理;云端终态要求流与可观察远端任务关闭。
清理前先归档并验证 hash(内容指纹)。
本模块用到的名词
- campaign(评测活动)
- 同一问题库版本、执行规则和验证器组成的一次比较边界。
- capsule(任务胶囊)
- hash(内容指纹) 绑定的任务输入与最小读取合同。
- WorkerHandle(执行句柄)
- start 返回的 task id + run id + provider id 绑定;身份不同就不能继续 wait、cancel 或取 result。
- terminal state(终态)
- completed、partial、blocked、failed、timed_out 或 cancelled;后两者只有清理已确认才成立。
- cleanup_unconfirmed(清理未确认)
- 取消或超时已发生,但仍不能证明进程、GPU lease、request stream 或远端 job(任务记录) 已终止;此时路线保持不可用。
- LocalGpuBroker(本地 GPU 仲裁器)
- 串行分配本地重型模型 lease,防止两个受测任务绕过 owner 同时占用 GPU。
- provider request(提供方请求)
- 云端路线经唯一绑定 endpoint 发出的调用;只携带参与者公开输入,hidden control 不离开本机。
专业定义
把整组案例、fixture、顺序和验证版本冻结,再让原生受管、本地异步或云端 API 异步路线在唯一 workspace 中执行;三者共享任务语义,但提交、轮询、恢复和清理证据各自闭合。
解决什么
解决旧产物污染、共享写入、路径越界、不同尝试拼接、轮询误判、资源泄漏、远端请求悬挂和临时 workspace 丢失。
当前怎样实现
- campaign.py 冻结 episode manifest(清单) 与 fixture。
- task_workspace.py 创建、校验和封装 workspace。
- task_workspace_archive.py 在终态后归档代码、trace 和 receipt(执行回执)。
- models.py 定义 worker.start(envelope)、wait(handle, deadline)、cancel(handle) 与 result(handle) 的共同类型;result 只接受带完整 receipt(执行回执) 的终态。
- native_managed 由宿主提交原生 task,轮询宿主状态并绑定 parent/spawn/child lineage;取消或超时后必须确认宿主终态和没有活跃后代。
- local_async_job 由 Toolkit/AICLI 提交 Codex CLI(命令行工具) job(任务记录),按 job(任务记录) id 轮询;任务在本地 workspace 中产出 artifact,重型执行由 LocalGpuBroker(本地 GPU 调度器) 串行,结束时确认进程树、活动请求、模型清理和 lease 释放。
- cloud_api_async_job 在本地 workspace 运行 Codex harness,经绑定的 Responses transport 发出 provider request;每个请求与 usage(真实用量) 事件配对,hidden verifier 和 independent confirmation(独立确认)始终留在本地。
- workspace containment(隔离处置) 检查 cwd 与输出根祖先关系;所有路线先归档 artifact/trace/receipt/validity reason 并回读 hash(内容指纹),才允许释放临时目录。
执行流程
- 1
冻结 formal campaign。
- 2
选择 executor_kind,并验证它的接入状态、精确身份和授权边界。
- 3
为执行配置创建 workspace。
- 4
复制并校验 fixture。
- 5
用 start 提交 envelope;只有绑定验证通过才接收 WorkerHandle。
- 6
用 wait 在建议检查时间做有界状态读取;到达一次 deadline 不自行发明 timeout(等待超时)。
- 7
原生路线等待 host task;本地路线在取得 LocalGpuBroker(本地 GPU 调度器) lease 后运行 Toolkit/AICLI job(任务记录);云端路线只向已绑定 provider 发送 participant-public request。
- 8
顺序执行完整 episode,并把 artifact 留在唯一 workspace。
- 9
确认每个案例终态。
- 10
中断时优先恢复同一 session/job/workspace;不能精确续作时整次重开,不拼接 partial。
- 11
需要停止时调用 cancel,并继续观察到路线专属清理闭合;清理不可确认就保持 cleanup_unconfirmed。
- 12
归档产物与证据。
- 13
证明归档后再清理临时目录。
边界
- workspace 不进入网站,也不作为长期事实源。
- 不同尝试不能 best-of 选优后拼接。
- native、local 与 cloud 之间不继承 handle、lineage、artifact 或 cleanup receipt(执行回执),也不做静默 fallback(后备路线)。
- 云端 provider HTTPS 是 runner-side transport,不等于参与者获得任意联网、connector、远程 Git 或继续委派能力。
- 配置好云端 provider 不授权调用;每个真实付费 attempt 在提交前单独绑定明确授权,先前 attempt 的授权不可复用。
- 本地 GPU 路线不消耗云端 paid-attempt 授权,但仍必须经过资源 owner、兼容性和 broker(代理服务) 门。
- 探针只读取提示词内固定数据,不读对话历史、工作区记忆、父/兄弟目录、Git、.agents 或 .codex,不联网、不安装依赖、不调用其他 AI/API。
- 探针输出只能留在固定 namespace;它不是 formal sample、benchmark evidence、cost receipt(执行回执) 或 routing input。
- 当前网页不启动、取消或清理任何评测 workspace、GPU lease 或云端 request。
失败与恢复
- 输出路径不在 workspace 内
- 启动前拒绝执行。
- 某案例缺失或 interrupted
- 整次 episode 保持 incomplete。
- 一次 wait 到期但 executor 仍在运行
- 只返回当前状态和下次建议检查时间,不写 timed_out。
- 原生取消后仍有活跃后代
- 不写 cancelled,继续保持取消请求或清理未确认状态。
- 本地进程树、活动请求或 GPU lease 未释放
- 路线保持 cleanup_unconfirmed;不启动另一个重型任务。
- 云端 stream 已断但 provider job(任务记录) 终态不可观察
- 不把本地退出当远端清理;路线保持不可用且不立即替代提交。
- 归档 hash(内容指纹) 不匹配
- 保留 workspace,不释放唯一内容。
真实入口
PRIVATE source · src/cacb/campaign.pyCampaign 冻结与 manifest(清单)
PRIVATE source · src/cacb/task_workspace.pyWorkspace 创建与 containment(隔离处置)
PRIVATE source · src/cacb/task_workspace_archive.py终态归档与 hash(内容指纹)
PRIVATE source · src/cacb/models.pyWorkerHandle、状态机与 start/wait/cancel/result 共同合同
PRIVATE source · docs/WORKER_CONTRACT.md三类 executor、终态和路线专属 cleanup 语义
PRIVATE source · docs/LOCAL_CODEX_COMPATIBILITY.md本地 Codex、工具循环、恢复和 LocalGpuBroker(本地 GPU 调度器) 门
PRIVATE source · src/cacb/cloud_api_worker.py云端 request/usage/terminal machine-event 解析边界
PRIVATE source · protocols/single-worker-episode.md连续 episode 合同
如何验证
- campaign、task_workspace 与 task_workspace_archive focused tests 在 e6f7581 历史观察代曾通过;该证据不继承到当前 59b0b5c。
- 当前源码与 cross-executor contract test 明确覆盖 native_managed、local_async_job、cloud_api_async_job 及 native_lineage=not_applicable 语义;这只是 source contract,不是本轮 runtime(运行环境) 验收。
- 没有创建真实受测任务、取得 GPU lease 或调用外部执行器。
- 完整 native formal-run 路径仍有跨代 fixture 缺口。
与其他模块的关系
消费问题库并冻结共同 envelope;身份与证据模块决定三条 executor 的精确 binding 和接入资格。本模块只负责 formal start/wait/cancel/result、workspace、资源与归档生命周期,再把唯一执行容器和路线终态交给 deterministic verifier。原生编排和额度/费用探针各由独立模块说明。
