# 메모리 시스템 강화 Phase 2: SQLite FTS5 인덱싱

## 전체 로드맵 (3 Phase 한정승인)
- **Phase 1** ✅ 완료 (task-1477.1): claude-diary /diary + /reflect 패턴 도입
- **Phase 2** (본 작업): basic-memory 스타일 SQLite FTS5 인덱싱 → 검색 정확도 3-5배 향상
- **Phase 3**: claude-mem Progressive Disclosure 패턴 선택 도입 → 토큰 절감

## Phase 1 산출물 (연결 포인트)
- `/home/jay/.claude/commands/diary.md` — /diary 슬래시 커맨드
- `/home/jay/.claude/commands/reflect.md` — /reflect 슬래시 커맨드
- `/home/jay/workspace/hooks/pre-compact-diary.sh` — PreCompact 자동 diary 훅
- diary 저장 위치: `/home/jay/.claude/memory/diary/YYYY-MM-DD-session-N.md`
- frontmatter 필드: date, session, team_id, task_id, tags, auto_generated
- **Phase 2에서 이 diary 파일들을 SQLite FTS5로 인덱싱**

## 참고 자료 (필수 읽기)
- Phase 1~3 전체 스펙: `/home/jay/workspace/memory/specs/memory-enhancement-spec.md`
- diary 사용 가이드: `/home/jay/workspace/memory/specs/diary-reflect-usage.md`
- 리서치 보고서: `/home/jay/workspace/memory/research/claude-code-memory-enhancement.md` (Section 2.2 basic-memory, Section 2.3 claude-memory-mcp)

## Phase 2 작업 상세

### 배경
Phase 1으로 diary 엔트리가 자동 생성되지만, 축적된 diary를 키워드/의미 기반으로 검색하는 기능이 없다.
basic-memory (2.8K stars, Python+SQLite+FastEmbed)의 핵심 패턴을 우리 시스템에 맞게 도입한다.

### 핵심 구현 사항

#### 1. SQLite FTS5 인덱서 구현
- 경로: `/home/jay/workspace/utils/memory_indexer.py`
- DB 경로: `/home/jay/.claude/memory/memory_index.db`
- 기능:
  - diary 파일 파싱 (frontmatter + 본문)
  - FTS5 가상 테이블로 전체 텍스트 인덱싱
  - incremental 인덱싱 (새 파일만 추가, 수정 파일 업데이트)
  - 해시 기반 변경 감지 (불필요한 재인덱싱 방지)
- 인덱싱 대상:
  - `/home/jay/.claude/memory/diary/*.md` (diary 엔트리)
  - `/home/jay/.claude/projects/-home-jay--cokacdir-workspace-autoset/memory/*.md` (아누 메모리 파일)
- 테이블 스키마:
  ```sql
  CREATE TABLE memories (
    id INTEGER PRIMARY KEY,
    file_path TEXT UNIQUE,
    title TEXT,
    type TEXT,       -- diary, user, feedback, project, reference
    team_id TEXT,
    task_id TEXT,
    tags TEXT,        -- 쉼표 구분
    content TEXT,
    created_at TEXT,
    updated_at TEXT,
    file_hash TEXT
  );
  CREATE VIRTUAL TABLE memories_fts USING fts5(title, type, tags, content, content=memories, content_rowid=id);
  ```

#### 2. 검색 CLI 구현
- 경로: `/home/jay/workspace/utils/memory_search.py`
- 사용법:
  - `python3 memory_search.py query "디자인팀 위임 실수"` → 관련 diary/메모리 검색
  - `python3 memory_search.py query "배너" --type diary --team design` → 필터 검색
  - `python3 memory_search.py reindex` → 전체 재인덱싱
  - `python3 memory_search.py stats` → 인덱스 통계
- 출력: relevance score 기반 정렬, 상위 5건 반환 (snippet 포함)

#### 3. /diary 및 /reflect와 연동
- /diary 실행 후 자동으로 해당 엔트리를 인덱스에 추가
- /reflect 실행 시 검색으로 관련 diary 빠르게 찾기
- SessionStart 훅에서 memory_indexer.py를 실행하여 최신 상태 유지 (optional)

#### 4. 아누 시스템 통합
- dispatch.py에서 memory_search.py 호출 가능하도록 경로 등록
- whisper-compile.py에서 최근 diary 요약을 브리핑에 포함 (optional)

### 코드화/시스템화 체크리스트
- [ ] memory_indexer.py 구현 및 동작 확인
- [ ] memory_search.py CLI 구현 및 동작 확인
- [ ] FTS5 한국어 검색 동작 확인
- [ ] incremental 인덱싱 동작 확인 (중복 방지)
- [ ] 기존 diary 파일 인덱싱 테스트
- [ ] 기존 메모리 파일 인덱싱 테스트
- [ ] 테스트 작성 (최소 8 TC)
- [ ] memory-enhancement-spec.md Phase 2 섹션 업데이트
- [ ] Phase 3 연결 포인트 명시

### 완료 기준
- memory_indexer.py, memory_search.py 실제 동작
- diary + 아누 메모리 파일 인덱싱 완료
- 한국어 검색 정상 동작
- 테스트 PASS
- 문서 업데이트
- Phase 3 연결 포인트: Progressive Disclosure를 위한 "요약만 반환 → 상세 요청 시 전체 반환" 인터페이스 설계

### 주의사항
- SQLite는 Python 표준 라이브러리 내장 — 추가 의존성 없음
- FTS5는 SQLite 3.9.0+ 기본 지원 — 별도 설치 불필요
- DB 파일은 git 추적하지 않음 (.gitignore에 추가)
- 기존 메모리 파일 구조/내용 변경 금지 — 인덱싱만 추가
