10차 지시서 만들기 · 9차 마무리

9차 전부 끝. D-1 에서 새로 걸린 N1 과 9차에서 적어 둔 셋을 10차로 넘긴다(코드 변경 없음).
- A-1 네 칸에서 고르기 한 번이 남지 않아 "남은 충돌 1개" 로 멈춤 (원인부터: 자동 조작인지 제품인지)
- B-1 Git 탭에서 고른 커밋을 파일 비교 탭이 새로고침 전까지 안 따라옴 (먼저 정함)
- C-1 머지 주석 무시를 끈 채 다시 정렬하면 반영 색이 옆 줄로
- D-1 그날 첫 큰 폴더 비교 9.2초 (재고 정함)
- E-1 다섯 길 + pull 다시 끝까지 · E-2 웹 문서

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
김승준 2026-09-17 13:30:34 +09:00
parent 85f35b986e
commit 724248e954
3 changed files with 184 additions and 0 deletions

View File

@ -8,6 +8,7 @@
| 날짜 | 항목 | 커밋 |
|---|---|---|
| 2026-09-17 | **10차 지시서** — 9차 전부 끝. D-1 에서 새로 걸린 N1(A-1 네 칸에서 고르기 한 번이 남지 않아 멈춤 — 자동 조작인지 제품인지 원인부터)과 9차에서 적어 둔 셋(B-1 Git 탭에서 고른 커밋을 파일 비교 탭이 안 따라옴 — 먼저 정함 · C-1 머지 주석 무시를 끈 채 다시 정렬하면 반영 색이 옆 줄로 · D-1 첫 폴더 비교 9.2초 — 재고 정함) · E-1 다섯 길 + pull · E-2 웹 문서. 코드 변경 없음 | 아래 |
| 2026-09-17 | **9차 D-1** — 병합 · rebase · cherry-pick · revert 를 새 저장소에서 파일 비교 탭을 미리 열지 않고 끝까지(코드 변경 없음). cherry-pick · revert 는 [모든 브랜치] 를 켜고 마지막 파일을 네 칸으로. 네 길 모두 마지막 Save 뒤 제목 · 요약 · 기준(HEAD) 같음 · 요약 N줄 = git diff · 커밋 뒤 기준 새 HEAD · 줄끝 · BOM 바뀐 파일 0 · class 검사 0. 새로 걸린 것: N1 cherry-pick 첫 회차에서 고르기 한 번이 안 남아 "남은 충돌 1개" 로 멈춤(다시 하니 끝까지) → 10차. **9차 전부 끝**. 웹 문서 "9차 끝" (아티팩트 버전 10) | 아래 |
| 2026-09-17 | **9차 C-1** — 웹 문서가 8차 D-1(E-1 · F-1 전)에서, "지금까지 만든 것" 은 6차에서 멈춰 있었다. 개요 숫자(22벌 1,122건 · 커밋 104), 매뉴얼에 병합 커밋 본문 해결 내역 · 해결 기록이 남는 곳 · 마지막 저장 뒤 기준 HEAD · 한계 넷, 남은 일에 8차 끝 · 9차 표, 지금까지 만든 것 7~9차. 화면 문구 grep 대조 · 태그 짝 맞음. 아티팩트 버전 9. 제품 코드 변경 없음 | 아래 |
| 2026-09-17 | **9차 B-2** — 5차에 "폴더 비교 뒤 트리를 세우는 데 1초 남짓" 으로 적어 둔 것을 앱 안 임시 측정(잰 뒤 되돌림)으로 단계별로 쟀다. 4,500개 묶음에서 트리 만들기 5~17ms · 첫 화면까지 0.13초(필터 전체 0.24초), 비교는 데운 뒤 0.7초. 5차 값은 자동 조작 대기가 섞였다. 줄일 자리가 없어 고치지 않음(코드 변경 없음). 그날 첫 비교 9.2초는 적어 둠 | 아래 |

147
doc/작업지시/10차.md Normal file
View File

@ -0,0 +1,147 @@
# 작업 지시 — MergeHub 10차 (두 탭이 같은 커밋을 보게 · 남은 표시 어긋남 · 누름을 놓치는지)
대상: `D:\Sorce\MergeTool\MergeHub` (플러그인) · `D:\Sorce\MergeTool\UbisamPlatform` (셸)
전제: 1~9차 지시서는 모두 끝났다([../진행상황.md](../진행상황.md)).
**이번 지시서가 나온 곳** — 9차 D-1 에서 병합 · rebase · cherry-pick · revert 를 새 저장소에서 MergeHub 만으로 끝까지 했다.
네 길 모두 마지막 Save 뒤 제목 · 요약 · 기준(HEAD)이 같았고, 줄끝 · BOM 바뀐 파일 · 충돌 표식 · class 이름 다른 파일이 0 이었다.
**새로 걸린 것은 하나(N1)** 이고, 9차 A-1 · B-1 · B-2 를 하면서 **고치지 않고 적어 둔 것이 셋**이다. 근거와 수치는 [../history/2026-09-17-9차.md](../history/2026-09-17-9차.md) 에 있다.
파일을 망가뜨리는 것은 없다. 모두 **화면이 어긋나 보이거나, 한 번 누른 것이 남지 않는** 종류다.
| 9차 D-1 에서 잰 것 | 병합 | rebase | cherry-pick | revert |
|---|---|---|---|---|
| 마지막 Save 뒤 제목 · 요약 · 기준 | 같음 | 같음 | 같음 | 같음 |
| 요약 N줄 = git diff | 3 = 3 | 3 = 3 | 3 = 3 | 6 = 6 |
| 커밋 뒤 기준 | 새 HEAD | 새 HEAD | 새 HEAD | 새 HEAD |
| 줄끝 · BOM 바뀐 파일 | 0 / 33 | 0 / 31 | 0 / 33 | 0 / 36 |
| 줄 고른 로그 | 18줄 | 18줄 | **10줄(첫 회차) → 18줄(다시)** | 6줄 |
---
## 공통 규칙
- **A → B → C → D → E 순서로 진행한다.** A 는 한 번 누른 것이 사라질 수 있다는 것이라 먼저다.
- **항목 하나를 끝낼 때마다** 빌드하고 실제로 실행해 화면을 확인한 뒤 보고한다.
- **항목 하나가 끝나면 기록을 세 군데에 남기고 로컬 커밋한다**(4차 D-2 규칙).
1. **상세**는 `doc/history/YYYY-MM-DD-10차.md` — 원인 · 판단 · 확인한 결과
2. [../진행상황.md](../진행상황.md) 은 **대기 → 완료로 상태만**
3. [../history/changelog.md](../history/changelog.md) 에 한 줄 — 날짜 · 무엇을 왜 · 커밋
- **푸쉬하지 않는다.**
- **실제 소스를 열지 않는다**(2026-09-11 결정). 시험 재료는 `C1Repo`(병합 저장소) · `FolderPerf/Corpus.cs`(폴더 묶음)로 만든다.
고치기 전에 문제가 **다시 나는 것부터 보이고**, 고친 뒤 안 나는 것을 보인다. 다시 나지 않으면 **짐작으로 고치지 않고** 되풀이한 횟수와 짚은 곳을 적어 보고한다.
- 기존 검사 하네스(22벌 1,122건)는 계속 통과해야 한다. 로직을 건드리면 **테스트를 먼저 늘린다.**
- 빌드 경고 0 · 오류 0 을 유지한다. 앱이 실행 중이면 `UbisamBase.Shell` 을 먼저 종료한다.
- 사용자 설정 파일(`D:\UbisamConfig\Settings\MergeHubSettings.json`)은 시험 전에 백업하고, 끝나면 **바이트 그대로** 되돌린다.
창 기억(`ShellWindowPlacement.json`)은 시험 뒤 "기억 없음" 으로 둔다.
- **자동 조작으로 확인할 때는 사람이 갈 수 있는 길만 쓴다.** 이름 창은 [저장], 접힌 영역은 [펴기], 파일 비교 탭은 미리 열지 않는다(`D7_NO_PREOPEN=1`).
- **문서 글을 PowerShell 로 넣을 때는 작은따옴표 문자열만 쓴다**(8차). **PowerShell 변수 이름은 대소문자를 가리지 않는다** — 매개변수와 겹치는 이름을 쓰지 않는다(9차 A-2).
- **앱 안에 임시 측정 코드를 넣었다면** 커밋하지 않고 잰 뒤 되돌리고 다시 빌드한다(9차 B-2).
- 결과 확인은 줄끝 · 충돌 표식 · `UnitN.cs` 의 class 이름까지 본다.
- 플랫폼을 고치면 다른 소비 프로그램에 미치는 영향을 함께 적고 `UbisamPlatform/doc/history/changelog.md` 에 남긴다. **배포는 사용자 확인 뒤.**
---
## A. 한 번 누른 것이 남지 않는다
### A-1. 네 칸에서 충돌을 차례로 고르는데 한 번이 남지 않아 "남은 충돌 1개" 로 멈췄다 (9차 D-1 N1) — 원인부터
- **그때 순서**: cherry-pick([모든 브랜치] 켬) → 같은 줄 충돌 15개 파일 단위 Accept Theirs → NewPanel Accept Both [아니오] → [3분할로 열기] 뒤 저절로 열리는 파일마다
**[다음 충돌] → Take Theirs / Take Mine 번갈아**(누름 사이 0.4초 · 0.7초) → [Save].
- `Motion/Unit0.cs` 충돌 6개를 여섯 번 고른 뒤 요약이 **"남은 충돌 1개"**, [Save] 꺼짐. 그 회차 줄 고른 로그는 **10줄**(병합 · rebase 는 같은 순서로 18줄) — Unit0 에서 **한 번이 로그에 없다.**
새 저장소로 같은 순서를 다시 하니 18줄 · 끝까지 갔다.
- 비슷한 모양이 전에도 있었다: 7차 C-2 · 8차 C-1 에서 충돌 탭 목록 여러 개 고르기가 앱에 닿지 않아 파일 단위 Accept 가 일부만 풀렸다(그때는 스크립트를 되풀이하게 바꿔 넘겼다).
- **가릴 것** — 둘 중 어느 쪽인가.
1. 자동 조작의 누름(UI 자동화 Invoke)이 앱에 닿지 않았다 → 시험 도구 문제.
2. 앱이 누름을 받았는데 **처리하지 않았다** — 예: [다음 충돌] 이동이 끝나기 전에 Take 가 눌려 선택 줄이 아직 이전 충돌(이미 정한 줄)이었거나, 단추가 잠깐 꺼져 있었다 → **사람이 빠르게 눌러도 날 수 있는 제품 문제.**
- 방향:
1. 앱에 임시 로그를 넣어(되돌릴 것) [다음 충돌] · Take 가 **불렸는지 · 어느 줄에 · 무엇을 했는지 · 그때 단추가 켜져 있었는지**를 남긴다.
2. 같은 순서(네 칸 여섯 충돌 번갈아 고르기)를 **스무 번 이상** 되풀이한다. 누름 간격을 9차와 같게 한 번, 더 짧게(0.1초) 한 번.
3. 다시 나면 로그로 1 · 2 를 가른다. 2 면 고친다 — 누른 것이 **처리되거나, 처리되지 않았으면 알린다**(조용히 사라지지 않는다).
4. 다시 나지 않으면 되풀이 횟수 · 간격 · 짚은 곳을 적고 사용자에게 보고한 뒤 닫는다.
- **판정 기준**: 원인이 1 · 2 중 무엇인지 로그 근거로 적는다. 2 였다면 짧은 간격으로 스무 번 되풀이해 줄 고른 로그가 매번 누른 수와 같다. 하네스로 "이동 중에 들어온 Take" 를 만든다.
---
## B. 두 탭이 같은 커밋을 보게
### B-1. Git 탭 이력에서 커밋을 고르면 파일 비교 탭은 새로고침 전까지 따라오지 않는다 (9차 A-1 에서 적어 둠) — **먼저 정한다**
- 두 탭은 같은 "고른 커밋"(`_workspace.SelectedCommit`)을 쓴다. 그런데 Git 탭은 값만 바꾸고, 파일 비교 탭은 **새로고침 알림**(`Refreshed`)으로만 다시 읽는다.
그래서 Git 탭에서 `상대 쪽 작업` 을 골라도 파일 비교 탭 위 줄 "Selected Commit" · 왼쪽 이력 선택 · 두 칸 기준은 **옛 커밋 그대로**다(9차 A-1 · 곁 확인에서 봄). [새로고침] 을 누르면 따라온다.
- 파일 비교 탭 쪽 이력에서 고르면 바로 바뀌고, 저장 안 한 편집이 있으면 "다른 커밋을 봅니다" 를 먼저 묻는다(5차 A-2).
- **고치기 전에 사용자에게 보이고 정한다.**
1. **바로 따라온다** — Git 탭에서 고르면 파일 비교 탭도 그 커밋으로. 파일 비교 탭에 저장 안 한 편집이 있으면 **Git 탭에서 고르는 순간 묻는다**(또는 편집이 있으면 따라가지 않고 알린다 — 둘 중 무엇인지도 정한다).
2. **따로 둔다** — 두 탭의 고른 커밋을 나눈다. Git 탭 선택은 Git 탭 일(Revert · Cherry-pick · Reset · Blame 기준)에만 쓰고, 파일 비교 탭은 자기 이력으로만 바뀐다.
- **판정 기준**: 정한 대로 두 탭의 "고른 커밋" 표시가 서로 다른 말을 하는 때가 없다(또는 따로라는 것이 화면에 드러난다). 저장 안 한 편집이 말없이 사라지지 않는다(5차 A-2 · 4차 A 회귀 없음).
9차 A-1 · A-2 의 규칙(작업 중 충돌이 막 0 이 되면 HEAD · 새로고침 뒤 해시로 · HEAD 를 보다 커밋하면 새 HEAD)은 그대로.
---
## C. 남은 표시 어긋남
### C-1. "머지 주석 무시" 를 끈 채 다시 정렬하면 반영 색이 옆 줄로 옮겨 간다 (9차 B-1 에서 적어 둠)
- **다시 내는 순서**(9차 `d9-b1-extra.ps1`): 설정 `IgnoreMergeNotes` 끔 → 병합 → `Weld/Unit1.cs` 를 [3분할로 열기] → 첫 충돌 Take Theirs → 비교 규칙 [Aa] 두 번(다시 정렬).
Take 직후 범례 "머지 반영함 1 · 추가 1" → 다시 정렬 뒤 **"머지 반영함 1 · 직접 수정 1"**. 화면에서 초록(반영함)이 **주석 줄**에, 보라(직접 수정)가 **반영한 코드 줄**(`Power100 => 0.9`)에 붙는다.
- 짚이는 곳: 다시 정렬하면 주석 줄이 BASE 의 코드 줄(`Power93`)과 한 행으로 짝지어진다(규칙이 꺼져 있어 `NoteRows` 로 떼지 않는다). 반영 표시는 **BASE 줄 번호**(`_appliedBaseNumbers`)로 붙들어 두어, 그 번호를 가진 행(= 주석 행)에 붙는다.
- 기본값(켬)에서는 나지 않는다. 범례 수 · 저장 내용은 같다.
- 방향: 반영 표시가 **반영한 코드 줄**에 남게 한다. 우리가 넣은 주석 줄은 규칙과 상관없이 코드 줄과 한 행으로 짝짓지 않게 하는 것이 한 길이다 — 비교 결과(차이 수)가 바뀌는지 먼저 잰다.
- **판정 기준**: 규칙을 끈 채 다시 정렬해도 반영 색이 반영한 코드 줄에 있다(스크린샷 · 범례). 규칙 켬 · 끔 모두 차이 수 · 남은 충돌 · MERGED 번호 · 저장 내용이 고치기 전과 같다. 9차 B-1(규칙 켬: 처음부터 무시 색)은 그대로.
---
## D. 처음 한 번이 느리다
### D-1. 그날 첫 큰 폴더 비교가 9.2초 (9차 B-2 에서 적어 둠) — 재고 정한다
- 4,500개 묶음에서 데운 뒤 비교는 0.7초인데 그날 첫 비교는 **9.2초**였다(한 번 잰 값). 트리 · 그리기는 0.14초로 상관없다. 파일을 디스크에서 처음 읽는 값으로 보이지만(디스크 캐시 · 백신 검사) 가려 보지 않았다.
- 사람이 아침에 처음 비교할 때 겪는 시간은 이쪽이다.
- 방향:
1. **다시 낸다** — 캐시를 비운 상태를 만든다(재부팅 없이: 묶음을 새 이름으로 다시 만들어 복사 직후가 아닌 상태, 또는 대기 메모리 비우기 도구를 쓰지 않는 방법으로). 세 번 잰다.
2. **나눠 잰다** — 훑기(폴더 목록) · 가리기(파일 읽기) · 세기. 빠른 비교(크기 · 수정일)도 같이 잰다 — 파일을 안 읽으니 차이가 줄면 읽기 값이다.
3. 백신 검사 몫은 바꿀 수 없으므로 **잰 값만 적는다**(백신 설정은 건드리지 않는다 — 보안 설정).
4. 줄일 길(예: 크기가 다르면 읽지 않고 "다름", 진행 표시 · 몇 개 남았는지 알림)이 있으면 효과와 위험을 적어 **사용자에게 보이고 정한다.** 결과가 바뀌는 길(빠른 비교를 기본으로 등)은 하지 않는다.
- **판정 기준**: 차가운 첫 비교가 다시 나는지와 단계별 값을 적는다. 고쳤다면 같은 조건으로 전후를 견주고 결과 요약이 글자 하나까지 같다(5차 B-2 기준). 안 고치기로 하면 까닭을 적고 매뉴얼 "알아 둘 한계" 를 잰 값으로 고친다.
---
## E. 확인 · 문서
### E-1. 다섯 길(+ pull)을 다시 끝까지, 누름 간격은 사람 손 빠르기로
- A ~ D 를 고친 뒤 저장소를 새로 만들어 **병합 · pull · rebase · cherry-pick · revert** 를 끝까지 한다(9차 D-1 은 pull 을 돌리지 않았다).
- 파일 비교 탭은 미리 열지 않는다. cherry-pick · revert 는 [모든 브랜치] 켬 · 마지막 파일 네 칸. **B-1 에서 정한 대로** Git 탭에서 커밋을 고른 뒤 파일 비교 탭이 무엇을 보이는지도 적는다.
- 9차 D-1 과 **같은 표**(기준 대조 · 커밋 뒤 기준 포함)로 적는다. 줄 고른 로그 수가 누른 수와 같은지 길마다 적는다. 새로 걸린 것은 고치지 말고 적는다 — 그 목록이 11차가 된다.
- **판정 기준**: 다섯 길 모두 MergeHub 만으로 끝까지. 줄끝 · BOM 바뀐 파일 0 · 충돌 표식 0 · class 이름 다른 Unit 파일 0. 마지막 Save 뒤 제목 · 요약 · 기준이 같다. 줄 고른 로그 = 누른 수.
8차 A-1 · B-1 · B-2 · F-1 과 9차 A-1 · A-2 · B-1 이 다시 나지 않는다.
### E-2. 웹 문서를 10차에 맞게
- 고친 것 · 정한 것을 매뉴얼("알아 둘 한계" 의 9차에 더한 넷 중 고친 것은 빼고) · 남은 일 · 지금까지 만든 것에 반영하고 같은 주소로 발행한다.
- **판정 기준**: 문서의 단추 이름 · 흐름이 지금 화면과 같다(grep 대조). "알아 둘 한계" 가 10차 끝 기준. 태그 짝 맞음. 발행본을 먼저 읽고 합쳐 올린다.
---
## 이번 지시서에서 하지 않는 것
- **실제 소스로 병합해 보기** — 실제 소스는 열지 않는다(2026-09-11 결정).
- **빈 cherry-pick 을 커밋으로 남기는 길** — 두지 않기로 했다(2026-09-16 사용자 결정).
- **비교할 때만 C# 스타일을 맞추는 선택지** — 만들지 않기로 했다(2026-09-17 사용자 결정).
- **MergeHub 밖에서 푼 충돌을 병합 본문에 적기** — 알 길이 없다(8차 F-1).
- 셸 창 반쪽 스냅 · 1px 테두리 · 화면 잠금 확인 창 자동 재기 — 8차 C-3 결정 그대로.
- **백신 · 디스크 설정 바꾸기** — 보안 설정이라 건드리지 않는다(D-1 은 재기만).
- 빠른 비교가 내용만 바뀐 파일을 놓치는 것 — 알려진 한계로 둔다.
- 같은 줄 접기(4차 B-2) · 외부 편집기(4차 B-4) · 로그인·권한 · Gitea PR 코멘트 · 멀티 레포 · Roslyn · 변경분 ZIP — 미룬 그대로 둔다.
- **사내 베타 배포 · 푸시** — 기획 4단계(09.29 ~ 10.02)와 사내 Gitea 저장소가 정해지면 따로 지시한다.
---
## 보고 형식
항목마다 이렇게 적는다.
- 고치기 전에 문제가 **다시 나는 것**을 어떻게 보였는지 (만든 저장소 · 묶음의 어느 파일로, 몇 번 되풀이해서)
- 무엇이 원인이었는지 한두 줄 (로그 근거)
- 어떤 파일을 어떻게 고쳤는지
- 실제로 실행해 확인한 결과 (줄 수 · 해시 · 줄끝 · 충돌 수 · 로그 줄 수 · ms 처럼 **눈이 아닌 값**으로)
- 커밋 해시

View File

@ -276,6 +276,42 @@
- N1 cherry-pick 첫 회차에서 `Motion/Unit0.cs` 충돌 6개를 고른 뒤 "남은 충돌 1개" 로 남아 [Save] 가 꺼짐. 고르기 한 번이 로그에 안 남음(10줄 · 다른 길 18줄). 새 저장소로 다시 하니 끝까지 — 자동 조작 쪽으로 보이나 원인 미확인
---
## 10차 — 두 탭이 같은 커밋을 보게 · 남은 표시 어긋남 · 누름을 놓치는지 (2026-09-17 ~)
지시서: [작업지시/10차.md](작업지시/10차.md). 9차 D-1 에서 새로 걸린 N1 과 9차에서 적어 둔 셋(두 탭 고른 커밋 · 규칙 끈 채 반영 색 · 첫 폴더 비교 9.2초) · 다섯 길(+ pull) · 웹 문서.
### A. 한 번 누른 것이 남지 않는다
| 상태 | 항목 |
|---|---|
| 대기 | A-1 네 칸에서 충돌을 차례로 고르는데 한 번이 남지 않아 "남은 충돌 1개" 로 멈췄다 (원인부터 — 자동 조작인지 제품인지) |
### B. 두 탭이 같은 커밋을 보게
| 상태 | 항목 |
|---|---|
| 대기 | B-1 Git 탭 이력에서 고른 커밋을 파일 비교 탭이 새로고침 전까지 따라오지 않는다 (먼저 사용자와 정함) |
### C. 남은 표시 어긋남
| 상태 | 항목 |
|---|---|
| 대기 | C-1 "머지 주석 무시" 를 끈 채 다시 정렬하면 반영 색이 옆 줄로 옮겨 간다 |
### D. 처음 한 번이 느리다
| 상태 | 항목 |
|---|---|
| 대기 | D-1 그날 첫 큰 폴더 비교가 9.2초 (재고 정함) |
### E. 확인 · 문서
| 상태 | 항목 |
|---|---|
| 대기 | E-1 다섯 길(+ pull)을 다시 끝까지 — 줄 고른 로그 = 누른 수 |
| 대기 | E-2 웹 문서를 10차에 맞게 |
---
## 3~4주차로 미룬 것