← 목록
크라우니코드 2026-05-22 5KB 읽기 5분

CrownyCode FAB 단계 결함 진단 및 수정

날짜

2026-05-22

개요

CrownyCode 에이전트(crownycode-agent/agent.sh run)의 FAB(최종 코드 조립) 단계 결함을 진단하고 수정했다. 2가지 테스트 케이스 모두 실패했으나 수정 후 정상 작동 확인.

증상

  • "배열을 정렬해줘" → 패턴DB에서 퀵정렬 발견했으나 FAB 실패 후 한 줄 압축 코드 출력(검증 없음)
  • "현재시간 출력" → 패턴 발견했으나 불완전한 함수(함수 출력() { 미완성 코드) 출력

원인 분석 (4개)

원인 1: agent.sh FAB 실패 처리 분기에서 검증 누락

  • 위치: agent.sh 921~940줄 (FAB 실패 후 패턴DB 폴백 경로)
  • 문제: 패턴DB에서 코드를 찾으면 검증(verify_code) 없이 바로 출력
  • 결과: 불완전하거나 실행 불가한 코드도 그대로 반환됨

원인 2: 패턴DB의 퀵정렬 코드가 crowny VM에서 실행 불가

  • 위치: crownycode/data/all_patterns.dat
  • 문제: 기존 코드가 원소(배열, i) 함수를 사용하는데 crowny 바이너리에 이 함수가 없음
  • 결과: 컴파일은 되나 실행 시 에러

원인 3: 패턴DB의 현재시간·출력 코드가 불완전

  • 위치: crownycode/data/all_patterns.dat
  • 문제: 현재시간|han|함수 현재시간() { — 여는 중괄호만 있고 내용·닫는 괄호 없음
  • 원인: 패턴 저장 시 줄바꿈이 잘린 것으로 추정

원인 4: synonyms.dat의 잘못된 동의어 매핑 + keywords.dat 우선순위 미설정

  • 위치: intent/synonyms.dat 405번 줄
  • 문제: 현재시간|날짜 매핑으로 "현재시간 출력" 입력에서 현재시간날짜로 정규화되어 출력 intent가 우선 적용됨
  • 추가: keywords.dat에서 현재시간이 우선순위 3 (vs 출력 우선순위 1)이어서 항상 지던 문제

수정 내용

1. agent.sh — FAB 실패 처리 분기에 검증 로직 추가

  • 패턴DB 히트 시 verify_code()로 검증 후 성공 시에만 반환
  • 검증 실패 시 메인 파이프라인으로 진행하도록 변경
  • 파일: /Users/ef/Downloads/CrownyTVM/crownycode-agent/agent.sh

2. all_patterns.dat — 3개 패턴 수정

  • 퀵정렬: 원소(배열, i)배열[i] 인덱스 접근 방식으로 교체 + 완전한 코드 + 실행 예제 포함
  • 현재시간: 함수 현재시간() { (미완성) → 변수 현재 = 지금()\n출력값(...) (완전 코드)
  • 출력: 함수 출력() { (미완성) → 함수 출력하기(값) (완전 코드)
  • 파일: /Users/ef/Downloads/CrownyTVM/crownycode/data/all_patterns.dat

3. synonyms.dat — 잘못된 동의어 매핑 제거

  • 현재시간|날짜 (405번 줄) → 주석 처리
  • 현재시간|시간_현재시간 (856번 줄) → 주석 처리 (keywords.dat에서 직접 처리)
  • 파일: /Users/ef/Downloads/CrownyTVM/crownycode-agent/intent/synonyms.dat

4. keywords.dat현재시간 우선순위 향상

  • 현재시간|셀코어_현재시간|3현재시간|현재시간|1 + 현재시간출력|현재시간|1 추가
  • 파일: /Users/ef/Downloads/CrownyTVM/crownycode-agent/intent/keywords.dat

재테스트 결과

"배열을 정렬해줘"

  • 이전: FAB 실패 → 검증 없는 한 줄 압축 코드 출력
  • 이후: FAB 실패 → 패턴DB에서 퀵정렬(완전 코드) 발견 → 검증 통과 → 정상 출력

"현재시간 출력"

  • 이전: intent=출력 → 불완전 패턴 출력
  • 이후: intent=현재시간변수 현재 = 지금()\n출력값("현재 유닉스시각: " + ...) 출력

컴파일 검증

  • crowny VM (/Users/ef/Downloads/CrownyTVM/target/release/crowny): 두 케이스 모두 정상 실행
  • hanseonc_high: 퀵정렬 정상, 현재시간은 가져오기 "날짜.한선" import 필요 (crowny VM과 내장 함수 셋 차이)

관련 파일

  • /Users/ef/Downloads/CrownyTVM/crownycode-agent/agent.sh — FAB 실패 처리 로직
  • /Users/ef/Downloads/CrownyTVM/crownycode-agent/fab/fab.sh — FAB 실행 파일
  • /Users/ef/Downloads/CrownyTVM/crownycode/data/all_patterns.dat — 패턴DB
  • /Users/ef/Downloads/CrownyTVM/crownycode-agent/intent/keywords.dat — 키워드 사전
  • /Users/ef/Downloads/CrownyTVM/crownycode-agent/intent/synonyms.dat — 동의어 사전

잔여 이슈

  • FAB 자체(버블정렬 의미어)의 코드 생성 버그: 버블정렬 의미어의 본문내 단계 처리 시 닫는 } 구조 불균형 (컴파일 에러: 기대: RBrace, 실제: Eof) — fab-kernel.han 코드생성기 수정 필요
  • 현재시간 의미어 (의미어.dat 47906번 줄): @단계 {}, @테스트 {} 모두 비어 있어 FAB 경로에서 빈 함수 생성 — 내용 채움 필요
  • crowny VM vs hanseonc_high VM 내장 함수 불일치 (지금() 등): verify_code()가 crowny를 사용하므로 hanseonc_high용 패턴과 crowny용 패턴이 분리되어야 함