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

크라우니집사회 코어 엔진 + 서버 구현 (순수 한선씨)

개요

/Users/ef/crowny-deacon/집사회-스펙.md SSOT를 계약대로 구현. 마스터→패블(L1)→오푸스(L2)→소넷(L3)→하이쿠(L4) 4계층 미션/티켓 JIT(적시생산) 엔진 + HTTP 서버를 순수 한선씨로 신규 작성. 라이브 server.js(9772)·public/index.html·LaunchAgent는 일절 건드리지 않음(신규 파일만).

무엇을 했는지

  1. 스펙 정독 + crowny-cad/서버.한선(1374줄) 정본에서 PSV append-only/latest-wins, HTTP 파싱, 라우팅 디스패치(_경로매치 가드체인), CRLF 응답 패턴을 그대로 계승.
  2. 4개 한선씨 모듈 + 서버.한선 작성:
- 한선씨/미션장부.한선(274줄): PSV 장부, ID카운터 리플레이 복원, |→⁞/개행→⏎ 이스케이프, 통계문자열(자립도 계산). - 한선씨/계층분배.한선(72줄): 레벨→모델 고정표, 팬아웃 클램프(7, 초과분 "[병합N]" 표기), 셀코어 룰 병행 등록. - 한선씨/규칙게이트.한선(88줄): 결정형 핸들러(자립도현황/티켓집계 화이트리스트) → brainq(:9977) curl 조회(셸 단일따옴표 이스케이프로 인젝션 차단) → 셀코어 룰 → MISS 3단 게이트. - 한선씨/집사회.한선(110줄): 미션접수/클레임/보고 + JIT 자식생성. 지시문이 게이트 화이트리스트 키와 정확 일치하면 유형을 집계/현황으로 자동 분류해 게이트가 실제로 도달 가능하도록 설계. - 서버.한선(508줄): 위 4개 모듈 + 문자열.한선을 가져오기, TCP대기(9772) 메인루프, 11개 라우트.
  1. data/집사회열쇠.txt = openssl rand -hex 16으로 생성, 전 쓰기 API가 X-Deacon-Key 헤더 대조(불일치/누락 403).

함정과 우회 (실측)

  • 가져오기 경로는 항상 "진입파일 디렉토리" 기준 — 서브디렉토리(한선씨/) 안에서 형제 파일을 상대경로("모듈.한선")로 가져오면 실패. 반드시 진입파일 기준 전체경로("한선씨/모듈.한선")로 가져와야 함(다이아몬드 임포트는 중복정의 에러 없이 정상 동작, 실측 확인).
  • 본문추출()의 "\n\n" 탐색은 curl 등 표준 HTTP 클라이언트에 안 맞음 — 실제 헤더/본문 경계는 \r\n\r\n이라 기존 crowny-cad 패턴을 그대로 베꼈다가 미션생성 API가 전부 "제목 필요"로 실패했음. TCP 프로브 서버로 raw 바이트를 덤프해 원인 확진 후 \r\n\r\n 우선 탐색 + \n\n 폴백으로 수정.
  • 테스트 포트 9773은 이미 walk.crowny.org가 라이브로 점유 중(gateway.yaml 등록 + lsof LISTEN 확인) → 스펙 지시(9773)를 따르지 않고 crowny-ports.sh free로 확인한 9799로 대체. sed 치환 임시 사본은 /tmp/집사회서버_테스트.한선 + /tmp/한선씨/(모듈 디렉토리 미러) 구성으로 가져오기 경로 문제 회피.
  • 규칙게이트 결정형 핸들러가 기본 설계로는 도달 불가능했음(모든 티켓 유형이 "미션목표"/"작업지시"로 고정, 화이트리스트는 "집계|조회|현황"만 인정) → 지시문이 "티켓집계"/"자립도현황"과 정확 일치하면 유형을 자동 분류하는 _유형분류()를 추가해 스펙이 요구하는 결정형 HIT를 실제 API 경로로 실측 가능하게 함.

관련 파일

  • /Users/ef/crowny-deacon/서버.한선
  • /Users/ef/crowny-deacon/한선씨/미션장부.한선
  • /Users/ef/crowny-deacon/한선씨/계층분배.한선
  • /Users/ef/crowny-deacon/한선씨/규칙게이트.한선
  • /Users/ef/crowny-deacon/한선씨/집사회.한선
  • /Users/ef/crowny-deacon/data/집사회열쇠.txt
  • /Users/ef/crowny-deacon/data/미션.psv, /Users/ef/crowny-deacon/data/티켓.psv (E2E 테스트 중 실제 경로에 append — 스펙 지정 경로 그대로이며 append-only라 무해)
  • /Users/ef/crowny-deacon/public/집사회.html, 공개/집사회.한선 — 본 작업과 무관하게 다른 세션이 이미 생성해둔 것으로 확인(작업 중 발견, 손대지 않음)

검증 결과

  • STRICT 컴파일(CROWNY_STRICT=1 hanseonc_high): 서버.한선 + 4개 한선씨 모듈 전체 경고 0.
  • E2E(포트 9799): health/plans 필드 기존과 동일 → 미션생성(3줄 목표→L1 3티켓) → tree → claim(fable) → report(자식 3개)→JIT L2(opus) 생성 → claim/report L2→L3(sonnet) → L3→L4(haiku, 리프) → 리프에 자식지시 줘도 자식 생성 안 됨 확인 → stats 자립도 노출 → 결정형 규칙게이트 HIT 실측("티켓집계" 목표→즉시 규칙처리, 결과요약에 실집계 수치) → 키없는 POST 403 → landing 마커 확인. 전 항목 PASS.
  • 라이브 server.js(9772, version 0.1.0)는 작업 전후 무변화 확인.

잔여 이슈

  • 별도 산출물로 명시된 ~/.claude/scripts/집사회.sh, ~/.claude/workflows/butler-council.js(연결체)는 이번 작업 범위 밖 — 미착수.
  • public/집사회.html은 다른 세션 산출물을 그대로 서빙만 확인, 내용 자체는 검수하지 않음.
  • 규칙게이트 2단계(brainq) 화이트리스트 밖 일반 지시문에 대한 실사용 HIT율은 미실측(현재는 :9977 응답 포맷 "MISS|" 접두 감지만 확인).