abhigyanpatwari/GitNexus · error · ValueError

ce_* arms require both --ce-plugin-dir and --ce-plugin-versi

Error message

ce_* arms require both --ce-plugin-dir and --ce-plugin-version

What it means

validate_ce_plugin_inputs() raises ValueError when a ce_* arm is selected but only one (or neither) of --ce-plugin-dir / --ce-plugin-version is supplied. CE arms require both because the snapshot is built from a directory pinned to an exact version.

Source

Thrown at eval/workflow_bench/runtime_mounts.py:268

        raise SandboxError("pinned GitNexus shared runtime has an unexpected package identity")
    return mounts


def validate_ce_plugin_inputs(
    arms: Sequence[str],
    plugin_dir: Path | None,
    plugin_version: str | None,
) -> CePluginConfig | None:
    """Require an explicit directory and exact version iff a CE arm is selected."""

    has_ce_arm = any(arm in CE_ARMS for arm in arms)
    supplied = plugin_dir is not None or plugin_version is not None
    if not has_ce_arm:
        if supplied:
            raise ValueError("--ce-plugin-dir and --ce-plugin-version require at least one ce_* arm")
        return None
    if plugin_dir is None or plugin_version is None:
        raise ValueError("ce_* arms require both --ce-plugin-dir and --ce-plugin-version")
    if _EXACT_VERSION.fullmatch(plugin_version) is None:
        raise ValueError("--ce-plugin-version must be an exact semantic version (aliases and ranges are forbidden)")
    source = _validated_runtime_root(plugin_dir, label="Compound Engineering plugin source")
    return CePluginConfig(source=source, version=plugin_version)


def _is_forbidden_plugin_path(relative: PurePosixPath) -> bool:
    for part in relative.parts:
        lowered = part.lower()
        if lowered in _FORBIDDEN_PATH_PARTS or lowered in _SECRET_EXACT_NAMES:
            return True
        if lowered.startswith(".env.") or lowered.startswith(".npmrc."):
            return True
        if lowered.endswith(_SECRET_SUFFIXES) or any(marker in lowered for marker in _SECRET_NAME_MARKERS):
            return True
    return False

View on GitHub (pinned to d540b00184)

Solutions

  1. Supply both flags together: `--ce-plugin-dir <dir> --ce-plugin-version <exact-semver>`.
  2. If version is unknown, look it up in the plugin's .claude-plugin/plugin.json first.

Example fix

# before
--arms ce_review --ce-plugin-dir ./plugin
# after
--arms ce_review --ce-plugin-dir ./plugin --ce-plugin-version 1.2.3
Defensive patterns

Strategy: validation

Validate before calling

from eval.workflow_bench.runtime_mounts import CE_ARMS

def ce_arm_inputs_complete(arms, plugin_dir, plugin_version) -> bool:
    has_ce_arm = any(a in CE_ARMS for a in arms)
    if not has_ce_arm:
        return True
    return plugin_dir is not None and plugin_version is not None

Try / catch

try:
    cfg = validate_ce_plugin_inputs(arms, plugin_dir, plugin_version)
except ValueError as exc:
    if "require both" in str(exc):
        # fill in the missing flag
        ...
    raise

Prevention

When it happens

Trigger: Invoking with `--arms ce_review --ce-plugin-dir ./plugin` (version missing), or `--arms ce_workflow --ce-plugin-version 1.2.3` (dir missing).

Common situations: User supplies the directory but forgets the version flag (or vice versa); partial config file templating.

Related errors


AI-assisted analysis of abhigyanpatwari/GitNexus@d540b00184 (2026-08-12). Data as JSON: /api/errors/10f32d87487e56b9. Report an issue: GitHub.