외부 변경 재조정과 충돌 처리
Glif의 문서는 전용 데이터베이스에 갇힌 사본이 아니라 폴더의 실제 파일이다. 다른 편집기, Git 작업, 동기화 도구가 파일을 바꿀 수 있으므로 Glif는 시작할 때 등록된 Scope와 Binder를 디스크 상태에 다시 맞춘다. 열린 문서에 저장하지 않은 편집이 있으면 외부 버전으로 조용히 덮어쓰지 않는다.
이 장은 기능 ID WS-03의 시작 재조정과 그 뒤 이어지는 외부 변경 안전 경계를 함께 다룬다. 재조정은 최신 디스크 상태를 읽는 기능이지 별도 백업은 아니다. 중요한 원본은 다른 저장 위치나 version control에도 보존한다.
| 상태 | Glif의 기본 동작 | 사용자가 결정할 것 |
|---|---|---|
| 앱을 닫은 동안 파일이 수정됨 | 시작 시 최신 디스크 내용과 파일 목록을 재조정 | 변경된 문서를 열어 결과 확인 |
| Glif에서 수정하지 않은 열린 문서가 외부에서 변경됨 | 디스크 버전을 다시 읽음 | 최신 내용이 맞는지 검토 |
| 저장하지 않은 Glif 편집과 외부 변경이 겹침 | 자동 저장·덮어쓰기 차단, 충돌 banner 표시 | 내 편집 유지, 디스크 버전 사용, 사본 저장 |
| 열린 파일이 외부에서 삭제됨 | 편집 buffer는 즉시 버리지 않음 | 원래 경로 복원, 사본 저장, editor 닫기 |
준비된 예제
예제 폴더를 복사해 Binder로 연다. 공개 fixture 자체는 바꾸지 말고 복사본에서 실습한다.
1. 앱을 닫은 동안 바뀐 파일 확인
02_external-review.md를 Glif에서 열고 현재 내용을 확인한다.- 문서를 닫고 Glif를 종료한다.
- 텍스트 편집기나 Git checkout으로
status와Review state문장을 바꾼다. - Glif를 다시 시작하고 같은 Scope를 연다.
- Shelf의 파일 목록과 editor 본문이 디스크의 최신 상태와 같은지 확인한다.

재조정은 내부 watcher나 cache 이름을 사용자가 알아야 하는 기능이 아니다. 결과는 다음처럼 사용자 표면에서 확인한다.
- 새 파일은 Shelf에 나타난다.
- 삭제된 파일은 Shelf에서 사라지며, 열려 있던 buffer가 있으면 별도 결정을 요구한다.
- 이름이 바뀐 파일은 새 경로로 나타난다.
- 수정된 파일을 새로 열면 최신 디스크 내용을 읽는다.
- 접근할 수 없어진 Binder는 시작을 영구히 막지 않고 목록 재조정 대상으로 처리한다.
2. 편집 중 외부 변경이 들어온 경우
이번에는 02_external-review.md를 Glif에서 열고 한 문장을 수정하되 저장하지 않는다. 그 상태에서 외부 편집기로 같은 파일의 다른 줄을 저장한다.
Glif는 충돌을 발견하면 다음 선택을 보여 준다.
| 선택 | 결과 | 적합한 경우 |
|---|---|---|
| 내 편집 유지 | 확인 후 현재 editor 내용을 원본 경로에 저장 | 외부 변경을 버려도 된다고 판단했을 때 |
| 디스크 버전 사용 | 저장하지 않은 editor 편집 대신 디스크 내용을 다시 읽음 | 외부 변경이 정본일 때 |
| 사본으로 저장 | 현재 editor 내용을 다른 파일로 보존 | 두 버전을 비교해야 할 때 |
| 계속 편집 | 당장 결정하지 않고 buffer 유지 | 먼저 내용을 복사하거나 검토할 때 |
가장 안전한 기본 선택은 두 버전의 의미가 확실하지 않다면 사본으로 저장하는 것이다. 내 편집 유지는 덮어쓰기 확인을 거치며, Glif가 임의로 외부 변경을 지우는 자동 선택은 아니다.
3. 외부 삭제 처리
열린 문서가 디스크에서 삭제되어도 editor의 현재 내용은 세션에 남는다.
- 원래 경로로 복원하면 현재 editor 내용을 같은 파일명으로 다시 만든다.
- 사본으로 저장하면 다른 경로를 골라 내용을 보존한다.
- 에디터 닫기는 메모리의 편집 내용도 제거할 수 있으므로 확인 문구를 읽는다.
삭제와 수정 충돌이 남은 문서는 History 복원 대상에서도 차단된다. 먼저 외부 변경 결정을 끝낸 뒤 History를 다시 연다. 이것은 복원이 최신 buffer를 우회해 덮어쓰지 않게 하는 보호 경계다.
4. 재조정이 기대와 다를 때
| 증상 | 확인 | 복구 |
|---|---|---|
| 새 파일이 Shelf에 없음 | Scope Lock 밖인지, 숨김 경로인지 확인 | Scope Lock을 넓히거나 Scope를 다시 연다 |
| 이전 Binder가 계속 보임 | 실제 폴더가 이동·삭제되었는지 확인 | Recent/Binder 목록을 새로 확인하고 올바른 폴더를 연다 |
| 외부 변경 banner가 사라지지 않음 | editor에 저장하지 않은 편집이 남았는지 확인 | 사본 저장 후 디스크 버전을 다시 읽는다 |
| 파일을 다시 열 수 없음 | 권한, 동기화 placeholder, 이동된 경로 확인 | 원본 폴더에서 파일을 복구한 뒤 다시 시도한다 |
검증 경계
이 예제는 실제 release candidate에서 외부 수정 후 Scope를 다시 열어 최신 내용이 표시되는 것을 확인했고, Binder 시작 재조정 계약 테스트도 통과했다. 네트워크 드라이브·cloud placeholder·권한이 바뀌는 장시간 오프라인 상황까지 자동 복구된다고 주장하지 않는다. 그런 경우 원본 폴더의 상태와 접근 권한을 먼저 확인한다.