81 lines
4.2 KiB
Markdown
81 lines
4.2 KiB
Markdown
|
|
---
|
||
|
|
name: C34 중앙 저장소 sentinel(`.junction-marker`) 손실 — 자동 보호 강화
|
||
|
|
description: 2026-04-19 다른 세션 verify_setup이 marker 부재 정확 감지. 본 worktree 동시 실측으로 confirm. git 외 작업으로 sentinel 손실. 본 사건 직접 차단 안건 A(UserPromptSubmit hook 편입)로 재발 윈도우 1프롬프트 이내로 축소
|
||
|
|
type: feedback
|
||
|
|
---
|
||
|
|
|
||
|
|
# C34 중앙 저장소 sentinel 손실 — 자동 보호 강화
|
||
|
|
|
||
|
|
## 실증 (2026-04-19)
|
||
|
|
|
||
|
|
다른 세션이 `verify_setup.ps1` 2.5 섹션 "Live Junction marker 경유 읽기"에서 FAIL 판정. 본 worktree 즉시 실측 결과:
|
||
|
|
- 중앙 저장소 `$HOME/.claude/nerdnavis-live/`: **빈 디렉토리** (marker·README 모두 부재)
|
||
|
|
- junction 자체는 정상 (38개 worktree 모두 중앙 연결 유지)
|
||
|
|
- C34 운영 기능 자체는 영향 없음 (sentinel은 메타 파일)
|
||
|
|
|
||
|
|
## 영향
|
||
|
|
|
||
|
|
- **데이터 손실**: 0건 (sentinel은 연결 상태 판정용 메타)
|
||
|
|
- **검증 도구 오판**: `verify_setup.ps1` 2.5 FAIL — 실제는 정상이나 marker 부재로 "junction 미연결"로 판정
|
||
|
|
- **운영 위험**: 본 사건 자체는 영향 없으나, marker 보호 미흡이 누적되면 차후 진단 신뢰성 훼손
|
||
|
|
|
||
|
|
## 원인 분석
|
||
|
|
|
||
|
|
- **git history 검사**: `git log --since="2026-04-19" -- .live/`·관련 스크립트 commit 이력에 marker 삭제 흔적 없음
|
||
|
|
- **`.live/`는 `.gitignore` 대상** → git 외 작업으로 삭제됨
|
||
|
|
- **본 세션 PowerShell·Bash 명령 검사**: 명시 파일만 삭제 (marker 영향 없음)
|
||
|
|
- **추정**: 다른 worktree·다른 세션의 cleanup·rollback 작업 또는 PowerShell 와일드카드 매칭 사고
|
||
|
|
- **확정 불가** — 로그 부재 자체가 별도 안건 (sentinel 변경 감사 로그 부재)
|
||
|
|
|
||
|
|
## 자동 회복 안전망 분석
|
||
|
|
|
||
|
|
### 기존 안전망 (SessionStart 시점만)
|
||
|
|
`live_junction_ensure.sh`가 SessionStart hook에서 marker 부재 시 자동 재생성:
|
||
|
|
```bash
|
||
|
|
if [ ! -f "$CENTRAL_LIVE/$MARKER_NAME" ]; then
|
||
|
|
echo "..." > "$CENTRAL_LIVE/$MARKER_NAME"
|
||
|
|
fi
|
||
|
|
```
|
||
|
|
|
||
|
|
### 한계
|
||
|
|
**이미 시작된 세션 중간 손실 시 그 세션 동안 미검출** — 본 사건이 이 한계의 정확한 실증.
|
||
|
|
|
||
|
|
## 해결 (2026-04-19 안건 A 집행)
|
||
|
|
|
||
|
|
`live_junction_ensure.sh`를 **UserPromptSubmit hook 체인에도 편입**:
|
||
|
|
- 매 프롬프트마다 marker 부재 검사 + 자동 재생성
|
||
|
|
- 손실 윈도우를 **1프롬프트 이내**로 축소
|
||
|
|
- marker 정상 시 조기 종료(`exit 0`)로 토큰·시간 비용 미세
|
||
|
|
- 신규 스크립트 불요 (기존 검증된 로직 재사용, 신규 위험 0)
|
||
|
|
|
||
|
|
### 집행 위치
|
||
|
|
`.claude/settings.json` UserPromptSubmit hook 체인의 `live_inject.sh` 직전:
|
||
|
|
```json
|
||
|
|
{ "type": "command", "command": "bash scripts/live_junction_ensure.sh 2>/dev/null || true" },
|
||
|
|
{ "type": "command", "command": "bash scripts/live_inject.sh 2>/dev/null || true" }
|
||
|
|
```
|
||
|
|
|
||
|
|
## 거부된 대안
|
||
|
|
|
||
|
|
- **B 명문화 강화**: 의도적 삭제만 방지. 실수·외부 작업에는 무력. 안건 A 집행 시 SKILL.md C34-3에 1줄 자연 포함
|
||
|
|
- **C sentinel 변경 감사 로그**: 사후 추적용. 사전 방지 효과 없음. 1회 사건이라 과잉
|
||
|
|
- **D 무행동**: 자동 회복 윈도우 결함 그대로 둠
|
||
|
|
|
||
|
|
## 재발 방지 체크 (세션 리더 의무)
|
||
|
|
|
||
|
|
- `verify_setup.ps1` 정기 실행 (SessionStart 외 의무 호출 대상 작업 전후)
|
||
|
|
- marker 부재 발견 시 즉시 PowerShell `Set-Content` 또는 `live_junction_ensure.sh` 수동 실행
|
||
|
|
- 본 사건 같은 외부 작업 의심 시 다른 세션·다른 worktree 동시 진행 작업 확인
|
||
|
|
|
||
|
|
## 연관
|
||
|
|
|
||
|
|
- **C34-3** Sentinel 자동 보호 1줄 추가 (2026-04-19 안건 A 반영)
|
||
|
|
- **C34-12** Degraded 운영 (자동 회복 안전망 정신)
|
||
|
|
- **헌법 제1원칙 ⑤** 세션·PC 연속성 보장
|
||
|
|
- **`scripts/live_junction_ensure.sh`** (변경 없이 hook 위치 추가만)
|
||
|
|
- **`.claude/settings.json`** UserPromptSubmit 체인 확장
|
||
|
|
|
||
|
|
## 교훈
|
||
|
|
|
||
|
|
**자동 회복 안전망은 트리거 시점이 충분히 자주여야 한다.** SessionStart만으로는 "이미 시작된 세션 중간 손실" 케이스 미커버. UserPromptSubmit 편입으로 손실 윈도우를 1프롬프트로 축소하면서 토큰 비용은 미세 — sentinel 같은 메타 파일 보호의 표준 패턴. 차기 자산(중앙 marker·sentinel·lock 파일 등) 도입 시 동일 원칙 적용 권고.
|