abhigyanpatwari/GitNexus · error · ValueError
task {task_id} sandbox_dependencies must be a list
Error message
task {task_id} sandbox_dependencies must be a list What it means
Raised by select_tasks when `sandbox_dependencies` is present but is not a list (runner_tasks.py:56-57). sandbox_dependencies describes {source,target} copy mappings between repos; non-list shapes are rejected before per-entry validation runs.
Source
Thrown at eval/workflow_bench/runner_tasks.py:57
raise ValueError(f"task {index} requires a nonblank string {field}")
for field in optional_strings:
if field in task and not isinstance(task[field], str):
raise ValueError(f"task {task['id']} field {field} must be a string")
task_id = task["id"]
if not re.fullmatch(r"[A-Za-z0-9][A-Za-z0-9._-]{0,127}", task_id):
raise ValueError(f"task id must be a simple artifact-safe slug: {task_id!r}")
if task_id in seen:
raise ValueError(f"duplicate task id: {task_id}")
seen.add(task_id)
expensive = task.get("expensive", False)
if not isinstance(expensive, bool):
raise ValueError(f"task {task_id} expensive metadata must be boolean")
copies = task.get("sandbox_copy", [])
if not isinstance(copies, list) or not all(isinstance(path, str) and path for path in copies):
raise ValueError(f"task {task_id} sandbox_copy must be a string list")
dependencies = task.get("sandbox_dependencies", [])
if not isinstance(dependencies, list):
raise ValueError(f"task {task_id} sandbox_dependencies must be a list")
for dependency in dependencies:
if (
not isinstance(dependency, Mapping)
or set(dependency) != {"source", "target"}
or not all(isinstance(dependency[field], str) and dependency[field] for field in ("source", "target"))
):
raise ValueError(
f"task {task_id} sandbox_dependencies entries require nonblank source and target strings"
)
validate_oracle_declaration(task)
if expensive and not include_expensive:
skipped.append(task_id)
else:
selected.append(task)
if not selected:
raise ValueError("no tasks selected after expensive-task filtering")
return selected, skipped
View on GitHub (pinned to d540b00184)
Solutions
- Wrap sandbox_dependencies in a YAML list.
- If no cross-repo dependencies exist, remove the key (defaults to []).
- Confirm each entry is a mapping with exactly source and target.
Example fix
# before
- id: t1
sandbox_dependencies:
source: a
target: b
# after
- id: t1
sandbox_dependencies:
- source: a
target: b Defensive patterns
Strategy: type-guard
Validate before calling
for i, t in enumerate(doc.get("tasks", [])):
d = t.get("sandbox_dependencies", [])
if not isinstance(d, list):
raise SystemExit(f"task {i} sandbox_dependencies must be a list") Type guard
def sandbox_dependencies_is_list(task: dict) -> bool:
d = task.get("sandbox_dependencies", [])
return isinstance(d, list) Prevention
- Use a YAML list even for a single dependency mapping.
- Leave the key out when there are no dependencies.
When it happens
Trigger: `sandbox_dependencies:` left null, set to a single mapping, or provided as a string.
Common situations: Forgetting list brackets around a single dependency; YAML null from a bare key; passing a dict instead of a list of dicts.
Related errors
- task {task_id} sandbox_copy must be a string list
- task {index} requires a nonblank string {field}
- task {task['id']} field {field} must be a string
- task {task_id} expensive metadata must be boolean
- task {task_id} sandbox_dependencies entries require nonblank
AI-assisted analysis of abhigyanpatwari/GitNexus@d540b00184 (2026-08-12).
Data as JSON: /api/errors/cd4fc6c9c97bfb48.
Report an issue: GitHub.