abhigyanpatwari/GitNexus · error · SandboxError
transcript artifact exceeds the bounded run-output limit
Error message
transcript artifact exceeds the bounded run-output limit
What it means
After type checks, the size must satisfy 0 <= bytes <= runner.MAX_TRANSCRIPT_BYTES (8 MiB). A negative value or a value above the bound is rejected so a single oversized (or crafted) transcript cannot exhaust proposer context or memory during evidence read.
Source
Thrown at eval/workflow_bench/evolve.py:340
return root / Path(*relative.parts)
def _transcript_artifact_metadata(metadata: Any) -> tuple[str, str, int]:
"""Validate transcript metadata without touching any host path."""
if not isinstance(metadata, dict) or set(metadata) != {"path", "sha256", "bytes", "source"}:
raise SandboxError("transcript artifact metadata must contain only path, sha256, bytes, and source")
relative = metadata["path"]
expected_digest = metadata["sha256"]
expected_size = metadata["bytes"]
if metadata["source"] != runner_sessions.PARENT_EVENT_STREAM_SOURCE:
raise SandboxError("transcript artifact source is not the parent event stream")
if not isinstance(relative, str) or not re.fullmatch(r"[0-9a-f]{64}", str(expected_digest)):
raise SandboxError("transcript artifact metadata is malformed")
if not isinstance(expected_size, int) or isinstance(expected_size, bool):
raise SandboxError("transcript artifact byte count must be an integer")
if expected_size < 0 or expected_size > runner.MAX_TRANSCRIPT_BYTES:
raise SandboxError("transcript artifact exceeds the bounded run-output limit")
return relative, expected_digest, expected_size
def _normalized_transcript_artifact_path(relative_value: str) -> str:
"""Apply the transcript path contract without touching the filesystem."""
relative = PurePosixPath(relative_value)
if (
relative.is_absolute()
or len(relative.parts) != 2
or relative.parts[0] != "transcripts"
or any(part in {"", ".", ".."} for part in relative.parts)
):
raise SandboxError(f"unsafe results artifact path: {relative_value!r}")
return relative.as_posix()
def _preflight_transcript_artifacts(evidence: list[dict[str, Any]]) -> list[list[Any]]:View on GitHub (pinned to d540b00184)
Solutions
- Reduce transcript verbosity at capture time (drop redundant tool outputs) so the file stays under 8 MiB.
- If a genuinely large transcript is needed, raise runner.MAX_TRANSCRIPT_BYTES deliberately and audit the proposer context budget.
- Re-measure the size after the file is fully written and rewrite the row.
Example fix
# before: 12 MiB transcript admitted
row = {..., "bytes": 12 * 1024 * 1024}
# after: trim at capture time, then record the real post-trim size
size = path.stat().st_size
assert size <= runner.MAX_TRANSCRIPT_BYTES, size
row = {..., "bytes": size} Defensive patterns
Strategy: validation
Validate before calling
from eval.workflow_bench.runner_sessions import MAX_TRANSCRIPT_BYTES
def transcript_size_within_bound(metadata: dict) -> bool:
n = metadata.get("bytes")
return isinstance(n, int) and not isinstance(n, bool) and 0 <= n <= MAX_TRANSCRIPT_BYTES Prevention
- Cap transcript verbosity at capture so files stay under 8 MiB.
- Measure size after the file is fully written; a mid-write size can lie.
- If you must raise the bound, also re-audit the proposer context budget.
When it happens
Trigger: A transcript larger than 8 MiB (verbose agent session with full event echo); a negative size from a corrupt row; a size computed before the file finished writing.
Common situations: Very long sessions; debug-level event capture; a race where the size was read mid-write; integer underflow in a custom writer.
Related errors
- {label} exceeds the bounded evidence limit
- transcript artifact metadata must contain only path, sha256,
- transcript artifact source is not the parent event stream
- transcript artifact metadata is malformed
- transcript artifact byte count must be an integer
AI-assisted analysis of abhigyanpatwari/GitNexus@d540b00184 (2026-08-12).
Data as JSON: /api/errors/eb2d107bfe47ee42.
Report an issue: GitHub.