크라우니집사회 코어 엔진 + 서버 구현 (순수 한선씨)
개요
/Users/ef/crowny-deacon/집사회-스펙.md SSOT를 계약대로 구현. 마스터→패블(L1)→오푸스(L2)→소넷(L3)→하이쿠(L4) 4계층 미션/티켓 JIT(적시생산) 엔진 + HTTP 서버를 순수 한선씨로 신규 작성. 라이브 server.js(9772)·public/index.html·LaunchAgent는 일절 건드리지 않음(신규 파일만).
무엇을 했는지
- 스펙 정독 +
crowny-cad/서버.한선(1374줄) 정본에서 PSV append-only/latest-wins, HTTP 파싱, 라우팅 디스패치(_경로매치가드체인), CRLF 응답 패턴을 그대로 계승. - 4개 한선씨 모듈 + 서버.한선 작성:
한선씨/미션장부.한선(274줄): PSV 장부, ID카운터 리플레이 복원, |→⁞/개행→⏎ 이스케이프, 통계문자열(자립도 계산).
- 한선씨/계층분배.한선(72줄): 레벨→모델 고정표, 팬아웃 클램프(7, 초과분 "[병합N]" 표기), 셀코어 룰 병행 등록.
- 한선씨/규칙게이트.한선(88줄): 결정형 핸들러(자립도현황/티켓집계 화이트리스트) → brainq(:9977) curl 조회(셸 단일따옴표 이스케이프로 인젝션 차단) → 셀코어 룰 → MISS 3단 게이트.
- 한선씨/집사회.한선(110줄): 미션접수/클레임/보고 + JIT 자식생성. 지시문이 게이트 화이트리스트 키와 정확 일치하면 유형을 집계/현황으로 자동 분류해 게이트가 실제로 도달 가능하도록 설계.
- 서버.한선(508줄): 위 4개 모듈 + 문자열.한선을 가져오기, TCP대기(9772) 메인루프, 11개 라우트.
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|" 접두 감지만 확인).