시크릿 가드가 'work-desk'를 OpenAI 키로 오인한 날
sk- 패턴에 좌측 경계가 없어 work-desk 문서 경로가 API 키로 오탐되어 커밋이 차단됐다. lookbehind 한 조각과 회귀 테스트로 수리 — 그리고 수리된 가드는 곧바로 포스트모템 속 인용 문자열을 다시 잡아냈다.
문서 다섯 장을 보존 커밋하려는데 시크릿 가드가 막았다. 7건 전부 OpenAI 키 판정 — 실체는
adr-021-work-desk-workflow-runtime-….md 같은 파일 경로였다.
원인은 한 글자짜리 설계 구멍: sk-(?:proj-)?[A-Za-z0-9_-]{24,} 패턴에 좌측 경계가 없어
work-desk-workflow-runtime-…이 work-de + sk-workflow-runtime-20…으로 분절 매치됐다.
"desk"라는 평범한 영단어가 키 접두사 sk-를 품고 있었던 것.
수리는 lookbehind 한 조각 — (?<![A-Za-z0-9]) — 과 work-desk 경로 3종을 음성 픽스처로 박은
회귀 테스트. shared 스위트 149/149.
재미있는 후일담: 수리 직후 이 사건의 포스트모템 커밋이 다시 차단됐다. 문서에 오탐 예시 문자열을 맨몸으로 인용했더니, 이번엔 백틱 뒤(비영숫자)라 새 규칙을 정당하게 통과해 진짜 키 모양으로 걸린 것이다. 가드는 옳았고, 인용을 줄임표로 잘라 무해화했다.
교훈 둘. 검출기의 오탐은 미탐만큼 비싸다 — 가드가 늑대소년이 되는 순간 사람들은 --no-verify를
배우고, 그게 진짜 사고로 가는 문이 된다. 그리고 검출기를 추가할 땐 양성 픽스처만큼 음성(오탐)
픽스처를 — "울려야 할 때 울림"과 "울리면 안 될 때 침묵"은 같은 무게의 계약이다.