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

자생율 측정기 (자생 로드맵 1단계)

개요

크라우니 생태계가 외부언어(.sh/.js/.py/.c/.h/.html/.css/.rs)를 전폐하고 한선씨로 자생하는 여정을 "감"이 아니라 숫자로 측정하는 도구. 판정 코어 자체도 한선씨로 작성해 측정기가 외부언어인 모순을 피했다.

  • 자생율 정의: 분자=한선씨(.한선/.han) 로직줄수, 분모=분자+외부언어 로직줄수(주석·빈줄 제외).
  • 셸 스텁 면제: .sh가 비주석·비공백 로직 ≤3줄이고 내용이 crownyc run/hanseonc 호출
위주면 외부언어 로직 0으로 계산(자생 인정).
  • 4상 판정: 티≥90% / 옴 70~89% / 타 40~69% / 음<40%.

무엇을 했는지

  1. 자생율.한선 — 4상 판정 코어. stdin 3값(한선씨줄/외부줄/스텁면제줄, VM 규약대로 첫 입력()은
프라이밍 리드값이라 버림) → 자생율%/판정/권고 3줄 출력. hanseonc_high + CROWNY_STRICT=1 컴파일 경고 0 확인, 높음(90%)/중간(75%)/타(50%)/낮음(20%)/분모0 5케이스 판정 정확 검증.
  1. 자생율.sh — 스캔 표면. 파일 수집은 find, 줄수 집계는 lib/자생율집계.awk(단일 awk
프로세스에 파일 전체를 넘겨 벌크 처리 — 파일마다 awk를 새로 띄우면 수만 파일에서 수십분 걸리는 문제 회피, LC_ALL=C로 멀티바이트 변환 에러도 회피)에 위임하고, 4상 판정은 반드시 자생율.한선 코어를 호출한다. 서브커맨드: <디렉토리> / scan-tools / services / python-debt.
  1. lib/자생율집계.awk — 언어별 라인/블록 주석 규칙(한선 //, sh/py #, js/c/h/css/rs //
/* */, html <!-- -->)으로 로직 줄수 산출 + .sh crownyc/hanseonc 마커 + html/css generated 마커를 한 패스로 계산.
  1. 자생율기록.sh — Stop 훅용. 자생율.sh scan-tools+services 결과를 리포트 텍스트에서
grep으로 파싱해 ~/.crownycode/자생율로그.psv(ts|영역|한선씨|외부|스텁면제|자생율%|판정)에 append. 5초 중복가드(직전 실행 타임스탬프 대비) 확인, 항상 exit 0. settings.json 배선은 하지 않음(오케스트레이터 담당, 스펙 지시대로).

실측 결과 (baseline, 2026-07-26)

  • scan-tools (~/.claude/scripts): 한선씨 6293줄(50파일) vs 외부 11040줄(121파일, 스텁면제 0)
자생율 36% (판정: 음). 상위 전환 대상: 디자인이식.sh(604줄) > crownycode-brain-server.js(424줄) > crownycode-learn.sh(287줄) > crownycode-brain.sh(259줄) > 도구연결검증.sh(238줄).
  • services (/Users/ef/crowny-*, .venv/site-packages/dist/vendor 등 제외 후):
한선씨 944,902줄(4969파일) vs 외부 1,798,990줄(4262파일, 스텁면제 4줄) → 자생율 34% (판정: 음). server.js 파일 126개. 상위 전환 대상: crowny-project/public/js/app.js(23404줄) > crowny-project/server.js(18053줄) > crowny-genesis a2ui.bundle.js(15820줄) 등.
  • python-debt (~/.claude/scripts): python3 낀 .sh 41개 (grep \bpython3?\b, 주석/echo 텍스트
언급도 잡히는 단순 매칭이라 소폭 과다포함 가능 — 예: 자생율.sh 자신도 "python3" 문자열을 usage 문구에 담고 있어 후보로 잡힘. 수동 검토 전제).

관련 파일

  • /Users/ef/.claude/scripts/자생율.한선 (판정 코어, 53줄)
  • /Users/ef/.claude/scripts/자생율.sh (스캔 표면, 159줄)
  • /Users/ef/.claude/scripts/lib/자생율집계.awk (집계 엔진, 30줄)
  • /Users/ef/.claude/scripts/자생율기록.sh (Stop 훅용 기록기, 55줄)
  • ~/.crownycode/자생율로그.psv (누적 로그)
  • 학습DB 등록: crownycode-brain.sh learn "자생율측정" 자생율.한선 완료(학습완료 확인)

잔여 이슈

  • services 스캔 시간 ~20~25초(30만+ 파일 트리) — Stop 훅에서 매번 돌리면 세션 종료가 그만큼
느려짐. 오케스트레이터가 배선 시 빈도 조절(예: N번째 Stop마다 1회) 고려 필요.
  • python-debtgrep -E '\bpython3?\b'는 주석·echo 문자열도 매칭하는 단순 판별이라 소폭
과다포함(자기 자신도 후보로 잡힘). 정밀화하려면 셔뱅/exec python3/python3 -c 같은 실행 컨텍스트만 매칭하도록 좁혀야 함.
  • html/css "생성됨/generated/산출" 마커 판별은 v1 단순 규칙(파일 상단 5줄 + .gen. 경로)이라
실제 산출물이 마커 없이 섞여있으면 카운트됨(스펙이 명시한 "판별 불가는 카운트(정직)" 원칙대로 의도된 동작).
  • crownycode-brain.sh learn--분해 미지정 시 내부 [ cond ] && ... 관용구 때문에 학습 자체는
성공해도 프로세스 exit code가 1로 나오는 기존 버그 발견(이 작업과 무관, 별도 수리 대상으로 보고만).