주석 · 공백을 걷어내고 견주는 판정이라 BOM · 줄끝 · 인코딩 · 끝 공백 · 빈 줄 · 들여쓰기만 다른 파일도 "주석만 다름" 이었다. 사용자: "이름을 바꿔줘". 판정 · 수는 그대로. - 목록 · 범례(설명 붙임) · 요약 "다름 N(코드는 같음 M)" · 비교 결과 보고서 - 웹 문서의 이름도 바꿈(지난 기록은 그대로, 발행은 E-2) - 하네스 FolderTest +1 (78건), 22벌 1,147건 통과, 빌드 경고 0 오류 0 Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
168 lines
16 KiB
Markdown
168 lines
16 KiB
Markdown
# 작업 지시 — 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차 끝 기준. 태그 짝 맞음. 발행본을 먼저 읽고 합쳐 올린다.
|
|
|
|
---
|
|
|
|
## F. 추가 요청
|
|
|
|
### F-1 · F-2. 폴더 비교 "같은 것만" 에 내용이 다른 것처럼 보이는 줄이 섞인다 (2026-09-17, 사용자)
|
|
|
|
사용자: "방금 폴더비교에서 같은것만 보기를 눌렀을때 내용이 다른파일들이 보이던데" — 9차 B-2 · 10차 D-1 에서 4,500개 시험 묶음으로 필터를 바꿔 가며 잴 때 본 화면.
|
|
|
|
- **F-1 폴더 줄** — "같은 것만" 은 같은 파일을 품은 폴더를 남기는데, 폴더 줄은 폴더 자신의 상태(안에 다른 것이 하나라도 있으면 **"다름", 주황**)로 보였다.
|
|
방향: "같은 것만 · 왼쪽에만 · 오른쪽에만" 으로 걸러 볼 때 폴더 줄은 걸린 파일 수("같음 122개")와 그 갈래 색으로 적는다. "전체 · 다른 것만 · 코드가 다른 것만" 은 그대로.
|
|
- **F-2 설정으로 같음이 된 파일** — 설정 [C# 코드 스타일 맞춤](사용자 설정 Allman) · [비교 · 병합에서 머지 주석 무시](켬) 때문에 중괄호 자리 · 머지 주석 줄만 다른 파일은 크기가 달라도 "같음" 이다.
|
|
사용자 결정: **같음으로 두고 따로 표시** — "같음(스타일만 다름)" · "같음(머지 주석만 다름)" · "같음(스타일 · 머지 주석만 다름)". 필터 · 요약 수는 그대로.
|
|
- **판정 기준**: 시험 묶음 "같은 것만" 에 주황 "다름" 줄이 없다. 작은 짝(같음 · 중괄호만 · 머지 주석만 · 코드 값 등)에서 까닭이 맞게 붙고 코드 값이 다른 파일은 어느 설정에서도 "다름". 요약 수 · 결과 글자 그대로.
|
|
|
|
### F-3. "주석만 다름" 이름을 바꾼다 (2026-09-17, 사용자)
|
|
|
|
- F-1 · F-2 를 가리다 보니 BOM · 줄끝 · 인코딩 · 끝 공백 · 빈 줄 · 들여쓰기만 다른 파일도 "주석만 다름" 이었다(주석 · 공백을 걷어내고 글자로 견주는 판정). 사용자: "이름을 바꿔줘".
|
|
- 방향: 판정은 그대로 두고 이름만 사실대로 — "다름(이진)" 과 같은 꼴로 **"다름(코드는 같음)"**, 요약은 "다름 N(코드는 같음 M)". 범례 · 목록 · 보고서 · 웹 문서 모두.
|
|
- **판정 기준**: 화면 · 요약 · 보고서에 "주석만 다름" 이 없다(머지 주석 쪽 "같음(머지 주석만 다름)" 은 다른 말). 상태 판정 · 수는 그대로.
|
|
|
|
---
|
|
|
|
## 이번 지시서에서 하지 않는 것
|
|
|
|
- **실제 소스로 병합해 보기** — 실제 소스는 열지 않는다(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 처럼 **눈이 아닌 값**으로)
|
|
- 커밋 해시
|