← 목록
기타 2026-07-06 7KB 읽기 7분

함수분해 자동학습 파이프 — 컴포저 재료 자동 증식

개요

컴포저(t2, 크라우니도구.sh compose)는 학습DB 단위 함수를 조합해 복합 요청을 처리한다. 기존 crownycode-brain.sh learn은 파일 통짜 등록만 했다 — 조합 재료(작은 함수 단위 학습 항목)가 늘지 않으면 컴포저의 조합 다양성이 정체된다. 이번 작업으로 learn--분해 옵션을 추가해, 통짜 등록 뒤 파일 내 함수를 중괄호 깊이 추적으로 정확히 분리해 fn_<원intent>_<함수명> intent로 학습DB에 추가 등록하도록 했다. 래칫 배치스펙(crownycode-ratchet.sh batch-spec)의 학습 지시문에도 --분해를 기본 포함시켜, 앞으로의 MISS 배치 처리부터 자동으로 조합 재료가 증식되게 했다.

무엇을 했는지

  1. ~/.claude/scripts/lib/함수분해.pl (신규) — 한선씨 소스에서 함수 이름(...) { ... } 블록을
문자열 리터럴("...")·라인주석(//) 인지 중괄호 깊이 추적으로 추출. 단일행 함수 (함수 f(n) { 반환 n })와 중첩 제어문(함수 안 만약/동안)을 모두 정확히 처리. 사용: perl 함수분해.pl <입력파일> <출력디렉토리><출력디렉토리>/<순번>_<함수명>.txt
  1. ~/.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 사용법 메시지에 [--분해] 반영.
  1. ~/.claude/scripts/crownycode-ratchet.sh: cmd_batch_spec의 학습 지시 줄에
--분해 추가 — 신규 MISS 배치부터 자동으로 함수단위 재료 증식.

검증 (5항)

  1. 함수 3개(모두 ≥50자) → learn --분해 → 원본1 + fn_3건 등록, lookup 각각 HIT:
테스트 파일 검증1b_계산모음큰.한선(제곱계산해서반환/두수를더해서결과반환/둘중더큰값찾아서반환)로 학습완료|테스트분해도구_계산모음큰 ... / 분해학습|...함수3건 발견|등록3건|파편스킵0건|중복스킵0건|기타스킵0건 확인. 4개 intent(원본+fn_ 3개) 모두 lookup에서 HIT:학습DB, 코드 내용도 정확히 분리됨(중첩 만약 포함 함수 포함).
  1. 함수 1개(50자 미만 포함) 파편 스킵 카운트 정확: 검증1_계산모음.한선(제곱계산/합계산/최대값찾기,
앞 2개는 각 31자·49자로 50자 미만)로 분해학습|...함수3건 발견|등록1건|파편스킵2건. lookup으로 등록1건(fn_..._최대값찾기)은 HIT, 파편 2건(fn_..._제곱계산, fn_..._합계산)은 MISS 확인 — 카운트와 실제 DB 상태 일치.
  1. 기존 learn(옵션 없이) 무변화 회귀: 검증3_회귀.한선--분해 없이 learn만 호출 →
원본 intent는 HIT, fn_... intent는 MISS, 분해학습로그.psv에 해당 건 기록 없음 — 옵션 미지정 시 분해 로직이 전혀 실행되지 않음(안전 기본값) 확인.
  1. 중괄호 중첩(함수 안 만약/동안) 정확 추출: 검증1b의 둘중더큰값찾아서반환 함수(내부에 만약{...}
중첩)가 시그니처부터 최종 닫는 }까지 정확히 1블록으로 추출됨(perl 문자단위 깊이추적으로 확인, 중간에 끊기거나 다음 함수를 삼키지 않음). 별도 함수분해.pl 단독 실행 테스트에서도 문자열 리터럴 내부의 {/}("중괄호{테스트}포함문자열")가 깊이 계산에서 올바르게 무시됨을 확인.
  1. 동일 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.shcmd_batch_spec 학습 지시 한 줄만 변경:

diff- 통과분만 학습: ~/.claude/scripts/crownycode-brain.sh learn "<인텐트 원문>" <파일>  ("거부" 시 수정 재시도)
+ 통과분만 학습: ~/.claude/scripts/crownycode-brain.sh learn "<인텐트 원문>" <파일> --분해  ("거부" 시 수정 재시도, --분해=함수단위 추가등록으로 컴포저 재료 증식)

crownycode-brain.shcmd_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_spec 1줄)
  • 백업: /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=... 진단 라인이 반복 출력되며
기대한 프로그램 출력이 나오지 않는 현상을 관찰(이번 학습 파이프 작업과 무관, 별도 VM 이슈로 보임 — learn/lookup 경로는 hanseonc_high 컴파일 성공 여부만 확인하므로 이번 기능에는 영향 없음).
  • 기타스킵(intent 형식 불량 등)은 카운트는 되지만 실제 발생 사례를 이번 검증에서는 만들지 못함
(fn_ intent는 항상 유효한 문자셋으로 자동 생성되므로 정상 경로에서는 발생하지 않음 — 방어적 카운트).