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:
이충영 에이닷서비스개발
2026-03-14 16:19:57 +09:00
parent 7b95233edf
commit cc8d583914
6 changed files with 158 additions and 41 deletions

View File

@@ -434,6 +434,10 @@ def main(argv: list[str] | None = None) -> int:
"--reviewer-model", default=None, metavar="MODEL",
help="Reviewer 에이전트 모델만 변경",
)
agent_group.add_argument(
"--senior-model", default=None, metavar="MODEL",
help="Senior 에이전트 모델만 변경",
)
# -- 파이프라인 --
pipe_group = run_parser.add_argument_group("파이프라인")
@@ -474,7 +478,7 @@ def main(argv: list[str] | None = None) -> int:
)
etc_group.add_argument(
"--output-dir", type=Path, default=None,
help="결과 저장 디렉토리 (기본: output/)",
help="결과 저장 디렉토리 (기본: .cross-eval/output/)",
)
etc_group.add_argument(
"--dry-run", action="store_true",
@@ -953,13 +957,16 @@ def cmd_run(args: argparse.Namespace) -> int:
if args.model is not None:
for agent_name in config.agents:
_apply_model_override(config, agent_name, args.model)
# --coder-model / --reviewer-model: apply by role
# --coder-model / --reviewer-model / --senior-model: apply by role
if args.coder_model is not None:
for coder_name in config.coders:
_apply_model_override(config, coder_name, args.coder_model)
if args.reviewer_model is not None:
for reviewer_name in config.reviewers:
_apply_model_override(config, reviewer_name, args.reviewer_model)
if args.senior_model is not None:
for senior_name in config.seniors:
_apply_model_override(config, senior_name, args.senior_model)
# --plan / --checklist shortcuts
for key, val in [("plan", args.plan), ("checklist", args.checklist)]: