← 리포트 목록
교차 검증: 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줄)
- 스크립트 품질: 수정본은 안전하고 실행 가능.
set -euo pipefail, PID 중복 제거, 20회 health retry까지 방어적 설계. - 검증 로그 상태: 보고서가 "재현 검증 완료"라고 주장하지만 실제
/tmp/sihwang_restart_validation.log는Unload failed+mapfile: command not found에서 끊김. - 수정 후 재검증 부재: 스크립트 mtime이 로그 mtime보다 1분 뒤. 수정 후 다시 돌려본 증거 없음.
- 현재 기동은 다른 경로: 현재 HTTP 200은 wrapper 실행 결과가 아닌 메인 세션의
launchctl kickstart작업 부산물. - plist 건드리지 않음: 안전성 측면에서는 문제 없음.
권장 보완 조치
- 수정된 스크립트로
/tmp/sihwang_restart_validation.log를 재생성하여 end-to-end 성공 기록 launchctl unload→launchctl bootout "gui/$(id -u)/com.openclaw.sihwang-webapp"로 교체 검토 (I/O error 근본 해결)- dummy listener 재현 시나리오로
kill_port_listeners실제 동작 확인 기록 남기기 - 재검증 로그를 별도 파일(
/tmp/sihwang_restart_validation_v2.log)로 남겨 추적 가능하게
결론
- 코드 품질 PASS, 검증 증거 FAIL → PARTIAL
- 지금 상태로 프로덕션 배포는 권장 안 함. 수정 후 재검증 로그 1회만 추가하면 PASS 전환 가능.