abhigyanpatwari/GitNexus · error · SandboxError
Compound Engineering plugin version mismatch: expected {conf
Error message
Compound Engineering plugin version mismatch: expected {config.version}, got {plugin_manifest.get('version')!r} What it means
Version pinning guard. validate_ce_plugin_inputs already requires --ce-plugin-version to be an exact semver (no ranges/aliases); _build_ce_plugin_snapshot then verifies the manifest's 'version' field equals that exact string. A mismatch means the operator's declared version and the checked-out plugin disagree, which would make benchmark provenance ambiguous.
Source
Thrown at eval/workflow_bench/runtime_mounts.py:457
)
entries.append(
{
"path": relative_text,
"sha256": hashlib.sha256(payload).hexdigest(),
"size": len(payload),
"executable": executable,
}
)
manifest_path = root / ".claude-plugin" / "plugin.json"
try:
plugin_manifest = json.loads(manifest_path.read_text())
except (OSError, UnicodeError, json.JSONDecodeError) as exc:
raise SandboxError(f"Compound Engineering plugin manifest is invalid: {exc}") from exc
if not isinstance(plugin_manifest, dict) or plugin_manifest.get("name") != "compound-engineering":
raise SandboxError("CE comparator requires the compound-engineering plugin manifest")
if plugin_manifest.get("version") != config.version:
raise SandboxError(
"Compound Engineering plugin version mismatch: "
f"expected {config.version}, got {plugin_manifest.get('version')!r}"
)
for skill in ("ce-plan", "ce-work", "ce-code-review"):
if not (root / "skills" / skill / "SKILL.md").is_file():
raise SandboxError(f"Compound Engineering plugin is missing required skill: {skill}")
canonical_manifest = json.dumps(
{
"schema_version": CE_PLUGIN_MANIFEST_SCHEMA_VERSION,
"files": entries,
},
sort_keys=True,
separators=(",", ":"),
).encode()
snapshot = CePluginSnapshot(
root=root,
version=config.version,View on GitHub (pinned to d540b00184)
Solutions
- Read the manifest version and pass that exact value: 'V=$(python -c "import json;print(json.load(open('<d>/.claude-plugin/plugin.json'))['version'])"); wfbench ... --ce-plugin-dir <d> --ce-plugin-version "$V"'.
- Check out the release tag matching the version you intend: 'git -C <plugin_dir> checkout v<X.Y.Z>'.
- If you bumped the version locally, rebuild and ensure package.json/plugin.json both carry the new value, then pass it.
- Avoid reusing a previous run's --ce-plugin-version flag verbatim after updating the plugin.
Example fix
# before wfbench run --ce-plugin-dir ./ce-plugin --ce-plugin-version 1.2.0 # manifest says 1.3.0 # after git -C ./ce-plugin checkout v1.3.0 wfbench run --ce-plugin-dir ./ce-plugin --ce-plugin-version 1.3.0
Defensive patterns
Strategy: validation
Validate before calling
import json, re
from pathlib import Path
plugin = Path("ce-plugin")
declared = json.loads((plugin / ".claude-plugin" / "plugin.json").read_text())["version"]
flag_version = "1.3.0" # the value you will pass to --ce-plugin-version
assert re.fullmatch(r"\d+\.\d+\.\d+", flag_version), "use exact semver"
if declared != flag_version:
raise SystemExit(f"version drift: manifest={declared} flag={flag_version}") Type guard
import json, re
from pathlib import Path
def versions_match(plugin_dir: Path, flag_version: str) -> bool:
if re.fullmatch(r"\d+\.\d+\.\d+", flag_version) is None:
return False
try:
data = json.loads((plugin_dir / ".claude-plugin" / "plugin.json").read_text())
except (OSError, ValueError):
return False
return isinstance(data, dict) and data.get("version") == flag_version Try / catch
try:
snapshot = _build_ce_plugin_snapshot(config, destination_parent)
except SandboxError as exc:
if "version mismatch" in str(exc):
log.error("--ce-plugin-version disagrees with manifest; check out the matching tag")
raise Prevention
- Read the version from the manifest and pass that exact string.
- Check out the release tag matching the version before benchmarking.
- Never alias/range the version; the harness requires exact semver.
When it happens
Trigger: The operator passed --ce-plugin-version X.Y.Z but the checked-out plugin's manifest declares a different version (a tag mismatch, an untagged commit, or a local build whose version was bumped).
Common situations: Checking out a branch instead of the release tag; building locally after bumping the version in source but before tagging; pointing at a stale checkout from a previous release; copy-pasting a version flag from one run to the next without updating.
Related errors
- Compound Engineering plugin manifest is invalid: {exc}
- CE comparator requires the compound-engineering plugin manif
- Compound Engineering plugin is missing required skill: {skil
- Compound Engineering plugin file must be regular and non-sym
- Compound Engineering plugin file exceeds the per-file limit:
AI-assisted analysis of abhigyanpatwari/GitNexus@d540b00184 (2026-08-12).
Data as JSON: /api/errors/1ac9848b6887f4ba.
Report an issue: GitHub.