← 이슈 목록

FROM THE WORKSHOP / 이슈

세션 중단 직후 방금 만든 스킬 파일이 커밋/푸시 없이 로컬에만 남음

강대종 · 마이너스베타스튜디오

세션 중단 직후 방금 만든 스킬 파일이 커밋/푸시 없이 로컬에만 남음

  • 발생 일자: 2026-04-21 14:32 KST (세션 중단), 2026-04-21 23:42 KST (9시간 10분 뒤 사용자 체감 보고)
  • 해결 일자: 2026-04-21 23:46 KST (다음 세션에서 git add + commit + push)
  • 심각도: medium (데이터 유실 가능성 — Mac 디스크 단일 장애점 의존, 단일 파일 규모)
  • 재발 가능성: high (인터럽트/컨텍스트 스위치가 일상적, 현재 가드 없음)
  • 영향 범위: ~/.claude/skills/** 의 신규 파일 모두 (특히 lessons/, issues/, SKILL.md 수정)

증상

14:32:06 — Write() 로 ~/.claude/skills/submit-app/lessons/android-draft-app-release-status.md 신규 생성. 14:32:09 — 파일 시스템 쓰기 완료. 14:32:12 — [Request interrupted by user].

이 시점에 다음 일이 벌어져야 했지만 안 일어남:

  • git add ❌
  • git commit ❌
  • git push ❌

14:42:08 — 사용자가 /clear 로 세션 초기화. 새 세션이 뜨지만 이전 세션의 “미처리 git 상태” 는 자동으로 감지되지 않음.

23:42 — 사용자가 “뭐가 꼬였나” 를 체감하고 재발 방지 요청. git status 로 untracked 파일 1개 확인:

$ git status --short
?? submit-app/lessons/android-draft-app-release-status.md

파일 내용은 무사했으나, Mac 이 사망했다면 해당 lesson 은 완전 유실. 홈페이지 /skills 에도 반영 안 됐음(rule: 새/수정 스킬은 GitHub + daejong-page 자동 반영).

원인

  1. 인터럽트 = 작업 중단의 끝점 ≠ 세이브 포인트. Claude Code 세션이 중단되면 그 직후에 돌려야 할 정리 단계(커밋·푸시·홈페이지 반영)가 그냥 누락됨. 복구할 메커니즘 없음.
  2. 스킬 파일 쓰기 루틴이 “write-then-commit” 을 한 묶음으로 보장하지 않음. 세션 로직상 Write() 이후 사용자 확인이나 다음 지시를 기다리는 게 일반적인 흐름이라, 인터럽트가 사이에 끼면 미커밋 상태로 정지.
  3. Stop/SessionEnd 훅이 “claude-skills repo 의 untracked/unstaged 변경” 을 감지 안 함. daily-sync-and-learn 은 06:45 KST 에 돈다 — 그 사이에 세션 여러 번 열릴 수 있고, 그 시간대에 끄고 다시 켜면 구멍 발생.
  4. 사용자 기준 가시성 제로. 파일이 만들어졌는지조차 바로 알기 어려움 (git status 를 수동으로 쳐야 보임).

근본 원인은 “쓰기(Write) 와 배포(commit+push) 가 트랜잭셔널하지 않다”. 파일 시스템은 쓰였지만 git/GitHub/홈페이지 어디에도 반영 안 된 중간 상태가 장기간 눈에 안 띔.

조치

즉시:

  1. ~/.claude/skills/ 에서 git status --porcelain 으로 untracked/unstaged 확인 → 1건(submit-app/lessons/android-draft-app-release-status.md) 식별
  2. git add + 포스트모템 성격의 커밋 메시지로 git commit + git push
  3. 이 이슈 파일 자체를 /issue 포맷으로 기록 + regen_index.py 로 INDEX.md 갱신
  4. 텔레그램으로 사용자에게 복구 완료 보고

항구적 조치는 아래 예방 참조.

예방 (Forcing function 우선)

우선순위 순서:

1. Stop 훅에 “skills repo 미커밋 감지 + 텔레그램 경보” 추가 (최우선)

~/.claude/hooks/ 혹은 settings.json 의 Stop 훅에 짧은 쉘 스니펫:

#!/bin/bash
cd ~/.claude/skills || exit 0
dirty=$(git status --porcelain)
if [ -n "$dirty" ]; then
  # untracked/unstaged 가 남은 채 세션이 끝나려는 상태
  curl -s -X POST "https://api.telegram.org/bot${TG_BOT_TOKEN}/sendMessage" \
    -d "chat_id=${TG_CHAT}" \
    -d "text=⚠️ claude-skills untracked/unstaged 감지 (세션 종료 직전):%0A%0A${dirty}%0A%0A다음 세션에서 정리 필요" \
    > /dev/null
fi

같은 로직을 ~/daejong-page/ 에도 확장 적용. “세션 끝났는데 홈페이지 반영 안 된 변경이 있다” 를 유저가 바로 인지.

2. “새 스킬 파일 = 즉시 push” 루틴 규칙화 (메모리)

메모리 feedback_skill_write_commits_immediately.md 신설:

스킬 관련 파일(~/.claude/skills/**) 을 Write/Edit 하면, 그 직후 같은 응답 안에서 git add + commit + push 까지 묶어서 실행. 사용자 확인 기다리지 않음(가역 + 규칙 명시).

이미 feedback_skill_publishing.md 가 “새 스킬은 GitHub + 홈페이지 자동 반영” 을 말하지만, “한 응답 안에서 끝낸다” 는 트랜잭션 단위를 명시적으로 못 박지는 않음 — 그걸 추가.

3. 세션 시작 시 자기 점검 (start-of-session safety net)

신규 세션 초기 작업 체크리스트에 cd ~/.claude/skills && git status --short && cd ~/daejong-page && git status --short 를 무조건 1회 돌려서 남아있는 미커밋을 발견 즉시 수습. daily-sync-and-learn 이 06:45 에 도는 것과 별개로 매 세션 이 자기 청소를 하게 만듬.

~/.claude/CLAUDE.md 에 ”## 세션 워밍업” 섹션 신설하거나, 세션 워밍업 훅(UserPromptSubmit 아님 — SessionStart 훅) 으로 자동 git status → 결과 요약 주입.

4. daily-sync-and-learn 에 Mac 쪽 repo 훑기 추가

이미 WSL → Mac 동기화용으로 돌고 있으니, 거기서 ~/.claude/skills, ~/daejong-page 의 git status --porcelain 결과를 리포트. 하루 1회 건강검진 성격. 1·3번 있으면 백업 역할만 하면 충분.

Deferred 결정

1번(Stop 훅) 을 우선 설치하고, 2번 메모리도 같이 박음. 3번은 2번과 상당히 겹쳐서 1·2 이후 상황 보고 결정. 4번은 이미 돌고 있는 잡 확장이라 당장 안 해도 됨.

재발 이력

(없음 — 최초 발견)

단, 과거 비슷한 “작업은 되었는데 외부 시스템에 반영 누락” 패턴은 있었음:

  • 2026-04-20 terminal-only-reply-missed-telegram (reply 툴 호출 누락)
  • 2026-04-21 memoyo-signup-ghost-form (홈페이지 반영 누락)

같은 계열 문제 — “여러 출력 채널 중 일부가 빠짐”. 통합 관점에서 보면 “write 후에 수반돼야 할 배포 동작이 빠지는 게 반복된다” 이므로, 각 채널마다 Stop 훅 레벨 가드를 까는 방향이 일관된 대응.

관련 링크

  • 커밋(orphan 수습): claude-skills HEAD~1 (submit-app: add lesson — draft app 상태의 앱은 release status=draft 강제)
  • 기존 메모리: feedback_skill_publishing.md (“새/수정된 스킬은 ssamssae/claude-skills GitHub + daejong-page /skills 페이지에 자동 반영”)
  • 예방 2 로 추가할 메모리(예정): feedback_skill_write_commits_immediately.md
  • 예방 1 로 추가할 훅(예정): ~/.claude/hooks/stop-check-repos-dirty.sh
기록은 다음 시작이 됩니다.이슈 더 읽기 ↗이 작업장의 제품 ↗
작업장 전체 페이지 목적에 맞는 페이지 찾기