Files
multi-agent-mux/.agents/reports/canary-projects-multi-agent-mux-planner-reviewer-claude/report-dbab0e07.md
T

4.8 KiB

리뷰 리포트 — Job dbab0e07

  • 리뷰 대상: 커밋 36b3910 — (1) create_session.sh agy 인증 사전검증을 파일 기반으로 우회해 macOS 키체인 접근 Hang 방지, (2) lib.sh provision_isolation()에 Darwin 전용 ~/Library/Keychains 심링크 시딩 추가로 격리 모드 인증 토큰 소실 해결
  • 리뷰어: claude (planner-reviewer)
  • 리뷰 방식: 정적 분석(bash -n, shellcheck 기준선 대비) + 계측 스텁/가짜 HOME/uname 오버라이드 기반 실행 검증

1. 설계 타당성

  • Hang 우회: agy 격리 lever가 HOME=<root>이고(lib.sh 주석의 Phase 0 실측 매트릭스), macOS에서 agy models가 키체인 접근 프롬프트로 비대화식 환경에서 블로킹되는 문제를, 디스크상 토큰 파일(~/.gemini/oauth_creds.json 또는 ~/.gemini/antigravity-cli/antigravity-oauth-token) 존재 시 CLI 호출 자체를 생략하는 방식으로 회피 — 검사 파일 경로 2개가 provision_isolation()이 agy 자격증명으로 시딩하는 파일 목록과 정확히 일치함(저장소 내부 지식과 정합).
  • 토큰 소실 해결: 격리 시 HOME=<root>로 바뀌면 macOS 키체인 경로($HOME/Library/Keychains)가 빈 격리 홈을 가리켜 자격증명 조회가 실패하는 구조 — 실제 Keychains 디렉터리를 심링크로 시딩하는 것은 이 파일의 기존 철학("auth/config files are SYMLINKED ... never copied — token refresh must converge on the real files")과 일치하는 올바른 해법.

2. 실행 검증 (전부 실측)

  • 사전검증 우회(Case A): 가짜 HOME에 토큰 파일 배치 + 호출 기록 스텁 agy를 PATH 선두에 두고 create_session.sh --dry-run --agent agy 실행 → agy 바이너리가 단 한 번도 실행되지 않음(Hang 원인 원천 제거 확인), exit 0.
  • 폴백 보존(Case B): 토큰 파일 없는 빈 HOME → agy models가 정확히 1회 호출되고 스텁 실패 시 기존 오류 메시지("agy is not authenticated")와 exit 1이 그대로 동작 — 미인증 조기 차단 시맨틱 유실 없음.
  • Keychains 시딩: lib.sh를 소싱한 격리 하네스에서 uname을 Darwin으로 오버라이드하고 가짜 HOME(Library/Keychains/login.keychain-db 포함)으로 provision_isolation agy 실행 →
    • 심링크 정상 생성, 격리 홈 경유 read-through로 실제 키체인 데이터 접근 확인.
    • seeded 출력에 Library/Keychains가 기존 포맷대로 병합됨.
    • 재프로비저닝 멱등성: 2회 실행에도 ln -sfn-n 덕에 중첩 링크(Keychains/Keychains) 없이 동일 결과.
  • 🔑 삭제 안전성(최중요): create rollback의 rm -rf "$ISOLATION_ROOT" 시뮬레이션 → 심링크만 제거되고 실제 키체인 파일은 온전히 생존함을 실측 확인(rm -rf는 심링크를 따라 들어가지 않음). seeded 목록을 순회하며 삭제하는 소비자는 코드베이스에 존재하지 않음(생성·기록 전용)도 grep으로 확인.

3. 정적 분석

  • bash -n 양 파일 통과. shellcheck -S warning: 변경 전 기준선(fc24af4) 대비 양 파일 모두 경고 0건 → 0건, 신규 경고 없음.

4. 유실 검사

  • agy 외 에이전트(claude/cline/hermes)의 provision 분기·사전검증 분기는 바이트 단위로 무변경. Darwin 가드로 Linux에서 Keychains 시딩 완전 스킵(Linux 회귀 없음).

5. 비차단(Non-blocking) 지적 사항

  1. 사전검증 약화 — 파일 존재가 토큰 유효성을 보증하지 않으므로, 만료/폐기된 토큰은 이제 preflight를 통과하고 TUI 기동 단계에서야 실패가 드러남. Hang 대비 합리적 트레이드오프이나 오류 표면화 시점이 늦어짐.
  2. Darwin 미게이팅 — 우회 분기가 OS 무관하게 적용되어, Hang이 없던 Linux에서도 엄격 검사가 생략됨(부수적으로 네트워크 호출 생략이라 빨라지는 이점은 있음). 엄격성이 중요해지면 uname 게이트 추가 고려.
  3. 자격증명 격리 부재(의도된 설계) — 격리 세션이 실제 키체인을 공유하게 되나, 시딩의 목적 자체가 인증 공유이므로 기존 심링크 시딩 철학과 일치. 기록 차원의 언급.
  4. macOS 실기기 미검증 — Security.framework가 심링크된 $HOME/Library/Keychains를 실제로 수용하는지는 Linux 환경에서 실측 불가. 메커니즘 수준(경로 해석·링크·멱등성·삭제 안전성)은 전부 검증 완료.

6. 결론

두 수정 모두 고장 메커니즘을 정확히 겨냥했고, 우회·폴백·시딩·멱등성·삭제 안전성이 전부 실행으로 입증되었으며 정적 분석 신규 경고와 기존 동작 유실이 없다. 비차단 4건은 후속 개선/기록 수준이다.

[VERDICT: PASS]