SLM 파이프라인 글루 G2·G3·G4 검증/완성 (2026-06-28)
개요
차세대 크라우니 SLM의 LLM↔크라우니 의미어코드 파이프라인(영혼=크라우니 규칙코어, 육체=LLM 인코더/디코더)의 빠진 글루를 검증·완성했다. 파이프라인 구조:자연어 → [LLM 인코더] → 의미어패킷(JSON) → [크라우니 규칙코어 디스패처] → 코어패킷 → [LLM 디코더] → 자연어
(비결정·정직한정) (인과100%·결정론 구간) (비결정·정직한정)
빠진 4글루 G1~G4 중 G2·G3·G4를 컴파일+E2E 실측으로 완성했다.
무엇을 했나
G2 의미어패킷.한선 (단계간 계약 포맷) — 검증
- 인코더/코어/음경로 패킷 빌더 + 간이 JSON 파서(
패킷필드) 컴파일·동작 확인.
G4 크라우니코어_디스패처.한선 — 검증 + 버그수정
- 4상 라우팅 동작 확인: 티(learn_HIT)·음(감정도메인)·타(위반거부)·옴(MISS).
- 버그수정 — 인과ID
date %3N: macOS BSDdate는 GNU 전용%3N(밀리초) 미지원 →
"3N" + 초해상도 충돌. perl Time::HiRes 합성으로 교체
(POSIX::strftime + sprintf 밀리초, q()·단일따옴표만 사용 → 체계() 문자열 안전).
→ 클린 17자리 밀리초 ID, 충돌 없음.G3 프로토콜검증.한선 (3단 게이트) — 신규 구현
LLM 인코더 출력이 코어에 들어가기 전 방어 게이트. "어휘=닫힌집합, LLM은 선택만 → 환각 차단"의 집행 지점.- 1단 구문(syntax): 필수필드(의미어/원문해시) 누락 → HARD REJECT(타), 코어 미진입.
- 2단 어휘(vocab): 닫힌집합(의미어_index) 부재 → 음강등(거부 아님, LLM 브릿지). 디스패처 grep이 수행.
- 3단 타입(type): 품사 ∈ {동작·명사·수식} 아니면 정규화("동작")로 복구.
- 디스패처 스텝0에 인라인 통합(이중 import 회피).
테스트 + 학습
크라우니코어_디스패처_테스트.한선→ 9/9 PASS(구문위반2·위반거부·음·옴·품사정규화).- 전체 E2E(
e2e파이프라인.js:9955 폴백모드) POST /pipeline 실동작 201ms, 인과체인 로그가
- 3함수 crownycode 학습(프로토콜검증_구문게이트·품사정규화_닫힌집합·인과ID생성_이식성밀리초).
관련 파일
/Users/ef/crowny-butler/libs/크라우니코어_디스패처.한선(G4, 인과ID 수정 + G3 스텝0 통합)/Users/ef/crowny-butler/libs/의미어패킷.한선(G2)/Users/ef/crowny-butler/libs/프로토콜검증.한선(G3 신규)/Users/ef/crowny-butler/libs/크라우니코어_디스패처_테스트.한선(회귀 9/9)/Users/ef/crowny-butler/e2e파이프라인.js(:9955 E2E 서버, LLM HTTP 전용)
함정 (재발 방지)
tr -d '\012'의\012가 한선씨 문자열 이스케이프에 먹혀 개행 아닌 숫자(1,2)를 삭제 → perl 단일 출력으로 회피.crownycode-learn.sh addintent = 단일토큰만(^[a-zA-Z0-9_가-힣]{3,}$, 공백 불가), 코드 ≥ 50자.- 디스패처 import 시 top-level CLI 블록(
입력())이 실행됨 — 테스트/드라이버에서 빈 stdin이면 오류 한 줄 출력(무해).
잔여 이슈
- G1 임베딩 1603행 로더: 현재 디스패처가 의미어_index.dat를 grep 직조회로 기능 대체 중. 사전 로딩 캐시는 미구현.
- /demo GET 한글 쿼리 URL 파싱 버그:
new URL()이 공백 포함 한글 쿼리에서 실패 → 빈 응답. POST /pipeline은 정상. - 어휘 커버리지: 의미어_index 1603행 + 학습DB. 인코더 폴백은 키워드 7종 하드코딩(데모용).