crowny-locate — 서비스↔소스 통합 검색기 (세션 오보 근본해결)
문제 (bookagent 사건이 표본)
"같은 크라우니 서비스인데 세션들이 서로 못 찾고 잘못 보고한다." 실측 근본원인:
- 소스↔바이너리 매핑이 런처 ps인자/스크립트에만 존재 — 어떤 레지스트리에도 없음.
bookagent.toau ←
/Users/ef/crowny-agent/책서버.한선 은 런처 `if [-f bin] then crownyc run bin
else hanseonc_high <src> > bin` 명령에만 기록됨.
- 레지스트리 5중 파편화, 조인키 없음: gateway.yaml(224 도메인)·registry.psv(34)·
crowny-data/services(159 소스)·crowny-data/bin(138 바이너리)·PORTS.md(203). 도메인↔포트↔PID↔
바이너리↔소스를 잇는 SSOT 부재.
- TOAU 바이너리가 문자열 리터럴을 3진 인코딩 →
strings/grep로 ASCII·한글 모두 역추적 불가
(bookagent.toau ASCII토큰 1개). 그래서 소스를 grep으로 못 찾음.
- 소스가 50+ 폴더에 한글명으로 흩어짐(crowny-agent·crowny-project·CrownyOS/apps…). 바이너리는
/tmp에 위치(휘발). 네이밍도 불일치(bookagent.toau ↔ 책서버.한선) → 동명매칭도 실패.
- 학습DB는
intent|han|code 코드패턴 인덱스 — 서비스를 색인한 적 없음. "셀코어면 못 찾을 수 없다"의
전제가 안 맞음(서비스는 셀코어/학습DB 어디에도 등록된 적 없음). 규칙저장소.dat도 코드룰일 뿐.
해결 — crowny-locate
모든 출처를 단일 인덱스로 조인하고 질의.
~/.claude/scripts/crowny-locate.sh — 디스패처(zsh)
~/.claude/scripts/crowny-locate-build.js — 인덱스 빌더(ps·lsof·gateway.yaml·find·런처스크립트 조인)
~/.claude/scripts/서비스색인.한선 — 동반(해결 우선순위 로직, 컴파일·실행 검증)
- 인덱스:
~/.claude/knowledge/SERVICE_INDEX.psv (domain|port|status|pid|binary|source|method|note)
소스 해결 우선순위 (신뢰도순)
- launcher — 런처 ps인자/스크립트의 실제 빌드명령
hanseonc_high <src> > <bin> (최고)
- name-match —
<bin>.toau ↔ <bin>.한선
- domain-kw — book.crowny.org → book*.한선
- node — .toau 없고 .js 서버 떠있음 → 그 .js
- orphan — 역추적 실패 → 후보 제시(오보 금지, 정직 보고)
사용
crowny-locate build # 인덱스 재생성(10분 캐시)
crowny-locate source <도메인|포트> # 소스(.한선) 경로 — 핵심
crowny-locate find <키워드> # 검색
crowny-locate port <포트> # 포트에 뭐가
crowny-locate orphans # 미해결 목록
실증
crowny-locate source book.crowny.org → /Users/ef/crowny-agent/책서버.한선 [launcher] ✓ 1889줄
(원래 못 찾던 것을 즉시 역추적)
- 인덱스 227행, 소스해결 173, 고아 54(대부분 stunnel/게이트웨이 인프라·verdaccio node — .한선 개념 없음).
개선 내역
- 런처 .sh/.plist 재귀 수확(서브폴더) → 런처매핑 7→13
- 소스루트에 CrownyOS/apps 추가 → 메신저서버 등 name-match 복원
- node 서비스 라벨링 → kimpresidentsk 등 orphan 오라벨 해소(method=node)
잔여
- gwlive/aiserver 등 일부 /tmp .toau는 빌드명령이 변수(
$LIVE_TOAU)라 정규식 미수확 → orphan으로 정직 표시.
- 향후: 컴파일/기동 훅에서 source→binary→port를 인덱스에 직접 기록(빌드 매니페스트)하면 고아 0 가능.