{"record":{"id":"ffad8a758cbd54bf","repo":"abhigyanpatwari/GitNexus","slug":"sanitized-graph-snapshot-is-unavailable","errorCode":null,"errorMessage":"sanitized graph snapshot is unavailable","messagePattern":"sanitized graph snapshot is unavailable","errorType":"exception","errorClass":"RuntimeError","httpStatus":null,"severity":"error","filePath":"eval/workflow_bench/runner.py","lineNumber":1070,"sourceCode":"                graph_snapshot_error = exc\n                graph_snapshot_errors[graph_key] = exc\n            per_arm: dict[str, list[dict[str, Any]]] = {a: [] for a in args.arms}\n            for run_idx in range(args.runs):\n                if outage_tripped:\n                    break\n                for arm in args.arms:\n                    if outage_tripped:\n                        break\n                    worktree: Path | None = None\n                    record: dict[str, Any] | None = None\n                    cleanup_error: OSError | None = None\n                    try:\n                        if asset_snapshot_error is not None:\n                            raise RuntimeError(f\"task asset snapshot preparation failed: {asset_snapshot_error}\")\n                        if graph_snapshot_error is not None:\n                            raise RuntimeError(f\"sanitized graph snapshot preparation failed: {graph_snapshot_error}\")\n                        if graph_snapshot is None:\n                            raise RuntimeError(\"sanitized graph snapshot is unavailable\")\n                        if asset_snapshot is None:\n                            try:\n                                asset_snapshot = task_asset_cache.prepare(\n                                    task,\n                                    repo=repo,\n                                    resolved_sha=task_sha,\n                                    expected_dependency_binding=task_binding,\n                                )\n                            except (OSError, SandboxError, ValueError) as exc:\n                                asset_snapshot_error = exc\n                                raise\n                        worktree = make_worktree(repo, task_sha, Path(trees))\n                        sanitized_head = sanitize_clone_for_hidden_oracles(worktree)\n                        graph_snapshot.materialize(worktree, sanitized_head=sanitized_head)\n                        dependency_mounts = stage_task_assets(\n                            task,\n                            repo=repo,\n                            clone=worktree,","sourceCodeStart":1052,"sourceCodeEnd":1088,"githubUrl":"https://github.com/abhigyanpatwari/GitNexus/blob/d540b00184d71a896261ee02670da9a92d59d8f7/eval/workflow_bench/runner.py#L1052-L1088","documentation":"Raised inside the per-arm run loop when graph_snapshot is None and no preparation error was recorded — i.e. the sanitized graph snapshot was never produced (or was reset) and is unavailable for this arm. The sandboxed session needs the graph snapshot to run, so a None snapshot with no recorded cause is treated as a hard failure rather than running an arm with no graph state.","triggerScenarios":"The loop reaches the run block with graph_snapshot is None and graph_snapshot_error is None — preparation did not run, was skipped, or the snapshot was cleared without an error being captured.","commonSituations":"A code path that short-circuited graph preparation without setting the error variable; a config flag combination that disables graph preparation but still enters the arm loop; an earlier cleanup that reset graph_snapshot to None; a regression that drops the prepare() call.","solutions":["Confirm graph snapshot preparation is actually invoked for the task before the arm loop (the prepare() call must run and either set graph_snapshot or graph_snapshot_error).","Check args/config that gate graph preparation (e.g. a --no-graph or skip flag) and remove it if the arm needs the graph.","If preparation ran but produced None, trace why prepare returned None and fix the producer.","Re-run with graph preparation enabled so graph_snapshot is populated."],"exampleFix":"// before — graph prep skipped via flag, snapshot stays None\nif args.skip_graph:\n    graph_snapshot = None   # then arm loop raises 'unavailable'\n// after — let preparation run so a snapshot is produced\ngraph_snapshot = graph_cache.prepare(task, repo=repo, resolved_sha=task_sha)","handlingStrategy":"validation","validationCode":"if graph_snapshot is None and graph_snapshot_error is None:\n    raise RuntimeError('sanitized graph snapshot is unavailable')\n# ensure graph_cache.prepare(...) is actually invoked upstream so graph_snapshot is set","typeGuard":null,"tryCatchPattern":null,"preventionTips":["Make sure graph snapshot preparation runs before the arm loop for every task.","Do not combine a skip-graph flag with arms that require the graph.","If prepare() can legitimately return None, capture it as an error instead."],"tags":["runner","graph-snapshot","snapshot","error-propagation","gitnexus"],"backgroundTag":null,"analyzedSha":"d540b00184d71a896261ee02670da9a92d59d8f7","analyzedAt":"2026-08-12T19:50:25.132Z","schemaVersion":2},"datasetVersion":"2026-08-12T23:17:12.415Z"}