← 작업일지

2026-04-21 · v1.0.0

2026.04.21 작업일지 v1.0.0

자정 직후 이어진 야간 세션. Mac/WSL 훅 병합 마무리와 텔레그램 typing 끊김 정밀 디버깅, 그리고 하루 마무리용 /goodnight 스킬 신설까지 압축적으로 처리.

오늘의 궤적

어제(04-20) 마무리하던 Mac/WSL 훅 동기화 작업을 그대로 이어받았다. Mac 쪽은 .claude/hooks 를 심링크로 바꿔 claude-automations/hooks 를 SoT 로 삼는 구조가 이미 끝나 있었고, 오늘은 WSL 원본 2개(auto-allow-claude-dir.sh, telegram-stop-ping.sh)를 WSL 버전으로 덮어써 포터블·텔레그램 skip 규칙을 유지하는 WSL-wins 머지를 완성했다. 이어서 터진 건 텔레그램 typing 인디케이터가 턴 중간에 “한 번 쏘고 완전 정지” 되는 증상. 드림팀 서브에이전트 3명을 병렬로 돌려 원인을 좁혔고, 세션 격리 PID + set -e 제거 + heartbeat 로그로 훅 3종을 고쳐 push. 그 다음 홈페이지 /issues 페이지에 해결 처리 반영하고, 하루 마감용 /goodnight 스킬을 새로 만들어 스킬 카탈로그에 등록했다.

훅 WSL-wins 머지 (claude-automations)

전날 6개 파일 diff 분석은 끝나 있었고, 오늘은 결론대로 Mac 쪽에 적용.

  • auto-allow-claude-dir.sh — Mac 기존 버전은 /Users/user 를 하드코딩해 WSL 에서 동작하지 않았다. WSL 판의 $HOME 버전으로 교체.
  • telegram-stop-ping.sh — 메모리 규칙 “마지막 user 가 텔레그램이면 Stop 알림 skip” 을 WSL 이 지키고 Mac 이 어기던 상황. WSL 판 채택.
  • 나머지 4개(typing start/stop/daemon + progress-report) 는 Mac 판을 그대로 유지 (기능 동일, 주석만 풍부).
  • 커밋: 5b623e3 hooks: WSL-wins merge (auto-allow 포터블 경로 + stop-ping 텔레그램 skip 유지)

WSL 쪽에는 강대종님이 병행으로 telegram-reply-check.sh (WSL-only) 를 automations 로 이관 후 push. 그 결과 WSL push(3017878) 와 Mac push 순서가 엇갈려 Mac pull —rebase 로 선행 머지 후 재push.

텔레그램 typing 끊김 드림팀 분석 → 3종 훅 픽스

증상 재정의

어제 기록했던 2026-04-20-telegram-typing-midsession-drop.md 는 “4초 주기 신호가 끊김” 으로만 서술돼 있었는데, 오늘 실시간 재현에서 사용자가 “4초 지나도 안 보였어, 정지된 거였어” 로 정정. 깜빡임(flicker) 가설이 아닌 daemon 사망 가설로 범위 좁힘.

드림팀 3명 병렬 분석

  • Agent 1 (프로세스 수명): pkill -f 전역 패턴 매칭이 병렬 세션 간 daemon 을 상호 격추 (65%) + nohup ... &</dev/nulldisown 없어 TTY 에 묶여 있음 (40%) + set -e silent exit (20%)
  • Agent 2 (훅 orchestration): Stop hook 중간 발화 가능성 + cross-session pkill 충돌 (Stop-hook log 증거 00:14:03 fire 사례)
  • Agent 3 (Telegram API): sendChatAction 4s 간격이 5s rate-limit 에 걸려 silent drop

2:1 합의로 전역 pkill -f + set -e silent 조기종료 복합 원인 확정. Agent 3 의 rate-limit 가설은 문서상 5s 가 “typing 표시 지속 시간” 이지 “요청 주기 제한” 이 아니라 기각.

픽스 3종 (commit 0c62bab)

  • telegram-typing-start.sh — 전역 pkill 제거, CLAUDE_SESSION_ID 별 PID 파일 /tmp/claude-telegram-typing-<sess>.pid 도입. 같은 세션에서 daemon 이 이미 살아있으면 재스폰 대신 typing 1회만 refresh. nohup bash ...daemon.sh </dev/null >/dev/null 2>&1 & + disown 으로 TTY 완전 분리.
  • telegram-typing-stop.sh — 전역 pkill 제거, 세션별 PID 파일만 kill. 병렬 Claude 세션·launchd 잡과 상호 격추 차단.
  • telegram-typing-daemon.shset -e 제거 (silent exit 가 원인 은폐), curl -w '%{http_code}' 로 HTTP 상태 캡처, 60초마다 heartbeat /tmp/claude-telegram-typing-heartbeat.log.

예방 forcing function 은 heartbeat 로그 자체. 다음에 끊김 신고 들어오면 로그의 마지막 타임스탬프 + HTTP 코드로 pkill 인지 API 오류인지 즉시 판별 가능.

이슈 파일 해결 처리

2026-04-20-telegram-typing-midsession-drop.md 에 원인/조치/예방/해결일자(2026-04-21 00:28 KST) 추가. claude-skills repo 에 a35d74a 로 push, regen_index.py 로 INDEX 재생성. daejong-page /issues.html 공개본도 67c179e 로 동기화 (index.json entry 갱신 포함).

/goodnight 스킬 신설

end-of-day 종합 마감 스킬. 기존 /worklog·/done·/issue 를 개별로 호출하지 않고 한 번에 최신화하는 오케스트레이터.

  • 절차: ① 오늘 맥락 수집 + 미리보기 → ② 미기록 이슈 후보 스캔 → ③ /worklog → ④ /done → ⑤ 3 repo(claude-automations·claude-skills·daejong-page) dirty/unpushed 점검 → ⑥ 텔레그램 최종 보고.
  • 기기 라우팅은 Mac 본진 패턴. Mac 이 아닌 기기에서 호출되면 텔레그램 트리거 1줄 보내고 종료.
  • /todo-reminder 와 역할 구분: todo-reminder 는 “내일 뭐 할지”, goodnight 은 “오늘 뭐 했는지”. 과거형 기록만.
  • 트리거 문구: “굿나잇”, “잘자”, “/goodnight”, “오늘 마무리”, “하루 마무리”, “종합 동기화”, “오늘 정리해줘”, “오늘 끝”, “하루 정리”.
  • 커밋: f663d5b feat: add /goodnight skill (claude-skills) + 1355b8e skills: /goodnight 카드 추가 (daejong-page skills.html 재생성).

홈페이지 라벨 정리

강대종님이 별도로 “보류/취소 → 드롭” 전면 전환 푸시 (db590b7). 판교 용어로 통일. 내가 건드린 건 아니지만 오늘 daejong-page repo 에 반영됐으므로 기록 남김.

인프라·스킬·자동화 요약

  • 훅 구조: ~/.claude/hooks (심링크) → ~/.claude/automations/hooks (SoT). WSL 도 오늘 동일 구조로 스왑 완료 (사용자 D~H 단계 직접 실행, ln -s ~/.claude/automations/hooks ~/.claude/hooks).
  • 신규 스킬: /goodnight (Mac 전용, daejong_tag: 하루 마무리)
  • 해결 이슈: telegram-typing-midsession-drop (resolved_at 2026-04-21 00:28 KST)
  • 자동 동기화: 06:45 KST daily-sync-and-learn.py 가 양쪽 기기에서 automations + skills pull 처리. 즉시 당기고 싶으면 /sync.

남은 작업

  • 텔레그램 typing 실전 재현 관찰. heartbeat 로그 한 번 정상 흐름 찍어본 뒤 이슈 파일 “재발 이력” 섹션에 “오늘 기점으로 재발 없음 확인” 코멘트 추가 후보.
  • WSL 에서 오늘 Mac push 3건 pull 필요 (cd ~/.claude/automations && git pull + cd ~/.claude/skills && git pull + cd ~/daejong-page && git pull). 06:45 자동 sync 로 내일 아침 자동 반영.
  • /goodnight 드라이런 실전 검증 (이 worklog 작성 자체가 첫 실전 호출).

관련 커밋

repoSHA메시지
claude-automations5b623e3hooks: WSL-wins merge (auto-allow 포터블 경로 + stop-ping 텔레그램 skip 유지)
claude-automations3017878hooks: add WSL-only telegram-reply-check.sh (WSL push)
claude-automations0c62babhooks: typing daemon 세션 격리 + set -e 제거 + heartbeat 로그
claude-skillsa35d74aissue: 텔레그램 typing ‘한번 쏘고 정지’ 해결 (세션 격리 + set -e 제거)
claude-skillsf663d5bfeat: add /goodnight skill
daejong-pagedb590b7label: ‘보류/취소’ → ‘드롭’ 전면 전환 (판교용어)
daejong-page67c179eissue: 텔레그램 typing ‘한번 쏘고 정지’ 해결 공개본 동기화
daejong-page1355b8eskills: /goodnight 카드 추가 (하루 마무리 · 🍎 Mac)