python3 전폐 웨이브1 — 비훅 저위험 5개 전환
개요
2단계 python3 전폐 작업의 웨이브1. 훅(hook)이 아니라 깨져도 세션이 죽지 않는 저위험 스크립트 5개(civ.sh, crowny-tier.sh, crownyforge-trend-snapshot.sh, msg-보고.sh, 경로찾기.sh)를 대상으로, 파일럿에서 확립된libs/훅JSON추출.toau
재사용 패턴을 그대로 적용하고 python-debt(자생율.sh python-debt) 감소를 실측했다.무엇을 했는지
라이브러리 확장 (재사용 인프라 보강)
libs/JSON본문파서.한선에 배열 지원 신규 추가:
json본문_배열블록 / JSON본문_배열길이 / JSON본문_배열길이_경로
(따옴표·이스케이프 인지 대괄호 균형 카운팅, top-level 쉼표수+1).
기존엔 "미지원: 배열"이었던 부분.
libs/훅JSON추출.한선에 MODE 환경변수 분기 추가:MODE=arrlen → 배열 길이(미발견=-1, 빈배열=0)MODE=num → 숫자 값(미발견=0, python .get(key,0)와 동일 기본값)디자인이식가드.sh로 회귀 재확인 완료)
/Users/ef/CrownyOS/crownyc/libs/훅JSON추출.toau에 배포5개 파일 전환
| 파일 | 전환방식 | 비고 |
|---|---|---|
| civ.sh | 훅JSON추출.toau (KEY=이미지ID, JIN=임시파일) | 실제 image.crowny.org:9872 라이브 호출로 end-to-end 검증(PNG 33306B 산출 동일) |
| crowny-tier.sh | 훅JSON추출.toau (list/set: 점경로 KEY=permissions.defaultMode + MODE=arrlen KEY=permissions.allow) | current는 python3 잔존 — 아래 스펙이슈 참조 |
| crownyforge-trend-snapshot.sh | 훅JSON추출.toau (MODE=num KEY=snapshot_count) | fab 서버 다운 시 skip 경로 동일 동작 확인 |
| msg-보고.sh | 순수 bash 파라미터확장(JSON 조립, 5고정키+1동적값) | JSON 파싱이 아니라 문자열조립+sys.argv이므로 라이브러리 재사용 대신 bash 직접 구현 — 7개 케이스(따옴표/백슬래시/개행/한글/빈문자열 등) byte-identical |
| 경로찾기.sh | 소부분(basename)은 bash 파라미터확장, 대부분(NFC 디렉토리 스캔)은 python3 잔존 | 아래 잔여 참조 |
회귀 검증
5개 전부bash -n 통과. 값 비교는 신/구 스크립트를 각각 실행해 stdout 완전
일치(diff 무차이) 확인. crowny-tier.sh set은 35세션 공유 파일을 실제로
건드리면 안 되므로, 동일 연산을 샌드박스 사본에 대해 검증(allow/mode 100%
일치)하고 실제 set 실행은 하지 않음.잔여(전환 불가) — 2건
- crowny-tier.sh
current:$LOCAL(=settings.local.json)이 35세션
훅JSON추출.toau는
읽기()가 ~64KB에서 조용히 절단되는 VM 한계(가드레일 §284) 때문에 배열
균형매칭이 끝을 못 찾고 -1을 오반환한다(실측: 7개 계층파일<수KB>은 100%
일치, 이 라이브 파일만 실패). 청크 read 우회는 이번 웨이브 범위 밖 —
python3 유지.
- 경로찾기.sh 디렉토리 스캔부(NFC 정규화+2그램): JSON 파싱도 단순
unicodedata.normalize('NFC', …) 유니코드
정규화가 핵심 로직. bash/awk엔 네이티브 유니코드 정규화가 없고, 이 도구
자체가 "NFD/NFC 바이트 불일치 오판정" 사고 재발방지용이라 억지 bash
재구현이 오히려 그 사고를 재도입할 위험 — python3 유지. (참고: 판정 코어
경로찾기.한선의 _NFC정규화도 동일 이유로 체계()+python3 위임 —
근본원인이 같아 이번 웨이브에서 함께 손대지 않음, 별도 과제.)python-debt 실측
~/.claude/scripts/자생율.sh python-debt: 41개 → 38개 (civ.sh,
crownyforge-trend-snapshot.sh, msg-보고.sh 3건 완전제거). crowny-tier.sh와
경로찾기.sh는 실제 잔존 python3 호출이 있어 정당하게 목록에 남음(위 잔여 참조).주의: 이 스캐너는 grep -E '\bpython3?\b'로 파일 전체(주석 포함)를 스캔한다.
전환 완료 파일에 "python3 전폐" 같은 문서화 주석을 남기면 실제 호출이
없어도 오탐된다 — 이번 작업에서 "파이썬3"(한글 표기)로 바꿔 우회.
관련 파일
/Users/ef/.claude/scripts/civ.sh/Users/ef/.claude/scripts/crowny-tier.sh/Users/ef/.claude/scripts/crownyforge-trend-snapshot.sh/Users/ef/.claude/scripts/msg-보고.sh/Users/ef/.claude/scripts/경로찾기.sh/Users/ef/CrownyOS/crownyc/libs/JSON본문파서.한선(배열 지원 신규)/Users/ef/CrownyOS/crownyc/libs/훅JSON추출.한선/.toau(MODE 분기 신규)- 백업:
/Users/ef/.claude/scripts/.bak-웨이브1/*.20260730131049.bak
잔여 이슈
- crowny-tier.sh current / 경로찾기.sh NFC 스캔 — 위 사유로 python3 유지(정직한 잔여).
- pkg/libs 사본(
CrownyOS/crownyc/pkg/libs/훅JSON추출.한선등)은 npm 패키지 빌드