abhigyanpatwari/GitNexus · error · SandboxError
ce_* arm has no staged Compound Engineering plugin
Error message
ce_* arm has no staged Compound Engineering plugin
What it means
Raised by ce_plugin_mounts_for_arm (runtime_mounts.py:122-126) when a Compound-Engineering arm is selected (one of ce_workflow, ce_workflow_direct, ce_review) but no CePluginSnapshot was staged — i.e. snapshot is None. SandboxError subclasses RuntimeError and signals that containment could not be established without weakening the contract.
Source
Thrown at eval/workflow_bench/runtime_mounts.py:125
"name": "compound-engineering",
"version": self.version,
"manifest_schema_version": CE_PLUGIN_MANIFEST_SCHEMA_VERSION,
"manifest_digest": self.manifest_digest,
"file_count": self.file_count,
"total_bytes": self.total_bytes,
}
def ce_plugin_mounts_for_arm(
arm: str,
snapshot: CePluginSnapshot | None,
) -> tuple[ReadOnlyMount, ...]:
"""Expose the staged comparator only to CE arms."""
if arm not in CE_ARMS:
return ()
if snapshot is None:
raise SandboxError("ce_* arm has no staged Compound Engineering plugin")
return (snapshot.mount,)
def ce_plugin_dir_for_arm(arm: str, snapshot: CePluginSnapshot | None) -> str | None:
"""Return Claude's fixed in-sandbox plugin path only for CE arms."""
ce_plugin_mounts_for_arm(arm, snapshot)
return SANDBOX_CE_PLUGIN if arm in CE_ARMS else None
def _validated_runtime_root(path: Path, *, label: str) -> Path:
"""Return one real directory without accepting any symlink hop."""
root = path.expanduser().absolute()
try:
mode = root.lstat().st_mode
resolved = root.resolve(strict=True)
except OSError as exc:View on GitHub (pinned to d540b00184)
Solutions
- Supply both --ce-plugin-dir and --ce-plugin-version when any ce_* arm is selected.
- If you did not intend CE comparison, remove the ce_* arm from --arms.
- Confirm the plugin dir passes validate_ce_plugin_inputs (real directory, valid manifest).
Example fix
# before: wfbench --arms ce_workflow ... # after: wfbench --arms ce_workflow --ce-plugin-dir /path/to/plugin --ce-plugin-version 1.2.3 ...
Defensive patterns
Strategy: validation
Validate before calling
from workflow_bench.runtime_mounts import CE_ARMS
if any(a in CE_ARMS for a in args.arms):
if not args.ce_plugin_dir or not args.ce_plugin_version:
raise SystemExit("ce_* arms require --ce-plugin-dir and --ce-plugin-version") Type guard
from workflow_bench.runtime_mounts import CE_ARMS
def ce_arms_present(arms: list[str]) -> bool:
return any(a in CE_ARMS for a in arms) Prevention
- Always pair ce_* arms with --ce-plugin-dir and --ce-plugin-version.
- Drop ce_* arms when you are not running Compound-Engineering comparison.
When it happens
Trigger: The runner is invoked with a ce_* arm but --ce-plugin-dir and/or --ce-plugin-version were not supplied, so validate_ce_plugin_inputs returned None and staged_ce_plugin_snapshot yielded None; then ce_plugin_mounts_for_arm is called for that arm.
Common situations: Adding a CE arm to --arms without the plugin args; the CE plugin dir failed validation upstream; running CE comparison on a machine without the plugin checkout.
Related errors
- Compound Engineering plugin file must be regular and non-sym
- Compound Engineering plugin file exceeds the per-file limit:
- Compound Engineering plugin file changed during validation:
- Compound Engineering plugin file changed while being copied:
- Compound Engineering plugin path exceeds the byte limit: {re
AI-assisted analysis of abhigyanpatwari/GitNexus@d540b00184 (2026-08-12).
Data as JSON: /api/errors/5971a8121b0ccf76.
Report an issue: GitHub.