Hacktoberfest 2026: những issue maintainer đã đánh dấu cho tháng Mười, đang mở và phù hợp người mới. Xem issue Hacktoberfest

Reference oracle and required build output share ./executable, causing agents to overwrite the oracle

Đang mở
#60 0 bình luận 0 reaction 0 người được giao Xem trên GitHub

Chưa có ai nhận issue này.

Đánh giá

Độ khó
4/5
Thời gian dự kiến
3-5 ngày
Mức phù hợp với người mới
55/100
Loại issue
Lỗi
Độ rõ ràng
Khá rõ ràng
Mức độ hoạt động
Ít trao đổi
Công nghệ
python, shell
Lĩnh vực
devtools, infrastructure

Hướng nghiên cứu

Bắt đầu bằng cách kiểm tra harness của ProgramBench và các hướng dẫn tiêu chuẩn về compile.sh, ./executable cũng như entry point được đề xuất PROGRAMBENCH_REFERENCE_EXECUTABLE. Tái hiện trình tự ghi đè, sau đó xác minh rằng các lần build ứng viên lặp lại vẫn để reference có thể thực thi độc lập và dành riêng ./executable cho ứng viên.

Do mô hình lập chỉ mục viết ra từ nội dung của issue.

Mô tả

We ran into this a couple of times now, so I wanted to report the following:

Description

Summary

The standard ProgramBench instructions assign two incompatible roles to the same path:

  1. ./executable is the reference oracle that the agent must probe.
  2. compile.sh must produce the candidate as ./executable.

A normal iterative build therefore replaces the reference oracle. Every later probe of ./executable invokes the candidate, potentially causing the agent to compare its implementation with itself while believing it is stil observing the reference.

This is not task-specific; it affects any ProgramBench task using this workspace contract.

Reproduction

  1. Start a ProgramBench task and probe the supplied ./executable.
  2. Write an ordinary compile.sh that compiles the candidate with output
    ./executable.
  3. Run compile.sh during development to test the candidate.
  4. Probe ./executable again.

The fourth step now runs the candidate. The original reference path has been lost.

Execute-only file permissions do not prevent this when the agent can modify the containing workspace directory: the pathname can still be unlinked and replaced.

We observed this independently in two private local trajectories. In one case, the agent later moved ./executable to preserve what it believed was the reference, but the path had already been overwritten by an earlier build. Subsequent reference comparisons were therefore not independent.

No benchmark score or unpublished evaluator behavior is needed to reproduce the problem.

Impact

  • Iterative candidate builds can destroy the only behavioral oracle.
  • Later “reference” probes may silently become candidate self-comparisons.
  • Agents can derive incorrect behavioral contracts from contaminate evidence.
  • Results may understate agent capability for reasons unrelated to the reconstruction itself.

Suggested fix

Separate the paths in the harness before the agent starts:

  • Preserve the reference at something like /opt/programbench-reference/executable.
  • Make that file executable but neither readable nor writable by the agent.
  • Keep it under a root-owned directory the agent cannot modify or unlink from.
  • Optionally expose its path through PROGRAMBENCH_REFERENCE_EXECUTABLE.
  • Reserve workspace-root ./executable exclusively for the candidate produced
    by compile.sh.
  • Update the instructions so all oracle probes use the immutable reference
    path.

This retains ProgramBench’s anti-copy/anti-smuggling boundary while allowing the agent to compile and test candidates repeatedly.

A prompt-only instruction telling the agent to move the reference before building would reduce the problem, but enforcing separation in the harness is more reliable.

Expected behavior

The reference oracle remains independently executable for the entire inference trajectory, while compile.sh can freely recreate ./executable as the candidate submission.

With kind regards

Ngôn ngữ chính
Python
Star
928
Fork
67
Chỉ số merge pull request
Không có pull request nào được merge trong 30 ngày

Hướng dẫn đóng góp

Mở hướng dẫn đóng góp

Bắt đầu từ đâu

  1. Đọc hết issue, rồi đọc hướng dẫn đóng góp của dự án.
  2. Bình luận trên issue rằng bạn sẽ nhận — tránh hai người làm cùng một việc.
  3. Fork repository và làm thay đổi trên một nhánh.
  4. Mở pull request có tham chiếu số hiệu của issue.

Issue khác của facebookresearch/ProgramBench

Tất cả issue của facebookresearch/ProgramBench

Issue tương tự

Thêm issue về Python

Nhận issue mới trong hộp thư của bạn

Bản tóm tắt ngắn những issue GitHub phù hợp với người mới.