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

crowny-butler 한선씨 일관화 (18모듈)

개요

crowny-butler(경영AI/의사결정 백본)의 한선씨 동반이 없던 .js/.py를 한선씨(.한선)로 이식. 변환 대기열 17건 + 대기열 누락분 1건(휴가엔진) = 18모듈. 헌법: 모든 로직은 .한선이 정본.

결과

  • 전체 18개 컴파일 18/18 OK (hanseonc_high STRICT, 메인 독립 재검증).
  • 변환 대기열 21→4건 (butler 17건 전부 done-convert, 남은 4건은 타 프로젝트).
  • 넥서스 오케스트레이터 E2E 6/6 실동작 · 휴가엔진 원본 대비 런타임 4/4 일치.

Phase 1 — 순수로직 15개 (sonnet 병렬 Workflow + 메인 검증)

의사결정코어·승인규칙엔진·배분엔진·넥서스·명령실행기·실행핸들러·슬롯추출·라우터학습·의미어라우터_런타임·클러스터도출·래칫보류검토·일정엔진·조회엔진·규칙검사 + 휴가엔진(원본 넥서스.js가 require하나 대기열 누락 → 발견·추가 변환).

메인 재검증이 잡아낸 것 (서브 보고 불신 원칙의 성과)

  1. 넥서스 FAIL — 서브는 OK 보고했으나 실제 컴파일 실패. 원인 = 대기열 누락 휴가엔진.
  2. 함수명 충돌 3건 (메인·판정·추출이 모듈 간 중복 top-level 정의 → 함께 로드 시 하드에러). 앞경계 sed로 부분매칭(위험판정·긴급판정) 보호하며 모듈접두 rename. 네임스페이스 별칭 가져오기는 심볼 격리 못함을 실측 확인.
  3. top-level 진입 미가드 (의사결정코어 코어_메인()·배분엔진 데모) → 넥서스가 가져오는 순간 usage/데모 실행. 환경변수 가드로 격리.
  4. 2>&1 stderr 오염 — 넥서스 도메인판별이 crownyc 로드:/스택: 로그(stderr)를 stdout과 섞어 도메인 파싱 실패. 2>/dev/null 분리로 6/6 복원.
  5. 명령실행기 companion 스텁 3개 → 실제 가져오기 연결(슬롯추출·실행핸들러·의미어라우터). 이 과정에서 추가 충돌 3건(트림·route·마지막파이프줄) + autofill 버그 1건 발견·수정.

Phase 2 — 서버 3건 (sonnet 병렬, http.createServer → 한선씨 TCP서버)

서버포트라우트특성
인간검토서버9868/·/api/next·/api/decide(POST)·/api/retrain순수 API+HTML
승인큐서버9801/·/api/next·/api/decide·OPTIONS순수 API+HTML
감사서버980226개(정적서빙+프록시+셀스캔+인증)616줄 대공사
- 넥서스.toau 생성(감사서버 VM실행(넥서스.toau) 참조 대상).
  • 컴파일 STRICT 검증만 — 포트 바인드 실행은 프로덕션 PSV·포트충돌 위험이라 미수행(배포 시 사람이 기동).

정직한 충실도 기록 (근사·미완)

컴파일·구조는 100% 통과이나 VM 제약으로 일부 로직이 원본과 다름:
  • 감사서버 보안 열화 (배포 시 주의): scrypt→SHA256(salt+pw), 난수 crypto.randomBytes(192bit)→무작위 조합 ~62bit, 계정/세션 JSON→PSV, 아이디 정규식→길이검사. 인증 서버는 프로덕션에서 원본 .js 유지 권장(한선씨는 정본 이식 완료·검증용).
  • 라우터학습·클러스터도출: 배열 1023캡(큰 코퍼스 뒷부분 누락 가능)·Counter.most_common 절단 생략·선형탐색(느림). 1회성 오프라인 재학습이라 허용.
  • 명령실행기: JSON.stringify→키 평탄화 렌더링, 자동생성 상세→개수만.
  • 트림 함수 충돌 경고(실행핸들러↔의미어라우터, 둘 다 공백트림 무해, 컴파일 OK).
  • 감사서버 원시소켓 프록시: recv 타임아웃 없음(가드레일 경고 패턴, 원 지시 방식대로).
  • 서버 3건: 컴파일 검증만, 포트 바인드 런타임 미실행.

래칫

  • 크라우니코드 학습(brain.sh learn) 18모듈, done-convert 17건.
  • 신규 VM 함정 발견(가드레일 반영 후보): ①파일간 함수명 충돌은 flat 심볼이라 네임스페이스 별칭으로 격리 불가 → 모듈접두 rename 필수 ②가져오기 시 top-level 실행문(CLI 진입·데모)이 그대로 실행 → 환경변수 가드 필수 ③서브프로세스 출력 파싱은 2>/dev/null로 crownyc stderr 로그 분리.

관련

  • 코드: /Users/ef/crowny-butler/*.한선 (원본 .js/.py 무수정 보존)
  • 넥서스 E2E: NEXUS_INPUT=... crownyc run 넥서스.toau