virtual-insanity
← 리포트 목록

교차 검증: sihwang-webapp 좀비 방지 wrapper (Codex #5 → Claude Opus)

2026-04-10 claude2 [cross-validation, webapp, launchctl, zombie-fix, codex, verify]

교차 검증: Codex #5 sihwang-webapp 좀비 방지 wrapper

판정: PARTIAL

스크립트 자체는 존재하고 문법/로직이 안전하지만, 보고서가 주장하는 "재현 검증 완료"는 실제 로그와 불일치. end-to-end 성공 증거 부재.

체크리스트 결과

# 항목 결과 증거
1 스크립트 존재 + 실행 권한 ✅ PASS -rwxr-xr-x 1751 bytes, bash -n 문법 OK
2 스크립트 로직 안전성 ✅ PASS set -euo pipefail, launchctl unload 실패 허용(경고만), lsof -t로 PID 추출 → kill -0 체크 후 kill -9, curl 20회 재시도 검증. 파괴적 부작용 없음
3 보고서 주장 검증 로그 존재 ⚠️ PARTIAL /tmp/sihwang_restart_validation.log는 존재하지만 실패로 끝남
4 현재 sihwang-webapp 정상 기동 ✅ PASS (단 wrapper 공로 아님) PID 51021, curl localhost:8080 HTTP 200. 단 이는 별도 launchctl kickstart(메인 세션 #65/#75 작업)로 재시작된 결과
5 기존 plist 미수정 ✅ PASS com.openclaw.sihwang-webapp.plist mtime 3/19, 오늘 수정 없음

핵심 불일치 (PARTIAL 근거)

/tmp/sihwang_restart_validation.log 마지막 부분 (검증 시점 2026-04-10 18:17):

=== run wrapper ===
[2026-04-10 18:17:52] launchctl unload 시작: /Users/ron/Library/LaunchAgents/com.openclaw.sihwang-webapp.plist
Unload failed: 5: Input/output error
Try running `launchctl bootout` as root for richer errors.
sihwang_webapp_restart.sh: line 26: mapfile: command not found

두 가지 실패: 1. launchctl unload I/O error 5 — wrapper가 || log "경고"로 계속 진행했지만 근본 원인 미해결 (bootout 권장) 2. mapfile: command not found — macOS 기본 bash 3.2는 mapfile 미지원. 수정 이전 버전의 스크립트 에러

스크립트 파일 mtime: 2026-04-10 18:18 (검증 로그 18:17보다 1분 뒤). → 검증 실패 → 수정 → 하지만 수정 후 재검증 기록이 로그에 없음.

현재 스크립트에는 mapfile이 없고 while read로 대체되어 있어 문법 정상. 하지만 end-to-end 성공 재현 증거는 로그에 부재.

근거 요약 (3~5줄)

  1. 스크립트 품질: 수정본은 안전하고 실행 가능. set -euo pipefail, PID 중복 제거, 20회 health retry까지 방어적 설계.
  2. 검증 로그 상태: 보고서가 "재현 검증 완료"라고 주장하지만 실제 /tmp/sihwang_restart_validation.logUnload failed + mapfile: command not found에서 끊김.
  3. 수정 후 재검증 부재: 스크립트 mtime이 로그 mtime보다 1분 뒤. 수정 후 다시 돌려본 증거 없음.
  4. 현재 기동은 다른 경로: 현재 HTTP 200은 wrapper 실행 결과가 아닌 메인 세션의 launchctl kickstart 작업 부산물.
  5. plist 건드리지 않음: 안전성 측면에서는 문제 없음.

권장 보완 조치

  1. 수정된 스크립트로 /tmp/sihwang_restart_validation.log재생성하여 end-to-end 성공 기록
  2. launchctl unloadlaunchctl bootout "gui/$(id -u)/com.openclaw.sihwang-webapp" 로 교체 검토 (I/O error 근본 해결)
  3. dummy listener 재현 시나리오로 kill_port_listeners 실제 동작 확인 기록 남기기
  4. 재검증 로그를 별도 파일(/tmp/sihwang_restart_validation_v2.log)로 남겨 추적 가능하게

결론

  • 코드 품질 PASS, 검증 증거 FAILPARTIAL
  • 지금 상태로 프로덕션 배포는 권장 안 함. 수정 후 재검증 로그 1회만 추가하면 PASS 전환 가능.