사례 — Claude Code v2.1.88 .npmignore 누락 사고 (2026-03-31)
별칭: npmignore 누락 사고 · Claude Code source map 누출 · v2.1.88 incident · Chaofan Shou 발견
한 줄 사실
2026-03-31, Anthropic 이 Claude Code v2.1.88 을 npm 에 올렸다. 그때 누군가
.npmignore파일에*.map한 줄을 추가하는 걸 잊었다. 59.8 MB 의 source map 파일이 npm registry 누구나 다운로드 가능했다.
사건 흐름
- 3월 31일 — Claude Code v2.1.88 npm 배포.
.npmignore에*.map누락 → source map 동봉 게시 - 발견 — 보안 연구자 Chaofan Shou 가 발견. 59.8 MB 매핑 파일 다운로드 가능 확인
- 공식 시인 — Boris Cherny (Claude Code 책임자) 가 공식 인터뷰에서 plain developer error 라고 시인
- 반복성 — 처음이 아니었다. 2025 년에도 같은 일이 한 번 있었다. 같은 실수가 두 번
- 대응 —
npm unpublish로 v2.1.88 거두고, 관련 버전들deprecate마킹 - 부분 회수 — npm
unpublish는 완벽한 회수가 아님. 이미 다운로드된 캐시는 회수 ❌. 발견 후 수 시간 내에 GitHub mirror 가 push 됨 → 지워지기 전에 이미 기록되었다
무엇이 누출됐는가
- Source map — 압축·난독화된 프로덕션 JavaScript 코드를 원본 TypeScript 로 되돌릴 수 있는 매핑 정보
- 복원된 TypeScript — 약 512,000 줄, 파일 1,884 개
- 핵심 자산 —
Tool.ts베이스 29,000 줄, query engine 46,000 줄, feature flag 44 개
→ 디버깅용으로는 천국, 노출되면 지옥. 모델 가중치는 안 새고 코드만 새었다.
4 요소·4 엔지니어링 시사점
| 요소 | 값 |
|---|---|
| 검증 (가드레일) | .npmignore 파일 검증이 배포 파이프라인 끝 에서 박혔어야 함. 같은 실수 두 번 = 가드레일 부재 의 결과 |
| 하네스 엔지니어링 | 배포 자체가 모델 바깥 인프라. 그 인프라의 가드레일 이 약했음 |
| 컨텍스트 (반대편) | 누출은 오히려 학습 기회 — 본 위키 lesson/4elements-claude-code-measurable 는 이 누출 덕에 4 요소가 코드 수준으로 측정 가능 해짐 |
brain 이 아니라 skeleton 이 노출됐다.
본 강의 기록 — 측정 가능성의 시작
본 사고가 우리에게 준 가장 큰 선물 은 측정 가능성. 전에는 Claude Code 의 동작을 사용 후기로만 짐작. 이제는 코드 수준으로 측정 된다.
→ lesson/4elements-claude-code-measurable 가 본 사례를 Part 1 / 2 장 본문 으로 정합.
출처
60_service/6006 booklet-vibe-coding-4-elements/_combined_book.md §210~226 (2 장 — 한 번의 .npmignore 누락 + 50 vs 512K).
60_service/lecture_claude_code_internals/claude_code_leak_findings_brief.md (Claude Code 누출 분석 브리핑).