v2.3.1 — 경로 해석 · 런타임 경계 · 계약 정합
외부 제보로 드러난 실행 불가 경로를 고친 패치 회차입니다. 기능·분류 체계 변경은 없습니다.
이번 회차는 머지된 PR 보다 찾아준 결함이 컸습니다. 아래 세 건은 저장소 내부 테스트로는 원리적으로 잡을 수 없던 것들입니다.
고친 것
심링크 설치 사용자가 첫 실행부터 실패하던 경로 버그
--run-dir 상대경로가 cwd 가 아닌 저장소 루트 기준으로 해석됐습니다. SKILL.md 는 "모든 경로는 cwd 기준"이라 지시하는데 스크립트가 반대로 동작한 것입니다. 저장소 루트에서 돌리면 cwd == PROJECT_ROOT 라 내부에서는 영원히 안 보이는 종류였습니다. --diagnosis 도 같은 기준으로 통일했고, 실패 시 빈 _workspace/{run_id}/ 가 쌓이던 부작용도 제거했습니다.
프로덕션 게이트가 테스트 트리를 런타임 import
verify_gates.py 가 tests/golden/checks.py 를 불러 쓰고 있어, 런타임 파일만 선별 배포하면 P3 golden 축이 통째로 죽었습니다. 게이트가 조용히 한 축을 잃는 최악의 실패 형태입니다. checks.py 는 이름만 tests 아래 있었을 뿐 전부 프로덕션 검사 로직이라 scripts/ 로 옮겼습니다.
Light 경로 finalize 승급이 실행 불가
Light 는 02_diagnosis.md 를 만들지 않는데 finalizer 가 그 파일을 필수로 요구했습니다. diagnosis_path 를 선택으로 바꾸고 진단 콜을 추가하지 않는 쪽을 의도로 명문화했습니다.
내용 앵커 유실
윤문 콜이 편집 전에 핵심 내용 명사를 기록하고, 앵커가 사라지는 edit 은 즉시 롤백하는 anchor_ledger 계약을 배포 경로 5곳에 적용했습니다.
실측 (opus-5 ×
fx_guard_overedit, 계약 적용 전후 각 11 run) — 보호 어휘 유실 2회 → 0회
설치 범위·배포 정합
전역 설치를 런타임 4종으로 한정(#70, --all-agents 로 전체), 구버전·은퇴 링크 재실행 시 자동 정리(#73). 소유권을 심링크 대상으로만 판별해 사용자 파일·타 도구 링크는 건드리지 않습니다. fixture 무결성(#67)·매니페스트 버전(#68)·에이전트 서술(#69) 정합도 각각 회귀 테스트와 함께 들어갔습니다.
함께 들어간 것
- 텍스트 위생
scripts/sanitize_text.py— 제로폭·bidi·태그 문자 제거, 한글 NFD → NFC 정규화. shim 이 자동 적용(--no-sanitize로 해제). NFD 분해 한글은 글자수가 최대 3배로 잡혀 변경률 게이트가 "전 글자 변경"으로 오판하던 잠복 사고를 막습니다. AI 워터마크와 무관합니다 — 사유는CLAUDE.md「AI 워터마킹에 대한 입장」 참조. - 품질 기준선 계측
scripts/eval_baseline.py·eval_compare.py— K회 반복의 자체 표준편차를 잡음 바닥으로 삼아 그걸 넘는 변화만 유의하다고 표시합니다. 재촬영 절차는docs/watermark-baseline-runbook.md.
검증
pytest223 passed — 신규 회귀: 경로 해석 5건 · 런타임 경계 5건 · 텍스트 위생 17건 · 계약 정합 2건- 게이트가
tests/없는 트리에서 전 축 동작 실측 (P3 golden PASS) - 설치 정리는 격리 환경에서 사용자 파일·타 도구 링크 불가침 확인
설치·업데이트
/plugin marketplace add epoko77-ai/im-not-ai
/plugin install humanize-korean
이미 설치하셨다면 ./update.sh 로 갱신하시면 구버전 에이전트 링크도 함께 정리됩니다.
기여해주신 분들은 CONTRIBUTORS.md 에 기록했습니다. 이 회차의 발견 대부분은 직접 써보신 분들에게서 나왔습니다.