경로찾기 — NFD/NFC 양방향 검색 + 이름일치 4상 판정 도구
개요
2026-07-26 이 세션에서 실제로 벌어진 사고(사용자가 "다운로드폴더의 크라우니터미널 패키지 폴더를
정독하고 구현하라" 지시 →
ls | grep -i "터미널" 0건 미스(NFC 패턴 vs NFD 파일명 바이트 불일치)
→ 그 결과에 우연히 걸린 전혀 다른 이름의 폴더 PowerTerminal을 대체물로 단정 → 5시간 헛작업)의
재발 방지 도구 2종을 제작했다.
무엇을 했는지
- 한선씨 판정 코어
경로찾기.한선: 유니코드 정규화(NFD/NFC) 판정 + 이름일치 4상 등급 로직.
-
자모분해정규화판정(후보이름, 검색어): 정규화 차이만 있는 같은 이름인지(1/-1)
-
이름일치등급(요청이름, 발견이름): 티(완전일치)/옴(부분포함·2그램중첩)/타(불일치)/음(0건)
-
대체물경고(요청이름, 발견이름): 티가 아니면 사람이 읽을 경고문 생성
- 정규화는 한선씨 내장함수가 없어
체계()+python3(NFC normalize)로 위임, stdout 직접캡처
- CLI 진입점:
CT_TEST=1이면 셀프테스트, 아니면
CT_REQ/
CT_FOUND(ASCII 환경변수명)로
단발 판정 후
등급:X /
경고:... 출력
- sh 래퍼
경로찾기.sh: 디렉토리 스캔·분류(정확일치/부분일치/유사이름)만 담당, 판정은 전부
컴파일된
.toau 코어에 위임.
--보정 <경로> 옵션으로 기존에 잘못 찾은 경로 하나만 재검사 가능.
등급이 타/음이면 exit code 3 + 경고문 출력.
함정 및 수정
- 초안 sh 스크립트는
검색어·디렉토리·보정경로 등 한글 bash 변수명을 썼다가
macOS bash 3.2 파싱 깨짐(
검색어=크라우니터미널 패키지: 명령을 찾을 수 없음) 실측 →
전부 ASCII 변수명(QUERY, TARGET_DIR, FIX_PATH, FOUND_NAME, GRADE 등)으로 교체해 해결.
(한글 환경변수명 불가 함정과 동일 계열 — 이번엔 bash 변수명 전반으로 확장 확인.)
검증 결과
- 컴파일 경고 0건 (일반 +
CROWNY_STRICT=1 둘 다)
- 셀프테스트:
전체통과 10/10
- 사고 재현 테스트 1 (정상 검색):
크라우니터미널 패키지 → 정확일치 발견(NFD 파일이어도), 등급=티, exit 0
- 사고 재현 테스트 2 (보정검사): 요청=
크라우니터미널 패키지, 후보=PowerTerminal → 등급=타,
[진행금지] ... 이름 불일치(타). 사용자 확인 없이 대체물로 작업하지 마라. 출력, exit 3
관련 파일
/Users/ef/.claude/skills/분별/경로찾기.한선
/Users/ef/.claude/skills/분별/경로찾기.toau
/Users/ef/.claude/scripts/경로찾기.sh
학습
crownycode-learn.sh add 한글경로_NFD_NFC_양방향찾기 "..."
crownycode-learn.sh add 이름일치등급_4상_대체물차단 "..."
- 사전 조회(search "NFC 정규화", "이름일치 등급") 모두 MISS — 신규 로직으로 확인 후 생성.
잔여 이슈
--보정 없는 스캔 모드의 "유사이름" 구간은 2그램 중첩 기준이 느슨해 접두어가 겹치는 무관한
파일이 다수 포함됨(예: "크라우니*" 56건). 정확일치/부분일치가 우선이라 최종 등급 판정에는
영향 없으나, 표시 노이즈를 줄이려면 향후 임계값(중첩비율)을 올릴 수 있음.
- 다른 세션이 이 도구를 표준 절차로 삼으려면
~/.claude/templates/한선씨-가드레일.md 또는
글로벌 CLAUDE.md에 "새 경로/폴더 찾기 전
경로찾기.sh 필수" 조항 추가를 검토할 것(이번 작업
범위 밖이라 미반영).