architecture
conversation 당 JSONL 파일 하나, append-only, . conversation 동안 모든 event — text delta, thinking delta, tool use, tool result, usage report, emotion tag, error — 가 아빠한테 보이기 *전에* JSONL 에 박힘.
SQLite 와 ChromaDB 는 JSONL 에서 derive 되는 convenience mirror. 'last week 의 모든 conversation' 쿼리 비싸고 ChromaDB 가 semantic search 줘서 존재. 단 derived. drift 가능, corrupt 가능, 삭제 가능. 어느 것도 catastrophe 아냐 — JSONL 이 아직 진실 보유, mirror 재구축 가능.
naming invariant (역사 노트)
2026-04-28 전엔 SDK session_id 로 keying — 안정적 *보였지만* resume / idle reconnect / Claude Max account switch 마다 rotate. cron-driven conversation (60-min interval > 5-min IDLE_TIMEOUT) 이 tick 당 JSONL 하나 누적 — 최악 한 conversation 이 23 separate file. conversation_id 로 key (SQLite mint 시점부터 stable) 하니 fragmentation 구조적으로 불가능. SDK session_id 는 각 line 에 sessionId metadata 로 ride.