abhigyanpatwari/GitNexus · error · SandboxError

proposer did not produce one bounded regular proposal.md

Error message

proposer did not produce one bounded regular proposal.md

What it means

Raised by `run_proposer` after the confined proposer session finishes: the expected `.wfbench-output/proposal.md` must be a regular file, not a symlink, and no larger than MAX_EVIDENCE_FILE_BYTES (256 KiB). If it is absent, a symlink, or oversized, the proposer did not produce valid output.

Source

Thrown at eval/workflow_bench/evolve.py:527

                    require_pid_namespace=True,
                    bare=True,
                    settings_json=sandbox.settings_json,
                    strict_mcp_config=True,
                    mcp_config_json='{"mcpServers":{}}',
                    allowed_tools=PROPOSER_ALLOWED_TOOLS,
                    disable_slash_commands=True,
                    transcript_projects=sandbox.transcript_projects,
                    transcript_cwd=Path("/workspace"),
                )
            if not record["ok"]:
                return record
            candidate_overlay_files(internal_overlay)
            if (
                not internal_proposal.is_file()
                or internal_proposal.is_symlink()
                or internal_proposal.stat().st_size > MAX_EVIDENCE_FILE_BYTES
            ):
                raise SandboxError("proposer did not produce one bounded regular proposal.md")
            if overlay_dir.exists():
                raise SandboxError(f"proposer output destination already exists: {overlay_dir}")
            shutil.copytree(internal_overlay, overlay_dir, copy_function=shutil.copyfile)
            proposal_path.parent.mkdir(parents=True, exist_ok=True)
            shutil.copyfile(internal_proposal, proposal_path)
            proposal_path.chmod(0o600)
            return record
        except BaseException as exc:
            primary = exc
            raise
        finally:
            try:
                runner.remove_clone(clone)
            except OSError as cleanup:
                if primary is None:
                    raise
                primary.add_note(f"proposer clone cleanup also failed: {type(cleanup).__name__}: {cleanup}")

View on GitHub (pinned to d540b00184)

Solutions

  1. Inspect the generation's proposer-session.json to see why the session ended and where (if anywhere) it wrote.
  2. Confirm the proposer prompt points at /workspace/.wfbench-output/proposal.md and that Bash is enabled (PROPOSER_ALLOWED_TOOLS).
  3. If the proposal is just too long, tighten the prompt to demand a concise proposal; if absent, switch to a stronger --proposer-model or fix the prompt.
  4. Re-run the generation once the proposer reliably writes a bounded proposal.md.

Example fix

// before: proposer writes an 800 KiB essay to proposal.md
// after: prompt instructs a <=4KB proposal: failure pattern, the single change, metric, risks
//        ensure path is /workspace/.wfbench-output/proposal.md
Defensive patterns

Strategy: try-catch

Try / catch

from workflow_bench.proposer_sandbox import SandboxError
try:
    record = run_proposer(prompt, args, overlay_dir=od, proposal_path=pp, evidence_bundle=eb, bwrap_bin=bb)
except SandboxError as exc:
    if 'did not produce one bounded regular proposal.md' in str(exc):
        log.error('proposer failed to write a valid proposal.md; check proposer-session.json')
        raise
    raise

Prevention

When it happens

Trigger: The proposer Claude session ran but either wrote no proposal.md, wrote it elsewhere, made it a symlink, or produced a file larger than 256 KiB. Also fires if the session failed (record['ok']) in a way that still left the worktree without a valid proposal.

Common situations: An under-powered/misconfigured proposer model that gives up, a proposer that writes the proposal to the wrong path (not /workspace/.wfbench-output/proposal.md), or an overly verbose proposal exceeding the 256 KiB cap.

Related errors


AI-assisted analysis of abhigyanpatwari/GitNexus@d540b00184 (2026-08-12). Data as JSON: /api/errors/31d33cb2b11ccdd6. Report an issue: GitHub.