27 Commits

Author SHA1 Message Date
e08eaae2e6 11차 F-7 기록: 대형 모니터에서 오른쪽이 잘림 - 창 자리 되살리기(플랫폼)
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-09-22 18:44:05 +09:00
ea35b718df 11차 F-6: 코드 칸 줄 간격 좁힘(줄 높이 글자의 1.67배 → 1.33배)
- 사용자 결정: 줄 간격만 줄이고 선택 사항(단추 · 설정)은 만들지 않음
- 12 → 16, 1920x1080 두 칸 40 → 50줄, 네 칸 17 · 18 → 22 · 23줄
- 북마크 표식 높이도 줄에 맞춤
- FontTest 144(1,572건), E-1 회귀 없음

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-09-22 18:32:50 +09:00
1895b11c8d 11차 F-5 뒤: 켜자마자 · 탭에서 돌아와도 단축키가 듣게(편집기 자동 포커스)
- 포커스가 비었거나 이 화면 밖이면 편집기로(화면 뜰 때 · 돌아올 때 · 창 활성)
- 화면 안(찾기 칸 등) · 다른 창의 포커스는 그대로
- E-1 병합 길 회귀 없음

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-09-22 18:16:39 +09:00
77621b1023 11차 F-5 기록: 키 · Ctrl+휠 확인, 켜자마자 포커스 없음
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-09-22 16:51:36 +09:00
a7b4a728d3 11차 F-5: 코드 글자 크기 조절(8~24)
- 한 값을 모든 모니터에(모니터 배율은 플랫폼), 코드 칸만(사용자 결정)
- CodeFontMetrics: 줄 높이 · 번호 칸 · 여백 단추를 같은 비율로, 12 에서 지금 값 그대로
- 화면은 DynamicResource 한 벌, MergeLine.MinimumRowHeight 도 따라감
- Ctrl+휠 · Ctrl++/- · Ctrl+0 · 설정 "보기 > 코드 글자 크기" · 상태 줄 글자 N
- 줄 번호 기준선을 코드와 맞춤
- FontTest 110 · ShortcutTest +14(1,538건)

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-09-22 16:37:15 +09:00
bc97a2d2e5 11차 F-4 기록: 플랫폼 배포함
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-09-22 16:23:30 +09:00
5cef172ed9 11차 F-4: ACTIONS 칸 감추기(단추 · F9) + 아래 탭 줄 접기(플랫폼)
- 위 상태 바 [ACTIONS 감추기 ▶ (F9)], 단축키 표 F9. 칸 · 구분선 폭 0, 펴면 끌어 둔 폭 그대로
- 설정 ActionsHidden 에 기억. 감춘 채 Ctrl+S · Alt+←/→ 그대로
- 덧(사용자 요청): 아래 탭 줄 접기는 플랫폼에 넣음(배포 전)
- 1440p 150%: 코드 칸 폭 +163px · 높이 +71px. ShortcutTest +3

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-09-22 16:21:08 +09:00
140c31a009 11차 F-3 뒤: 사용자 확인 기록
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-09-22 16:05:15 +09:00
10740bc948 11차 F-3 뒤 기록: 왼쪽 칸이 기본 저장소로 덮이던 것
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-09-22 16:04:15 +09:00
5210ead661 11차 F-3: 탐색기 보내기로 폴더 두 개 바로 비교 · 알림 · 바로가기 저절로 고침
- 잰 것: 탐색기 [보내기] 는 여러 개를 프로세스 하나에 인자로 모두 넘긴다(일곱 경우).
  폴더 둘은 창 하나에서 폴더 비교까지 된다. 설치 파일 필요 없음
- 3개 이상: 앞의 둘 + 알림(StartupArgs.Extra · Notice) - 예전엔 말없이 버림
- 260자 넘는 경로(8.3 이름으로 넘어와 net48 이 못 찾음) 등 없는 경로: 아무것도
  열지 않고 까닭 알림(Missing) - 예전엔 폴더인데 파일 비교로 가서 빈 화면
- 알림은 사용자 이름 창 뒤로 지나가지 않게 본 창이 활성이 된 뒤에
- 켤 때 보내기 바로가기가 옛 자리를 가리키면 지금 실행 파일로(RepairIfMoved,
  등록한 사람만 · 바로가기 파일만 · 레지스트리 안 씀)
- 사용자 결정: 떠 있을 때는 새 창 그대로. ArgsTest +16(1,411건)

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-09-22 15:57:58 +09:00
9d0cbb7ff8 11차 F-2: 메서드 단위로 골라 반영 · 덩어리 반영의 주석 한 줄
- [이 메서드 반영]: 캐럿이 놓인 클래스 멤버를 통째로(사용자 결정: C# + C/C++,
  메서드 · 생성자 · 속성 · 이벤트 · 연산자 · 필드 · enum, 로컬 함수 안이면 감싸는 멤버)
- MemberRanges: Roslyn 없이 주석 · 문자열(축자 · 보간 · raw · C++ raw · 숫자 구분자)을
  가리고 #if 갈래마다 다시 읽어 중괄호 짝으로 범위. 못 잡으면 단추를 끄고 까닭 한 줄
- 덩어리 · 메서드 반영(ApplyGroup): 머지 주석 한 줄(메서드 이름 위 · 덩어리 첫 줄 위),
  로그 한 줄, Undo · Redo 한 번(LineEdit.Group). 덩어리가 줄마다 주석을 달던 것도 고침.
  주석만 든 편집(NoteOnly)은 직접 수정 · 편집 수에 안 셈
- 메서드 반영 저장본 = 같은 줄 줄 단위 반영 저장본(바이트). MemberTest 83건(23벌 1,395건)

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-09-22 15:38:04 +09:00
aafd7a5a6f 11차 F-1: 칸 이름 · 칸마다 어느 파일인지 · 머지 주석에 어디서 가져왔는지
- 칸 이름 LOCAL(Mine) · REMOTE(Theirs)(사용자 결정: 표준 용어 + 영문 쪽 이름)
- 칸 머리마다 한 줄 "어느 쪽 · 어느 파일"(PaneHeaders). MERGED · 두 칸 LOCAL 은
  "(저장할 파일)", mergetool · --merge 는 제 임시 파일 이름 - Mine 칸이 MERGED 이름을
  보이던 것(MineHeader) 고침. 좁으면 가운데를 줄이고 툴팁에 전체(MiddleTrim)
- 머지 주석 [사람] 날짜 출처 설명(사용자 결정: 쪽 이름 + 브랜치/해시, 출처 먼저).
  출처는 로그와 같은 말 - 두 칸 로그 BASE(해시) 반영, 브랜치 3-Way 로그 REMOTE(브랜치) 반영
- Take Mine 도 주석(처음 한 번, 되돌리면 함께 빠짐)
- 무시 조건은 [사람] 날짜 뒤를 따지지 않아 코드 그대로 - 옛 · 새 · 출처만 다른 주석을
  하네스로 굳힘(NoteTest · RulesTest · FolderTest · MergeSaveTest, 1,312건)
- 네 길 화면 확인 · E-1 병합 길 회귀 없음

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-09-22 14:31:57 +09:00
2f36f1bcb1 11차 A-4 기록: ZIP 안 대조 · 웹 문서와 기획안은 11차 끝에 한 번에
앱이 만든 ZIP 을 풀어 .cs · .bin 이 git 의 그 커밋과 바이트 같음을 적음. 사용자 말대로 웹 문서 · 기획안은 11차 끝에 한 번에 반영 · 잠금 · 발행하고, 넣을 것을 기록에 모아 둔다.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-09-22 13:38:52 +09:00
a99ca970e9 11차 A-4: 변경분을 폴더에 더해 ZIP 으로도
사용자 결정대로 뽑은 폴더 옆에 같은 이름 .zip 을 만든다. 안에 폴더와 안내 파일을 나란히 넣어 풀면 폴더로 뽑은 것과 같은 모양이고, 파일은 바이트 그대로 · 경로는 / · 한글 이름은 UTF-8 표시. .part 에 쓰고 옮겨 반쯤 된 ZIP 을 남기지 않고, 못 만들어도 추출은 성공으로 둔다. UniquePath 는 같은 이름 .zip 이 남아 있어도 그 이름을 쓴 것으로 본다.

하네스 ReportTest +13 (70건, 22벌 1,260건) · 빌드 경고 0 · 오류 0. 아홉 경우를 화면에서 다시 뽑아 ZIP 8/8 을 Windows tar 로 풀어 폴더와 경로 · 해시가 같음, 앱이 만든 ZIP 의 한글 이름 UTF-8 표시 확인. 웹 문서 버전 14. 기획안은 사용자 잠금 대기.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-09-22 13:34:39 +09:00
d2709e3d4e 11차 D-1: 시험 도구 둘 — 부모 하나 커밋 검사 · "차이 없음" 읽기
줄끝 검사 스크립트는 부모가 하나면 첫 부모와만 견준다고 적고 git merge-base 를 부르지 않는다. 요약 읽는 함수는 제품의 "차이 없음" 을 읽는다. rebase 한 길을 다시 돌려 오류 줄 0 · 커밋 뒤 요약 "차이 없음". 시험 도구는 저장소 밖이라 기록만. 제품 코드 변경 없음.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-09-22 13:22:20 +09:00
8e90f88099 11차 E-2: 웹 문서 · 기획안을 11차에 맞춤
MergeHub 문서 아티팩트 버전 13 — 매뉴얼에 커밋 메시지 고치기 · 변경분 추출 두 절, 한계 셋, 남은 일 · 만든 것 11차, 숫자 1,247건 · 커밋 129. 단추 이름 91개를 소스와 대조해 "맞추지 않음" 을 실제 글자 "C# 스타일 끔" 으로 바로잡음. 기획안 잠금 아티팩트 버전 17 — 커밋 메시지 수정 완료 · 4단계 준비 중(8쪽 A4 높이 그대로, 잠금은 사용자). 제품 코드 변경 없음.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-09-22 13:14:18 +09:00
c814c3f1b6 11차 E-1: 바꾼 길을 다시 끝까지 — 새로 걸린 것 없음
A-1 아홉 경우 · C-1 여덟 경우 · C-2 로 이력을 다시 쓴 저장소에서 병합 한 길 · 다섯 길 + pull 을 배포한 플랫폼 위에서 사람 순서로 다시 했다. 누른 수 = 로그, 줄끝 · BOM · 충돌 표식 · class 0, 두 탭 같은 커밋. 시험 도구가 창 최대화를 풀던 것을 고침(제품 아님). 제품 코드 변경 없음.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-09-22 12:27:48 +09:00
8bca3206d9 11차 B-2: 플랫폼 배포 · 배포 묶음 다시 만듦 · 시험 흔적 지움
사용자 확인 뒤 publish-platform.ps1 로 D:\UbisamPlatform\bin 갱신(바뀐 것 Core · Shell · README), MergeHub 를 다시 빌드하고 make-bundle.ps1 로 묶음을 새로 만듦(41개 · 43.5MB). 새 묶음으로 켜 네 탭 오류 없음. 시험이 만든 설정 폴더 · 빈 파일 · 시험 묶음은 지움.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-09-22 11:29:39 +09:00
85369d951a 11차 B-2: 설정 없는 첫 실행 · D 드라이브가 없는 PC 를 재고 플랫폼에서 고침
첫 실행(D:\UbisamConfig 를 백업하고 이름만 바꿔 잼)은 오류 창 없이 되고
기본값이 매뉴얼 설정 표와 같다. D 드라이브가 없으면 플랫폼이 켜자마자
UiSettingsService.cs:86 에서 실패해, "계속 쓸 수 있습니다" 창 뒤 창 없는
프로세스만 남았다(같은 이름 파일을 두어 같은 줄에서 재현).

플랫폼 377ffd3 에서 고침(사용자 결정): D 를 못 쓰면 %LOCALAPPDATA%\UbisamConfig,
켜는 중 실패는 "켜지 못했습니다" 를 보이고 끝낸다. 플랫폼 배포는 하지 않음.

MergeHub 쪽: 매뉴얼의 설정 저장 자리 문장, MergeHubSettings 주석, 세 문서 기록.
빌드 경고 0 · 오류 0 · 하네스 22벌 1,247건 그대로.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-09-22 11:26:04 +09:00
7f2987422b 11차 B-1: 배포 묶음을 다시 만들고 꼭 필요한 파일을 가림
매뉴얼이 가리키던 Release 출력(bin\Release\net48)이 09-07 것이라
폴더 비교 탭 등 6차 이후 기능이 없었다(지금 형식 142개 가운데 74개 없음).

셸 · MergeHub 에서 dll 참조를 따라가 어디서도 닿지 않는 것 7개와
맥 · 리눅스 · ARM 용 네이티브, pdb, 빈 Lang 을 뺀다 - 97MB -> 43.5MB (41개).
플랫폼 Core 가 직접 참조하는 LiveCharts · Skia 는 남긴다(사용자 결정).

- scripts\make-bundle.ps1 (새): Release 빌드 -> 뺄 것 표(까닭 포함)대로 옮기기
  -> 꼭 있어야 할 것 확인 -> 배포묶음.txt(파일 · 크기 · 까닭 · 뺀 것).
  배포묶음.txt 가 없는 폴더에 다른 파일이 있으면 비우지 않고 멈춘다.
- 매뉴얼: 실행 위치 문장 + 배포 묶음 만드는 법

빈 폴더(%TEMP%\mergehub-beta)에서 켜 네 탭 · 병합 한 길(C1Repo) 끝까지:
병합 커밋 647f1f8 부모 둘, 줄끝 · BOM 바뀐 파일 0. 제품 코드 변경 없음.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-09-22 11:07:11 +09:00
588f3d75e9 11차 C-2: 이력 줄 우클릭으로 마지막이 아닌 커밋의 메시지를 바꾼다
기획안 1차 범위 "커밋 우클릭 -> 이름 변경". 사용자 결정대로 좁은 범위에서만 한다.

HEAD 가 아닌 커밋의 메시지를 바꾸면 그 커밋부터 HEAD 까지가 새 해시로 다시
써진다. 고른 커밋의 메시지만 갈고 뒤 커밋은 트리 · 작성자 · 작성 시각 ·
부모 관계를 그대로 두어(LibGit2Sharp Refs.RewriteHistory) 해시만 바뀐다.
바꾸기 전 자리는 refs/original/날짜-시각/ 에 남긴다.

막는 자리(메뉴는 켜 두고 눌렀을 때 까닭과 푸는 길을 알림으로):
작업 중 · 커밋 안 한 변경 · 지금 브랜치 조상 아님 · 원격에 올라감 ·
다른 로컬 브랜치도 품음 · 구간에 태그 · 사이에 병합 커밋.
파일 비교 탭의 저장 안 한 편집은 우클릭해 줄을 고를 때 기존 창으로 묻는다.

- CommitReword (새): 막을 까닭 · 확인 글 · 완료 알림 · 새 메시지 다듬기
- GitService.InspectReword / RewordCommit, RewordInfo
- RewordWindow (새): 여러 줄 입력, [바꾸기] 는 기본 단추가 아님
- GitView: MergeHub 첫 우클릭 메뉴, 우클릭한 줄을 먼저 고른다
- 선택이 고친 커밋의 새 해시를 따라간다
- 화면에서 찾아 고침: 새 메시지가 끝 줄바꿈 없이 저장됐다 -> git -m 처럼
  다듬는다(뒤 커밋까지 다듬지 않게 새 메시지 하나만)

하네스 MergeSaveTest +40 (272건, 22벌 1,247건) · 빌드 경고 0 · 오류 0.
화면 확인: 되는 자리 1(트리 · 작성자 · 작성 시각 같음, 되돌리기 확인) ·
막는 자리 8 모두 막힘.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-09-22 10:34:58 +09:00
8f9ac13872 11차 C-1(마무리): [커밋 수정] 은 위험한 자리에서 먼저 묻는다
스테이징해 둔 파일이 있으면 그 파일도 이 커밋에 들어간다는 것을, 이미 원격에
올라간 커밋이면 고치는 순간 다음 Push 가 거부된다는 것을 누르기 전에 알린다.
둘 다 걸리면 한 창에 두 줄로 묻고, [아니오] 면 커밋도 메시지 칸도 그대로 둔다.

막지 않고 묻기만 하는 까닭 - 앞선 커밋 수는 마지막 fetch 시점 기준이라
남이 이미 받아 갔는지는 확실히 알 수 없고, 빠뜨린 파일을 같이 넣으려고
일부러 그러는 사람도 있다.

- CommitSelection.AmendWarning: 물을 것이 없으면 null(안 묻는다)
- GitViewModel: 스테이징 수 · 추적 브랜치 · 앞선 커밋 0개인지로 판단
- 하네스 MergeSaveTest +7 (232건, 22벌 1,207건) · 빌드 경고 0 · 오류 0
- 화면 확인(e11-c1g.ps1): 두 줄 다 물음 -> [아니오] 뒤 HEAD · 스테이징 ·
  메시지 칸 그대로 -> [예] 뒤 "옛 62dd57f -> 새 6207b26 · 파일 1개 포함",
  물을 것이 없는 자리에서는 안 묻고 바로 고침

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-09-18 17:13:52 +09:00
aa3f179390 11차 C-1(일부): [커밋 수정] 을 다시 내 보고 넷을 바로잡음
화면에서 여덟 가지를 먼저 재현하고, 방향이 정해진 1 · 3 · 4 · 7 만 고쳤다.

- [마지막 메시지] 는 이력 맨 위가 아니라 HEAD 커밋 메시지를 읽는다 (CommitSelection.MessageOfHead)
- 고쳐 써도 원래 작성자 · 작성 시각을 지킨다 (git 과 같게, 커밋한 사람만 지금)
- 병합 · rebase · cherry-pick · revert 중에는 단추를 끈다 (CanAmend) · 꺼진 까닭을 단추 설명으로
- 알림에 '커밋 수정 완료 (옛 bcd2c43 → 새 fd7810c) · 파일 1개 포함'
- GitWorkspace 가 HeadFullSha 를 들고 있는다
- 하네스 MergeSaveTest +15 (210 → 225), 22벌 1,200건 통과, 빌드 경고 0 오류 0

남은 결정: 2(스테이징 파일이 함께 들어가는 것) · 6(이미 올린 커밋). 8(여러 줄 메시지)은 범위 밖으로 적어 둠.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-09-18 16:58:59 +09:00
77ed65de6b 11차 A-3: 고른 폴더 아래 새 폴더로 뽑고, 막히면 먼저 알린다
사용자 결정(2026-09-18): 새 폴더를 만든다 · 쓰다 막히면 먼저 보고 시작한다.

- Services/ExportPlan.cs (새 파일): 폴더 이름(변경분_범위_날짜) · 같은 이름이면 _2 _3 · 쓸 수 있는지 먼저 보기 · 보일 글
- GitService.ExportChangedFiles: 쓰기 전에 막힌 파일을 먼저 보고, 하나라도 있으면 폴더도 만들지 않고 멈춘다
- GitViewModel: 고른 폴더 아래 새 폴더에 뽑고 안내는 그 옆에. 알림에 폴더 이름
- 하네스 ReportTest +12 (45 → 57), 22벌 1,185건 통과, 빌드 경고 0 오류 0
- 화면 확인: 같은 폴더에 두 번 뽑아 _2 가 생기고 기존 파일(메모 · 옛 폴더)은 그대로

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-09-18 15:39:16 +09:00
500afdd992 11차 A-2: 뽑은 폴더 옆에 변경분 안내 파일
사용자 결정(2026-09-18): 안내는 폴더 밖(옆)에 · 지울 파일은 목록으로만.

- Services/ExportReport.cs (새 파일): 머리글(만든 때 · 사람 · 저장소 · 뽑은 곳 · 범위 두 줄) · 뽑은 파일 목록(추가 · 수정 · 이름 바뀜은 옛 이름 병기) · 장비에서 지워야 할 파일 목록. PathFor 가 폴더 옆 이름을 정함
- GitService.ExportChangedFiles 가 무엇을 어떻게 했는지 목록까지 돌려줌 (IGitService 같이)
- GitViewModel: 뽑은 뒤 안내를 폴더 옆에 쓰고 경로를 로그에. 안내를 못 써도 추출은 성공으로 둔다
- 하네스 ReportTest +14 (31 → 45), 22벌 1,173건 통과, 빌드 경고 0 오류 0
- 화면 확인: 범위 4eb9ece→cbcad8a 안내가 git diff -M 과 같음(뽑은 3 · 지울 2), 병합 커밋은 '(고른 커밋의 부모)' 표시

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-09-18 15:30:27 +09:00
df9202c6d5 11차 F-12: C# 코드 스타일 맞춤 기본값을 AURORA 로
사용자 결정(2026-09-18): 제품 기본값 AURORA · C# 파일만 · 저장 동작은 지금 그대로.

- MergeHubSettings.CSharpBraceStyle 기본값 None → Aurora (한 줄, 까닭 주석)
- C/C++ · XAML 은 고칠 것 없음 - CSharpStyle.Applies 가 확장자 .cs 만 본다
- 하네스 StyleTest +12 (78 → 90): 기본값 · 확장자별 적용 여부. 먼저 넣어 기본값 검사만 실패하는 것을 보고 시작
- 설정 파일 없는 첫 실행: 상태바 'C# AURORA' · C# 짝 차이 없음 · C++ 짝 남은 차이 4줄 · 새로 만든 설정에 1
- 웹 문서 매뉴얼 · 설정 표 · 시연 대본의 '기본은 끔' 을 고침
- 22벌 1,159건 통과 · 빌드 경고 0 오류 0

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-09-18 14:02:35 +09:00
f597dd48fd 11차 A-1: 변경분 추출을 아홉 경우로 뽑아 보고 적음 (고치지 않음)
시험 저장소에 추출용 커밋을 쌓고(새 파일 · 수정 · 삭제 · 이름 바꿈 · 이진 · 한글 깊은 경로 · 되돌림 · 옆가지 병합) 화면에서 사람 순서로 뽑아 git 과 바이트까지 대조.

맞은 것: 파일 고르기(커밋 하나 · 범위 · 병합 첫 부모 · 거꾸로 범위 모두 git 과 같은 목록) · 바이트 보존 · 범위 표시 · 로그
확정된 문제 넷:
- 지운 파일 · 이름 바뀐 옛 경로가 결과에 안 남음 (A-2)
- 무엇과 무엇 사이를 뽑았는지 폴더에 안 남음 (A-2)
- 비어 있지 않은 폴더에 묻지 않고 덮어써 옛 추출이 섞임 (A-3)
- 쓰다 막히면 반쯤 뽑힌 채 멈추고 어디까지 됐는지 모름 (A-3 에 덧)

제품 코드 변경 없음. 시험 도구 세 곳을 고침(별칭 겹침 · 폴더 창 자리 · 창 안 칸 찾기).

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-09-18 13:48:53 +09:00