{"record":{"id":"77b55e4fad8bff1e","repo":"abhigyanpatwari/GitNexus","slug":"transcript-artifact-is-unavailable-path-exc","errorCode":null,"errorMessage":"transcript artifact is unavailable: {path}: {exc}","messagePattern":"transcript artifact is unavailable: (.+?): (.+?)","errorType":"exception","errorClass":"SandboxError","httpStatus":null,"severity":"error","filePath":"eval/workflow_bench/evolve.py","lineNumber":392,"sourceCode":"            raise SandboxError(f\"transcript_artifacts exceeds the global evidence limit of {MAX_TRANSCRIPT_ARTIFACTS}\")\n        for artifact in artifacts:\n            relative, _, _ = _transcript_artifact_metadata(artifact)\n            normalized = _normalized_transcript_artifact_path(relative)\n            if normalized in seen_paths:\n                raise SandboxError(f\"duplicate transcript artifact path: {normalized}\")\n            seen_paths.add(normalized)\n        artifacts_by_row.append(artifacts)\n    return artifacts_by_row\n\n\ndef _bound_transcript_artifact(root: Path, metadata: Any) -> str:\n    relative, expected_digest, expected_size = _transcript_artifact_metadata(metadata)\n\n    path = _results_artifact_path(root, relative, transcript=True)\n    try:\n        before = path.lstat()\n    except OSError as exc:\n        raise SandboxError(f\"transcript artifact is unavailable: {path}: {exc}\") from exc\n    if stat.S_ISLNK(before.st_mode) or not stat.S_ISREG(before.st_mode):\n        raise SandboxError(f\"transcript artifact must be a regular non-symlink file: {path}\")\n    if stat.S_IMODE(before.st_mode) & 0o077:\n        raise SandboxError(f\"transcript artifact must be owner-only: {path}\")\n    if before.st_size != expected_size:\n        raise SandboxError(f\"transcript artifact size does not match its results row: {path}\")\n\n    descriptor = os.open(path, os.O_RDONLY | getattr(os, \"O_NOFOLLOW\", 0))\n    try:\n        opened = os.fstat(descriptor)\n        if not stat.S_ISREG(opened.st_mode) or opened.st_dev != before.st_dev or opened.st_ino != before.st_ino:\n            raise SandboxError(f\"transcript artifact changed while opening: {path}\")\n        digest = hashlib.sha256()\n        content = bytearray()\n        while chunk := os.read(descriptor, 64 * 1024):\n            digest.update(chunk)\n            content.extend(chunk)\n            if len(content) > MAX_EVIDENCE_FILE_BYTES:","sourceCodeStart":374,"sourceCodeEnd":410,"githubUrl":"https://github.com/abhigyanpatwari/GitNexus/blob/d540b00184d71a896261ee02670da9a92d59d8f7/eval/workflow_bench/evolve.py#L374-L410","documentation":"Raised by `_bound_transcript_artifact` when `path.lstat()` raises OSError for the resolved transcript file. The artifact is referenced in evidence but is missing or unreadable on disk.","triggerScenarios":"`proposer_evidence_entries` is called with a `results_dir` whose `transcripts/<name>` file referenced by an artifact's `path` does not exist, is on an unreadable path, or whose parent directory was removed.","commonSituations":"Pointing `--seed-results` at a results dir whose transcripts/ subdirectory was pruned, partially copied, or lives on a volume that is no longer mounted.","solutions":["Verify the transcript file exists under `<seed-results>/transcripts/<name>` and is readable.","Re-extract or re-copy the full results dir (including transcripts/) from its source.","Drop the evidence row whose transcript is unavailable, or regenerate the results."],"exampleFix":null,"handlingStrategy":"try-catch","validationCode":"from pathlib import Path\nmissing = []\nfor r in evidence:\n    for a in r.get('transcript_artifacts', []):\n        if not (results_dir / a['path']).exists():\n            missing.append(a['path'])\nif missing:\n    raise FileNotFoundError(f'transcripts missing from results dir: {missing}')","typeGuard":null,"tryCatchPattern":"from workflow_bench.proposer_sandbox import SandboxError\ntry:\n    proposer_evidence_entries(results_dir=rd, evidence=ev, learnings=lr, gate_summary=gs)\nexcept SandboxError as exc:\n    if 'is unavailable' in str(exc):\n        log.warning('transcript missing; regenerating seed results')\n        raise","preventionTips":["Keep the results dir self-contained: results.jsonl + transcripts/ + *.patch travel together.","Before running evolve, list transcripts/ and cross-check against the paths in results.jsonl."],"tags":["python","workflow-bench","evidence","filesystem","sandbox"],"backgroundTag":null,"analyzedSha":"d540b00184d71a896261ee02670da9a92d59d8f7","analyzedAt":"2026-08-12T19:50:25.132Z","schemaVersion":2},"datasetVersion":"2026-08-12T23:17:12.415Z"}