{"record":{"id":"3877642e0914ff03","repo":"abhigyanpatwari/GitNexus","slug":"task-id-must-be-a-simple-artifact-safe-slug-task","errorCode":null,"errorMessage":"task id must be a simple artifact-safe slug: {task_id!r}","messagePattern":"task id must be a simple artifact-safe slug: (.+?)","errorType":"validation","errorClass":"ValueError","httpStatus":null,"severity":"error","filePath":"eval/workflow_bench/runner_tasks.py","lineNumber":45,"sourceCode":"\n    selected: list[dict[str, Any]] = []\n    skipped: list[str] = []\n    seen: set[str] = set()\n    required_strings = (\"id\", \"class\", \"repo\", \"prompt\", \"verify\")\n    optional_strings = (\"ref\", \"setup\")\n    for index, raw_task in enumerate(tasks):\n        if not isinstance(raw_task, Mapping):\n            raise ValueError(f\"task {index} must be a mapping\")\n        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            ):","sourceCodeStart":27,"sourceCodeEnd":63,"githubUrl":"https://github.com/abhigyanpatwari/GitNexus/blob/d540b00184d71a896261ee02670da9a92d59d8f7/eval/workflow_bench/runner_tasks.py#L27-L63","documentation":"Raised by select_tasks when the task id fails the artifact-safe slug regex `[A-Za-z0-9][A-Za-z0-9._-]{0,127}` (runner_tasks.py:44). The id is used downstream as a filename and JSON key, so it must start alnum, be 1–128 chars, and contain only alnum/./_-. No slashes, spaces, colons, or leading dots/dashes.","triggerScenarios":"An id containing a path separator (`tasks/foo`), a leading dash (`-task`), a space, a colon, unicode, or exceeding 128 chars. Also fires for ids that start with a dot or underscore (`_foo`, `.bar`).","commonSituations":"Naming a task after a repo path; using a human-readable title with spaces as the id; a generated id that prefixes with a dash.","solutions":["Rewrite the id to start with [A-Za-z0-9] and use only [A-Za-z0-9._-].","Replace path separators and spaces with dashes.","Shorten ids longer than 128 characters."],"exampleFix":"# before\n- id: \"tasks/refactor: cli\"\n# after\n- id: \"refactor-cli\"","handlingStrategy":"validation","validationCode":"import re\nSLUG = re.compile(r\"[A-Za-z0-9][A-Za-z0-9._-]{0,127}\")\nfor t in doc.get(\"tasks\", []):\n    if not SLUG.fullmatch(t.get(\"id\", \"\")):\n        raise SystemExit(f\"bad task id slug: {t.get('id')!r}\")","typeGuard":"def is_artifact_slug(value: str) -> bool:\n    import re\n    return bool(re.fullmatch(r\"[A-Za-z0-9][A-Za-z0-9._-]{0,127}\", value))","tryCatchPattern":null,"preventionTips":["Name tasks with kebab-case slugs only.","Never include slashes, spaces, colons, or leading dash/dot in ids.","Cap id length at 128 characters."],"tags":["workflow-bench","task-validation","slug","naming"],"backgroundTag":null,"analyzedSha":"d540b00184d71a896261ee02670da9a92d59d8f7","analyzedAt":"2026-08-12T19:50:25.132Z","schemaVersion":2},"datasetVersion":"2026-08-12T23:17:12.415Z"}