fix: Claude reviewer empty output, worktree isolation false positives, and input file access
- Add -p flag to _CLAUDE_REVIEW_ARGS so reviewer uses print mode (stdin→stdout) instead of interactive mode which conflicts with plan permission mode - Copy input files (plan, checklist) into worktree .cross-eval-inputs/ so agents in plan mode can access them without escaping the sandbox - Simplify _snapshot_repo_state to use only git diff HEAD + untracked hashes, eliminating false positives from staging state changes (git diff --cached) and git status index drift during long-running pipelines Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
@@ -62,12 +62,7 @@ _CLAUDE_CODER_ARGS = list(_CLAUDE_BASE_ARGS) + [
|
||||
"bypassPermissions",
|
||||
]
|
||||
|
||||
_CLAUDE_REVIEW_ARGS = [
|
||||
"--setting-sources",
|
||||
"user",
|
||||
"--disable-slash-commands",
|
||||
"--model",
|
||||
"opus",
|
||||
_CLAUDE_REVIEW_ARGS = list(_CLAUDE_BASE_ARGS) + [
|
||||
"--permission-mode",
|
||||
"plan",
|
||||
]
|
||||
@@ -425,6 +420,8 @@ def load_config(path: Path) -> PipelineConfig:
|
||||
|
||||
def _parse_raw(raw: dict[str, Any], config_path: Path) -> PipelineConfig:
|
||||
"""Parse raw YAML dict into PipelineConfig."""
|
||||
project_root = config_path.parent.parent if config_path.parent.name == ".cross-eval" else config_path.parent
|
||||
|
||||
# --- agents ---
|
||||
agents: dict[str, AgentConfig] = {}
|
||||
for name, agent_data in raw.get("agents", {}).items():
|
||||
@@ -494,8 +491,12 @@ def _parse_raw(raw: dict[str, Any], config_path: Path) -> PipelineConfig:
|
||||
if isinstance(pipeline_raw, str) and pipeline_raw.startswith("preset:"):
|
||||
preset_name = pipeline_raw.split(":", 1)[1]
|
||||
|
||||
output_dir = Path(raw.get("output_dir", ".cross-eval/output"))
|
||||
if not output_dir.is_absolute():
|
||||
output_dir = project_root / output_dir
|
||||
|
||||
config = PipelineConfig(
|
||||
output_dir=Path(raw.get("output_dir", ".cross-eval/output")),
|
||||
output_dir=output_dir,
|
||||
max_iterations=int(raw.get("max_iterations", 3)),
|
||||
min_iterations=int(raw.get("min_iterations", 1)),
|
||||
verbose=bool(raw.get("verbose", False)),
|
||||
|
||||
Reference in New Issue
Block a user