{"record":{"id":"6fecc0ef9232f358","repo":"abhigyanpatwari/GitNexus","slug":"compound-engineering-plugin-manifest-directory-is","errorCode":null,"errorMessage":"Compound Engineering plugin manifest directory is unavailable: {manifest_root}: {exc}","messagePattern":"Compound Engineering plugin manifest directory is unavailable: (.+?): (.+?)","errorType":"exception","errorClass":"SandboxError","httpStatus":null,"severity":"error","filePath":"eval/workflow_bench/runtime_mounts.py","lineNumber":294,"sourceCode":"    for part in relative.parts:\n        lowered = part.lower()\n        if lowered in _FORBIDDEN_PATH_PARTS or lowered in _SECRET_EXACT_NAMES:\n            return True\n        if lowered.startswith(\".env.\") or lowered.startswith(\".npmrc.\"):\n            return True\n        if lowered.endswith(_SECRET_SUFFIXES) or any(marker in lowered for marker in _SECRET_NAME_MARKERS):\n            return True\n    return False\n\n\ndef _plugin_files(source: Path) -> Iterator[tuple[PurePosixPath, Path]]:\n    \"\"\"Yield only allowlisted plugin files in stable order.\"\"\"\n\n    manifest_root = source / \".claude-plugin\"\n    try:\n        manifest_root_metadata = manifest_root.lstat()\n    except OSError as exc:\n        raise SandboxError(\n            f\"Compound Engineering plugin manifest directory is unavailable: {manifest_root}: {exc}\"\n        ) from exc\n    if stat.S_ISLNK(manifest_root_metadata.st_mode) or not stat.S_ISDIR(manifest_root_metadata.st_mode):\n        raise SandboxError(f\"Compound Engineering plugin manifest directory must be real: {manifest_root}\")\n    required_manifest = _ALLOWED_PLUGIN_MANIFESTS[0]\n    manifest_path = source / Path(*required_manifest.parts)\n    if not manifest_path.exists():\n        raise SandboxError(f\"Compound Engineering plugin manifest is missing: {manifest_path}\")\n    for relative in _ALLOWED_PLUGIN_MANIFESTS:\n        candidate = source / Path(*relative.parts)\n        if candidate.exists():\n            yield relative, candidate\n\n    skills = source / \"skills\"\n    if not skills.exists():\n        raise SandboxError(f\"Compound Engineering plugin skills directory is missing: {skills}\")\n\n    def walk(directory: Path, relative_dir: PurePosixPath) -> Iterator[tuple[PurePosixPath, Path]]:","sourceCodeStart":276,"sourceCodeEnd":312,"githubUrl":"https://github.com/abhigyanpatwari/GitNexus/blob/d540b00184d71a896261ee02670da9a92d59d8f7/eval/workflow_bench/runtime_mounts.py#L276-L312","documentation":"_plugin_files() lstat's source/.claude-plugin/ to start enumerating the plugin manifest. Any OSError (ENOENT, EACCES, EIO) is wrapped as SandboxError with this message, refusing to proceed without an inspectable manifest directory.","triggerScenarios":"Calling _plugin_files() on a plugin source that has no .claude-plugin/ directory, where .claude-plugin is unreadable, or where the path is on a broken mount.","commonSituations":"--ce-plugin-dir pointed at the repo root or a wrong subdirectory; plugin tarball was extracted without hidden directories; permissions strip the harness user of access.","solutions":["Confirm the directory exists: `ls -la <plugin_dir>/.claude-plugin`.","If missing, re-assemble the plugin from its canonical source so .claude-plugin/ is present.","Grant read+execute on the path: `chmod -R +rX <plugin_dir>`."],"exampleFix":null,"handlingStrategy":"validation","validationCode":"from pathlib import Path\n\ndef manifest_dir_available(source: Path) -> bool:\n    try:\n        (source / \".claude-plugin\").lstat()\n        return True\n    except OSError:\n        return False","typeGuard":null,"tryCatchPattern":"from .proposer_sandbox import SandboxError\n\ntry:\n    list(_plugin_files(source))\nexcept SandboxError as exc:\n    if \"manifest directory is unavailable\" in str(exc):\n        # point --ce-plugin-dir at a directory that has .claude-plugin/\n        ...\n    raise","preventionTips":["Standardize plugin assembly so .claude-plugin/ is always present.","Pre-flight check the source tree before invoking the benchmark."],"tags":["ce-plugin","manifest","sandbox","filesystem"],"backgroundTag":null,"analyzedSha":"d540b00184d71a896261ee02670da9a92d59d8f7","analyzedAt":"2026-08-12T19:50:25.132Z","schemaVersion":2},"datasetVersion":"2026-08-12T23:17:12.415Z"}