← 목록
기타 2026-07-26 6KB 읽기 6분

3레이어매핑 도구 구현 (v1)

개요

/Users/ef/CrownyOS/crownyc/tools/3레이어매핑-스펙.md v1 스펙대로 고수준 한선씨→RPN→TOAU 3레이어 매핑·검증 도구를 구현. 기존 자산(clike_to_rpn.한선, hanseonc_std/hanseonc_rpn, rpn숙련.sh, crownyc) 전부 무수정 재사용, 신규 3점만 작성(오케스트레이터 .한선, 셸 표면 .sh, learn.sh add-rpn 케이스 1개).

무엇을 했는지

  1. TOAU 큐브범위 실측 메커니즘 확정추적시작()/추적끝()(opcode72/73, TRACE_ON/OFF)이 hanseonc_rpn(full 모드)에서 무해한 단일 큐브로 안정적으로 컴파일됨을 실측 확인(스펙 §7 위험1 해소). 단 hanseonc_std(core 모드)는 이 키워드가 아예 없어(hanseonc_std.asm 미정의) 미지단어→변수0으로 스택 오염 → core 모드는 TOAU범위 항상 "미상"(정직 폴백).
  2. 3레이어매핑.한선 (416줄) — 원본 소스 매 줄에 ; @L<n> 주석 + 추적시작()/추적끝() 삽입 → clike_to_rpn 1회 컴파일 → 마커 토큰/큐브 위치를 실측 스캔해 4열 매핑표(고수준줄|RPN토큰범위|TOAU큐브범위|의미코드) 생성. full 모드는 마커를 최종 산출물에 그대로 남겨(무해 no-op) 단일 빌드로 매핑표·게이트가 전부 정합. core 모드는 마커 라인만 텍스트에서 제거(주석은 보존), TOAU범위=미상.
  3. 3레이어매핑.sh (161줄, 변환로직 0, 오케스트레이션만) — clike_to_rpn.toau/3레이어매핑.toau mtime 핀 재빌드 → 오케스트레이터 호출 → 게이트①(rpn숙련.sh 검사) → 게이트②(mode별 독립 재컴파일) → 게이트③(hanseonc_high 실행 vs 산출 toau 실행 diff, stdin 고정) → 3게이트 통과 시만 learn.sh add-rpn 등록.
  4. crownycode-learn.sh add-rpn 케이스 추가 — 백업(*.bak_20260726202256) 후 awk로 *) 직전에 삽입, mv 원자교체. intent|rpn|code 레인, 기존 add/lookup/stats 등 무수정 확인.

테스트 결과 (10개 중 8 PASS, 2 발견사항)

#케이스full 모드core 모드
1산술기본3게이트 PASS3게이트 PASS
2함수단순3게이트 PASS게이트①②PASS, ③FAIL(구조적, 아래 참조)
3조건PASSPASS
4동안루프PASSPASS
5피보반복PASS③FAIL(2번과 동일 사유)
6문자열연결PASSPASS
7전방참조함수게이트①FAIL(아래 스펙이슈)
8중첩만약3중PASS
9배열맵(full 전용)PASS
10거부케이스(TCP대기)exit2, stderr "미지원: 네트워크"
실전 1회: ~/.claude/scripts/디자인이식판정.한선(33줄, 무가져오기) 통째로 실행 — stdin 4줄 두 세트(무손상/훼손)로 게이트③까지 3게이트 전부 PASS, SCORE/VERDICT 출력 정확 일치.

스펙 이슈 2건 (발견, 재현·근거 확보)

  1. clike_to_rpn.한선의 전방참조 함수호출 인식 결함(케이스7): 함수맵전역은 각 함수 정의 헤더 처리 시점에 순차 등록되므로(clike_to_rpn.한선 766행), 아직 정의를 보지 못한 함수를 호출하는 표현식은 식RPN(268~385행)이 "사용자함수" 분기를 못 타고 내장함수인 것처럼 bareword로 방출(@/호출 누락). 4개 격리 probe로 재현 확정. §1.1이 "해결됨"이라 서술한 것은 라벨/점프 충돌(중첩 시 끝N 재사용) 뿐이며 실제로 그 부분만 고쳐져 있음(케이스8 PASS로 검증). 3레이어매핑.한선은 clike_to_rpn.한선 무수정 원칙상 이 결함을 고칠 수 없고, 게이트①(rpn숙련.sh 검사)이 정확히 위반을 잡아 FAIL 처리 — 조용한 오변환 없이 안전하게 차단됨(설계 의도대로 동작).
  2. hanseonc_std(core 모드)에 함수 프레임 메커니즘 자체가 없음: hanseonc_std.asm프레임시작/프레임주소/@호출 관련 키워드가 전혀 없어, 사용자 정의 함수를 쓰는 어떤 코드도 core 모드에서 게이트③이 구조적으로 실패(결과 0). §7 위험2가 이미 "core 모드 테스트는 산술·문자열 결정론 케이스로 한정"을 완화책으로 제시했음에도 §6 테스트표 각주는 "케이스 1~6 core에서도 통과"라 명시해 자체 모순 — 함수 사용 케이스(2,5)는 core에서 구조적으로 불가능함을 확인.
두 발견 모두 3레이어매핑.한선/.sh 자체의 결함이 아니라 재사용 대상(clike_to_rpn.한선/hanseonc_std)의 실제 한계이며, 게이트가 정확히 이를 잡아내 "조용한 오변환" 없이 안전하게 실패시킴을 확인.

관련 파일

  • 스펙: /Users/ef/CrownyOS/crownyc/tools/3레이어매핑-스펙.md
  • 신규: /Users/ef/CrownyOS/crownyc/tools/3레이어매핑.한선 (416줄), 3레이어매핑.sh (161줄), 3레이어매핑.toau(빌드산출)
  • 테스트: /Users/ef/CrownyOS/crownyc/tools/3레이어매핑_테스트/케이스1~10*.한선 + 각 산출물(.rpn.한선/.toau/.매핑표.psv)
  • 실전 데모: /tmp/디자인이식판정.* (원본 ~/.claude/scripts/디자인이식판정.한선)
  • learn.sh 변경: ~/.claude/scripts/crownycode-learn.sh (add-rpn 케이스, 백업 *.bak_20260726202256)
  • 학습등록: crownycode-brain.sh learn "3레이어매핑" 3레이어매핑.한선 완료(HIT 확인)

잔여 이슈

  • --sample 플래그는 최소 구현(게이트①까지만)만 확인, 정밀 검증은 미실시.
  • v2 과제(스펙 §5): 가져오기 다중 라이브러리 해석, TOAU 미상 0건화(diff-컴파일 폴백), 정본대장 286개 배치 동치성 측정.
  • 케이스7/hanseonc_std 함수미지원 2건은 clike_to_rpn.한선/hanseonc_std 원본 수정 없이는 근본 해결 불가 — 별도 티켓으로 이관 필요.