{"record":{"id":"43b2b5afd4e1164c","repo":"abhigyanpatwari/GitNexus","slug":"task-task-id-sandbox-copy-must-be-a-string-list","errorCode":null,"errorMessage":"task {task_id} sandbox_copy must be a string list","messagePattern":"task (.+?) sandbox_copy must be a string list","errorType":"validation","errorClass":"ValueError","httpStatus":null,"severity":"error","filePath":"eval/workflow_bench/runner_tasks.py","lineNumber":54,"sourceCode":"        task = dict(raw_task)\n        for field in required_strings:\n            if not isinstance(task.get(field), str) or not task[field].strip():\n                raise ValueError(f\"task {index} requires a nonblank string {field}\")\n        for field in optional_strings:\n            if field in task and not isinstance(task[field], str):\n                raise ValueError(f\"task {task['id']} field {field} must be a string\")\n        task_id = task[\"id\"]\n        if not re.fullmatch(r\"[A-Za-z0-9][A-Za-z0-9._-]{0,127}\", task_id):\n            raise ValueError(f\"task id must be a simple artifact-safe slug: {task_id!r}\")\n        if task_id in seen:\n            raise ValueError(f\"duplicate task id: {task_id}\")\n        seen.add(task_id)\n        expensive = task.get(\"expensive\", False)\n        if not isinstance(expensive, bool):\n            raise ValueError(f\"task {task_id} expensive metadata must be boolean\")\n        copies = task.get(\"sandbox_copy\", [])\n        if not isinstance(copies, list) or not all(isinstance(path, str) and path for path in copies):\n            raise ValueError(f\"task {task_id} sandbox_copy must be a string list\")\n        dependencies = task.get(\"sandbox_dependencies\", [])\n        if not isinstance(dependencies, list):\n            raise ValueError(f\"task {task_id} sandbox_dependencies must be a list\")\n        for dependency in dependencies:\n            if (\n                not isinstance(dependency, Mapping)\n                or set(dependency) != {\"source\", \"target\"}\n                or not all(isinstance(dependency[field], str) and dependency[field] for field in (\"source\", \"target\"))\n            ):\n                raise ValueError(\n                    f\"task {task_id} sandbox_dependencies entries require nonblank source and target strings\"\n                )\n        validate_oracle_declaration(task)\n        if expensive and not include_expensive:\n            skipped.append(task_id)\n        else:\n            selected.append(task)\n    if not selected:","sourceCodeStart":36,"sourceCodeEnd":72,"githubUrl":"https://github.com/abhigyanpatwari/GitNexus/blob/d540b00184d71a896261ee02670da9a92d59d8f7/eval/workflow_bench/runner_tasks.py#L36-L72","documentation":"Raised by select_tasks when `sandbox_copy` is missing, not a list, or any element is not a nonblank string (runner_tasks.py:53-54). sandbox_copy lists host paths to copy into the sandbox, so each must be a nonempty path string.","triggerScenarios":"`sandbox_copy: /a/path` (a scalar instead of a list), a list containing None/numbers/empty strings, or a YAML block that folds into a string.","commonSituations":"Writing a single path without list brackets; leaving a placeholder empty string; an entry that resolves to null.","solutions":["Make sandbox_copy a YAML list of nonempty path strings.","Remove entries that are blank or null.","If no copies are needed, omit the key (defaults to [])."],"exampleFix":"# before\n- id: t1\n  sandbox_copy: /etc/config\n# after\n- id: t1\n  sandbox_copy:\n    - /etc/config","handlingStrategy":"type-guard","validationCode":"for i, t in enumerate(doc.get(\"tasks\", [])):\n    c = t.get(\"sandbox_copy\", [])\n    if not isinstance(c, list) or not all(isinstance(p, str) and p for p in c):\n        raise SystemExit(f\"task {i} sandbox_copy must be a nonempty string list\")","typeGuard":"def sandbox_copy_is_valid(task: dict) -> bool:\n    c = task.get(\"sandbox_copy\", [])\n    return isinstance(c, list) and all(isinstance(p, str) and p for p in c)","tryCatchPattern":null,"preventionTips":["Always wrap sandbox_copy in list brackets, even for a single path.","Omit the key entirely when no copies are needed."],"tags":["workflow-bench","task-validation","sandbox","yaml"],"backgroundTag":null,"analyzedSha":"d540b00184d71a896261ee02670da9a92d59d8f7","analyzedAt":"2026-08-12T19:50:25.132Z","schemaVersion":2},"datasetVersion":"2026-08-12T23:17:12.415Z"}