숨기지 않고 지운 네이티브 탭
작업공간 사이드바를 얹어도 AppKit 탭이 남아 있으면 탭 모델이 두 벌이 됩니다. 원본을 따라 코드를 받을 때마다 창 단위 가정이 다시 들어올 수도 있었습니다. 그래서 창 하나 안에 작업공간, 탭, 분할 패널을 트리로 두고 네이티브 탭은 제거했습니다. 네이티브 탭 API가 쓰이면 빌드가 실패하는 감사 스크립트도 CI에 넣었습니다.
이제 한 사이드바에서 모든 작업공간, 탭, 패널이 보이고 사이드바 제어 위치마다 UI 테스트를 둡니다. 대신 원본 변경을 받아올 때마다 동기화 목록을 읽고 창 관련 변경을 직접 걸러야 해서 포크를 유지하는 비용이 늘었습니다.
만들어 두고 걷어 낸 세션 복구
v0.2.5에서 앱을 다시 열면 이전 창을 되살리는 복구를 넣었습니다. 이름만 보면 작업을 되살려 줄 것 같았지만 실제로 돌아오는 것은 새 셸과 작업 디렉터리뿐이었고 프로세스와 스크롤백은 돌아오지 않았습니다. 그러면서도 셸 제목이나 디렉터리가 바뀔 때마다 전체 구조를 메인 스레드에서 다시 계산하고 있어서 이전 버전보다 무겁고 잔버그가 많았습니다.
복구 파이프라인을 더 고치는 길과 복구를 걷어 내고 v0.2.4 기준으로 안정화하는 길 중 뒤쪽을 골랐습니다. 복구 기능을 지운 PR은 macOS 테스트 508건을 통과했습니다. 그 뒤 작업공간, 탭, 패널 배치, 작업 디렉터리만 파일에 남기는 구조 저장을 다시 넣었습니다. 저장본이 지금 돌고 있는 셸을 덮어쓰지 않도록 디스크로 쓰는 방향만 허용했고 "종료 전 화면 그대로"라는 약속은 하지 않습니다. 앱을 꺼도 프로세스를 살려 두는 백그라운드 서버는 구조 저장이 안정된 뒤로 미뤘습니다.
구조 저장은 실제 앱에서 이전 저장본 승격과 쉬는 동안 쓰기 없음을 확인했습니다. 강제 종료 뒤 저장이 멈추던 문제는 재사용된 PID를 실행 중인 앱으로 오인한 원인을 고쳐 막았습니다.