2026-09-14

linetta 1.2.2 원고 유실 버그 수정

linetta 1.2.0에서 기억과 스킬을 낸 뒤, 1.2.1에서 에이전트 버튼을 넣고 1.2.2에서 원고 저장 버그와 되돌리기 문제를 고쳤다.

저장 버그 다섯 개

외부 사용자를 늘리기 전에 원고와 데이터를 지키는 부분부터 막아야 한다고 봤다. 커밋 18f0108을 기준으로 저장 경로를 분석해 보니, 원고를 잃거나 덮어쓸 수 있는 버그가 다섯 가지 나왔다.

  1. 포커스 모드를 켜고 끄거나 ZEN 모드에 들어가면 에디터가 처음 불러온 장면으로 되돌아갔다.
  2. 라이브러리로 돌아가거나, 검색으로 다른 작품으로 가거나, 흐름이나 설정을 열거나, 새로고침하면 대기 중인 자동 저장을 끝내지 않고 취소했다.
  3. 저장에 실패하면 저장하지 못한 글이 남은 채로 에디터가 닫혔다.
  4. 새로 입력한 뒤 이전 저장이 끝나면 장면이 저장 완료로 표시돼, 외부 변경이 들어올 때 더 새 글 위로 장면을 다시 불러올 수 있었다.
  5. ‘맥락 편집’의 일괄 바꾸기가 버전을 확인하고도 조건 없이 썼다.

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로 설치한다.

같은 작업대에서 나온 이웃 도구입니다.