v0.7.2.ko.md
docs/i18n/release-notes/v0.7.2.ko.md
Tesserae v0.7.2 — 디스커버리와 컴파일이 더 이상 멈추지 않습니다
<!-- translations:start -->
English · 中文 · 日本語 · Русский · Español · Français · Deutsch
<!-- translations:end -->
릴리스 일자 2026-06-12 · PyPI · GitHub release · pip install --upgrade tesserae==0.7.2
대규모 에이전트 세션 히스토리를 가진 머신에서 Tesserae가 멈출 수 있던 세 가지 경로를 제거한 버그픽스 릴리스입니다: 반환되지 않던 세션 디스커버리, 타임아웃 시 영원히 멈추던 CLI 에이전트 서브프로세스, 그리고 같은 프로젝트 상태 위에 겹쳐 쌓이던 동시 컴파일.
1. tesserae sessions discover가 반환됩니다 — 수십 GB의 히스토리에서도
기존 디스커버리는 필터링 전에 모든 계정 루트 아래 모든 프로젝트의 트랜스크립트를 전부 JSON 파싱했습니다. ~57 GB의 Claude Code / Codex 히스토리가 있는 머신에서는 명령이 사실상 영원히 반환되지 않았습니다.
세 가지 수정이 곱해집니다:
- 마커 사전 필터 — 트랜스크립트가 현재 프로젝트에 속하려면 프로젝트 경로가 파일에 문자 그대로 나타나야 하므로, 다른 프로젝트의 트랜스크립트는 JSON 작업 전에 원시 바이트 스캔(파싱보다 ~50배 빠름)으로 걸러냅니다.
- 심볼릭 링크된 계정 루트 중복 제거 —
~/.claude가~/.claude-personal1을 가리켜도 더 이상 모든 트랜스크립트를 두 번 스캔하지 않습니다. - mtime 기반 스캔 캐시 — 스크리닝 결과가
~/.cache/tesserae/discovery_scan.sqlite에 보존되어(TESSERAE_DISCOVERY_CACHE로 재정의 가능) 반복 실행 시 새 파일이나 변경된 트랜스크립트만 다시 읽습니다.
문제가 된 머신에서 측정: 영원히 반환 안 됨 → 콜드 3분 16초 → 웜 1분 26초, 4,048개 세션 발견. tesserae refresh와 세션 임포트도 같은 경로를 공유하므로 동일하게 빨라집니다.
2. CLI 에이전트 타임아웃이 더 이상 컴파일을 멈추게 하지 않습니다
codex exec / claude -p 호출은 subprocess.run(capture_output=True, timeout=...)을 사용했는데, 이는 타임아웃 시 직계 자식만 종료하고 출력 파이프를 타임아웃 없이 드레인합니다. 에이전트 CLI는 그 파이프를 상속하는 자체 자식 프로세스를 생성하므로, 타임아웃이 고아가 된 손자 프로세스 뒤에서 컴파일을 0% CPU 상태로 무기한(관측: 약 2일) 멈추게 할 수 있었습니다.
이제 LLM CLI 호출은 자체 프로세스 그룹에서 실행되며, 타임아웃은 그룹 전체를 종료하고 제한 시간 내에 드레인합니다 — 타임아웃은 항상 "죽음"을 의미하며, 결코 "멈춤"이 아닙니다.
3. 프로젝트당 한 번에 하나의 컴파일
ProjectWiki.compile이 이제 .tesserae/compile.lock에 배타적 잠금을 겁니다. 컴파일이 이미 실행 중일 때 훅으로 트리거된 refresh는 같은 .tesserae 상태 위에 조용히 쌓이는 대신, 잠금 보유자의 pid를 알려주는 명확한 메시지와 함께 즉시 실패합니다. 대신 기다리려면 TESSERAE_COMPILE_LOCK_WAIT=<초>를 설정하세요. 잠금은 flock(2) 기반이므로 컴파일이 크래시해도 오래된 잠금이 남지 않습니다.
4. tesserae --version
루트 도움말이 이제 설치된 버전으로 시작하며, tesserae --version(-V / version도 가능)이 버전을 바로 출력합니다.
v0.7.1에서 업그레이드
그대로 교체하면 됩니다. 설정 변경이 없습니다. 업그레이드 후 첫 sessions discover / refresh는 스캔 캐시를 채우기 위한 일회성 스크리닝 비용을 치르며, 그 이후 실행은 빠릅니다.