/** * PreCompact Hook * * Claude Code 컨텍스트 윈도우 압축 직전 실행됩니다. * * 🔴 **checkpoint 저장 경로는 의도적으로 폐기됐다 (#92, ADR-053 섹션 8 — 2026-08-05).** * * **저장 경로를 되살리지 마십시오.** 이유는 「구현이 어려워서」가 아니라 **살리면 goal을 훼손하기 * 때문**입니다. (hook 자체가 금지된 것은 아니다 — 예컨대 FRD F-010의 「압축 후 핵심 메모리 재주입」은 * 저장이 아니라 **출력**이라 슬롯을 오염시키지 않는다. 아래 금지는 **저장** 경로에 한정된다.) * * 1. checkpoint 저장 — 여기 있던 `extractCheckpointInfo`는 **정규식 기반**이라 실 transcript에서 * 원시 JSONL 메타(`structuredPatch` / `"uuid"` / escaped `\n`)를 그대로 추출했고, * TODO 패턴의 `다음`이 "다음 세션"에 전건 오탐했다. 그리고 그 산출물의 저장 태그 * (`category:'context'` + `tags:['session-checkpoint',…]`)가 `findRecentCheckpoint` * (`session-start.ts:660-668`) 조회 조건과 **정확히 일치**해서, 세션 중간에 생성된 노이즈가 * **직전 세션 LLM 요약을 보장 주입 슬롯에서 밀어낸다**(`listMemories`가 * `ORDER BY updated_at DESC` + `.find()` 최신 1건 — `database.ts:889`). * 즉 복구는 「없던 자산이 생긴다」가 아니라 **「좋은 자산이 나쁜 자산으로 교체된다」**이다. * 실제 생성은 SessionStart 채널(#90)이 담당한다(`session-end.ts:535` * `tags:['session-checkpoint','session-summary']`, `session-extract` CLI가 재사용). * * 2. injection flush — `stop.ts:37`이 매 턴 수행 중이다(로그 실측 7,436회). * 여기 있던 호출은 `createMemory` 성공 뒤 같은 try 안이라 **실사용 도달 0**이었다 * (도달한 28회는 #91이 확정한 대로 전부 smoke 산출물). * ⚠️ `Injection flush (pre-compact)` 로그가 0건인 것은 **부재 증명이 아니다** — * 그 로그가 `if (flushResult.updated > 0)` 조건부라 「미도달」과 「도달했으나 0건」을 * 구분하지 못한다(`verification-essence` 30.1). * * 3. embedding backfill — #83이 SessionStart Step 1e로 이관했다(`embedding-backfill.ts` 참조). * 여기서는 위와 같은 이유로 **실사용 도달 0**이었다(`Embedding backfill` 28건 = * `Checkpoint saved` 28건 = smoke). 되살리면 5초 `HOOK_TIMEOUT_MS` 안에서 * 네트워크 backfill 100건을 중복 실행하는 위험만 생긴다. * * hook 등록 자체는 존치한다(발화 실측 0.32건/일 — 제거 이득이 작고 설치 경로 변경은 * 기존 사용자 재설치 영향이 미검증). 발화 관측만 남긴다. */ import type { PreCompactContext } from '../types/index.js'; export declare function handlePreCompact(context: PreCompactContext): Promise; export declare function main(): Promise; //# sourceMappingURL=pre-compact.d.ts.map