- Status: Accepted - Date: 2026-07-18 - PR: #216 - Context: 사용자 지시(2026-07-17, Lean 큐 ⑤): "장애나 결함, 하네스 진행하면서 동일 이슈가 여러 번 발생하면 — 재발방지 대책이 깜박한 것 같이 단순 실수면 기록하거나 룰을 강제해서 등록하게 하고, 복잡한 하네스 문제이면 다면 페르소나로 해결책을 만드는 스킬을 만들자." 본 repo 는 이 관행을 이미 반복 실행해 왔으나(no-false-ship: 3회 재발 후 rule 신설 + 사례표 / CHANGELOG 7릴리즈 drift → same-commit 테스트 게이트 / 하드코딩 목록 drift 2회 → "주석 경고 ≠ 차단 수단, derive 단일화"), 문서화된 자산이 없어 사용자 프로젝트에 전달되지 않았고, 에스컬레이션의 판단 기준(언제 기록으로 충분하고 언제 게이트가 필요한가)이 세션 기억에만 있었다. - Decision: 1. **`recurrence-pr...
Installs into .claude/skills of the current project.
Are you the author of Decisions?
Add the live security badge to your README. It updates with every re-scan.
[](https://www.skillsdirectory.com/skills/uzysjung-decisions)
# ADR-033: recurrence-prevention 스킬 — 재발방지 방법론의 자산화
- Status: Accepted
- Date: 2026-07-18
- PR: #216
- Context: 사용자 지시(2026-07-17, Lean 큐 ⑤): "장애나 결함, 하네스 진행하면서 동일 이슈가 여러 번
발생하면 — 재발방지 대책이 깜박한 것 같이 단순 실수면 기록하거나 룰을 강제해서 등록하게 하고,
복잡한 하네스 문제이면 다면 페르소나로 해결책을 만드는 스킬을 만들자." 본 repo 는 이 관행을
이미 반복 실행해 왔으나(no-false-ship: 3회 재발 후 rule 신설 + 사례표 / CHANGELOG 7릴리즈 drift
→ same-commit 테스트 게이트 / 하드코딩 목록 drift 2회 → "주석 경고 ≠ 차단 수단, derive 단일화"),
문서화된 자산이 없어 사용자 프로젝트에 전달되지 않았고, 에스컬레이션의 판단 기준(언제 기록으로
충분하고 언제 게이트가 필요한가)이 세션 기억에만 있었다.
- Decision:
1. **`recurrence-prevention` 을 dev-method 9번째 스킬**(official / has-dev-track 기본 설치)로
추가한다 — 사용자 지시 "방법론은 필수로 제공"(Lean 큐 ⑥의 필수 묶음 정의)에 따라 opt-in 이
아니라 기본이다. 카탈로그 61→62.
2. **핵심 모델 = "재발은 이전 대책의 실패"**: 두 번째 발생 시 작업 단위는 수정(fix)이 아니라
대책(countermeasure)이고, 대응은 같은 레벨의 더 강한 문구가 아니라 **한 레벨 위 에스컬레이션**
이다: 기록(1회) → 룰 강제 등록(2회, 사례표 템플릿) → 구조적 게이트(3회+ 또는 룰 위반 —
테스트/훅/derive만 인정, 프로즈 의존은 게이트가 아님).
3. **카운트는 증거 작업**: 실패 서명(failure-mode class)을 먼저 정의하고 메모리·룰 사례표·git
이력에서 확인된 횟수만 센다. 증거 없는 "느낌상 재발" 금지(CLAUDE.md 안티패턴 "내 경험상").
4. **복잡한 하네스 문제는 사다리 진입 전 설계**: multi-persona-review 연계로 대책 후보를
독립 설계(실수 당사자·놓친 리뷰어·1년 뒤 유지보수자·적대자 렌즈) 후 사용자 결정 —
틀린 실패 모델을 강하게 집행하는 것을 방지.
5. **가드레일**: 카운트보다 높은 레벨 진입 금지(게이트 인플레이션), Level 1/2(상주 컨텍스트/CI
비용)는 사용자 컨펌 필수, 대책이 실제 발화하는 증거(RED→GREEN·훅 exit 2·grep 단일화) 없이
"보호됨" 보고 금지(no-false-ship), 룰 프로즈는 "준수 미검증" 정직 표기.
6. **Context Cost ratchet 예산 2,000 → 2,200 tokens** — 자산 1종 추가에 따른 명시적 상향
(실측 9종 ~2,096, 여유 ~5%). ADR-032 의 ratchet 설계("상향은 금지가 아니라 명시적 정당화")의
첫 정상 사용례.
- Alternatives:
- **rule 파일로 배포** (`.claude/rules/recurrence-prevention.md`): 기각 — 룰은 매 세션 상주
(Session-Start Context Cost 직접 증가)인데 이 방법론은 재발 시점에만 필요. 트리거형 스킬이
Lean(ADR-032) 정합.
- **harness-health-audit 에 병합**: 기각 — 감사는 정지 상태의 하네스를 주기 점검(at rest),
본 스킬은 실패 순간에 발화(at failure). 트리거·산출물·시점이 다르고, 병합 시 단일 스킬
비대화 + 라우팅 혼란(트리거 중복 게이트의 취지 역행).
- **opt-in 배치**: 기각 — 사용자 지시가 명시적으로 "필수로 제공"(방법론 묶음). 단 ⑥(방법론
코어 재편)에서 번들 구조가 재정의되면 그 결정을 따른다.
- Consequences:
- dev-method 9종 / 카탈로그 62. wizard 번들 row·비대화형 설치·4-CLI 렌더는 전부
`DEV_METHOD_SKILL_IDS` derive 로 자동 반영(하드코딩 갱신 0곳 — ADR-028/031 구조의 검증).
- 기본 설치 descriptor 비용 +~224 tokens (ratchet 이 향후 증가를 계속 차단).
- Lean 큐 ⑥(방법론 코어 재편)의 "필수 묶음" 후보 목록에 본 스킬 포함 — ⑥ 착수 시 재편 대상.