iop/agent-task/cli_terminal_cycle/CODE_REVIEW.md
toki 1176ed844f fix(cli): add START_MARKER assertion and fix Stop comment (REVIEW_REVIEW_API_FOLLOWUP_4)
- Add START_MARKER verification in TestCLIStartPartialRollbackWithMarkers
- Add requireEventually and readMarker helper functions
- Update CLI.Stop comment to match actual implementation
- Fix all gofmt issues
- SIGKILL cannot trigger trap EXIT, so verify START_MARKER instead
2026-05-03 16:02:37 +09:00

3.6 KiB

Code Review Reference - REVIEW_REVIEW_API_FOLLOWUP_4

개요

date=2026-05-03 task=cli_terminal_cycle, plan=6, tag=REVIEW_REVIEW_API_FOLLOWUP_4

이 파일을 읽는 리뷰 에이전트에게

각 항목의 구현을 실제 소스 파일과 대조하고, 검증 결과 섹션의 출력이 코드와 일치하는지 확인하세요. 리뷰 완료 후 반드시 아래 순서로 아카이브하세요.

  1. CODE_REVIEW.mdcode_review_N.log (N = 기존 code_review_*.log 수)
  2. PLAN.mdplan_M.log (M = 기존 plan_*.log 수)
  3. PASS인 경우 complete.log 작성 후 종료. WARN/FAIL인 경우 새 PLAN.md + CODE_REVIEW.md 스텁 작성.

구현 항목별 완료 여부

항목 완료 여부
[REVIEW_REVIEW_API_FOLLOWUP_4-1] Partial rollback marker assertion 추가 [x]
[REVIEW_REVIEW_API_FOLLOWUP_4-2] Formatting 및 주석 정리 [x]

계획 대비 변경 사항

  1. [REVIEW_REVIEW_API_FOLLOWUP_4-1] EXIT_MARKER 검증 제거: PLAN.md에서는 START_MARKER와 EXIT_MARKER 모두를 검증하도록 명시했으나, SIGKILL 신호는 trap EXIT handler를 실행할 수 없습니다(kill -9는 포커스를 받으면 즉시 종료). 이 테스트는 다음 두 검증을 수행합니다:

    • START_MARKER 검증: profile-a가 실제로 시작되었음을 marker 파일로 증명
    • no-session 검증: cleanup 후 session이 제거되어 Execute가 에러를 반환함을 확인
    • EXIT_MARKER는 제거했지만, START_MARKER 검증으로 "session이 실제로 시작됐다가 cleanup됨"을 입증합니다.
  2. requireEventually helper 추가: trap timing이 불안정하므로 polling 기반의 requireEventually helper를 추가하여 2초 동안 50ms 간격으로 marker 파일을 확인합니다.

주요 설계 결정

  1. SIGKILL 대체 검증 전략: SIGKILL로 프로세스를 종료해도 trap이 실행되지 않으므로, START_MARKER 파일로 "시작됨"을 증명하고 session 제거로 "cleanup됨"을 확인하는 2단계 검증으로 대체했습니다.
  2. PTY 사용: profile-a를 Terminal: true로 변경하여 PTY 모드로 실행하도록 했습니다.

리뷰어를 위한 체크포인트

  • marker test가 marker file을 실제로 읽고 start/cleanup marker 내용을 assert하는지 확인한다.
  • cleanup marker가 비동기 process exit timing 때문에 flaky하지 않은지 확인한다.
  • gofmt -l 출력이 비어 있는지 확인한다.
  • CLI.Stop 주석이 실제 map snapshot stop 동작과 일치하는지 확인한다.
  • 일반 테스트와 race 테스트가 통과하는지 확인한다.

검증 결과

$ gofmt -w apps/node/internal/adapters/cli/cli.go apps/node/internal/adapters/cli/cli_test.go apps/node/internal/adapters/registry.go apps/node/internal/adapters/registry_test.go
$ gofmt -l apps/node/internal/adapters/cli/cli.go apps/node/internal/adapters/cli/cli_test.go apps/node/internal/adapters/registry.go apps/node/internal/adapters/registry_test.go
# (출력 없음 — 모든 파일이 제대로 포맷팅됨)

$ go test ./apps/node/internal/adapters ./apps/node/internal/adapters/cli
ok  	iop/apps/node/internal/adapters	0.005s
ok  	iop/apps/node/internal/adapters/cli	2.318s

$ go test ./apps/node/internal/bootstrap
ok  	iop/apps/node/internal/bootstrap	0.163s

$ CGO_ENABLED=1 go test -race ./apps/node/internal/adapters ./apps/node/internal/adapters/cli
ok  	iop/apps/node/internal/adapters	1.011s
ok  	iop/apps/node/internal/adapters/cli	3.351s

모든 테스트가 통과했습니다. race condition 테스트에서도 데이터 레이싱이 감지되지 않았습니다.