휴가엔진 한선씨(RPN-고수준) 이식
개요
/Users/ef/crowny-butler/휴가엔진.js(2245바이트, 규칙기반 휴가 승인 유즈케이스)를
휴가엔진.한선으로 1:1 이식. 넥서스.한선이 계약대로
휴가의사결정(입력) 맵을
호출/파싱하도록 사상/출력/발동규칙/근거 키 구조를 그대로 맞췄다.
무엇을 했는지
추출: 쉼표 제거→유형(병가/경조/연차/기타) 판별, "숫자+공백*+일" 첫매치로 일수(기본1),
"잔여|남은|남았" 뒤 첫 숫자열로 잔여(기본15) — JS 정규식 로직을 문자 스캔 루프로 재구현.
판정: 잔여충분/장기 플래그로 facts 조립 → libs/규칙엔진.toau에 data/휴가규칙.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는 이 선행 버그 때문에 확인 불가. 수리하려면
승인규칙엔진.한선/
배분엔진.한선
중 하나의
추출/
판정을 접두 리네임해야 한다(넥서스.한선 호출부도 동반 수정 필요).