소설 타임라인 관리 도구 Lumior TIL 1
원본은 건드리지 않는다 — 읽기 전용 선을 먼저 긋기
Lumior는 옵시디언 vault(옵시디언이 관리하는 노트 폴더)에 있는 소설 원고 1,300여 편을 읽어 시간순 타임라인으로 보여 주는 로컬 도구다. 각 원고 맨 위의 frontmatter(노트 머리에 ---로 감싼 속성값 — 여기선 연호·연도·월·일·등장인물)가 그 원고의 유일한 날짜 정보다. 만들기 전에 정한 규칙이 하나 있었다. 이 도구는 원고를 읽기만 하고, 어떤 경우에도 고치거나 만들거나 지우지 않는다.
도구를 만들기 전에 규칙부터 적었다
작업 지시서(CLAUDE.md — Claude가 이 프로젝트에서 따를 규칙을 적은 파일) 맨 앞 「절대 규칙」에 “vault의 md 파일은 읽기 전용, frontmatter 편집 기능은 명시적으로 요청하기 전까지 구현하지 않는다”를 적어 두고 시작했다.
데이터가 어디에 사는지를 보면 이 순서가 맞다. 날짜의 정본은 원고 파일이고, 도구는 그걸 보여 주는 파생물이다. 도구가 원고를 못 건드리면 도구에 버그가 있어도 틀린 화면이 나올 뿐 원고는 그대로다. 새로고침하면 다시 원고에서 읽어 오니까. 반대로 도구가 쓸 수 있으면 버그 하나가 원고 수백 편에 그대로 남는다. 게다가 이 vault는 git으로 관리하지 않아서 되돌릴 이력도 없었다.
- 망가져도 되는 쪽(도구)과 망가지면 안 되는 쪽(원고)을 먼저 가르면, 망가져도 되는 쪽은 마음 놓고 고치고 갈아엎을 수 있다
편집 기능은 편했지만 미뤘다
점검(lint — 누락·이상 데이터를 찾아 목록으로 보여 주는 검사) 탭이 “연호 없음” 같은 누락을 수백 건 짚어 주자, 도구 안에서 바로 날짜를 고치는 편집 기능을 붙일지 정해야 했다. 선택지는 둘이었다. 저장 전에 백업을 뜨고 frontmatter만 고치는 편집을 넣거나, 편집은 미루고 점검 항목을 누르면 옵시디언에서 그 원고가 열려 직접 고치게 하거나.
편집은 나중으로 미뤘다. 편하긴 하지만 기능으로 들어가는 순간 “읽기 전용”은 규칙이 아니라 조건부가 된다. 버튼 하나로 원고에 쓰는 길이 늘 열려 있게 되고, 원고의 안전은 매번 그 코드가 맞게 짜여 있기를 믿는 것으로 바뀐다. 지금 필요한 건 고치는 게 아니라 무엇을 고쳐야 하는지 아는 것이었다. 짚는 건 도구가 하고 고치는 건 옵시디언에서 사람이 하는 흐름으로 충분했다.
- 편의 기능이 원칙의 예외를 상시로 열어 두면, 그건 예외가 아니라 새 규칙이다
원고를 고칠 일이 실제로 왔다
해설집 노트들이 걸렸다. 제목이 「해설집-원본제목」 꼴이라 어느 원고를 해설하는지는 분명한데, 날짜가 비어 있어서 점검에 “연호 없음”으로 잔뜩 올라왔다. 원본 원고의 날짜를 그대로 넣으면 되지 않나 싶었다.
선택지는 셋이었다. 도구가 화면에서만 원본 날짜를 빌려 쓰게 하거나(원고는 그대로), 해설집 원고에 날짜를 실제로 써넣거나, 지금은 다루지 않거나. 도구와는 별개로, 해설집 원고에 한 번만 직접 채워 넣되 제목이 원본과 완전히 일치하는 확실한 것만 하라고 Claude에게 시켰다.
선을 지우지 않고 옆으로 뺀 셈이다. 도구는 계속 읽기 전용으로 두고, 쓰기는 도구 밖의 일회성 작업으로 떼어 냈다. 기능이 되면 쓰는 권한이 계속 남지만, 일회성이면 그 한 번만 제대로 검사하고 끝난다. 그래서 쓰기 전에 대상 원고를 따로 백업하고, 실제로 쓰지 않은 채 무엇이 바뀔지만 먼저 뽑아 보는 드라이런(dry run — 실행을 흉내만 내서 결과를 미리 확인하는 것)을 거치고, 쓴 뒤엔 본문이 한 글자도 안 바뀌었는지 대조했다. 날짜가 빈 해설집 83편 중 원본과 제목이 똑같은 34편만 채웠고, 나머지 49편은 손대지 않고 점검 목록에 남겼다.
- 원칙을 넘어야 할 일이 오면, 원칙을 고치기보다 그 일을 원칙 밖의 일회성 작업으로 떼어 낸다
- 일회성으로 떼어 내면 그 한 번에 안전장치를 몰아 줄 수 있다 — 상시 기능에는 매번 치를 수 없는 비용이다
요약
- 망가져도 되는 도구와 망가지면 안 되는 원본을 먼저 가르고, 도구는 원본을 읽기만 한다
- 편의 기능으로 원칙의 예외를 상시로 열어 두지 않는다
- 원칙을 넘어야 할 일은 원칙 밖의 일회성 작업으로 떼어 내 그 한 번만 철저히 한다