{"record":{"id":"697a61838f024f8a","repo":"abhigyanpatwari/GitNexus","slug":"ce-comparator-requires-the-compound-engineering-pl","errorCode":null,"errorMessage":"CE comparator requires the compound-engineering plugin manifest","messagePattern":"CE comparator requires the compound-engineering plugin manifest","errorType":"exception","errorClass":"SandboxError","httpStatus":null,"severity":"error","filePath":"eval/workflow_bench/runtime_mounts.py","lineNumber":455,"sourceCode":"                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                }\n            )\n\n        manifest_path = root / \".claude-plugin\" / \"plugin.json\"\n        try:\n            plugin_manifest = json.loads(manifest_path.read_text())\n        except (OSError, UnicodeError, json.JSONDecodeError) as exc:\n            raise SandboxError(f\"Compound Engineering plugin manifest is invalid: {exc}\") from exc\n        if not isinstance(plugin_manifest, dict) or plugin_manifest.get(\"name\") != \"compound-engineering\":\n            raise SandboxError(\"CE comparator requires the compound-engineering plugin manifest\")\n        if plugin_manifest.get(\"version\") != config.version:\n            raise SandboxError(\n                \"Compound Engineering plugin version mismatch: \"\n                f\"expected {config.version}, got {plugin_manifest.get('version')!r}\"\n            )\n        for skill in (\"ce-plan\", \"ce-work\", \"ce-code-review\"):\n            if not (root / \"skills\" / skill / \"SKILL.md\").is_file():\n                raise SandboxError(f\"Compound Engineering plugin is missing required skill: {skill}\")\n\n        canonical_manifest = json.dumps(\n            {\n                \"schema_version\": CE_PLUGIN_MANIFEST_SCHEMA_VERSION,\n                \"files\": entries,\n            },\n            sort_keys=True,\n            separators=(\",\", \":\"),\n        ).encode()\n        snapshot = CePluginSnapshot(","sourceCodeStart":437,"sourceCodeEnd":473,"githubUrl":"https://github.com/abhigyanpatwari/GitNexus/blob/d540b00184d71a896261ee02670da9a92d59d8f7/eval/workflow_bench/runtime_mounts.py#L437-L473","documentation":"Identity guard after a successful manifest parse. The parsed plugin.json must be a JSON object whose 'name' field is exactly 'compound-engineering'. Any other value (or a non-dict manifest) means the supplied tree is not the CE comparator plugin the harness expects, so mounting it would benchmark the wrong thing.","triggerScenarios":"Passing --ce-plugin-dir at a checkout of a different plugin (e.g. the gitnexus plugin, or a renamed fork), or a manifest whose name field was edited. The check fires only after error 548 confirms the file parses.","commonSituations":"Operator pointed at the wrong directory (e.g. the gitnexus-claude-plugin instead of compound-engineering); a fork renamed the plugin; a template was copied but the name not updated.","solutions":["Confirm the manifest name: 'python -c \"import json;print(json.load(open('<plugin_dir>/.claude-plugin/plugin.json'))['name'])\"' should print compound-engineering.","Point --ce-plugin-dir at the correct plugin checkout (the one whose manifest name is compound-engineering).","If you forked the plugin intentionally, restore the canonical name field; the harness only benchmarks the named plugin.","Run 'git -C <plugin_dir> status' to confirm you are on the branch/release you intended."],"exampleFix":"// before: .claude-plugin/plugin.json\n{ \"name\": \"ce-plugin-fork\", \"version\": \"1.0.0\" }\n// after\n{ \"name\": \"compound-engineering\", \"version\": \"1.0.0\" }","handlingStrategy":"validation","validationCode":"import json\nfrom pathlib import Path\n\nplugin = Path(\"ce-plugin\")\ndata = json.loads((plugin / \".claude-plugin\" / \"plugin.json\").read_text())\nif not isinstance(data, dict) or data.get(\"name\") != \"compound-engineering\":\n    raise SystemExit(f\"wrong plugin identity: {data.get('name')!r}\")","typeGuard":"import json\nfrom pathlib import Path\n\ndef is_compound_engineering_plugin(plugin_dir: Path) -> bool:\n    try:\n        data = json.loads((plugin_dir / \".claude-plugin\" / \"plugin.json\").read_text())\n    except (OSError, ValueError):\n        return False\n    return isinstance(data, dict) and data.get(\"name\") == \"compound-engineering\"","tryCatchPattern":"try:\n    snapshot = _build_ce_plugin_snapshot(config, destination_parent)\nexcept SandboxError as exc:\n    if \"requires the compound-engineering plugin manifest\" in str(exc):\n        log.error(\"wrong plugin passed to --ce-plugin-dir\")\n    raise","preventionTips":["Point --ce-plugin-dir only at a compound-engineering plugin checkout.","Do not rename the manifest name field when forking.","CI gate: assert manifest name equals compound-engineering."],"tags":["sandbox","ce-plugin","manifest","identity","validation","workflow-bench"],"backgroundTag":null,"analyzedSha":"d540b00184d71a896261ee02670da9a92d59d8f7","analyzedAt":"2026-08-12T19:50:25.132Z","schemaVersion":2},"datasetVersion":"2026-08-13T04:17:16.726Z"}