v0.28.0.ko.md
docs/i18n/release-notes/v0.28.0.ko.md
Tesserae v0.28.0 — 실수로 돈을 쓸 수 없게 하는 훅
<!-- translations:start -->
English · 中文 · 日本語 · Русский · Español · Français · Deutsch
<!-- translations:end -->
Released 2026-07-27 · PyPI · GitHub release · pip install --upgrade tesserae==0.28.0
첫 번째 항목을 위해 업그레이드하세요. 이것은 지출 버그이며 실제 머신에서 재현되었습니다.
$HOME 함정
~/.tesserae의 지식 기반은 $HOME을 프로젝트 루트처럼 보이게 만듭니다. 플러그인의 resolve_project_root()는 작업 디렉터리에서 위로 첫 번째 .tesserae/을 찾아가므로, 등록된 프로젝트 외부에서 시작된 모든 세션은 $HOME으로 해석되고, PostToolUse 훅은 전체 홈 디렉터리에 대해 tesserae compile --changed-only를 백그라운드에서 실행했습니다.
15k 파일, 795 MB 그래프, 대략 10시간의 LLM 지출, 세션을 시작한 setsid 프로세스로부터 생겨난 프로세스에서. 모든 Edit/Write에서 실행되었습니다.
폴백으로 인해 더 나빠졌습니다. .tesserae/을 찾지 못하면 해석기는 다음을 수행했습니다:
echo "$PWD"
return 0
이는 모든 디렉터리가 프로젝트라고 주장했습니다. 호출자들은 그런 다음 -d "$root/.tesserae"을 테스트했습니다 — 이는 $HOME 아래의 모든 작업 디렉터리에 대해 통과했습니다. 이 테스트는 마지막 방어선이었고 폴백은 그 앞을 곧바로 걸어갔습니다.
이제 두 가지 거부가 있습니다. $HOME은 절대 프로젝트 루트가 아니며, 위로 걸어가거나 git-root 경로를 통해서든 없습니다. 그리고 일치하지 않음은 0이 아닌 상태로 빈 값을 반환하므로, 호출자들은 추측 대신 no-op을 수행합니다.
지출하는 훅은 opt-in입니다. TESSERAE_HOOK_AUTOCOMPILE=1은 자동 재컴파일을 활성화합니다; 없으면 아무것도 하지 않습니다. 실제로 지출하는 두 가지에만 적용됩니다 — posttooluse-edit.sh와 session-end.sh. session-start.sh는 결정론적 code sync를 실행하고 pretooluse-compile.sh은 당신이 입력한 컴파일만 가로채므로, 둘 다 게이트되지 않습니다.
백그라운드 모델 작업을 수행하는 훅은 청구서가 도착한 후 끄는 것이 아니라 의도적으로 켜져야 합니다.
Python CLI는 이 버그를 가지고 있지 않았습니다: ProjectWiki.load()는 주어진 경로를 사용하고 위로 걸어가지 않으므로, 프로젝트 외부에서 수동으로 tesserae compile을 실행하면 깔끔하게 실패합니다. 함정은 셸 훅에만 있었습니다.
OKF v0.2
Google의 Open Knowledge Format v0.2는 출처, 신뢰, 라이프사이클 및 증명을 최상위 클래스로 만듭니다. Tesserae는 이제 v0.2를 방출하고 여전히 v0.1을 소비합니다.
방출됨: 추출기 및 에이전트 마커에서 generated: {by, at}; 신용도 신호가 있는 sources (usage_count는 세션 수에서, usage_window, last_modified, 그리고 정확히 하나의 authored_by 사람이 존재하는 경우에만 author); status: deprecated 및 stale_after는 supersedes 엣지에서 파생됩니다.
방출되지 않음: verified, 따라서 unverified 위의 신뢰 계층은 없습니다. Tesserae는 액터와 타임스탬프가 있는 기록된 검증 *이벤트*를 가지지 않습니다. 네 가지 출처 클래스는 엣지 속성입니다 — 그래프가 트리플을 어느 정도 강하게 허가하는지 — OKF의 신뢰 가족은 개념별 검증 이벤트입니다. 다른 축; 하나를 다른 것에 매핑하면 신뢰를 스펙을 통해 세탁할 것입니다. 5,193개의 실제 개념에 대해 검증됨: verified는 0번 방출됨, generated.by 요청 human:은 0번.
세 가지 소비자 버그가 수정되었으며, 모두 스펙의 부록 A를 실제 CLI를 통해 그대로 가져와서 충돌했던 곳에서 발견되었습니다: 인용되지 않은 YAML 타임스탬프는 datetime으로 해석되고 직렬화를 깼습니다; v0.1 timestamp 폴백은 그 같은 인용되지 않은 형태에 조용히 no-op하였습니다; 그리고 §6.1의 권장 번들 상대 링크(/tables/customers.md)는 0개의 엣지를 생성했으므로, 스펙을 따르는 번들은 연결되지 않은 노드로 가져와졌습니다.
스펙의 자신의 조항에서 작성된 유효성 검사기는 5,193개 개념 내보내기를 0개의 실패로 전달하며, 무손실이고 바이트 동형입니다.
동어반복 판정은 이름이 지정됩니다
verify_claim의 SUPPORTED 판정의 약 40%는 인용된 범위가 엣지의 자신의 목표인 evidenced_by 엣지였습니다 — "C evidenced_by S", S를 읽음으로써 확인됨. 참이지만, 정보가 없으며, 이전에는 진정한 문서 기반 판정과 구별할 수 없었습니다.
페이로드는 이제 어느 것인지를 말합니다. 모든 15,284개 엣지에서: 모든 evidenced_by SUPPORTED 플래그됨, 다른 것은 플래그되지 않음, 그리고 판정이 진위값을 바꾸지 않았습니다. 추가적이므로, v0.27.0의 일곱 판정 계약은 변경되지 않습니다.
v0.27.0에서 업그레이드
라이브러리에 대한 drop-in입니다. 플러그인을 재설치하여 훅 수정을 받고, 자동 재컴파일을 원하면 TESSERAE_HOOK_AUTOCOMPILE=1을 설정합니다.
이전 우발적 컴파일에서 $HOME에 stray .tesserae이 존재하면, 이제 불활성입니다 — 하지만 큰 크기이고, 레지스트리와 설정이 다른 곳에 있음을 확인한 후 제거하는 것은 안전합니다.