Ubisam-MergeTool/doc/진행상황.md
ksj09406 df06947afc Shift+휠 가로 · Ctrl+↓ 와 아래 "지금 줄" 칸 · Ctrl+W 로 폴더 비교 · 다크 모드
- Shift+휠을 가로 스크롤로(파일 비교 · 메모). 파일 비교는 가로 휠(틸트)과 같은
  길로 보내 마우스가 놓인 칸이 움직이고 나머지가 따라온다. 휠 아래 = 오른쪽.
- Ctrl+↓ / Ctrl+↑ 를 다음 · 이전 차이의 대체 키로. 칸과 상태 줄 사이에 캐럿 행의
  BASE(변경 전) · LOCAL(변경 후)을 위아래로 보이는 칸 - 칸과 같은 CodeTextBlock
  (문법 색 · 바뀐 글자 칠하기 · 줄 색), 긴 줄은 접는다. HomeViewModel.CaretLine.
- 폴더 비교에서 연 문서 탭을 닫으면(Ctrl+W) 폴더 비교 탭으로 간다.
  RequestPlainCompare(fromFolder:) 로 표시를 보내 DocTab.FromFolder 에 붙이고,
  ◀ 이전 파일 · 다음 파일 ▶ 로 짝을 바꿔도 이어 받는다. 다른 길로 연 탭은 그대로.
- 어두운 테마에서 폴더 비교 목록만 흰 바탕 · 검은 글자였다 - 플랫폼 테마가
  TreeView 는 칠하지 않는다. 바탕 · 글자색(항목 포함)을 테마에서 받는다.
  색 구분의 0 항목 흐리기 0.35 -> 0.55(어두운 바탕에서 묻혔다).

시험: 빌드 경고 0 · 오류 0. 화면 g27-five(새, 어두운 테마) - Shift+휠 편집기 가로
0 -> 20% · 세로 그대로 · BASE 칸 위에서도 · 메모, Ctrl+↓ 로 차이 이동 · 아래 칸
표시, 폴더 비교에서 연 탭만 Ctrl+W 뒤 폴더 비교로, 사진으로 폴더 목록 · 아래 칸
확인. 실패 0. 기존 회귀는 돌리지 않았다.

Agent: main (claude-opus-5-5)

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-01 19:02:25 +09:00

503 lines
62 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# MergeHub 진행 상황
> **이어받는 사람은 [HANDOFF.md](HANDOFF.md) 를 먼저 읽는다** — 지켜야 할 것,
> 항목 하나를 끝내는 순서, 시험 도구가 있는 자리와 함정, 지금 하던 일이 적혀 있다.
**지금 무엇이 남았는지만** 적는다. 끝난 것의 상세는 [history/](history/) 로 옮겼다.
항목을 끝내면 이렇게 한다.
1. 상세는 `history/YYYY-MM-DD-주제.md` 에 적는다.
2. 이 파일은 **대기 → 완료로 상태만** 고친다.
3. [history/changelog.md](history/changelog.md) 에 한 줄을 더한다 (날짜 · 무엇을 왜 · 커밋).
푸시는 하지 않는다 — 사내 Gitea 저장소가 만들어지면 그때 한 번에 올린다.
상태 표기: `대기` · `진행` · `완료`
---
## 4차 — 로컬 머지툴 사용성 (2026-09-10) — **전부 끝**
진행 기록: [history/2026-09-10-4차.md](history/2026-09-10-4차.md)
지시서: [작업지시/4차.md](작업지시/4차.md). 기능을 늘리는 것이 아니라 매일 쓰는 사람의 걸림돌을 없애는 것이 목적이다.
### A. 작업한 것이 사라지는 문제
| 상태 | 항목 |
|---|---|
| **완료** | A-1 저장하지 않은 편집이 말없이 사라진다 |
| **완료** | A-2 내보낸 보고서에 만든 사람이 없다 |
### B. 매일 쓰는 마찰 줄이기
| 상태 | 항목 |
|---|---|
| **완료** | B-1 최근 비교 목록 |
| ~~취소~~ | ~~B-2 같은 줄 접기~~ (2026-09-10 사용자 판단으로 뺌) |
| **완료** | B-3 폴더 비교에서 다음 다른 파일로 |
| ~~취소~~ | ~~B-4 외부 편집기로 열기~~ (2026-09-10 사용자 판단으로 뺌) |
### C. 화면 구성 정리
| 상태 | 항목 |
|---|---|
| **완료** | C-1 같은 경로가 세 군데 나온다 |
| **완료** | C-2 아래쪽 정보가 세 군데로 흩어져 있다 |
| **완료** | C-3 Git 탭의 원격 블록을 접는다 |
| **완료** | C-4 색 구분 범례를 이동 도구로 |
| **완료** | C-5 ACTIONS 칸을 자주 쓰는 것과 한 번 정하는 것으로 나눈다 |
### D. 변경 이력을 전용 폴더로
| 상태 | 항목 |
|---|---|
| **완료** | D-1 `doc/history/` 를 만들고 진행상황을 나눈다 |
| **완료** | D-2 앞으로의 기록 규칙을 정한다 |
---
## 5차 — 실제 소스에 맞추기 (2026-09-10 ~)
진행 기록: [history/2026-09-11-5차.md](history/2026-09-11-5차.md)
지시서: [작업지시/5차.md](작업지시/5차.md). 지금까지는 시험용 파일로만 확인했다.
5차는 실제 소스(2,115개 · 426,723줄)를 한 번 재 보고 나온 것들이다.
2026-09-11 부터는 실제 소스를 더 보지 않는다 - 여기는 머지툴을 만드는 자리이고,
시험 재료는 우리가 만들어 쓴다. 이미 받아 둔 숫자는 그대로 쓴다.
### A. 남의 소스를 망가뜨릴 수 있는 것
| 상태 | 항목 |
|---|---|
| **완료** | A-1 CP949 파일 67개를 잘못 읽으면 한글이 깨진다 |
| **완료** | A-2 커밋·체크아웃 뒤에 저장 안 한 편집이 조용히 사라진다 |
### B. 실제 소스에 맞추기
| 상태 | 항목 |
|---|---|
| **완료** | B-1 XAML 색칠이 사실상 없다 (400개 · 42,477줄) |
| **완료** | B-2 폴더 비교가 오래 걸린다 — 전체 비교 3.4배 · 빠른 비교 4.7배 |
### C. 실전 투입
| 상태 | 항목 |
|---|---|
| **완료** | C-1 병합을 한 번 끝까지 해 본다 — 커밋까지 갔다. 걸린 것 23가지(심각 5)가 6차 재료 |
---
## 6차 — 병합을 끝까지 믿고 쓸 수 있게 (2026-09-14 ~)
진행 기록: [history/2026-09-14-6차.md](history/2026-09-14-6차.md)
지시서: [작업지시/6차.md](작업지시/6차.md). 5차 C-1 에서 만든 저장소로 병합을 끝까지 해 보고 걸린 23가지다.
확인은 같은 저장소(`C1Repo`)로 한다. 실제 소스는 열지 않는다.
### A. 파일이나 이력을 망가뜨리는 것
| 상태 | 항목 |
|---|---|
| **완료** | A-1 3분할로 푼 파일을 저장하면 CRLF 가 LF 로 바뀐다 — 내 쪽(ours) 파일의 줄끝·인코딩을 따른다 |
| **완료** | A-2 Save & Commit 이 "실패" 라는데 파일은 이미 써지고 스테이징됐다 — [해결로 저장] 을 따로 둠 |
| **완료** | A-3 충돌 파일을 고르면 상대(Theirs) 칸이 안 나온다 — 콤보를 안 건드려도 네 칸, REMOTE 제목에 상대 브랜치 |
| **완료** | A-4 상대가 지운 파일을 3분할이 다룰 줄 모른다 — 남은 파일을 두 칸으로, [파일 남기기] · [파일 지우기] 띠 |
| **완료** | A-5 양쪽 새 파일에 Accept Both 를 누르면 빌드가 깨진다 — 누르기 전에 묻고, 글로 이어 붙여 BOM 한 번 · 줄끝 한 가지 |
### B. 헷갈리거나 막히는 것
| 상태 | 항목 |
|---|---|
| **완료** | B-1 충돌 목록에서 3분할 화면까지 가는 길이 끊겨 있다 — 병합 뒤 목록이 바로 서고, 두 번 누르기·Enter·[3분할로 열기] |
| **완료** | B-2 확인 창이 엉뚱한 파일 이름을 댄다 — 이름·[저장하고 계속] 모두 실린 파일 기준, [취소] 뒤 콤보도 돌아온다 |
| **완료** | B-3 커밋 메시지가 엉뚱하게 남는다 — 기본값 `Merge branch '상대' into 내 브랜치`, `#` 줄 뺌, 병합이 끝나면 칸을 비움 |
| **완료** | B-4 MERGED 칸 줄 번호가 네 자리에서 잘린다 — 네 칸 여백을 66px 로, MERGED 번호 자리 20 → 36px(다섯 자리) |
| **완료** | B-4 확인 중 발견 두 건 — 멀리 건너뛰면 네 칸이 위로 밀려 아래가 빔 · `git mergetool` 세 벌이 두 칸으로 열림 |
| **완료** | B-5 머지 주석은 소스에 넣고, 병합 뒤에는 그 줄을 무시한다 — 비교(두 칸 · 네 칸 · 폴더)에서 가리고, 주석만 다른 git 충돌은 양쪽 주석을 남겨 자동으로 푼다. 설정에서 끔 |
| **완료** | B-6 충돌 탭에서 하나씩 누를 때마다 오래 기다린다 — 여러 개 골라 Accept 한 번, 다시 읽기는 끝에 한 번. 15개 22.0초 → 1.2초 |
| **완료** | B-7 상태바가 병합 중에 믿을 수 없는 값을 보인다 — 인코딩 · 줄바꿈을 내 쪽(ours) 파일로, 요약에 "남은 충돌 N개 · 받을 변경 M줄" |
| **완료** | B-8 병합 커밋 뒤 파일 비교 탭이 어정쩡하게 남는다 — 다시 나지 않음(두 흐름 확인, B-1 · A-3 에서 없어짐). 코드 변경 없음 |
### E. 추가 요청 (2026-09-14)
| 상태 | 항목 |
|---|---|
| **완료** | E-1 C# 코드 스타일 맞춤 (AURORA · Allman) — 비교 전에 중괄호 줄바꿈을 맞춤. 두 칸 · 네 칸 · 폴더 비교, 설정. 스타일만 다른 파일 남은 차이 39줄 → 1줄 |
| **완료** | E-2 발표 시연 재료 `demo\` — `make-demo.ps1` 한 번으로 폴더 비교 · 스타일 · mergetool · 큰 파일 · 병합 저장소 |
| **완료** | E-3 웹 문서 — 사용자 매뉴얼 · 발표 자료 · 남은 일 · 개발 현황 · 기획안 최신화 · 시연 대본 · WinMerge 비교 |
### C. 사소한 것
| 상태 | 항목 |
|---|---|
| **완료** | C-1 로그와 목록 다듬기 — 결과 로그 한 번, 목록에 충돌 종류 네 가지, "남은 충돌 N개 · 푼 것 M개 (M/전체)". CP949 로그 이름은 이미 고쳐져 있었음 |
### D. 확인
| 상태 | 항목 |
|---|---|
| **완료** | D-1 병합을 처음부터 다시 끝까지 해 본다 — 충돌 26(자동 2)을 MergeHub 만으로 풀어 병합 커밋. 줄끝 · BOM 이 바뀐 파일 0/33, A 다섯 가지 다시 안 남. 23가지 중 사라짐 18 · 정해서 남음 1(머지 주석) |
**6차 전부 끝.** D-1 에서 새로 걸린 세 가지는 7차 재료다(고치지 않음).
- N1 3분할에서 고른 줄 로그가 "N행 (3-Way 안 씀) 반영"
- N2 마지막 [Save](옛 이름 해결로 저장) 뒤 병합 중인데 두 칸 · "남은 차이 3줄" 로 떨어짐
- N3 병합 커밋 뒤 `.git/MERGEHUB_CONFLICTS` 가 남음
---
## 7차 — 병합 화면이 사실대로 말하게 · 병합 말고 다른 충돌 길 (2026-09-14 ~)
진행 기록: [history/2026-09-14-7차.md](history/2026-09-14-7차.md)
지시서: [작업지시/7차.md](작업지시/7차.md). 6차 D-1 에서 새로 걸린 세 가지와, 6차에서 뺀 pull · rebase · cherry-pick 충돌.
### A. 병합 화면이 사실과 다르게 말하는 것
| 상태 | 항목 |
|---|---|
| **완료** | A-1 마지막 충돌을 저장하면 "남은 차이" 가 뜬다 — 병합 중 충돌 0 이면 "충돌 정리 끝 · 병합 커밋을 할 수 있습니다 · 내 쪽 대비 받은 변경 N줄", 제목에 "병합 전 내 쪽" |
| **완료** | A-2 3분할에서 줄을 골라도 로그는 "3-Way 안 씀" 이라고 한다 — 로그 "10행 Theirs(feature/theirs) 반영" · "Mine(feature/mine) 으로 정함", 충돌 네 칸 머리는 콤보 대신 "병합 충돌 · REMOTE = 상대" |
### B. 치우기
| 상태 | 항목 |
|---|---|
| **완료** | B-1 병합 커밋 뒤에도 `.git/MERGEHUB_CONFLICTS` 가 남는다 — 병합 커밋 · 작업 취소 직후와 새로고침마다 쓸모없어진 목록을 지움(터미널에서 끝낸 병합 포함). 병합 중에는 그대로 |
### C. 병합 말고 다른 충돌 길
| 상태 | 항목 |
|---|---|
| **완료** | C-1 pull 이 낸 충돌에는 머지 주석 자동 풀기가 안 걸린다 — pull 도 [Merge] 와 같은 뒷일(주석 자동 풀기 · 알림 · 진행 줄), 커밋 메시지 "Merge remote-tracking branch 'origin/…' into …" |
| **완료** | C-2 rebase · cherry-pick 충돌을 네 칸으로 끝까지 — 작업별 칸 제목(올릴 자리 · 다시 올리는 내 커밋 · 가져오는 커밋) · 진행 표시 · 끝내기 단추(병합 커밋 · 계속 · 커밋) · 원래 메시지, 이력 [모든 브랜치]. 두 길 모두 줄끝 바뀐 파일 0 |
### D. 확인
| 상태 | 항목 |
|---|---|
| **완료** | D-1 네 길(병합 · pull · rebase · cherry-pick)을 처음부터 다시 끝까지 — 모두 MergeHub 만으로 커밋(rebase 끝)까지, 줄끝 · BOM 바뀐 파일 0. A-2 · B-1 다시 안 남, A-1 은 rebase · cherry-pick 에서 다시 남. MERGED 줄 번호 안 잘림. 새로 걸린 넷(N1 **고른 파일 대신 다른 파일 내용이 저장됨** · N2 · N3 · N4)은 8차 재료(고치지 않음) |
### E. 추가 요청
| 상태 | 항목 |
|---|---|
| **완료** | E-1 [해결로 저장] 이름을 [Save] 로 — 하는 일은 그대로, 알림 · 안내 · 웹 문서 이름도 |
| **완료** | E-2 폴더 비교 탭에 폴더를 하나씩 끌어다 놓으면 첫 칸 → 둘째 칸 차례로 (경로 칸 위가 아니어도) — 양쪽이 차면 바로 비교, 칸 위에 놓은 것도 차례에 침 |
| **완료** | E-3 사용자 이름을 저장하기 전에는 화면을 쓸 수 없게 — 이름 창이 끌어도 안 움직이고 저장 없이 닫히지 않음(플랫폼, 배포함) |
| **완료** | E-4 창 크기를 마음대로 조절할 수 있게 — 끌어 크기 조절(최소 1280×720) · 두 번 누르기 최대화 ↔ 복원 · 화면 이동이 크기를 지킴 · 크기 · 모니터 기억. 최대화는 작업 표시줄까지 덮고(사용자 결정) 크기를 바꿀 때 깜빡이지 않음(검은 칠 99.7% → 3%). 플랫폼, 배포함. MergeHub 네 탭 최소 크기에서 안 잘림 |
**7차 전부 끝.** D-1 에서 새로 걸린 넷은 8차 재료다(고치지 않음). 웹 문서 갱신도 8차로 넘겼다.
- N1 파일 비교 탭을 처음 여는 것이 [3분할로 열기] 면 첫 충돌 파일이 보이고, 그 화면을 [Save] 하면 **고른 파일에 그 내용이 써짐**
- N2 rebase · cherry-pick 마지막 [Save] 뒤 "남은 차이 3줄"(A-1 은 병합만)
- N3 MERGED 칸 번호가 결과 파일 번호가 아님(3363 · 상태바 3366)
- N4 바뀌는 것 없는 cherry-pick 에서 [커밋] 이 켜지고 누르면 실패
---
## 8차 — 고른 파일에 고른 내용을 · 작업마다 화면이 사실대로 (2026-09-15 ~)
진행 기록: [history/2026-09-16-8차.md](history/2026-09-16-8차.md)
지시서: [작업지시/8차.md](작업지시/8차.md). 7차 D-1 에서 새로 걸린 넷과 7차에서 남긴 것(revert · 원래 작성자 · 창 크기의 안 본 곳) · 웹 문서.
### A. 사용자의 파일을 망가뜨리는 것
| 상태 | 항목 |
|---|---|
| **완료** | A-1 고른 충돌 파일 대신 다른 파일이 보이고, 그 화면을 저장하면 고른 파일에 써진다 — 늦게 끝난 읽기를 버리고 다시 읽음, 화면에 실린 파일과 저장할 파일이 다르면 쓰지 않음. 네 길 모두 고른 파일이 열리고 저장이 그 파일에만 감 |
### B. 작업마다 화면이 사실대로 말하게
| 상태 | 항목 |
|---|---|
| **완료** | B-1 rebase · cherry-pick 에서 마지막 저장 뒤 "남은 차이" 가 뜬다 — 요약 · BASE 제목이 작업(병합 · rebase · cherry-pick · revert)을 따른다. rebase 는 "충돌 정리 끝 · [계속] 으로 rebase 를 이어 갑니다 · 올릴 자리 대비 올린 변경 N줄" · 제목 "올릴 자리". 병합 글은 그대로 |
| **완료** | B-2 바뀌는 것 없는 cherry-pick 에서 [커밋] 이 켜지고 누르면 실패한다 — 커밋할 것이 없으면 [커밋] 이 꺼지고 진행 줄 · 로그가 "가져올 변경이 없습니다 - [작업 취소] 로 끝냅니다". 병합 커밋은 그대로(트리가 같아도 정상). `--allow-empty` 는 사용자와 정한 뒤 |
| **완료** | B-3 MERGED 칸 줄 번호가 결과 파일 번호가 아니다 — 사용자가 "결과 파일 번호로" 를 고름(2026-09-16). 결과에 들어가는 줄만 1부터 다시 매긴다. 끝 번호 3363 → 3369 로 상태바 · [이동] 칸 · 저장된 파일(3369줄)과 같아짐 |
### C. 7차에서 남긴 것
| 상태 | 항목 |
|---|---|
| **완료** | C-1 revert 충돌을 화면으로 끝까지 — 생성기에 `feature/revert` 갈래를 더해 충돌 16개를 만들고, MergeHub 만으로 [Revert] → 네 칸("되돌리는 커밋 …") → [커밋] 까지. 원래 메시지 `Revert "내 쪽 작업"`, 줄끝 · BOM 바뀐 파일 0, 제품 코드 변경 없음 |
| **완료** | C-2 cherry-pick 이 원래 작성자를 남기는지 눈으로 — 생성기에서 상대 쪽 커밋만 작성자를 박지훈으로 두고 확인. MergeHub cherry-pick 은 작성자 박지훈 · 커밋한 사람 시험, revert 는 둘 다 시험 — git 과 같음. 제품 코드 변경 없음 |
| **완료** | C-3 창 크기 조절에서 안 본 것 — 실제 픽셀로 재고 사용자와 정함. 첫 Win+↓ 를 두 번 누르기 복원과 같게(작업 영역 80% · 가운데, 화면 밖 16px 없어짐), 덮는 창을 창 가운데로(최대화에서 36px 어긋남 → 0). 스냅은 최소 크기 때문에 반쪽이 안 됨(적어 둠), 1px 테두리는 그대로. 플랫폼, 배포함 |
### D. 문서
| 상태 | 항목 |
|---|---|
| **완료** | D-1 웹 문서를 7차 · 8차에 맞게 — 매뉴얼(창 크기 · 폴더 끌어놓기 차례 · 작업별 네 칸 제목 · MERGED 번호 · 다른 충돌 길) · "알아 둘 한계" 다시 씀 · 남은 일 표 · 숫자(22벌 1,073건 · 커밋 94). 아티팩트 버전 7 로 발행 |
### E. 확인
| 상태 | 항목 |
|---|---|
| **완료** | E-1 다섯 길(병합 · pull · rebase · cherry-pick · revert)을 사람 순서 그대로 다시 끝까지 — 파일 비교 탭을 미리 열지 않고 모두 MergeHub 만으로 커밋(rebase 끝)까지. 줄끝 · BOM 바뀐 파일 0 · 충돌 표식 0 · class 이름 검사 0. 7차 A-1 · A-2 · B-1 · 8차 A-1 · B-1 · B-2 다시 안 남, F-1 본문 26개. 새로 걸린 것 N1(cherry-pick 요약의 "내 쪽 대비" 가 틀린 기준)은 9차 재료(고치지 않음) |
### F. 추가 요청
| 상태 | 항목 |
|---|---|
| **완료** | F-1 병합 커밋 메시지 본문에 충돌 해결 내역을 자동으로 적기 (2026-09-17 사용자 요청) — 병합 · pull 중 푼 방법(줄 단위 · Accept Mine/Theirs/Both · 남기기 · 지우기 · 머지 주석 자동)을 `.git` 에 적고 [병합 커밋] 본문에 "충돌 해결 N개 · 이름" + 파일 목록. 메시지 칸에 미리 보임, 커밋 · 취소 때 기록 치움. 스타일 맞춤 선택지는 만들지 않기로 |
**8차 전부 끝.** E-1 에서 새로 걸린 것은 9차 재료다(고치지 않음).
- N1 cherry-pick 마지막 [Save] 뒤 두 칸의 BASE 는 이력에서 고른 커밋인데 요약이 "내 쪽 대비 가져온 변경 N줄" 이라고 한다. 한 번은 다른 브랜치 커밋(`f310f49`)이 기준으로 잡혔다(다시 재니 안 남)
---
## 9차 — 두 칸이 무엇과 견주는지 사실대로 · 8차에서 남긴 것 (2026-09-17 ~)
진행 기록: [history/2026-09-17-9차.md](history/2026-09-17-9차.md)
지시서: [작업지시/9차.md](작업지시/9차.md). 8차 E-1 에서 새로 걸린 N1(cherry-pick 요약의 기준)과 그 곁가지 · 전에 남겨 둔 작은 것 둘 · 웹 문서.
### A. 두 칸이 무엇과 견주는지 사실대로
| 상태 | 항목 |
|---|---|
| **완료** | A-1 cherry-pick 마지막 저장 뒤 "내 쪽 대비" 라고 하지만 실제 기준은 이력에서 고른 커밋이다 — 사용자가 "HEAD 로 옮긴다" 를 고름(2026-09-17). 새로고침이 고른 커밋을 놓치면 목록 맨 위(모든 브랜치에서는 다른 브랜치 커밋)로 채우던 것을 해시로 되찾고 없으면 HEAD, 작업 중 충돌이 막 0 이 되면 HEAD 로. 요약은 기준이 HEAD 일 때만 작업 글. cherry-pick · revert 마지막 Save 뒤 제목 · 요약 · 기준이 같음(6줄 = git 대조) |
| **완료** | A-2 한 번은 기준이 다른 브랜치 커밋이었다 — 원인은 A-1 과 같음(선택을 놓치면 목록 맨 위로 채움). 해시만 지키자 cherry-pick [커밋] 뒤 옛 HEAD 에 남아 "남은 차이 6줄" 이 떠서, HEAD 를 보고 있었으면 새 HEAD 를 따라가게 함께 고침. 8차 E-1 순서 여섯 번 모두 시작 · 파일 단위 = 고른 커밋, Save 뒤 = HEAD, 커밋 뒤 = 새 HEAD |
### B. 전에 남겨 둔 작은 것
| 상태 | 항목 |
|---|---|
| **완료** | B-1 MERGED 칸에서 넣은 주석 줄이 다시 정렬하면 "무시" 색이 된다 — 사용자가 "처음부터 무시 색" 을 고름(2026-09-17). 넣는 순간 "추가"(파랑)였고 LOCAL(Mine) 칸에 주석 글이 보였는데, 다시 정렬했을 때와 같은 모양(무시 · Mine 빈 자리)으로 넣는다. Undo · Redo · 저장 내용 그대로, 규칙을 끄면 지금처럼 추가. 규칙을 끈 채 다시 정렬하면 반영 색이 옆 줄로 옮겨 가는 것은 적어 둠 |
| **완료** | B-2 폴더 비교 뒤 화면 트리를 세우는 데 1초 남짓 — 고치지 않음. 앱 안에서 단계를 나눠 재니 트리 만들기 5~17ms · 첫 화면까지 0.13초(필터 전체 0.24초)이고 기다림의 대부분은 비교(데운 뒤 0.7초). 5차의 "1초" 는 자동 조작 대기가 섞인 값. 그날 첫 비교는 9.2초(디스크 첫 읽기로 보임)를 적어 둠 |
### C. 문서
| 상태 | 항목 |
|---|---|
| **완료** | C-1 웹 문서를 8차 끝 · 9차에 맞게 — 개요 숫자(22벌 1,122건 · 커밋 104 · 8차 끝 · 9차 진행), 매뉴얼에 병합 커밋 본문 · 해결 기록이 남는 곳 · 마지막 저장 뒤 기준 HEAD · 알아 둘 한계 넷 더함, 남은 일에 8차 D-1 · F-1 · E-1 · 9차 표 · 정해서 두지 않는 것, 지금까지 만든 것 7~9차. 화면 문구 grep 대조 · 태그 짝 맞음. 아티팩트 버전 9 |
### D. 확인
| 상태 | 항목 |
|---|---|
| **완료** | D-1 cherry-pick · revert 를 마지막 파일까지 네 칸으로 끝까지 (+ 병합 · rebase 회귀) — 네 길 모두 MergeHub 만으로 끝까지(cherry-pick · revert 는 [모든 브랜치] 켬). 마지막 Save 뒤 제목 · 요약 · 기준(HEAD)이 같고 요약 N줄 = git diff, 커밋 뒤 기준 새 HEAD. 줄끝 · BOM 바뀐 파일 0 · 충돌 표식 0 · class 이름 검사 0 · 병합 본문 26개 · 빈 cherry-pick [커밋] 꺼짐. 새로 걸린 것 N1(cherry-pick 첫 회차에서 고르기 한 번이 안 남아 멈춤, 다시 하니 끝까지)은 적어 둠 |
**9차 전부 끝.** D-1 에서 새로 걸린 것은 10차 재료다(고치지 않음).
- N1 cherry-pick 첫 회차에서 `Motion/Unit0.cs` 충돌 6개를 고른 뒤 "남은 충돌 1개" 로 남아 [Save] 가 꺼짐. 고르기 한 번이 로그에 안 남음(10줄 · 다른 길 18줄). 새 저장소로 다시 하니 끝까지 — 자동 조작 쪽으로 보이나 원인 미확인
---
## 10차 — 두 탭이 같은 커밋을 보게 · 남은 표시 어긋남 · 누름을 놓치는지 (2026-09-17 ~)
진행 기록: [history/2026-09-17-10차.md](history/2026-09-17-10차.md)
지시서: [작업지시/10차.md](작업지시/10차.md). 9차 D-1 에서 새로 걸린 N1 과 9차에서 적어 둔 셋(두 탭 고른 커밋 · 규칙 끈 채 반영 색 · 첫 폴더 비교 9.2초) · 다섯 길(+ pull) · 웹 문서.
### A. 한 번 누른 것이 남지 않는다
| 상태 | 항목 |
|---|---|
| **완료** | A-1 네 칸에서 충돌을 차례로 고르는데 한 번이 남지 않아 "남은 충돌 1개" 로 멈췄다 — 고치지 않음. 앱에 임시 로그를 넣고 61회(누름 366번, 9차 간격 31회 · 0.1초 30회, 병합 · cherry-pick) 되풀이 — 다시 안 남. 앱은 Take 를 모두 충돌 줄에서 받아 하나씩 줄임(헛돈 0). Take 뒤 [다음 충돌] 처리 전에는 Take 단추가 꺼져 있고, 9차 시험 도구가 "꺼져서 안 누름" 을 버린 것으로 보임 → 시험 도구가 다시 누르고 못 누르면 적게 고침 |
### B. 두 탭이 같은 커밋을 보게
| 상태 | 항목 |
|---|---|
| **완료** | B-1 Git 탭 이력에서 고른 커밋을 파일 비교 탭이 새로고침 전까지 따라오지 않는다 — 사용자가 "바로 따라간다 · 편집 있으면 고르는 순간 묻는다" 를 고름. 반대 방향(파일 비교 탭에서 고름)은 Git 탭 선택 표시가 남아 [Revert] 가 보이지 않는 커밋에 걸렸다. 양쪽이 고른 것을 알리고 다른 쪽이 따라감(파일 비교는 게이트가 빈 뒤 다시 세움, Git 탭 커밋 내용은 다시 보일 때). 목록이 선택을 바꾸기 전에 묻고 [취소] 면 누름을 막음. 마우스 · 방향키 · [취소] · [계속] · [Revert] 대상 확인 |
### C. 남은 표시 어긋남
| 상태 | 항목 |
|---|---|
| **완료** | C-1 "머지 주석 무시" 를 끈 채 다시 정렬하면 반영 색이 옆 줄로 옮겨 간다 — 네 칸은 규칙과 상관없이 주석 줄과 코드 줄을 떼어 놓고, 다시 정렬한 주석 줄을 "반영함" 으로 칠하지 않음. 규칙 끔 넣은 직후 = 다시 정렬 뒤(반영함 6 · 추가 6), 요약 · 줄 수 · 저장 해시 그대로. 두 칸도 떼어 보니 차이 수가 4 → 5줄로 늘어 두 칸은 그대로 둠 |
### D. 처음 한 번이 느리다
| 상태 | 항목 |
|---|---|
| **완료** | D-1 그날 첫 큰 폴더 비교가 9.2초 — 고치지 않음. 파일마다 버퍼 없이 열어 캐시를 비운 뒤 재도(한 갈래 읽기 0.4 → 1.8초로 먹는 것 확인) 전체 비교 0.46~0.54초로 데운 상태(0.48초)와 같음 — 여러 갈래로 읽어서. 앱 새로 켠 첫 비교도 느리지 않음. 9.2초는 다시 안 남(디스크 정보 캐시 · 백신 짐작, 재부팅 · 보안 설정 없이 못 만듦). 매뉴얼 한계 문장을 잰 값으로. HDD 는 재 보지 않음 |
### E. 확인 · 문서
| 상태 | 항목 |
|---|---|
| **완료** | E-1 다섯 길(+ pull)을 다시 끝까지 — 고치지 않음. 병합 · pull · rebase · cherry-pick · revert 모두 첫 회차에 끝까지. 누른 Take = 줄 고른 로그(18 · 18 · 18 · 18 · 6), 마지막 Save 뒤 제목 · 요약 · 기준 = git, 줄끝 · BOM 바뀐 파일 · 충돌 표식 · class 이름 0. Git 탭에서 고른 커밋을 파일 비교 탭이 바로 따라옴(다섯 길). 8차 A-1 · B-1 · B-2 · F-1 · 9차 A-1 · A-2 · B-1 안 남. 새로 걸린 것 없음 |
| **완료** | E-2 웹 문서를 10차에 맞게 — 발행본(버전 10)이 9차 D-1 파일과 같음을 확인하고 고침. 개요 숫자(1,147건 · 커밋 114 · 10차 끝) · 매뉴얼 "두 탭은 같은 커밋을 본다" · 알아 둘 한계에서 고친 둘(B-1 · C-1) 뺌 · 남은 일에 10차 표와 남은 것(HDD) · 지금까지 만든 것 10차 · 기획안 v2 일정 · WinMerge 숫자. 화면 문구 grep 대조 · 태그 짝 맞음 · 아티팩트 버전 11 |
### F. 추가 요청
| 상태 | 항목 |
|---|---|
| **완료** | F-1 · F-2 폴더 비교 "같은 것만" 에 내용이 다른 것처럼 보이는 줄이 섞인다 (2026-09-17 사용자) — 폴더 줄이 폴더 자신의 "다름"(주황)으로 보이던 것을 걸러 본 갈래의 개수("같음 122개")로. 설정(스타일 맞춤 · 머지 주석 무시)으로 같음이 된 파일은 사용자 결정대로 "같음(스타일만 다름)" · "같음(머지 주석만 다름)" 으로 따로 표시. 요약 수 그대로 |
| **완료** | F-3 "주석만 다름" 이름을 바꾼다 (2026-09-17 사용자) — BOM · 줄끝 · 인코딩 · 공백만 달라도 들어오던 상태를 "다름(코드는 같음)" 으로. 요약 "다름 N(코드는 같음 M)" · 범례 · 보고서 · 웹 문서. 판정 · 수 그대로 |
**10차 전부 끝.** E-1 에서 새로 걸린 것은 없다. 11차는 기획안 v1.2 에서 "일부" 로 남은 것(변경분 추출 · 커밋 메시지 수정)과 사내 베타 전 확인에서 나왔다.
- 같은 날 기획안 문서(잠금)도 v1.2 로 고쳐 올림 — 제품 코드 아님
---
## 11차 — 변경분 추출을 믿고 들고 가게 · 베타 전에 깨지는 것 · 커밋 메시지 수정 (2026-09-17 ~)
진행 기록: [history/2026-09-18-11차.md](history/2026-09-18-11차.md)
지시서: [작업지시/11차.md](작업지시/11차.md). 코드를 읽고 적은 짐작이라 항목마다 먼저 다시 내고 시작한다.
### A. 변경분 추출을 믿고 들고 가게
| 상태 | 항목 |
|---|---|
| **완료** | A-1 먼저 뽑아 보고 적는다 — 고치지 않음. 아홉 경우를 화면에서 뽑아 git 과 대조: 파일 고르기 · 바이트 보존(이진 · 한글 · 깊은 경로) · 범위 표시는 맞음. 확정된 문제 넷 — 지운 파일 · 이름 바뀐 옛 경로가 안 남음, 무엇과 무엇 사이인지 안 남음(병합은 첫 부모 · 거꾸로 범위도 말없이), 비어 있지 않은 폴더에 묻지 않고 덮어써 옛 파일이 섞임, 쓰다 막히면 반쯤 뽑힌 채 멈춤 |
| **완료** | A-2 뽑은 폴더 **옆**에 안내 파일(`…_변경분안내.txt`) — 사용자 결정대로 폴더 밖에 두고 지울 파일은 목록으로만. 범위(커밋 제목 · 날짜) · 뽑은 파일(추가 · 수정 · 이름 바뀜은 옛 이름) · 장비에서 지워야 할 파일(지워짐 · 옛 경로). 화면에서 뽑아 git 과 대조 · 하네스 ReportTest +14(45건) |
| **완료** | A-3 고른 폴더 아래 **새 폴더**(`변경분_4eb9ece..cbcad8a_2026-09-18`, 같은 이름이면 `_2`)를 만들어 뽑는다 · 뽑기 전에 쓸 수 있는지 **먼저 보고** 하나라도 막히면 아무것도 쓰지 않는다(사용자 결정). 화면에서 두 번 뽑아 기존 파일이 섞이지 않는 것 확인 · 하네스 ReportTest +12(57건) |
| **완료** | A-4 ZIP 으로 뽑기 — 사용자 결정 "폴더에 더해 ZIP 도". 폴더 옆 같은 이름 `.zip`(폴더 · 안내 파일 나란히, 바이트 그대로, 한글 이름 UTF-8 표시). 아홉 경우 다시 — ZIP 8/8 을 tar 로 풀어 폴더와 경로 · 해시 같음. 하네스 ReportTest +13(70건) |
### B. 사내 베타 전에 깨지는 것
| 상태 | 항목 |
|---|---|
| **완료** | B-1 배포 묶음 — 옛 Release(09-07)는 본 탭 3개 · 지금 형식 142개 중 74개가 없었다. Release 다시 빌드(경고 0 · 오류 0) · 참조를 따라가 **65개 97MB → 41개 43.5MB**(안 닿는 dll 7개 · 맥/리눅스/ARM 용 · pdb · 빈 Lang 뺌, 플랫폼 Core 가 참조하는 차트 몫은 사용자 결정대로 남김) · `scripts\make-bundle.ps1` 이 묶음과 `배포묶음.txt`(파일 · 크기 · 까닭) 를 만든다 · 빈 폴더(`%TEMP%\mergehub-beta`)에서 켜 네 탭 · 병합 한 길 끝까지(`647f1f8`, 줄끝 · BOM 바뀐 파일 0) · 매뉴얼 실행 위치 문장 고침 |
| **완료** | B-2 D 드라이브가 없는 PC · 설정 없는 첫 실행 — 첫 실행은 오류 없이 되고 기본값이 매뉴얼 표와 같다. D 를 못 쓰면 `UiSettingsService.cs:86` 에서 실패해 "계속 쓸 수 있습니다" 창 뒤 **창 없는 프로세스가 남는 것**을 같은 줄에서 재현. 플랫폼에서 고침(`377ffd3`, 사용자 결정): D 를 못 쓰면 `%LOCALAPPDATA%\UbisamConfig` · 켜는 중 실패는 "켜지 못했습니다" 뒤 끝냄. 세 경우 화면 확인 · 플랫폼 하네스 24건 · 사용자 확인 뒤 플랫폼 배포(바뀐 것 Core · Shell · README 셋) · 배포 묶음 다시 만듦 · 시험 흔적 지움 |
### C. 커밋 메시지 수정
| 상태 | 항목 |
|---|---|
| **완료** | C-1 있는 [커밋 수정] 바로잡기 — 여덟 가지를 화면에서 재현한 뒤 **1 · 3 · 4 · 7 고침**([마지막 메시지]가 HEAD 것 · 작성자와 작성 시각 보존 · 작업 중 단추 끔 · 알림에 "옛 → 새 해시 · 파일 N개 포함"), 이어서 **2 · 6 은 "먼저 묻기"**(사용자 결정) — 스테이징해 둔 파일이 있거나 이미 올린 커밋이면 확인 창을 띄우고 [아니오] 면 아무것도 안 바뀐다. 하네스 MergeSaveTest +22(232건). 8(여러 줄 메시지 못 침)만 범위 밖. 옛 항목: — [마지막 메시지] 가 목록 맨 위(다른 브랜치일 수 있음) · 스테이징 파일이 말없이 들어감 · 원래 작성자 · 시각이 바뀜 · 작업 중에도 켜짐 · 병합 커밋 · 올린 커밋 · 옛 해시 · `#` 줄 |
| **완료** | C-2 마지막 커밋이 아닌 커밋의 메시지 수정 (기획안 "커밋 우클릭 → 이름 변경") — 사용자 결정 **좁은 범위**. 이력 줄 우클릭 [메시지 바꾸기...] → 여러 줄 창 → 확인 창 → 고른 커밋 메시지만 갈고 그 뒤를 같은 트리 · 작성자 · 작성 시각으로 다시 씀(`RewriteHistory`), 되돌릴 자리 `refs/original/…`, 선택이 새 해시를 따라감. 올린 커밋 · 사이에 병합 · 다른 브랜치도 품음 · 태그 · 작업 중 · 커밋 안 한 변경 · 다른 브랜치에만 · 저장 안 한 편집 여덟 자리가 화면에서 막힘. 새 메시지 끝 줄바꿈을 git 처럼 다듬음(화면에서 찾음). 하네스 MergeSaveTest +40(272건) |
### D. 시험 도구 정리
| 상태 | 항목 |
|---|---|
| **완료** | D-1 줄끝 검사 스크립트의 부모 하나 커밋 오류 · 요약 읽는 함수의 "차이 없음" (10차 E-1 에서 남김) — 부모 하나면 첫 부모와만 견준다고 적고 merge-base 를 부르지 않음 · `FileState` 가 "차이 없음" 을 읽음. rebase 한 길 다시: 오류 줄 0 · 커밋 뒤 요약 "차이 없음". 제품 코드 변경 없음 |
### E. 확인 · 문서
| 상태 | 항목 |
|---|---|
| **완료** | E-1 바꾼 길을 다시 끝까지 — A-1 아홉 경우(지운 파일 · 옛 이름 · 범위가 안내에, 두 번 뽑아도 새 폴더 둘, 막힌 파일 없이 끝) · C-1 여덟 경우(HEAD 메시지 · 작성자 보존 · 묻는 창 · 작업 중 꺼짐 · 병합 커밋 부모 둘) · C-2 로 다시 쓴 저장소에서 병합 · 다섯 길 + pull 모두 끝까지. 누른 수 = 로그, 줄끝 · BOM · 충돌 표식 · class 0, 두 탭 같은 커밋. **새로 걸린 것 없음**. 시험 도구가 창 최대화를 풀던 것을 고침 |
| **완료** | E-2 웹 문서 · 기획안을 11차에 맞게 — MergeHub 문서 버전 13(커밋 메시지 고치기 · 변경분 추출 두 절 · 한계 셋 · 11차 표 · 숫자, 단추 이름 91개 소스 대조로 "C# 스타일 끔" 바로잡음) · 기획안 버전 17(커밋 메시지 수정 완료 · 4단계 준비 중, 8쪽 A4 높이 같음, 잠금은 사용자) |
### F. 추가 요청 (2026-09-18 사용자)
| 상태 | 항목 |
|---|---|
| **완료** | F-1 칸 이름 `LOCAL(Mine)` · `REMOTE(Theirs)` 로 맞추고 칸마다 "어느 쪽 · 어느 파일"(MERGED · 두 칸 LOCAL 은 "저장할 파일", mergetool 은 임시 파일 이름 — Mine 칸이 MERGED 이름을 보이던 것 고침), 한 줄 · 가운데 줄이기 · 툴팁 전체 · **덧**: 머지 주석 `[사람] 날짜 출처 설명`, 출처는 로그와 같은 말(Theirs(…) · Mine(…) · REMOTE(…) · BASE(해시)), Take Mine 도 주석. 무시 조건은 원래 출처를 받는 모양이라 코드 그대로, 옛 · 새 · 출처만 다른 주석을 하네스로 굳힘. 네 길 화면 확인 · E-1 병합 길 회귀 없음 · 1,312건 |
| **완료** | F-2 메서드 단위로 골라 반영 — [이 메서드 반영](C# + C/C++, 클래스 멤버 전부 · 사용자 결정), 캐럿이 놓인 멤버를 반영해 올 쪽에서 중괄호 짝으로 잡음(`MemberRanges` — 문자열 · 주석 · raw · `#if` 갈래에 안 속음, 못 잡으면 단추 끄고 까닭 한 줄). 덩어리 · 메서드 반영은 주석 한 줄(메서드 이름 위) · 로그 한 줄 · Undo 한 번 — 덩어리가 줄마다 주석을 달던 것도 고침. 메서드 반영 = 같은 줄 줄 단위 반영 바이트 같음. MemberTest 83건(C# 29 · C++ 13 멤버) · 1,395건 |
| **완료** | F-3 탐색기 [보내기] 로 폴더 두 개 바로 비교 — 탐색기는 여러 개를 프로세스 하나에 인자로 모두 넘김(일곱 경우 값으로 잼), 폴더 둘은 창 하나에서 폴더 비교까지. 사용자 결정대로 3개 이상은 앞의 둘 + 알림, 260자 넘는 경로(탐색기가 8.3 이름으로 넘김 · net48 이 못 찾음)는 열지 않고 알림, 옮긴 배포 묶음은 켤 때 보내기 바로가기를 저절로 고침(바로가기 파일만 · 레지스트리 안 씀), 떠 있을 때는 새 창 그대로. 설치 파일 필요 없음. ArgsTest +16 · 1,411건. **사용자가 실제 탐색기에서 찾은 것**: 보낸 왼쪽 폴더를 기본 저장소가 덮어써 "왼쪽만" 투성이 → 기본값을 먼저 두고 요청을 나중에 받게 고침, 켤 때 받은 인자를 파일 로그에 남김 |
| **완료** | F-4 ACTIONS 칸 감추기(단추 · F9, 끌어 둔 폭 기억, 감춰도 Ctrl+S · Alt+←/→ 그대로) + **덧: 아래 탭 줄 접기**(사용자 요청 — 플랫폼 [탭 접기] · 16 DIP 띠 · F11, 그 항목만 기억, 다른 소비 프로그램도 쓰되 기본 펼침). 1440p 150% 에서 코드 칸 폭 +163px · 높이 +71px. 플랫폼 배포함(09-22 16:22) |
| **완료** | F-5 코드 글자 크기(8~24, 기본 12) — 한 값을 모든 모니터에(모니터 배율은 플랫폼), 코드 칸만, Ctrl+휠 · Ctrl++/- · Ctrl+0 + 설정 "보기 > 코드 글자 크기"(사용자 결정). 줄 높이 · 번호 칸 · 여백 단추가 같은 비율로(`CodeFontMetrics`, 12 에서 지금 값 그대로), 줄 번호 기준선을 코드와 맞춤. 8 · 12 · 24 에서 네 칸 행 높이 같음 · 단추 행 안. FontTest 110 · 1,538건. Ctrl+휠 · 키 · 껐다 켜도 남음 확인. 켜자마자는 포커스가 없어 단축키가 모두 안 듣던 것(원래 있던 것)도 고침 — 포커스가 비었거나 화면 밖이면 편집기로 |
| **완료** | F-6 글자를 되도록 많이 보이게 — 방법마다 1920×1080 줄 수를 재 드린 뒤 사용자 결정 "줄 간격 줄여주고 선택 사항은 만들지 마": 줄 높이 글자의 1.67배 → 1.33배(12 → 16). 두 칸 40 → 50줄(탭 줄 접으면 53), 네 칸 17 · 18 → 22 · 23줄. 한글 잘림 · 겹침 없음, E-1 회귀 없음. FontTest 144 · 1,572건 |
| **완료** | F-7 대형 모니터에서 오른쪽(종료 · ACTIONS)이 잘림 — 창이 모니터 밖으로 나간 것. 켤 때 창 모드로 기억한 자리를 모니터에 조금만 걸쳐도 그대로 놓던 것을 가장 많이 겹치는 모니터 안으로 밀게(플랫폼 `FitToMonitors`). 재현 840px 넘침 → 0. 좁은 창 × 화면 배율 80~133% 는 원래 넘친 것 없음. PlacementTest +8. 플랫폼 배포함(09-22) |
| **완료** | F-8 저장한 뒤에도 되돌리기 — 저장 · 저장 후 커밋 뒤 Undo/Redo 유지(저장할 것 있음은 "마지막 저장과 다른가" 로), 줄을 다시 세울 때(커밋 뒤 새 HEAD · 규칙 바꾸기 · 친 뒤 재정렬) 이력을 글 단위로 옮겨 지킴, 친 것도 한 걸음. 전체 되돌리기는 파일을 연 시점. Git 탭 "푼 파일" + [다시 충돌로](이 단추만 git.exe, 사용자 결정). MergeSaveTest +21 |
| **완료** | F-9 저장할 때 백업 — 설정(기본 끔)을 켜면 모든 저장(두 파일 · mergetool · Save & Commit · 병합 중 Save · 파일 단위 Accept · 폴더 복사) 직전에 지금 파일을 바이트 그대로 `{설정 폴더}\Backup\MergeHub\날짜\…` 에 모음(목록.txt, 저절로 안 지움). 못 만들면 저장 안 함. ACTIONS [백업 폴더 열기]. 하네스 +25 |
| **완료** | F-10 칸마다 자기 줄 · 바뀐 덩어리를 잇는 선(Araxis 식, 사용자 요청으로 넓힘) — 빈 줄로 맞추지 않고 칸마다 자기 줄만, 틈에 사다리꼴 선 · 옮김 점선, 가운데 기준 스크롤, 차이 이동은 가운데로, 지운 줄 [>] 는 BASE 칸 끝. 3분할은 위 세 칸 사이. 편집기 빈 줄(StripFillers) 없앰. PaneLinkTest 17 새로 · EditorTest 14 → 18 |
| **완료** | F-11 Git 계정 · URL · 토큰 저장 — 확인해 보니 껐다 켜면 셋 다 비었다. URL · 계정은 적으면 설정에 남기고, 토큰은 fetch/pull/push/클론이 성공하면 윈도 자격 증명 관리자에 저장(평문 아님 · 설정 파일에 글자 없음), 켤 때 그 서버 것만 가져옴. [토큰 지우기] · "저장됨" 표시 · 인증 실패 한글 안내. MergeSaveTest +15 |
| **완료** | F-12 C# 코드 스타일 맞춤 기본값을 AURORA 로 (2026-09-18 사용자 결정) — 설정 없는 첫 실행에서 AURORA, 중괄호만 다른 C# 짝 "차이 없음" · 같은 모양의 C++ 짝은 "남은 차이 4줄"(원본 그대로). 저장 동작은 그대로. 하네스 StyleTest +12(90건) |
---
### G. 11차 뒤 추가 (2026-09-23 사용자 증상)
| 상태 | 항목 |
|---|---|
| **완료** | G-1 배율이 크게 다른 새 모니터(3840×2160 · 300%)에서 최대화하면 오른쪽 1280px · 아래 170px 이 화면 밖으로 — 셸이 모니터별 V1 이라 최대화 크기를 윈도가 더 크게 잡았다. 최대화된 뒤 그 모니터 크기와 다르면 한 번 다시 놓게 고침(플랫폼 `FitMaximizedToMonitor`). 넘침 0 · 모니터 밖 요소 0개. PlacementTest +6(51건). **플랫폼 배포함**(2026-09-23) |
| **완료** | G-2 새 플랫폼(`D:\Sorce\ubsrepo`)으로 옮겨 태움 — 우리가 옛 플랫폼에 넣었던 여덟 가지(세 갈래로 묻는 창 · 덮는 창 가운데 맞춤 · D 드라이브 없는 PC · 켤 때 터지면 안내창 · 셸 창 자리 기억 · 모니터 안으로 · 최대화 크기 맞춤 · 탭 줄 접기 F11)와 **트레이(최소화하면 트레이로)** 를 새 플랫폼에 넣고, MergeHub 를 그 위에서 뜨게 맞춤(플랫폼에서 없어진 사용자 이름 서비스 대신 설정 "머지 주석 > 작성자", 여백은 `PlatformChrome.FullBleed`, 실행은 `UbisamBase.Launcher.exe`). 하네스 34건 · 화면 확인(탭 접기 · F11 · 트레이 왕복 · 창 자리 기억 · 화면 밖 자리 · 두 모니터 최대화). **커밋 안 함**(사용자 지시) |
---
## 12차 — 폴더 비교를 읽기 쉽게 · 양방향 머지 · 화면 안내 (2026-09-23 ~)
진행 기록: [history/2026-09-23-12차.md](history/2026-09-23-12차.md)
지시서: [작업지시/12차.md](작업지시/12차.md)
### A. 폴더 비교를 읽기 쉽게
| 상태 | 항목 |
|---|---|
| **완료** | A-1 폴더 줄의 크기가 늘 0B — 폴더 줄에 **안에 든 파일 크기 합계**를 적는다(하위 폴더까지, 양쪽 따로). 크기 글자도 사람이 읽는 단위로(`490.2KB` · `2.4MB`). 걸러 낸 파일은 합계에서도 빠지고, 한쪽에만 있는 폴더는 그쪽만. 탐색기 속성과 같은 값 7곳 확인. 4,608 줄 묶음에서 합계 채우기 **0ms**. FolderTest +23(111건) |
| **완료** | A-2 좌우로 나눠 보이기 — 한 줄을 **왼쪽 목록 · 가운데 상태 · 오른쪽 목록** 세 칸으로. 칸마다 자기 쪽 이름 · 크기를 적고 그쪽에 없으면 칸을 비운다. 트리가 깊이만큼 줄을 미는 것을 되돌리고 이름만 다시 들여써(`TreeDepthMarginConverter`) 칸 경계 · 구분선이 줄마다 같은 자리. 접기 · 복사 · 걸러 보기 그대로. FolderTest +7(118건) |
### B. 파일 비교 화면
| 상태 | 항목 |
|---|---|
| **완료** | B-1 2-Way 에서 양쪽으로 머지 — **두 파일 비교에서만**(사용자 결정 2026-09-27, Git 모드의 왼쪽은 지난 커밋이라 제외). 줄마다 `[<]` 로 왼쪽에 반영(왼쪽에 없는 줄은 LOCAL 여백의 `[<]`), ACTIONS 에 `◀ 왼쪽 저장` · `오른쪽 저장 ▶` - 고친 것이 없는 쪽은 꺼짐. 두 방향이 같은 규칙(`PaneText`), 되돌리기는 편집마다 어느 칸인지 들고 한 스택에서, 저장 기준점 · 백업은 양쪽 따로. TwoWayTest 29건 새로 |
| **완료** | B-2 프로그램 정보 창 — [단축키] 옆 **[정보]** 단추. 프로그램 이름 · 버전 · 빌드 날짜 · 만든 사람 · 사내 문의처(사용자 결정) + [정보 복사]. 버전은 csproj `<Version>`(12차 = 0.12.0)을 실행 파일에서 읽고, 빌드 날짜는 빌드할 때 어셈블리에 박는다(결정적 빌드라 PE 시각은 날짜가 아님). 만든 사람 · 문의처는 설정에서 적는다(비워 둠). AboutTest 28건 새로 |
| **완료** | B-3 칸 아래에 무엇이 달라졌는지 — 칸마다 `6줄 · 추가 1 · 삭제 1 · 수정 1`(칸을 기준으로 읽는다, 무시 · 머지 주석 줄은 차이로 안 셈), 가운데 틈 아래에 `3 / 7` · `남은 2`. 3분할은 네 칸 모두 BASE 와 견주고 BASE 는 `기준`. 반영 · 되돌리기 · 저장마다 따라감. 5만 줄 × 두 칸 × 네 번 22ms. SummaryTest 25건 새로 |
### C. 플랫폼
| 상태 | 항목 |
|---|---|
| **완료** | C-1 트레이 아이콘 — 최소화하면 알림 영역으로, 왼쪽 단추로 되살리기 · 우클릭 [열기]/[종료]. 새 플랫폼(`D:\Sorce\ubsrepo`) 에 넣음(11차 뒤 G-2 와 같은 작업) |
| **완료** | C-3 헤더 줄도 접을 수 있게 — 창 맨 위 16 DIP 띠(`⌄ 헤더 펴기 · Ctrl+F11`), **Ctrl+F11** 로 접고 펴기, 하단에 [헤더 접기]. 접은 상태는 그 항목만 파일에 남겨 다시 켜도 접힌 채. **모듈 시작 144px → 51px(62 DIP 벌었다)**. F11(아래 탭 줄)은 그대로. 띠는 Border 라 끌기와 누르기를 함께 받는다(끌린 거리로 가름). **배포함** — 사용자 확인 뒤 빌드, 배포본은 `bin-backup-c3` 에 백업. 하네스 `PlatformCfgTest` 29 → 42건, 화면 21건. **배포 뒤 12차 화면 시험 아홉 벌을 전부 다시 돌렸다(2026-09-30) — 208건 실패 0 · 예외 0.** 그 뒤 이 플랫폼 묶음을 **공용 플랫폼**(`D:\Sorce\UbisamCommonPlatform`)에 합쳐 배포하고 아홉 벌을 또 돌렸다 — **208건 실패 0**, MergeHub 재빌드 경고 0 · 오류 0 |
| **완료** | C-2 탭 줄 크기 줄이기 — 하단 탭 줄 항목을 74 → 61 DIP 로(여백 13/14→9/10 · 아이콘 22→20 · 틈 7→5 · 글자 13.5→12.5). 실측 133 → 109px(−18%), 파일 비교 코드 칸 47 → 48줄. **배포됨** — 새 플랫폼을 빌드하면서 함께 나갔고, 2026-09-28 배포본 해시 · 화면 실측(111px · 항목 109px)으로 확인 |
### F. 메모장 탭
| 상태 | 항목 |
|---|---|
| **완료** | F-1 하단 탭에 메모장 — 메모 + 파일 열기 둘 다, **저장 단추 없이 계속 남는다**(`{설정 폴더}\Memo\`). 이름은 `메모 1` · `메모 2` 번호만(빈 번호를 다시 쓴다), 파일로 연 메모와 한 탭 줄에 섞는다. 탭 줄 · 가운뎃점 · Ctrl+Tab 은 E-2 문서 탭과 같은 모양. 줄 번호 · Ctrl+휠 글자 크기 · **찾기/바꾸기**. 닫을 때 저장하지 않은 것이 있으면 세 갈래로 묻는다(사용자 결정). 하네스 `MemoTest` 69건, 화면 30건(강제 종료 뒤 세 장 되살아남 포함) |
### D. 폴더 비교 화면 다시 만들기
| 상태 | 항목 |
|---|---|
| **완료** | D-1 위쪽을 한 줄로 · 옵션은 서랍으로 — 네 줄 305px(203 DIP) → **한 줄 77px(51 DIP)**. 위 줄은 `[…] 왼쪽 ⇆ […] 오른쪽 [최근▾] 켠옵션 [비교][취소][옵션 ▾]`, 좌우 바꾸기를 새로 넣음. 빠른 비교 · 하위 폴더 · 보기 · 포함 · 제외는 서랍으로 넣되 **켠 것만 한 줄에 짧게** 적는다. 찾기는 Ctrl+F 로 펼 때만, 색 범례는 아래 상태 줄로. 되던 것은 하나도 없어지지 않음(값으로 확인). 좁은 창 1280 DIP 에서도 한 줄 |
### E. 저장하지 않아도 남는 편집
| 상태 | 항목 |
|---|---|
| **완료** | E-2 여러 짝을 동시에(문서 탭) — 파일 비교 맨 위에 문서 탭 줄(둘 이상일 때만 보임). 탭 이름은 파일 이름 · 다르면 `왼 ↔ 오` · 겹치면 위 폴더를 덧붙임 · 저장 안 한 탭은 `•`. 짝을 바꿀 때 **묻지 않는다**(탭이 편집을 맡는다). 탭이 사라져도 고친 글은 보관함에 남아 다시 열면 되살아남(◀ ▶ 로 훑다 돌아와도). Ctrl+Tab · Ctrl+Shift+Tab · Ctrl+W · 가운데 단추 닫기. 탭마다 되돌리기 · 캐럿 · 스크롤 · 저장 형식. 상한 20(고친 탭은 안 닫음). 탭 이름은 **양쪽이 같은 부분을 한 번만** 적는다(`WeldController_기준 ↔ 내작업.cs` — 421 → 288px). 점은 **사람이 손댄 것만**(스타일 맞춤으로만 바뀐 것은 빼고 센다 — 묻는 자리와 같은 기준). 하네스 `DocTabTest` 106건, 화면 34건 · 회귀 19건 확인 |
| **완료** | E-1 꺼도 작업 내용이 남아 있게(notepad++ 식) — E-2 보관함을 `{설정 폴더}\Session\MergeHub\` 에 옮겨 적는다(차례는 `목록.txt`, 글은 짝마다 따로 파일, 원본 글은 담지 않고 파일 자취만). 글자가 멈춘 뒤 2초 · 탭을 옮기거나 닫을 때는 바로, 쓰는 일은 다른 실로. 켤 때 묻지 않고 되살리되 사용자가 지금 열라고 한 것이 먼저. 원본이 그 사이 바뀌면 되살리고 알린다. 다 저장하면 보관본을 치운다. 하네스 `SessionTest` 65건, 화면 24건(강제 종료 뒤 되살아남 포함) |
### 쓰다 나온 것
| 상태 | 항목 |
|---|---|
| **완료** | **Shift+휠 가로 · Ctrl+↓ 와 아래 "지금 줄" 칸 · Ctrl+W 로 폴더 비교 · 다크 모드**(사용자 요청 · 결정) — Shift+휠 가로(파일 비교 · 메모), Ctrl+↓/↑ 차이 이동 대체 키 + 캐럿 행의 BASE · LOCAL 을 아래에 위아래로, 폴더 비교에서 연 탭을 닫으면 폴더 비교로, 폴더 비교 목록이 어두운 테마에서도 흰 바탕이던 것(TreeView 는 플랫폼 테마가 안 칠함) · 0 항목 흐리기 완화. 화면 `g27-five` 실패 0 |
| **완료** | **전체 반영 · 자동 병합의 주석이 너무 많다**(사용자 요청 · 결정) — 두 파일 비교 [전체 반영] 을 구간 반영처럼(구간마다 주석 한 줄 · Undo 한 번), 3-Way [전체 반영] 은 끔(공통 조상으로 되돌리는 동작이었다), 3-Way [자동 병합] 도 구간마다 주석 한 줄 · Undo 한 번. 화면 `g22` 주석 7 → 3, `g23` 5 → 2, 실패 0 |
| **완료** | **스크롤을 내리면 프로그램이 뻗는다**(사용자 보고, 어제 `f105bab` 뒤) — 응답 없음(AppHang). 원인 넷: BASE 를 굴려도 LOCAL 쪽으로 되돌려 밀고 당김 · 따라 굴러가는 도중에 재서 보정값이 6,619px 까지 쌓임 · 칸 목록 항목 번호를 정렬 행 번호로 씀(한쪽에만 있는 줄만큼 엉뚱한 줄끼리 견줌) · 빠르게 굴리면 사람의 스크롤이 버려짐. 손이 닿은 칸을 기준으로, 큰 맞추기는 한가할 때 한 번, 줄 객체로 오가기, 버려지면 멈춘 뒤 따라잡기. 화면 `g20` · `g21`(새) 응답, `g7` 실패 0, `g17` 통과 |
| **완료** | **끌 때 저장하지 않은 편집을 묻는다**(사용자 요청 · 결정) — 파일 비교의 모든 탭(Git 모드 · 뒤 탭 · 닫은 탭 포함, 메모 제외)에 편집이 있으면 [저장하고 종료] · [저장하지 않고 종료] · [취소]. 버리면 보관본도 비워 다음에 안 살아남. 플랫폼 `ICloseGuard` 를 그대로 씀(플랫폼 수정 없음). 화면 `g19-exit-confirm` 실패 0. Git 모드는 화면 시험 안 함 · 기존 회귀는 사용자 지시로 안 돌림 |
| **완료** | **엔터 꾹 · Ctrl+휠 확대 · 쭉 내리기에서 칸이 어긋난다**(사용자 보고) — 캐럿 줄 ≠ LOCAL 칸 줄, 확대하면 칸 위가 비고, 내리면 BASE 가 다른 줄을 봤다. 가상화 목록의 높이 어림 차이를 이동값으로 메우지 않고 칸을 실제로 굴려 칸별로 기억, BASE 는 같은 줄끼리 맞춤, 편집기 보이는 줄은 줄 높이로 계산(편집기의 `GetFirstVisibleLineIndex` · 확대 직후 `GetRectFromCharacterIndex` 가 틀렸다). 화면 `g17-hold-enter` — 엔터 뒤 936=936, 확대 · 30칸 내린 뒤 LOCAL = BASE. 기존 회귀는 사용자 지시로 안 돌림 |
| **완료** | **파일 비교 타이핑 · 엔터 속도**(사용자 보고) — 재서 보니 엔터마다 도는 재정렬 0.4초의 대부분이 1,800줄을 목록에 한 줄씩 넣는 알림이었다. 한 번에 넣기(`ReplaceAll`) + 번호 말고 같은 줄은 기존 객체를 두고 가운데만 바꾸기(`Patch`)로 엔터 한 번 약 0.55초 → 약 0.05초. 하네스 `PatchTest` 16건, 화면 `g15` ① 새 줄 · 번호 제자리. 기존 회귀는 사용자 지시로 안 돌림 |
| **완료** | **머지 주석 두 가지**(사용자 보고) — Accept 뒤 캐럿이 새 주석 줄에 서서 Alt+↓ 를 두 번 눌러야 했던 것(캐럿을 누르기 전 행에 둔다), 줄을 지우는 반영에도 주석 + `삭제` · 여러 줄이면 `삭제 N줄`(사용자 선택). `NoteTest` 106건, 화면 `g12-note` 실패 0 |
| **완료** | **"줄 안에서 바뀐 부분" 줄 수 · 탭 20개 넘을 때 알림**(사용자 요청) — 색 구분에 개수(`g14-inline`), 오래 안 본 탭을 닫으면 알림(`g15` ②: 21번째에서 알림 · 20개 유지) |
| **완료** | **하단 탭이 따라가지 않는다**(사용자 보고) — 폴더 비교에서 두 번 눌러 파일 비교로 가도 하단 탭이 폴더 비교에 남았다. 원인은 공용 플랫폼 셸(`NavList` 가 `SelectedMainTab` 을 따라가지 않음) — 허락받아 플랫폼에서 고침. 화면 `g10-drop` 선택 [0] → [1] |
| **완료** | **Git 탭 끌어다 놓기**(사용자 요청) — 폴더 · 파일을 Git 탭 아무 데나 놓으면 그 저장소(최상위)를 연다. `[폴더...]` 와 같은 규칙(`PathUtil.RepositoryFolderFor`). 하네스 `PathTest` 62 → 68건. 흉내 낸 끌기는 도구 한계로 안 들어가 **사용자가 직접 확인**(로그의 저장소 열기 두 번) |
| **완료** | **파일 비교 편집 칸 바탕**(사용자 요청) — 회색이던 칸을 밝음 #FAFAFA · 어두움 #252830 으로(후보를 보고 사용자가 고름). 화면 `g11-pane` 두 테마 화소로 확인 |
| **완료** | **작성자가 비면 반영하지 않고 알린다**(사용자 요청) — '반영한 줄에 주석 남기기' 가 켜져 있는데 작성자가 비면 반영 명령 여덟 곳 맨 앞에서 알림 창("작성자를 적어 주세요", 설정 자리를 댐)을 띄우고 멈춘다(사용자 선택). 주석을 끄면 묻지 않는다(늘 켬으로 바꿨다가 사용자 지시로 원복). 미리보기도 대신 채울 이름을 안 보인다. 하네스 `NoteTest` 93 → 99건, 화면 `g9-author` 실패 0 |
| **완료** | **설정의 프로그램 정보 칸 · 데모 걷어냄**(사용자 지시) — 만든 사람 · 사내 문의처 칸을 뺐다(개발자 정보가 대신). [정보] 창은 실행 파일 값만, 빈 칸 안내는 `적혀 있지 않습니다`. 데모 설정 두 칸 · [데모 →] 단추 · 전환 코드를 지움. 이 PC 의 시험 재료 13개는 휴지통으로, 설정 · 최근 목록의 시험 경로를 비움. 하네스 `AboutTest` 30건, 화면 `g5` · `g6` 실패 0 |
| **완료** | **담당 카드 · 소개 문구 고침**(사용자 지시, 12차 G-6 고침) — 개발자 정보 담당 카드를 `Platform` 최민영 대리 · `MergeHub` 김승준 사원 두 줄로, 사내 문의처는 카드에서만 뺌([정보] 창 · G-5 구조는 그대로). 소개 문구를 **`사내 Merge/Diff + Git 도구`**(Merge 먼저)로 — csproj 설명 · 개발자 정보 · 정보 창 받침 · 창 제목 네 곳. 하네스 `OverviewTest` 고치기 전 4건 실패 → 15건 통과, `AboutTest` 30건, 화면 `g6-verify` · `g5-verify` 실패 0 |
| **완료** | **메모 문법 강조 · 같은 글 칠하기 · 색 마킹**(사용자 요청, 12차 G-8) — 파일 비교처럼 투명한 편집기 + 아래층(사용자 결정). 강조 언어는 메모마다 콤보(파일은 확장자, 이름 없는 메모는 C#). 고른 글과 같은 글 모두 배경(낱말 통째면 낱말 단위 · 대소문자 구분 · 상태 줄 `같은 글 N곳`). 마킹은 색 다섯 · Ctrl+1~5 · 다시 누르면 풀림 · [마킹 지우기], 선택을 풀어도 남고 보관하지는 않는다. 오른쪽 위치 막대(누르면 그 줄로). 화면에서 나온 것: 플랫폼 TextBox 스타일이 아래층을 통째로 덮음(`Style="{x:Null}"`, 줄 번호 칸도 함께) · 콤보에 형 이름이 보임(`ToString`) · **어두운 테마에서 메모 탭 · 파일 비교 문서 탭 제목이 검정**(사용자 보고, 잉크 차이 116 → 587 · 문서 탭 157/116 → 546/587). 하네스 `MemoHlTest` 45건 · `MemoTest` 69건, 화면 `g8-verify` 밝은 · 어두운 실패 0(칠한 글자가 편집기 글자 칸 안 +1~2px — 탭 든 줄 · 가로 스크롤 포함, Ctrl+Z 가 칠하기로 늘지 않음). |
| **완료** | **`Alt+↓` 로 이동하다 보면 화면이 잘린다**(사용자 보고, 12차 G-7) — 재현: 차이 줄이 가운데가 아니라 **칸 맨 아래에 걸려 잘리고**(줄 위 1,361px · 칸 아래 1,394px), 마지막 → 첫 차이로 돌면 **두 칸이 통째로 543px 밀려** 아래가 잘렸다. 기록으로 원인을 떴다 — 캐럿을 옮길 때 편집기가 먼저 한 번 구르며 건 메아리 막기(`Input` 에서 풀림)에, 곧이은 가운데 맞추기(`Loaded`)의 두 번째 스크롤이 걸려 **버려졌다**. 목록 칸은 첫 자리에 남고, 크게 돌면 표시층 맞추기가 그 차이를 이동값 357 로 메워 칸이 밀렸다. `CenterCharInView` 가 다른 칸을 **직접** 맞추게 고침. 화면 `g7-verify` 고치기 전 10건 실패 → 0(차이 줄 837px · 칸 가운데 842px, 칸 위 289px 그대로) |
| **완료** | **개발자 정보**(사용자 요청, 12차 G-6) — **설정 안 메뉴 `개발자 정보`**(처음에 하단 탭 `개요` 로 만들었다가 사용자 지시로 옮김, 플랫폼은 안 건드리고 기존 `AddSub(설정 탭 키)` 로). 읽기 전용 안내 화면으로 사용자가 준 참고 화면 모양(가운데 제목 + 버전 배지 `v0.12` · 소개 한 줄 · 목적 문장 · 카드). 카드는 한 장 `담당`(만든 사람 · 사내 문의처) — 정보 창과 같은 길(설정 → 실행 파일 받침값)로 읽고, 보일 때마다 다시 읽는다. 목적 문장만 코드에. [정보] 창은 그대로. 화면 사진을 보고 긴 문의처 글이 낱말 가운데서 꺾이던 것을 이름표 위 · 값 아래로 고침. 하네스 `OverviewTest` 14건 새로, 화면 `g6-verify` 22건 실패 0(하단 탭에 개요 없음 · 설정 → 개발자 정보 · 글 값 · 가운데 ±20px · 설정값 반영 · 회귀). **켜 둔 채 설정을 고쳤을 때 바로 바뀌는지는 값으로 확정 못 함**(다시 켜서 확인) |
| **구조 완료 · 문구 대기** | **사내 문의처가 배포본에 따라가지 않는다**(사용자 요청, 12차 G-5) — 만든 사람은 `<Company>` 로 받쳐지는데 문의처는 받칠 것이 없어 새로 깐 PC 에서는 늘 `적혀 있지 않습니다` 였다. `csproj` 의 `<SupportContact>` 를 `AssemblyMetadata` 로 실행 파일에 박고, 정보 창은 설정 → 박힌 값 → 안내 글 순으로 보인다(사용자 결정). **문구는 아직 받지 않아 비워 두었다** — 나중에 `csproj` 한 줄만 채우면 된다. 하네스 `AboutTest` 28 → 30건(두 빌드 모두), 화면 `g5-verify` 두 빌드 × 3건 실패 0 (문구를 채운 시험 빌드에서 `G5 시험 문의처 (내선 0000)` 이 보이고, 설정에 적으면 그것이 앞섬) |
| **완료** | **저장 형식 콤보 둘이 구별되지 않는다**(사용자 요청, 12차 G-4) — 둘 다 `원본 유지` 라 어느 쪽이 인코딩인지 몰랐다. 글을 **`원본 인코딩 유지` · `원본 줄바꿈 유지`** 로 갈랐다(사용자 결정). 그 글이 곧 세션 보관본에 적히는 값이라, 값은 `원본 유지` 그대로 두고 **보이는 글만** `SaveChoice(Value, Label)` 로 갈랐다(콤보 `DisplayMemberPath` · `SelectedValuePath`) — 옛 보관본이 그대로 되살아난다. 하네스 `EncTest` +8(56건) · `SessionTest` +3(68건), 화면 `g4-verify` 25건(고른 값이 저장 바이트까지 · 강제 종료 뒤 되살리기) · 회귀 `e1-verify` 29건 실패 0(첫 번은 마우스 더블클릭이 빗나가 12건 실패 — 다시 돌려 통과, 원인은 값으로 확정 못 함) |
| **완료** | **"덩어리" 라는 말이 어색하다**(사용자 요청, 12차 G-3) — 화면의 "덩어리" 를 **"구간"** 으로(사용자 결정): 단추 `[구간 반영]` · `[구간 왼쪽으로]`, 단축키 설명 두 줄, 로그 `5~7행 구간 … 반영 (3줄)`. 툴팁은 원래 "구간" 이라 적고 있었다. 코드 안 이름 · 개념 주석은 그대로, **웹 문서의 옛 문구 네 곳은 차수 끝에**. 하네스 `ShortcutTest` 101 → 104건(고치기 전 새 3건 실패 확인), 화면 `g3-verify` 18건 · 회귀 `g2-verify` 23건 실패 0 |
| **완료** | **base 칸으로 머지하는 단축키**(사용자 요청, 12차 G-2) — `Alt+←` 를 **한 줄 왼쪽 파일로**(`[<]` 와 같은 일), `Alt+Shift+←` 를 **덩어리 왼쪽으로**(명령을 새로 만듦). `Alt+←` 는 원래 2-Way 에서 "이 줄 되돌리기" 였는데 이름·화살표와 하는 일이 달랐고, 그 뜻대로 하는 일이 B-1 로 생겨 넘겼다(되돌리기는 `Ctrl+Z` 만, 사용자 결정). 3-Way 는 안 건드림. 찾을 수 있게 **[이 덩어리 왼쪽으로] 단추**도 달았다. 화면 `g2-verify` 21건 · 하네스 `ShortcutTest` 88 → 101건. **`Alt+Shift` 조합은 윈도우가 입력 언어 전환으로 채가 흉내 낸 키로 못 눌렀다** — 기존 `Alt+Shift+→` 도 같아 시험 도구 한계이고, 덩어리는 단추로 확인했다 |
| **완료** | **undo 가 계속 이어진다**(사용자 보고, 12차 G-1) — 짝을 바꾼 뒤 `Ctrl+Z` 를 누르면 앞 파일 글 ↔ 지금 파일 글을 **끝없이 오갔다**(40번을 눌러도 안 끝남, 글자를 안 쳐도 남). 우리 목록이 비면 `Ctrl+Z` 가 키를 안 먹어 `TextBox` 자체 되돌리기로 넘어가고, 그것이 **앞 파일 글을 되살리면** `Reflow` 가 그걸 "친 것" 으로 보고 모델을 되돌리며 다시 쌓았다. 고침은 한 줄 — `LocalEditor` 에 `IsUndoEnabled="False"`. 되돌리기는 우리 목록만 쓴다. 화면 `g1-verify` 14건 · 편집 관련 다섯 벌 회귀 실패 0. 글자 **한 자 단위** 되돌리기는 없어지고 "타이핑이 멈춘 자리" 가 한 걸음이 됐다 |
| **완료** | `[<]` 단추가 있는 줄만 글이 밀린다(사용자 보고, 그림으로 짚어 줌) — 단추 칸 폭이 `Auto` 라 단추가 보이는 줄만 뒤 칸이 밀렸다(BASE 는 번호까지, LOCAL 은 코드가). `GutterBothWaysWidth` 로 두 칸이 같은 자리를 늘 잡아 두고, 모드에 따라 0 ↔ 단추 폭으로 갈아 끼운다. 편집기 여백도 같이 민다. 값으로 확인: 한 칸의 모든 줄이 같은 x(BASE 137 · LOCAL 1283), 글자 크기 · Git 모드도 그대로 |
| **완료** | 왼쪽 줄 번호가 밀린다(위를 쫓다 따로 찾음) — 12차 B-1 로 왼쪽에도 반영할 수 있게 됐는데 왼쪽 번호를 다시 매기는 자리가 없었다. 줄을 넣으면 그 줄은 번호가 비고 뒤 줄은 옛 번호(`01 02 · 03 04 05 · 06`), 저장하면 8줄인데 번호는 6까지. `RenumberBase` 를 두어 두 파일 비교에서만 왼쪽 줄을 1부터 다시 맨다. "머지 반영함" 표시가 BASE 번호를 열쇠로 쓰므로 그 열쇠도 함께 옮긴다. Git · 네 칸은 손대지 않는다 |
| 볼 것 | 왼쪽에만 있는 줄을 `[<]` 로 뺄 때 줄 수가 실제로 주는지 — 따로 열면 되는데 다른 반영 뒤에는 시험 도구가 낡은 줄 칸을 집어 값이 흔들렸다. 번호 불변식은 지켜짐 |
### 시험 도구
| 상태 | 항목 |
|---|---|
| **완료** | 화면 시험 도구를 런처에 맞춤 — 새 플랫폼은 `UbisamBase.Launcher.exe` 가 창 주인이라 예전 이름만 찾던 시험이 전부 "창이 안 뜬다" 로 멈춰 있었다. `a2lib.ps1` 에 `Shell-Procs` · `Shell-Proc` · `Stop-App` 을 두고 스크립트 76개 · 156곳을 함께 고침. 문법 187개 통과 · 끄고 켜고 탭 넘기기까지 실제 확인. 제품 코드 변경 없음 |
## 3~4주차로 미룬 것
디테일이라 지금 붙잡을 일이 아니다.
- 로그인·권한
- ~~대용량 파일 성능~~ — 잴 필요가 없어졌다(2026-09-10). 실제 소스의 가장 큰 파일이 7,479줄이고 편집·이동·재정렬이 모두 빠르다
- 같은 줄 접기 (4차 B-2) — 차이 이동만으로 부족하다고 느끼는 순간이 오면 그때
- 외부 편집기로 열기 (4차 B-4) — 설정 값 두 개를 채우는 수고가 얻는 것보다 컸다
드래그&드롭(D-7)과 비교 결과 내보내기(D-6)는 3차에서 앞당겨 끝냈다.
---
## 지난 기록
| 날짜 | 문서 |
|---|---|
| 2026-09-10 | [4차 — 로컬 머지툴 사용성](history/2026-09-10-4차.md) — 열세 항목, 열하나 완료 · 둘 취소 |
| 2026-09-09 | [3차 — 버그 정리 + 기능 확장](history/2026-09-09-3차.md) — 스물세 항목, 전부 끝 |
| 2026-09-08 | [2주차 — 폭 넓히기](history/2026-09-08-2주차.md) — 기능 덩어리 ①~⑤ |
한 줄 요약은 [history/changelog.md](history/changelog.md) 에 있다.