함수분해 자동학습 파이프 — 컴포저 재료 자동 증식
개요
컴포저(t2, 크라우니도구.sh compose)는 학습DB 단위 함수를 조합해 복합 요청을 처리한다.
기존 crownycode-brain.sh learn은 파일 통짜 등록만 했다 — 조합 재료(작은 함수 단위 학습 항목)가
늘지 않으면 컴포저의 조합 다양성이 정체된다. 이번 작업으로 learn에 --분해 옵션을 추가해,
통짜 등록 뒤 파일 내 함수를 중괄호 깊이 추적으로 정확히 분리해 fn_<원intent>_<함수명> intent로
학습DB에 추가 등록하도록 했다. 래칫 배치스펙(crownycode-ratchet.sh batch-spec)의 학습 지시문에도
--분해를 기본 포함시켜, 앞으로의 MISS 배치 처리부터 자동으로 조합 재료가 증식되게 했다.
무엇을 했는지
~/.claude/scripts/lib/함수분해.pl(신규) — 한선씨 소스에서함수 이름(...) { ... }블록을
함수 f(n) { 반환 n })와 중첩 제어문(함수 안 만약/동안)을 모두 정확히 처리.
사용: perl 함수분해.pl <입력파일> <출력디렉토리> → <출력디렉토리>/<순번>_<함수명>.txt
~/.claude/scripts/crownycode-brain.sh
cmd_learn: --분해 플래그 파싱 추가(위치 무관, 기존 intent/file 위치인자는 그대로 유지 —
플래그 없으면 기존 동작과 100% 동일, 회귀 없음).
- cmd_learn_decompose 신규 함수: 함수분해.pl 호출 → 각 함수를
fn_<원intent>_<함수명> intent로 crownycode-learn.sh add 호출 → 등록/파편(50자 미만)스킵/
중복스킵/기타스킵을 카운트해 한 줄 보고(분해학습|...) + ~/.crownycode/분해학습로그.psv
(시각|원intent|함수수|등록수|스킵수) 누적. 조용히 넘어가지 않고 항상 카운트 보고.
- 상단 사용법 주석·learn dispatch 사용법 메시지에 [--분해] 반영.
~/.claude/scripts/crownycode-ratchet.sh:cmd_batch_spec의 학습 지시 줄에
--분해 추가 — 신규 MISS 배치부터 자동으로 함수단위 재료 증식.검증 (5항)
- 함수 3개(모두 ≥50자) → learn --분해 → 원본1 + fn_3건 등록, lookup 각각 HIT:
검증1b_계산모음큰.한선(제곱계산해서반환/두수를더해서결과반환/둘중더큰값찾아서반환)로
학습완료|테스트분해도구_계산모음큰 ... / 분해학습|...함수3건 발견|등록3건|파편스킵0건|중복스킵0건|기타스킵0건
확인. 4개 intent(원본+fn_ 3개) 모두 lookup에서 HIT:학습DB, 코드 내용도 정확히 분리됨(중첩 만약 포함 함수 포함).
- 함수 1개(50자 미만 포함) 파편 스킵 카운트 정확:
검증1_계산모음.한선(제곱계산/합계산/최대값찾기,
분해학습|...함수3건 발견|등록1건|파편스킵2건. lookup으로
등록1건(fn_..._최대값찾기)은 HIT, 파편 2건(fn_..._제곱계산, fn_..._합계산)은 MISS 확인 — 카운트와
실제 DB 상태 일치.
- 기존 learn(옵션 없이) 무변화 회귀:
검증3_회귀.한선을--분해없이learn만 호출 →
fn_... intent는 MISS, 분해학습로그.psv에 해당 건 기록 없음 — 옵션 미지정 시
분해 로직이 전혀 실행되지 않음(안전 기본값) 확인.
- 중괄호 중첩(함수 안 만약/동안) 정확 추출: 검증1b의
둘중더큰값찾아서반환함수(내부에만약{...}
}까지 정확히 1블록으로 추출됨(perl 문자단위 깊이추적으로 확인,
중간에 끊기거나 다음 함수를 삼키지 않음). 별도 함수분해.pl 단독 실행 테스트에서도 문자열 리터럴
내부의 {/}("중괄호{테스트}포함문자열")가 깊이 계산에서 올바르게 무시됨을 확인.
- 동일 intent 재실행 시 중복스킵:
검증1b_계산모음큰.한선을 같은 intent로 재실행 →
이미 존재, 분해는 함수3건 발견|등록0건|중복스킵3건 — 정확히 카운트.테스트 등록분은 검증 후 perl(perl -i -ne 'print unless /테스트분해도구/')로 학습DB(학습.dat)·
주DB(all_patterns.dat)·별칭파일(keywords_alias.dat)·분해학습로그.psv에서 정리, 후행 개행 보존 확인
(각 파일 마지막 바이트 0a 확인). 최종 lookup으로 테스트 intent MISS 재확인 완료.
batch-spec 갱신 diff 요약
crownycode-ratchet.sh의 cmd_batch_spec 학습 지시 한 줄만 변경:
diff- 통과분만 학습: ~/.claude/scripts/crownycode-brain.sh learn "<인텐트 원문>" <파일> ("거부" 시 수정 재시도)
+ 통과분만 학습: ~/.claude/scripts/crownycode-brain.sh learn "<인텐트 원문>" <파일> --분해 ("거부" 시 수정 재시도, --분해=함수단위 추가등록으로 컴포저 재료 증식)
crownycode-brain.sh는 cmd_learn 확장(플래그 파싱 삽입) + cmd_learn_decompose 함수 신규 추가
+ 상단 주석/사용법 메시지 2곳 갱신. 상세 diff는 백업본과 비교 가능(아래 경로).
관련 파일
/Users/ef/.claude/scripts/lib/함수분해.pl(신규)/Users/ef/.claude/scripts/crownycode-brain.sh(수정 —cmd_learn,cmd_learn_decompose추가)/Users/ef/.claude/scripts/crownycode-ratchet.sh(수정 —cmd_batch_spec1줄)- 백업:
/Users/ef/.claude/scripts/crownycode-brain.sh.bak-07061937,
/Users/ef/.claude/scripts/crownycode-ratchet.sh.bak-07061937
- 분해 로그:
~/.crownycode/분해학습로그.psv
잔여 이슈
함수분해.pl은 perl(문자단위 스캔)로 구현했다 — 이 저장소의 학습/래칫/하비스트 스크립트군
crownycode-learn.sh, crownycode-brain.sh, crownycode-ratchet.sh, selcore-harvest.sh)이
이미 전부 bash+perl/awk 인프라 도구이며 이들 중 .한선 동반이 있는 것이 없다(코드 학습/조회
파이프라인은 도메인 로직이 아니라 툴링으로 취급되는 기존 관례) — 이 관례를 따랐다.
crownyc run으로 실제 컴파일된.toau를 실행하면[STR] count=...진단 라인이 반복 출력되며
learn/lookup 경로는 hanseonc_high 컴파일 성공 여부만 확인하므로 이번 기능에는 영향 없음).
기타스킵(intent 형식 불량 등)은 카운트는 되지만 실제 발생 사례를 이번 검증에서는 만들지 못함