← 목록
기타 2026-07-05 9KB 읽기 8분

컴포저 어댑터 합성 — 단위 출력→입력 체이닝

개요

2026-07-05-t2-컴포저-고도화.md에서 병렬 나열 조합(10/10)까지 달성한 뒤 남은 갭은 체이닝: "A의 결과를 B에 넣어" 형 요청. 이번 작업은 ①의도분해에 체이닝 연결어 인식 ②단위 A 반환값→단위 B 첫 인자 시그니처 타입추정(수/글/맵/모름)+등급(강/약/불일치/불명) 어댑터 자동생성 ③기존 K=5 검증 수렴 루프 재사용을 적용하고, 학습DB 실존 단위로 구성한 체이닝형 5건 벤치로 검증했다.

무엇을 했는지

1. 체이닝 감지/분해 — 의도분해.한선에 추가

  • 체이닝감지(텍스트): "결과를"/"이어서"/"그걸로" 중 하나라도 있으면 참. 기존 병렬 벤치
10건(하고/그리고/및만 사용)에는 이 세 마커가 전혀 등장하지 않음을 실측 확인 — 무회귀.
  • 체이닝분해(텍스트): "해서 그걸로" → "결과를(+꼬리마커제거: 에 넣어/에 이어서/이어서/
넣어/에)" → "이어서" 순으로 마커를 찾아 [A, B] 2세그먼트로 분해. 실패 시 빈 배열(정직 실패).
  • 주실행()은 체이닝 감지 시 체이닝|참 + 체인부품|A + 체인부품|B 라인을 출력하고,
아니면 기존 체이닝|거짓 + 세그먼트|.. 포맷을 그대로 유지(하위호환, 기존 decompose_intent 파서의 세그먼트| grep 패턴 불변).

2. 어댑터 합성 — 어댑터합성.한선 (신규 엔진)

  • 입력: /tmp/컴포저_부품_1.한선(A), /tmp/컴포저_부품_2.한선(B) — 기존 cmd_compose와
동일 파일 규약 재사용.
  • 대표(루트) 함수 선정: 복합컴포저.한선과 동일 휴리스틱(자기정의 외 등장<=1인 마지막
후보, 없으면 마지막 정의, "시작" 데모래퍼는 제외)의 독립 사본 이식(복합컴포저.한선은 top-level에 주조합() 실행문이 있어 가져오기 불가 — VM 함정 회피, 최소 헬퍼만 복사).
  • A 반환타입 추정(반환타입추정): 반환식이 리터럴/연산이면 직접분류, 순수 식별자(변수)면
함수 본문을 순차 스캔하며 유지한 "최근 대입값 맵"으로 1홉 역추적 후 재분류. 맵 증거(맵꺼내/ 맵생성/맵넣어)는 최우선 확정(가장 특이적 신호).
  • B 첫 인자 타입 추정(인자타입추정): 함수 본문 내 사용처(맵함수 첫인자/인덱싱→맵,
문자열함수 인자·따옴표 인접 연결→글, 산술·비교 연산자 인접→수) 스캔. 우선순위 맵>글>수.
  • 등급결정: 강(타입일치, 직결 호출) / 약(수↔글, 문자열변환/숫자변환 어댑터 삽입) /
불일치(둘 다 판명됐으나 비호환, 예: 맵↔수) / 불명(하나라도 "모름") — 후자 둘은 정직 실패로 조합체인을 생성하지 않고 두 함수를 그대로 병기(병렬 폴백)한다.
  • 강/약일 때 조합체인(...) 어댑터 함수를 생성하고, 각 인자의 타입추정 결과 기반 리터럴로
데모 호출까지 자동 삽입(값전달 검증용).

3. 검증 수렴 — 기존 K=5 루프 재사용

  • 크라우니도구.shcmd_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.sh 1.5단 연결어 정규식에 결과를|이어서|그걸로 추가(기존
하고|그리고|및|,|+| 과 | 와 에 병기) — 이게 없으면 체이닝 문장이 정확조회 MISS 후에도 compose 경로로 넘어가지 못해 신기능이 표준 진입점(crownycode-brain.sh run)에서 도달 불가능했음(실측으로 갭 발견 후 즉시 최소 1줄 수정).

벤치 결과 (5건 — 학습DB 실존 단위로 구성, 크라우니도구.sh compose 실제 경로로 실행)

#요청체이닝감지어댑터등급컴파일실행값전달확인
1환불 판정 결과를 예시 생성에 넣어강(글→글)PASSPASS확인 — "환불가능"→"'환불가능'의 예시: ..."
2배송비 계산 결과를 예시 생성에 넣어약(수→글, 문자열변환)PASSPASS확인 — 3000→"'3000'의 예시: ..."
3메시지 에코 결과를 예시 생성에 이어서강(글→글)PASSPASS확인 — "ECHO:예시값"→"'ECHO:예시값'의 예시: ..."
4진단결과 캐싱 해서 그걸로 배송비 계산불일치(맵→수) → 병렬 폴백PASSPASS해당없음(정직 폴백, 체인 미생성)
5학생채점 결과를 팀원 근태에 이어서불명(맵→모름) → 병렬 폴백PASSPASS해당없음(정직 폴백, 체인 미생성)
컴파일+실행 성공률 5/5 (100%) — 기준(3/5) 초과 완주. 체이닝 실제 적용(강/약 어댑터 생성) 3/5, 값전달 실행 확인 3/3(전량 실측 — 아웃풋에 A의 계산결과가 B의 문자열에 실제로 삽입됨을 육안 확인, placeholder 아님). 나머지 2건은 타입 불일치/불명을 정직 판정해 체인을 만들지 않고 병렬 병기로 안전 폴백(컴파일/실행은 여전히 성공).

정직 한계

  • 타입추정은 텍스트 표면 휴리스틱(진짜 타입시스템 아님). 맵꺼내(...) 직접 반환은 실제
런타임 값이 숫자여도 "맵"으로 분류될 수 있음(4번 벤치, 진단캐시조회가 그 예 — 안전 방향으로 치우친 오분류, 불일치 판정을 유도해 잘못된 체인 생성보다 낫다는 원칙).
  • 함수명 충돌 드랍 로직 없음(A/B가 동일 함수명을 정의하면 컴파일 실패 가능) — 단일 유닛쌍
한정 기능, 3단 이상 체이닝은 미지원(범위 밖).
  • 인자타입추정은 함수 "첫 인자"만 검사(체인 대상), 나머지 인자는 데모 리터럴만 생성.
  • 체이닝분해는 "해서 그걸로"/"결과를 ~에 넣어,이어서"/"~이어서" 3형만 인식 — 조사 없는
자연스러운 한국어("A를 B로")는 아직 미지원(향후 확장 여지, 정직 기재).

학습 등록

성공한 강/약 체이닝 3건이 crownycode-brain.shcmd_compose_chain을 통해 자동으로 crownycode-learn.sh add로 등록됨(대표 성공 1건 = 환불_판정_결과를_예시_생성에_넣어, lint 통과: 판정|티|셀코어룰엔진):

  • 환불_판정_결과를_예시_생성에_넣어
  • 배송비_계산_결과를_예시_생성에_넣어
  • 메시지_에코_결과를_예시_생성에_이어서
불일치/불명(4,5번)은 학습보류(정직) — 병렬 폴백 결과를 학습DB에 넣지 않음.

회귀 확인

  • 기존 병렬 벤치 10건(2026-07-05-t2-컴포저-고도화.md) 전체 재실행 — 10/10 PASS 유지.
  • crownycode-brain.sh run "예약 충돌 검사 결과를 진단결과 캐싱에 넣어"로 표준 진입점
End-to-End 확인 — 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로") 미인식.
  • 타입추정이 "맵" 오탐(실제 스칼라 반환을 맵으로 오분류)하는 경우 정직하게 불일치로
떨어지는 대신, 향후 값 샘플링(런타임 프로브 1회 실행 후 실제 타입 관찰)으로 정밀화할 여지 있음 — 현재는 텍스트 휴리스틱까지만 완주.