History 타임라인과 기간별 변경 분포
History는 현재 Binder의 변경을 로컬 복구 지점으로 기록하고, 시간·경로·변경 유형을 기준으로 다시 찾는 화면이다. 타임라인은 백업 서비스가 아니며 이 장치에만 저장된다. 중요한 문서는 별도의 백업과 version control도 함께 사용한다.
| 기능 ID | 기능 | 이 장의 실증 범위 |
|---|---|---|
| VW-19 | History timeline | 최근 변경, 검색·필터, 문서 리비전 목록, side-by-side diff |
| VW-20 | day/week/month grouping | 같은 기록을 일·주·월 변경 분포로 전환하고 묶음만 바뀌는지 확인 |
준비된 예제
실증 시나리오는 2026년 5월, 7월, 8월에 해당하는 네 복구 지점을 만들어 여러 기간 묶음을 한 화면에서 확인한다. 공개 예제에는 생성된 로컬 History 저장소를 포함하지 않는다.
전체 상호작용 보기
영상은 최근 변경 → 변경 분포 → 일·주·월 전환 → 문서 리비전 diff의 실제 클릭 흐름을 보여 준다. 파란 원은 pointer 위치이며, 아래 caption은 그 시점의 검증 의도다.
1. History 열기
Launcher에서 History를 연다. 현재 Binder에 아직 복구 지점이 없으면 빈 상태가 표시된다. 문서를 저장하거나 수동 checkpoint를 만든 뒤 히스토리 새로고침을 누른다.

상단 상태 영역에서 다음을 구분한다.
- 마지막 기록 시도가 복구 지점을 만들었는지, 변경 없음이었는지, 실패했는지
- 이 장치에만 저장되며 백업이 아니라는 경계
- 현재 관측된 복구 가능 시간 범위와 지점 수
- repository 저장 크기와 보존 정책 관측 상태
자동 정리 정책이 확정되지 않은 상태에서는 보존 정책 관측 중(자동 정리 안 함)이 보일 수 있다. 이를 무제한 보존 약속으로 해석하지 않는다.
2. 최근 변경 검색과 필터
최근 변경 목록의 한 행은 파일 하나의 변경 사건이다.
| 표면 | 읽는 법 |
|---|---|
| 경로 또는 파일명 검색 | 현재 불러온 History 범위에서 경로·파일명 일치 항목 찾기 |
| 모든 변경 | 작성, 수정, 삭제, 이름 변경으로 제한 |
| 전체 기간 | 최근 1일, 7일, 30일로 제한 |
| 추가·삭제 줄 수 | 해당 변경의 규모를 빠르게 판단 |
| 이전 경로 | 이름 변경 전 파일 위치 확인 |
검색과 필터는 History를 삭제하거나 새 복구 지점을 만들지 않는다. 이전 기록 더 보기가 보이면 현재 화면에 모든 기록이 로드된 것은 아니므로 필요한 범위까지 불러온다.
3. 변경 분포를 일 단위로 보기
상단의 변경 분포를 누른 뒤 일을 선택한다.

각 열은 날짜 묶음이고, 각 셀은 해당 문서의 변경 횟수 또는 추가·삭제 줄 수를 보여 준다. 폴더 행은 하위 문서를 합산하며 펼치고 접을 수 있다. 이미 삭제된 문서도 History에만 존재하는 행으로 남을 수 있다.
4. 주·월 단위로 묶기
주는 월요일부터 일요일까지를 한 묶음으로 표시한다. 월은 같은 연·월의 사건을 묶는다.

기간 전환은 presentation만 바꾼다.
- commit timestamp는 바뀌지 않는다.
- 복구 지점과 파일 내용은 새로 생성되거나 합쳐지지 않는다.
- 같은 사건이 선택한 기간 bucket으로 다시 배치된다.
- 셀을 선택하면 그 기간·문서에 속한 실제 사건 목록으로 내려갈 수 있다.
1시간·4시간·12시간 묶음은 하루 안의 조밀한 작업을 볼 때 사용한다. VW-20의 필수 공개 예제는 일·주·월이지만 같은 원칙으로 동작한다.
5. 문서 리비전과 diff 열기
최근 변경의 01_release-brief.md 항목을 누르면 왼쪽에 날짜별 리비전, 가운데에 선택한 리비전과 현재 문서의 diff가 열린다.

- 왼쪽 날짜 묶음을 펼친다.
- 시각과 변경 유형이 표시된 리비전을 선택한다.
- 가운데에서 삭제된 내용과 추가된 내용을 비교한다.
- 필요한 경우 변경 hunk checkbox를 골라 일부만 적용하거나 거절 기록을 남긴다.
- 전체 리비전이 필요하면 복원, 원본을 유지하려면 사본으로 복원을 사용한다.
삭제 사건은 그 commit 직전 내용을 읽고, 이름 변경은 선택한 이전 경로에 맞는 내용을 읽는다. 리비전 내용이 더 이상 보존 범위에 없으면 빈 내용으로 꾸미지 않고 사용할 수 없다고 표시한다.
6. 안전하게 복원하기
복원은 단순 덮어쓰기가 아니다.
- 대상 문서에 저장하지 않은 편집, 외부 충돌, 외부 삭제가 없는지 확인한다.
- Glif가 복원 직전의 현재 상태를 필수 recovery point로 만든다.
- 선택한 리비전을 원본 경로 또는 사본 경로에 쓴다.
- 열린 문서라면 새 내용을 다시 불러온다.
- 복원 결과를 새 History 지점으로 기록한다.
History Home의 최근 복원 · 완료 영역에는 가능한 경우 되돌리기가 나타난다. 일부 파일만 처리됐거나 reload가 실패하면 일부 완료와 미복구 경로 수를 확인한다.
Binder 전체 복원은 문서 하나의 복원보다 범위가 크다. staging으로 대상 tree를 계획하고, 적용 전 journal과 rollback 지점을 만든 뒤 파일별 결과를 기록한다. 충돌 경로가 있으면 성공한 경로와 실패한 경로를 구분해 검토한다.
7. 키보드로 변경 분포 탐색
변경 분포 cell에 focus가 있을 때 방향키는 같은 행·열의 다음 실제 변경 cell로 이동한다. 빈 cell은 건너뛰며 행 끝에서 반대편으로 감기지 않는다.
Home/End: 현재 행의 처음·마지막 변경Ctrl+Home/Ctrl+End: 전체 matrix의 처음·마지막 변경Enter또는Space: 선택한 cell의 사건 목록 열기
문제 해결
| 증상 | 원인 후보 | 복구 |
|---|---|---|
| 최근 변경이 비어 있음 | 아직 checkpoint가 없거나 다른 Binder가 선택됨 | 문서를 저장하고 checkpoint 후 새로고침 |
| 찾는 기록이 없음 | 검색·유형·기간 필터 또는 pagination | 필터 초기화 후 이전 기록 더 보기 |
| 복원 버튼이 비활성 | 리비전 내용 없음, dirty buffer, 외부 충돌 | 원문 상태를 먼저 정리하거나 사본 경로 사용 |
| 복원 후 일부 완료 | reload 또는 일부 경로 적용 실패 | 미복구 경로와 최신 operation 상태 확인 |
| 오래된 기록이 사라짐 | 실제 보존 범위 밖 | 별도 백업·Git에서 복구; History를 무제한 백업으로 간주하지 않기 |
실증 결과와 경계
release candidate에서 네 복구 지점, 최근 변경, 일·주·월 전환, 문서 리비전 diff를 확인했다. 캡처 전후 공개 fixture의 hash는 같았으며 History repository는 장치의 로컬 shadow 저장소에만 생성됐다. 이 증거는 로컬 History와 복원 UX를 검증하지만 외부 backup, 여러 장치 동기화, 무제한 retention을 주장하지 않는다.