abhigyanpatwari/GitNexus · error · SandboxError
transcript_artifacts exceeds the per-row session limit of {M
Error message
transcript_artifacts exceeds the per-row session limit of {MAX_TRANSCRIPT_ARTIFACTS_PER_ROW} What it means
Raised by `_preflight_transcript_artifacts` when a single evidence row carries more than `MAX_TRANSCRIPT_ARTIFACTS_PER_ROW` (=2) transcript artifacts. Each row corresponds to one benchmark run, which the runner caps at 2 captured sessions, so >2 is an invariant violation.
Source
Thrown at eval/workflow_bench/evolve.py:369
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]]:
"""Bound every transcript reference before any evidence file is read."""
artifacts_by_row: list[list[Any]] = []
seen_paths: set[str] = set()
total = 0
for artifacts_row in evidence:
artifacts = artifacts_row.get("transcript_artifacts", [])
if not isinstance(artifacts, list):
raise SandboxError("transcript_artifacts must be a list")
if len(artifacts) > MAX_TRANSCRIPT_ARTIFACTS_PER_ROW:
raise SandboxError(
f"transcript_artifacts exceeds the per-row session limit of {MAX_TRANSCRIPT_ARTIFACTS_PER_ROW}"
)
total += len(artifacts)
if total > MAX_TRANSCRIPT_ARTIFACTS:
raise SandboxError(f"transcript_artifacts exceeds the global evidence limit of {MAX_TRANSCRIPT_ARTIFACTS}")
for artifact in artifacts:
relative, _, _ = _transcript_artifact_metadata(artifact)
normalized = _normalized_transcript_artifact_path(relative)
if normalized in seen_paths:
raise SandboxError(f"duplicate transcript artifact path: {normalized}")
seen_paths.add(normalized)
artifacts_by_row.append(artifacts)
return artifacts_by_row
def _bound_transcript_artifact(root: Path, metadata: Any) -> str:
relative, expected_digest, expected_size = _transcript_artifact_metadata(metadata)
View on GitHub (pinned to d540b00184)
Solutions
- Inspect results.jsonl and locate the row with >2 transcript_artifacts entries.
- Trim the list to the 2 entries the runner would actually produce, or re-run the benchmark with the stock runner.
- If you genuinely need more, raise MAX_TRANSCRIPT_ARTIFACTS_PER_ROW in evolve.py and MAX_TRANSCRIPT_ARTIFACTS accordingly and update the tests that pin the cap.
Defensive patterns
Strategy: validation
Validate before calling
MAX_PER_ROW = 2
violators = [(r.get('task'), len(r.get('transcript_artifacts', []))) for r in evidence if len(r.get('transcript_artifacts', [])) > MAX_PER_ROW]
if violators:
raise ValueError(f'rows over per-row transcript limit: {violators}') Prevention
- Treat MAX_TRANSCRIPT_ARTIFACTS_PER_ROW as a runner contract: one run yields at most 2 sessions.
- Do not merge multiple runs into a single evidence row.
When it happens
Trigger: `proposer_evidence_entries` is called with an `evidence` list where some row's `transcript_artifacts` list has length 3 or more.
Common situations: A results.jsonl produced by a modified runner that captures extra sessions, or a row assembled by stitching several runs together.
Related errors
- transcript_artifacts exceeds the global evidence limit of {M
- transcript_artifacts must be a list
- duplicate transcript artifact path: {normalized}
- transcript artifact is unavailable: {path}: {exc}
- transcript artifact must be a regular non-symlink file: {pat
AI-assisted analysis of abhigyanpatwari/GitNexus@d540b00184 (2026-08-12).
Data as JSON: /api/errors/109d982d5bf45f59.
Report an issue: GitHub.