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

3.7 KiB

Peer Review (Round 5, 최종): exit_exit 심볼 정정 (commit f0e2bd2) — multi-agent-mux-ui M2

Scope

604fdecf 리뷰에서 지적한 마지막 1건 — cExitlookupFunction<...>('exit')로 잘못된(async-signal-unsafe) libc 심볼에 바인딩되어 있던 문제 — 에 대한 수정 커밋 f0e2bd2("fix(ui): correct libc symbol lookup for direct _exit syscall to achieve async-signal-safety")를 검토했다.

변경 확인

pty_session.dart:111, 문자열 리터럴 한 글자(정확히는 언더스코어 하나) 수정:

-    final cExit = libc.lookupFunction<_exit_c, _exit_dart>('exit');
+    final cExit = libc.lookupFunction<_exit_c, _exit_dart>('_exit');

이 파일에 대한 이번 커밋의 변경은 이 한 줄이 전부다(그 외 diff는 .dart_tool 빌드 캐시 바이너리뿐).

실행 검증

  1. 심볼 재확인: libc.lookup('_exit').address가 이제 실제로 cExit가 가리키는 주소와 일치함을 별도 스크립트로 재확인(이전 라운드에서 'exit'/'_exit'가 서로 다른 주소임을 이미 확정했던 것과 대조).
  2. 실제 실패 경로 재현: 존재하지 않는 실행파일(this-binary-does-not-exist-xyz)로 PtySession.start()를 호출해 execvp() 실패 → cExit(-2) 경로를 실제로 타게 만들었다. 결과: start()는 15ms 만에 정상 반환했고, 자식 프로세스는 100ms 이내에 완전히 사라짐(ps로 확인, 좀비도 아니고 행도 아님) — 이전 라운드에서 우려했던 "잘못된 심볼로 인한 잠재적 행/불안정 종료" 없이 자식이 즉시, 깨끗하게 종료됨을 확인.
  3. 회귀 테스트: mam_ptypty_runtime_test.dart에 이번 리뷰 체인 동안 검증해온 항목에 대응하는 자동화 테스트가 추가되어 있음을 확인 — echo 케이스에 더해 "PtySession strips TMUX/TMUX_PANE from child environment" 테스트가 신규로 존재하며 통과한다. 이제 이전까지 매 라운드 내가 수작업 스크래치 스크립트로 검증해야 했던 env 격리가 저장소 자체의 회귀 테스트로 편입되었다.
  4. 전체 회귀 스위트: dart analyze(mam_pty/mam_core) + flutter analyze(mam_desktop) 전부 clean. dart test(mam_pty 2/2, mam_core 3/3) + flutter test(mam_desktop 3/3) 전부 통과.
  5. DoD: git show f0e2bd2 --stat -- '*.sh' → 셸 스크립트 변경 없음. grep -rn "runInShell: *true" → 없음. grep -rn "\.writeAsString\|\.writeAsBytes\|\.delete(\|openWrite("(mam_core/mam_pty) → 없음.

M2 전체 검증 이력 요약 (이번 라운드로 완결)

이 마일스톤은 5라운드에 걸쳐 검토되었고, 매 라운드 실제 실행으로 재현/반증했다:

라운드 커밋 발견 상태
1 (c2503ed6) b7901bc /proc/self/fd/ 즉시 예외, PTY 슬레이브 미연결, env 격리 없음 NOT PASS
2 (1fc02bc2) f52f6eb 위 3건 해결(fork/exec 재작성) — 좀비 누수, fork-unsafe 호출 신규 발견 NOT PASS
3 (a3f7449e) 7781e79 fork-unsafe 부분개선 — 이벤트루프 정지(가장 심각), env 격리 죽은 코드 신규 발견 NOT PASS
4 (604fdecf) 7f1a7e5(+a6e4dc9) 이벤트루프 정지/env 격리/좀비회수 전부 해결 — exit_exit 심볼 오류 발견 NOT PASS
5 (본 리뷰) f0e2bd2 심볼 오류 정정, 실패 경로 실행 재현으로 정상 종료 확인 PASS

계획서 §5.2(구조)/§6.7(PTY 메커니즘, env 격리, TOCTOU, 리사이즈)/§10(DoD)의 요구사항이 모두 실제 실행 검증을 통과했고, 더 이상 미해결 항목이 없다.

[VERDICT: PASS]