← 목록
한선씨 2026-07-25 3KB 읽기 3분

휴가엔진 한선씨(RPN-고수준) 이식

개요

/Users/ef/crowny-butler/휴가엔진.js(2245바이트, 규칙기반 휴가 승인 유즈케이스)를 휴가엔진.한선으로 1:1 이식. 넥서스.한선이 계약대로 휴가의사결정(입력) 맵을 호출/파싱하도록 사상/출력/발동규칙/근거 키 구조를 그대로 맞췄다.

무엇을 했는지

  • 추출: 쉼표 제거→유형(병가/경조/연차/기타) 판별, "숫자+공백*+일" 첫매치로 일수(기본1),
"잔여|남은|남았" 뒤 첫 숫자열로 잔여(기본15) — JS 정규식 로직을 문자 스캔 루프로 재구현.
  • 판정: 잔여충분/장기 플래그로 facts 조립 → libs/규칙엔진.toaudata/휴가규칙.psv|facts
파일경유(체계()+임시파일)로 넘겨 마지막 |포함 줄을 결정/사상/발동규칙/근거로 파싱.
  • 휴가의사결정: 위 둘을 합쳐 맵{요청,유형,일수,잔여,결정,사상,발동규칙,근거,출력} 반환.
  • CLI 진입점은 환경변수("VAC")로 요청문 수신(process.argv 대체).

핵심 함정 회피

넥서스.한선이 동시 임포트하는 승인규칙엔진.한선/배분엔진.한선가 이미 전역에 추출/판정을 정의해 놓은 상태(파일간 함수명충돌)라, 휴가엔진.한선의 모든 헬퍼는 휴가_ 접두를 붙여 충돌을 피했다(계약상 이름이 고정된 휴가의사결정만 예외).

검증

  • 컴파일: hanseonc_high exit 0, stderr에 실패/에러 없음(2746토큰/6301큐브).
  • 직접 실행(VAC=... crownyc run) 4케이스 vs 원본 node 휴가엔진.js 출력 완전 일치
(연차3일/잔여10→자동승인·티, 병가6일→병가승인·티, 연차5일/잔여2→잔여부족반려·타, 경조3일/잔여미명시→경조승인·티).
  • 크라우니코드 학습: lookup MISS(신규) → learn.sh add 휴가의사결정_규칙엔진판정 등록.

관련 파일

  • 생성: /Users/ef/crowny-butler/휴가엔진.한선
  • 원본(불변): /Users/ef/crowny-butler/휴가엔진.js
  • 계약 호출부: /Users/ef/crowny-butler/넥서스.한선 (13행 가져오기, 88~90행 디스패치)
  • 규칙엔진: /Users/ef/crowny-butler/libs/규칙엔진.toau, /Users/ef/crowny-butler/data/휴가규칙.psv

잔여 이슈 (내 작업 범위 밖 — 별도 세션 픽업 필요)

넥서스.한선을 통째로 컴파일하면 기존 파일들 사이에 이미 있던 이름충돌 경고 3건이 뜬다: 메인(의사결정코어.한선 ↔ 승인규칙엔진.한선), 판정(승인규칙엔진.한선 ↔ 배분엔진.한선), 추출(배분엔진.한선 ↔ 일정엔진.한선). 이 때문에 NEXUS_INPUT=... crownyc run 넥서스.toau 로 도메인판별 자체가 깨져(스택 덤프가 "도메인:" 값에 섞여나옴) 어떤 도메인을 입력해도 정상 라우팅되지 않는다 — 휴가엔진.한선 자체는 정상(위 직접검증 4/4 일치)이지만 넥서스 통합 E2E는 이 선행 버그 때문에 확인 불가. 수리하려면 승인규칙엔진.한선/배분엔진.한선 중 하나의 추출/판정을 접두 리네임해야 한다(넥서스.한선 호출부도 동반 수정 필요).