"네 DB 가 '그 폴더에 무슨 파일 있어?' 에 답할 수 있는 순간, 넌 두 번째 파일시스템을 지은 거야 — 그리고 이제 둘 다 소유해."
넘으면 안 되는 선
Waygate 엔 SQLite DB 가 있고, 진짜 질긴 것들을 저장해. 그럼 위험은 어디 있어? 질문 하나야: DB 가 '지금 /some/folder 에 무슨 파일 있어?' 에 답할 수 있어? 그렇다면 그림자 디렉토리 트리를 지은 거야 — 앱 밖에서 뭐라도 바뀌는 순간 어긋날 파일시스템 구조의 두 번째 복사본. Waygate 의 DB 는 그 질문에 답할 수 없게 설계됐어. 디스크만 답할 수 있어.
Waygate 가 질기게 저장하는 것
DB 안 전부는 참조 아니면 증거지, 절대 내용이 아냐. 워크스페이스: 어느 위치가 열렸고 창이 어떻게 놓였나. 즐겨찾기: 북마크 더하기 표시 힌트, 대상이 여전히 존재한다는 약속 없이. 프리셋: 참조 집합이랑 레이아웃. 저장된 네트워크 위치: 정제된 스킴·호스트·공유 이름 — 자격 증명 없고, 파일 목록 없고. 오퍼레이션 저널: 엔진이 뭘 했나. 이 중 하나도 '폴더 안 파일 목록' 이 아니란 걸 봐.
동기화 클라이언트가 이걸 어렵게 가르치는 이유
클라우드 동기화 클라이언트가 반면교사야. 동기화하려면 그림자 트리를 유지해야 해 — 서버에 뭐가 있고 디스크에 뭐가 있는지의 로컬 모델 — 그리고 맞춰야 해. 그 그림자 트리가 걔들 최악 버그의 원천이야: 삭제 뒤 다시 나타나는 파일, 복제하는 충돌, 안 지워지는 유령 항목. Waygate 는 동기화 클라이언트가 아니고 일부러 그 그림자를 절대 안 지어, 바로 그래서 그 버그 가족 전체를 물려받을 수 없어.
DB 는 디스크에 관한 노트지, 그거의 복사본이 절대 아냐. Waygate 는 참조랑 증거를 저장하고; 권위가 될 수 있는 디렉토리 카탈로그를 절대 안 남겨. 어떤 테이블이 '이 폴더에 뭐 있어' 에 답할 수 있으면, 그 테이블은 그림자 파일시스템이야 — 그리고 두 번째 복사본이 항상 어긋남 버그가 사는 곳이야.
가족 전체에 걸친 똑같은 규칙. cwkPippa 도 이 규율을 지켜: 걔 SQLite 랑 벡터 스토어는 append-only JSONL 원본의 파생 미러고, 패치가 아니라 replay 로 다시 지어져. Waygate 는 똑같은 본능을 파일시스템에 적용해 — 진실 하나, 나머지 전부는 투영 아니면 그거에 관한 노트.