컴포저 어댑터 합성 — 단위 출력→입력 체이닝
개요
2026-07-05-t2-컴포저-고도화.md에서 병렬 나열 조합(10/10)까지 달성한 뒤 남은 갭은
체이닝: "A의 결과를 B에 넣어" 형 요청. 이번 작업은 ①의도분해에 체이닝 연결어 인식
②단위 A 반환값→단위 B 첫 인자 시그니처 타입추정(수/글/맵/모름)+등급(강/약/불일치/불명)
어댑터 자동생성 ③기존 K=5 검증 수렴 루프 재사용을 적용하고, 학습DB 실존 단위로 구성한
체이닝형 5건 벤치로 검증했다.
무엇을 했는지
1. 체이닝 감지/분해 — 의도분해.한선에 추가
체이닝감지(텍스트): "결과를"/"이어서"/"그걸로" 중 하나라도 있으면 참. 기존 병렬 벤치
체이닝분해(텍스트): "해서 그걸로" → "결과를(+꼬리마커제거: 에 넣어/에 이어서/이어서/
주실행()은 체이닝 감지 시체이닝|참+체인부품|A+체인부품|B라인을 출력하고,
체이닝|거짓 + 세그먼트|.. 포맷을 그대로 유지(하위호환, 기존 decompose_intent
파서의 세그먼트| grep 패턴 불변).2. 어댑터 합성 — 어댑터합성.한선 (신규 엔진)
- 입력:
/tmp/컴포저_부품_1.한선(A),/tmp/컴포저_부품_2.한선(B) — 기존 cmd_compose와
- 대표(루트) 함수 선정: 복합컴포저.한선과 동일 휴리스틱(자기정의 외 등장<=1인 마지막
주조합() 실행문이 있어 가져오기 불가 — VM 함정 회피, 최소 헬퍼만 복사).
- A 반환타입 추정(
반환타입추정): 반환식이 리터럴/연산이면 직접분류, 순수 식별자(변수)면
- B 첫 인자 타입 추정(
인자타입추정): 함수 본문 내 사용처(맵함수 첫인자/인덱싱→맵,
- 등급결정: 강(타입일치, 직결 호출) / 약(수↔글,
문자열변환/숫자변환어댑터 삽입) /
- 강/약일 때
조합체인(...)어댑터 함수를 생성하고, 각 인자의 타입추정 결과 기반 리터럴로
3. 검증 수렴 — 기존 K=5 루프 재사용
크라우니도구.sh에cmd_compose_chain()추가: 어댑터합성 실행→cmd_verify(컴파일+실행)
repair_compose_failure()(미정의 함수 호출을 리터럴 0으로 치환)로 부품 패치
→재시도, 최대 5회. 병렬경로(cmd_compose)와 동일 메커니즘 그대로 재사용(신규 수리로직
작성 안 함).
- 실측 검증: A부품에 존재하지 않는 헬퍼함수 호출을 주입 → 1차 컴파일 실패
오라클검증|FAIL|컴파일오류) → repair_compose_failure가 호출식을 0으로 치환 →
2차 시도 컴파일+실행 성공. 실제 벤치 5건은 전부 1차 시도에서 통과(수리 루프 미발동) —
이전 병렬 벤치와 동일한 패턴, 메커니즘 자체는 별도 주입 케이스로 end-to-end 확인.4. 배선
크라우니도구.sh:decompose_raw()(엔진 원문 출력 공용)+is_chaining()+chain_parts()
cmd_compose() 최상단에 체이닝 감지 분기(체이닝이면 cmd_compose_chain 위임,
아니면 기존 병렬 경로 그대로 — decompose_intent() 시그니처/동작 불변).
crownycode-brain.sh1.5단 연결어 정규식에결과를|이어서|그걸로추가(기존
하고|그리고|및|,|+| 과 | 와 에 병기) — 이게 없으면 체이닝 문장이 정확조회 MISS 후에도
compose 경로로 넘어가지 못해 신기능이 표준 진입점(crownycode-brain.sh run)에서
도달 불가능했음(실측으로 갭 발견 후 즉시 최소 1줄 수정).벤치 결과 (5건 — 학습DB 실존 단위로 구성, 크라우니도구.sh compose 실제 경로로 실행)
| # | 요청 | 체이닝감지 | 어댑터등급 | 컴파일 | 실행 | 값전달확인 |
|---|---|---|---|---|---|---|
| 1 | 환불 판정 결과를 예시 생성에 넣어 | 참 | 강(글→글) | PASS | PASS | 확인 — "환불가능"→"'환불가능'의 예시: ..." |
| 2 | 배송비 계산 결과를 예시 생성에 넣어 | 참 | 약(수→글, 문자열변환) | PASS | PASS | 확인 — 3000→"'3000'의 예시: ..." |
| 3 | 메시지 에코 결과를 예시 생성에 이어서 | 참 | 강(글→글) | PASS | PASS | 확인 — "ECHO:예시값"→"'ECHO:예시값'의 예시: ..." |
| 4 | 진단결과 캐싱 해서 그걸로 배송비 계산 | 참 | 불일치(맵→수) → 병렬 폴백 | PASS | PASS | 해당없음(정직 폴백, 체인 미생성) |
| 5 | 학생채점 결과를 팀원 근태에 이어서 | 참 | 불명(맵→모름) → 병렬 폴백 | PASS | PASS | 해당없음(정직 폴백, 체인 미생성) |
정직 한계
- 타입추정은 텍스트 표면 휴리스틱(진짜 타입시스템 아님).
맵꺼내(...)직접 반환은 실제
진단캐시조회가 그 예 — 안전
방향으로 치우친 오분류, 불일치 판정을 유도해 잘못된 체인 생성보다 낫다는 원칙).
- 함수명 충돌 드랍 로직 없음(A/B가 동일 함수명을 정의하면 컴파일 실패 가능) — 단일 유닛쌍
- 인자타입추정은 함수 "첫 인자"만 검사(체인 대상), 나머지 인자는 데모 리터럴만 생성.
체이닝분해는 "해서 그걸로"/"결과를 ~에 넣어,이어서"/"~이어서" 3형만 인식 — 조사 없는
학습 등록
성공한 강/약 체이닝 3건이 crownycode-brain.sh의 cmd_compose_chain을 통해 자동으로
crownycode-learn.sh add로 등록됨(대표 성공 1건 = 환불_판정_결과를_예시_생성에_넣어,
lint 통과: 판정|티|셀코어룰엔진):
환불_판정_결과를_예시_생성에_넣어배송비_계산_결과를_예시_생성에_넣어메시지_에코_결과를_예시_생성에_이어서
회귀 확인
- 기존 병렬 벤치 10건(
2026-07-05-t2-컴포저-고도화.md) 전체 재실행 — 10/10 PASS 유지. crownycode-brain.sh run "예약 충돌 검사 결과를 진단결과 캐싱에 넣어"로 표준 진입점
HIT|복합조합|티 정상 경로, 불명 판정 시 병렬 폴백까지 정상 동작.관련 파일
/Users/ef/Downloads/CrownyTVM/crownycode-agent/partner-tools/의도분해.한선
의도분해.한선.bak-07052211
/Users/ef/Downloads/CrownyTVM/crownycode-agent/partner-tools/어댑터합성.한선(신규)/Users/ef/Downloads/CrownyTVM/crownycode-agent/partner-tools/크라우니도구.sh
decompose_raw/is_chaining/chain_parts/cmd_compose_chain 추가, cmd_compose
최상단 체이닝 분기 삽입) — 백업: 크라우니도구.sh.bak-07052211
/Users/ef/Downloads/CrownyTVM/crownycode-agent/partner-tools/복합컴포저.한선
복합컴포저.한선.bak-07052211)
/Users/ef/.claude/scripts/crownycode-brain.sh(1.5단 연결어 정규식에결과를|이어서|그걸로
crownycode-brain.sh.bak-<시각>잔여 이슈
- 3단 이상 체이닝(A→B→C)은 미지원 — 현재는 단일 A→B 쌍만.
- 조사 없는 한국어 체이닝 문형("A를 B로") 미인식.
- 타입추정이 "맵" 오탐(실제 스칼라 반환을 맵으로 오분류)하는 경우 정직하게 불일치로