{"record":{"id":"cd11c24fce536992","repo":"abhigyanpatwari/GitNexus","slug":"compound-engineering-plugin-path-exceeds-the-byte","errorCode":null,"errorMessage":"Compound Engineering plugin path exceeds the byte limit: {relative_text}","messagePattern":"Compound Engineering plugin path exceeds the byte limit: (.+?)","errorType":"exception","errorClass":"SandboxError","httpStatus":null,"severity":"error","filePath":"eval/workflow_bench/runtime_mounts.py","lineNumber":428,"sourceCode":"        return\n    for directory, _, files in os.walk(root):\n        for name in files:\n            (Path(directory) / name).chmod(0o600)\n        Path(directory).chmod(0o700)\n    shutil.rmtree(root)\n\n\ndef _build_ce_plugin_snapshot(config: CePluginConfig, destination_parent: Path) -> CePluginSnapshot:\n    parent = _validated_runtime_root(destination_parent, label=\"CE plugin snapshot parent\")\n    root = Path(tempfile.mkdtemp(prefix=\"wfbench-ce-plugin-\", dir=parent))\n    root.chmod(0o700)\n    entries: list[dict[str, Any]] = []\n    total_bytes = 0\n    try:\n        for relative, source in _plugin_files(config.source):\n            relative_text = relative.as_posix()\n            if len(relative_text.encode()) > MAX_CE_PLUGIN_PATH_BYTES:\n                raise SandboxError(f\"Compound Engineering plugin path exceeds the byte limit: {relative_text}\")\n            if len(entries) >= MAX_CE_PLUGIN_FILES:\n                raise SandboxError(\"Compound Engineering plugin exceeds the file-count limit\")\n            payload, executable = _bounded_plugin_bytes(source)\n            total_bytes += len(payload)\n            if total_bytes > MAX_CE_PLUGIN_TOTAL_BYTES:\n                raise SandboxError(\"Compound Engineering plugin exceeds the total byte limit\")\n            _write_snapshot_file(\n                root / Path(*relative.parts),\n                payload,\n                executable=executable,\n            )\n            entries.append(\n                {\n                    \"path\": relative_text,\n                    \"sha256\": hashlib.sha256(payload).hexdigest(),\n                    \"size\": len(payload),\n                    \"executable\": executable,\n                }","sourceCodeStart":410,"sourceCodeEnd":446,"githubUrl":"https://github.com/abhigyanpatwari/GitNexus/blob/d540b00184d71a896261ee02670da9a92d59d8f7/eval/workflow_bench/runtime_mounts.py#L410-L446","documentation":"Path-length guard in _build_ce_plugin_snapshot. A plugin file's POSIX-relative path, encoded as UTF-8, must be at most MAX_CE_PLUGIN_PATH_BYTES (1024 bytes). Deeply nested trees or paths heavy with multibyte characters are rejected before they are even read, to keep manifest entries and the eventual mount bounded and portable.","triggerScenarios":"Any entry under skills/scripts/assets whose slash-relative path exceeds 1024 UTF-8 bytes. Typical producers: deeply nested node_modules-like dedup, generated/suffixed artifact names, CJK/emoji-heavy descriptive skill names.","commonSituations":"A generator emitted long hashed filenames; a vendored dependency kept its deep node_modules layout; non-ASCII documentation filenames with descriptive titles.","solutions":["Find long paths: 'find <plugin_dir> -type f | awk '{print length, $0}' | sort -rn | head' and relocate/shorten the worst offenders.","Flatten deeply nested vendored trees; keep only the slices the skill imports.","Rename unicode-heavy descriptive files to short ASCII names.","Reduce directory nesting by collapsing unnecessary intermediate folders."],"exampleFix":"# before\nskills/ce-plan/assets/references/very/deep/nested/path/to/some-long-descriptive-filename-中文.md\n# after\nskills/ce-plan/assets/refs/some-filename.md","handlingStrategy":"validation","validationCode":"from pathlib import Path\n\nMAX_BYTES = 1024\nplugin = Path(\"ce-plugin\")\nallowed = (\"skills\", \"scripts\", \"assets\", \".claude-plugin\")\nover = []\nfor base in allowed:\n    d = plugin / base\n    if not d.exists():\n        continue\n    for p in d.rglob(\"*\"):\n        if p.is_file():\n            rel = p.relative_to(plugin).as_posix()\n            if len(rel.encode()) > MAX_BYTES:\n                over.append(rel)\nif over:\n    raise SystemExit(f\"plugin paths over 1024 bytes: {over}\")","typeGuard":"MAX_CE_PLUGIN_PATH_BYTES = 1024\n\ndef path_within_bound(relative_posix: str) -> bool:\n    return len(relative_posix.encode()) <= MAX_CE_PLUGIN_PATH_BYTES","tryCatchPattern":"try:\n    snapshot = _build_ce_plugin_snapshot(config, destination_parent)\nexcept SandboxError as exc:\n    if \"path exceeds the byte limit\" in str(exc):\n        log.error(\"plugin path > 1024 UTF-8 bytes; flatten/rename\")\n    raise","preventionTips":["Keep plugin paths short and ASCII where possible.","Avoid deep node_modules-style nesting inside the plugin.","CI gate: flag any file whose slash-relative path exceeds 1024 UTF-8 bytes."],"tags":["sandbox","ce-plugin","path-limit","validation","workflow-bench"],"backgroundTag":null,"analyzedSha":"d540b00184d71a896261ee02670da9a92d59d8f7","analyzedAt":"2026-08-12T19:50:25.132Z","schemaVersion":2},"datasetVersion":"2026-08-12T23:17:12.415Z"}