Octagon / EdgeBench Integration Note

Juliet Vulnerability Analyzer:Public 与 Hidden 材料拆分说明

生成日期:2026-07-08。本文基于对 EdgeBench 公开任务 JSON、SForge 代码路径,以及官方 work/judge Docker 镜像的本地验证。

一句话结论

Juliet 这个题可以走方案 B:把 agent 可见的 public workspace 独立到 Octagon, 但 hidden judge 不建议作为普通 env 文件复制进项目;更稳妥的做法是让 Octagon scorer 调官方 judge image。严格地说,不是“绝对不能复制 hidden”,而是复制后必须保证 BA 沙盒永远看不到、 dispatch 永远不会上传、artifact 回收永远不会泄露,否则评测语义就变了。

SForge 的 Public / Hidden 是什么

Public / Work 侧

Public 是 agent 正常可见的题面、启动代码、公开样例数据和本地公开评分器。 在 SForge 里它来自 work image,agent 在 work container 中编辑代码、运行公开检查、提交归档。

对 Juliet 来说,公开任务要求是在 agent-start/analyzer.py 里实现确定性 facts-level 静态分析器,输出 findings JSON。

Hidden / Judge 侧

Hidden 是 agent 不应看到的真实测试集、标签和隐藏评分脚本。 在 SForge 里它来自 judge image,只有评测时的临时 judge container 能读取。

对 Juliet 来说,hidden scorer 会运行 agent 的 analyzer,读取隐藏 facts, 与隐藏 labels 对比,然后输出 SCORE=... 等指标。

本地验证到的 Juliet 文件分布

类别 来源 关键路径 / 内容 是否适合进 Octagon env
公开题面与 starter work image problem.md, README.md, agent-start/analyzer.py, agent-start/requirements.txt 适合
公开数据 work image data/public/facts.jsonl, labels.jsonl, manifest.json。已验证 public cases 为 240,public labels 为 192。 适合
公开评分器 work image score.sh, scoring/score.py。用于本地 public score,不代表最终 hidden 分。 适合
隐藏数据 judge image /root/sebench_private/.../data/hidden/facts.jsonl, labels.jsonl。已验证 hidden labels 为 723。 不建议作为普通 env 文件
隐藏评分脚本 judge image /root/sebench_private/.../evaluator-hidden/score_hidden.sh 建议通过 judge image 调用

为什么不是简单“全部复制进 Octagon”

1. 问题不是 BA 当前能不能看到,而是隔离边界是否长期可靠

你说得对:如果 BA 运行在沙盒里,且沙盒只拿到 public workspace, 那它确实看不到项目里的 hidden 文件。这个前提成立时,安全风险可以控制。 但 Octagon 现有逻辑会把 env 的脚本、输入物料、workspace 复制或上传给 agent。 如果 hidden 文件放在普通 env 目录里,后续某次 dispatch、artifact 回收、调试脚本或“复制整个 env” 的改动都可能误把 hidden 带进 BA workspace。

2. hidden judge 的官方边界本来就是 judge image

EdgeBench/SForge 的设计是 work container 给 agent,judge container 做隐藏评分。 官方 task JSON 只暴露 judge image tag 和 eval command,而不是把 hidden 数据作为数据集文件公开。 因此让 Octagon scorer 调 judge image,最接近官方评测边界,也更容易说明“我们使用官方 judge 评分”。

3. 复制 hidden 后要承担额外的授权、版本和防泄露责任

EdgeBench 任务 JSON 和 SForge 代码有明确公开来源;但 judge image 内 /root/sebench_private 里的 hidden evaluator 是私有路径组织。即使镜像可拉,也不等于适合把 hidden 文件解包提交到仓库。 一旦复制到项目里,还需要证明文件没有被改过、没有被 agent 访问过、没有在 artifacts 或日志中泄露。

如果坚持把 Hidden 也放进 Octagon,需要怎么做

技术上可以,但应该按“服务端私有裁判资源”处理,而不是按 env 普通文件处理:

即便这样做,也只是“可控”,不如保留 judge image 简洁。judge image 天然提供了文件边界、版本 tag 和运行环境。

推荐的方案 B 变体

  1. 把 work image 中的 public workspace 抽取到 Octagon,例如 envs/edgebench-juliet/workspace_template/
  2. BA 只拿到 agent-start/、题面和 public data,按题目修改 analyzer.py
  3. Octagon scorer 将 BA 产物复制到可写临时目录。
  4. scorer 调用官方 judge image:seededge/edgebench.judge.juliet_vulnerability_analyzer:0c4f2c0057c2
  5. 解析 SCORE=SCORE_STATUS=PER_CWE= 等输出,写回 Octagon scores。

我已验证空 starter 经 hidden scorer 可得到 SCORE=10.00SCORE_STATUS=OKRAW_TOTAL=723。可写临时目录挂载方式可正常运行; 只读挂载不行,因为 scorer 会在 agent-start/out/findings.json 写分析结果。

来源