linetta 1.2.2 원고 유실 버그 수정
linetta 1.2.0에서 기억과 스킬을 낸 뒤, 1.2.1에서 에이전트 버튼을 넣고 1.2.2에서 원고 저장 버그와 되돌리기 문제를 고쳤다.
저장 버그 다섯 개
외부 사용자를 늘리기 전에 원고와 데이터를 지키는 부분부터 막아야 한다고 봤다. 커밋 18f0108을 기준으로 저장 경로를 분석해 보니, 원고를 잃거나 덮어쓸 수 있는 버그가 다섯 가지 나왔다.
- 포커스 모드를 켜고 끄거나 ZEN 모드에 들어가면 에디터가 처음 불러온 장면으로 되돌아갔다.
- 라이브러리로 돌아가거나, 검색으로 다른 작품으로 가거나, 흐름이나 설정을 열거나, 새로고침하면 대기 중인 자동 저장을 끝내지 않고 취소했다.
- 저장에 실패하면 저장하지 못한 글이 남은 채로 에디터가 닫혔다.
- 새로 입력한 뒤 이전 저장이 끝나면 장면이 저장 완료로 표시돼, 외부 변경이 들어올 때 더 새 글 위로 장면을 다시 불러올 수 있었다.
- ‘맥락 편집’의 일괄 바꾸기가 버전을 확인하고도 조건 없이 썼다.
1.2.0은 이 이슈들이 열린 채로 나갔고, 다음 날 1.2.2에서 다섯 가지를 모두 고쳤다. 수정은 #146 하나에 묶었고, 에디터·저장 대기열·작업 공간 저장 흐름과 엔진의 일괄 바꾸기에 테스트를 붙여 Linux·Windows CI를 통과했다. 저장에 실패하면 에디터 옆에 “저장하지 못했습니다. 원고는 이 화면에 그대로 있습니다.”라고 한 줄로 알린다. 에디터는 편집 revision을 추적하고, 실제로 저장한 revision에 대해서만 저장 안 됨(dirty) 표시를 지운다. 앱 창을 닫을 때는 아직 트레이로 보내는 Rust 쪽 처리에 맡기고 JS에서 가로채지 않는다.
에이전트가 쓴 장면 되돌리기
에이전트 패널을 마무리하며 한 리뷰에서 걸린 문제다. 개요 일괄 수정은 도구 줄에서 되돌릴 수 있었지만, linetta_write_scene과 linetta_revise_scene은 batch_id 대신 snapshot_id를 돌려줘서 에이전트가 가장 자주 하는 작업에는 되돌리기 버튼이 나타나지 않았다. 장면이 바뀌는 걸 보고 되돌리기를 누르는 흐름이 본문에서는 한 번도 동작하지 않았던 셈이다. 1.2.2에서 에이전트가 쓴 장면도 도구 줄에서 되돌릴 수 있게 했다.
에이전트 버튼
전에는 Cmd/Ctrl+J와 명령 팔레트로만 패널을 열 수 있었다. 그래서 1.2.0을 설치하고 툴바를 봐도 에이전트가 보이지 않아 릴리스의 대표 기능이 빠진 것처럼 보였고, 1.2.1에서 작업 공간 툴바에 “에이전트” 버튼을 넣었다.
App Store에서 받거나 brew install --cask devlikebear/tap/linetta로 설치한다.