설치 구성 › 설치파일 탭을 규칙 카드 중심에서 설치될 모습 그대로 보이는 탐색기형 트리로 바꾸고, 폴더·파일을 직접 추가·삭제한다.
반영 내용
트리: 기본 설치 폴더(INSTALLDIR)와 추가한 Windows 기본 폴더를 루트로, 폴더·파일을 함께 표시. 루트 행에 전체 설치 경로, 하위 행은 마우스를 올리면 전체 경로. 안내선, 루트 포함 모든 폴더 접기/펼치기. 테두리 없는 레이아웃, 큰 아이콘·버튼
행별 버튼(평소 50%, 마우스 오버 시 100%): 폴더 행은 폴더 추가·파일 추가·삭제, 파일 행은 삭제만
설치 위치 추가(우상단): 기본 설치 폴더·Program Files(x86 포함)·ProgramData·사용자 AppData/LocalAppData(x86은 64비트 폴더 제외), 이미 추가된 위치는 비활성화, [속성]하위\경로 직접 입력. 공용 파일·글꼴·시스템 폴더는 제외
모델: FileRule.sourceFolder(패턴 시작 소스 폴더), FileRule.targetRoot(설치 폴더 대신 Windows 폴더 속성, EXE만). 빈 값은 파일에 쓰지 않아 기존 파일·계획 해시 유지. UnsupportedTargetRoot, MissingSourceFolder, 패치에서 바꾸면 PatchMovesFiles
파일 추가: 파일 선택 창(choose_files)에서 고른 파일을 그 폴더 바로 아래에 정확한 이름 규칙으로 추가. 소스가 연결되지 않았으면 고른 파일의 폴더를 첫 소스로 연결(드라이브 루트는 RootSource), 연결된 소스 밖은 OutsideSource
삭제: 이름 규칙에서 빼거나 패턴 규칙에 제외 추가, 폴더는 확인 후 하위 규칙 삭제·상위 패턴에 폴더/** 제외. 소스 파일은 지우지 않음. 기본 설치 폴더도 삭제 가능(설치 위치 추가로 복원)
미리보기: preview_files가 저장 전 규칙으로 해시 없이 파일 목록을 읽고, 읽지 못한 규칙만 경고로 표시
파일 규칙(고급) 패턴 편집 화면은 제거(규칙 직접 수정은 .isver)
검증
Rust: file_preview.rs 7개(기준 폴더·대괄호 이름, 깨진 규칙 보고, 입력 검사 일치, 소스 매핑·소스 밖 거부, 대상 루트 비충돌·허용 목록, 공통 폴더·드라이브 루트 거부) 포함 전체 통과
프런트엔드: file-tree 테스트(트리·행 버튼·설치 위치 목록·직접 입력·삭제·접기·경로 표시·미리보기 로더) 포함 82개 통과, 데스크톱 빌드 통과
GUI 클릭 시험과 대용량 소스 스캔 시간 측정은 수행하지 않음
범위
MSI Directory/Component 생성과 실제 설치는 EXE 빌드와 함께 구현한다. 변경 기록: docs/changes/2026-11-09-exe-file-tree.md, 2026-11-10-exe-target-roots.md, 2026-11-11-exe-file-tree-remove.md.
## 목적
설치 구성 › 설치파일 탭을 규칙 카드 중심에서 설치될 모습 그대로 보이는 탐색기형 트리로 바꾸고, 폴더·파일을 직접 추가·삭제한다.
## 반영 내용
- 트리: 기본 설치 폴더(INSTALLDIR)와 추가한 Windows 기본 폴더를 루트로, 폴더·파일을 함께 표시. 루트 행에 전체 설치 경로, 하위 행은 마우스를 올리면 전체 경로. 안내선, 루트 포함 모든 폴더 접기/펼치기. 테두리 없는 레이아웃, 큰 아이콘·버튼
- 행별 버튼(평소 50%, 마우스 오버 시 100%): 폴더 행은 폴더 추가·파일 추가·삭제, 파일 행은 삭제만
- 설치 위치 추가(우상단): 기본 설치 폴더·Program Files(x86 포함)·ProgramData·사용자 AppData/LocalAppData(x86은 64비트 폴더 제외), 이미 추가된 위치는 비활성화, `[속성]하위\경로` 직접 입력. 공용 파일·글꼴·시스템 폴더는 제외
- 모델: `FileRule.sourceFolder`(패턴 시작 소스 폴더), `FileRule.targetRoot`(설치 폴더 대신 Windows 폴더 속성, EXE만). 빈 값은 파일에 쓰지 않아 기존 파일·계획 해시 유지. `UnsupportedTargetRoot`, `MissingSourceFolder`, 패치에서 바꾸면 `PatchMovesFiles`
- 파일 추가: 파일 선택 창(`choose_files`)에서 고른 파일을 그 폴더 바로 아래에 정확한 이름 규칙으로 추가. 소스가 연결되지 않았으면 고른 파일의 폴더를 첫 소스로 연결(드라이브 루트는 `RootSource`), 연결된 소스 밖은 `OutsideSource`
- 삭제: 이름 규칙에서 빼거나 패턴 규칙에 제외 추가, 폴더는 확인 후 하위 규칙 삭제·상위 패턴에 `폴더/**` 제외. 소스 파일은 지우지 않음. 기본 설치 폴더도 삭제 가능(설치 위치 추가로 복원)
- 미리보기: `preview_files`가 저장 전 규칙으로 해시 없이 파일 목록을 읽고, 읽지 못한 규칙만 경고로 표시
- 파일 규칙(고급) 패턴 편집 화면은 제거(규칙 직접 수정은 `.isver`)
## 검증
- Rust: `file_preview.rs` 7개(기준 폴더·대괄호 이름, 깨진 규칙 보고, 입력 검사 일치, 소스 매핑·소스 밖 거부, 대상 루트 비충돌·허용 목록, 공통 폴더·드라이브 루트 거부) 포함 전체 통과
- 프런트엔드: file-tree 테스트(트리·행 버튼·설치 위치 목록·직접 입력·삭제·접기·경로 표시·미리보기 로더) 포함 82개 통과, 데스크톱 빌드 통과
- GUI 클릭 시험과 대용량 소스 스캔 시간 측정은 수행하지 않음
## 범위
MSI Directory/Component 생성과 실제 설치는 EXE 빌드와 함께 구현한다. 변경 기록: `docs/changes/2026-11-09-exe-file-tree.md`, `2026-11-10-exe-target-roots.md`, `2026-11-11-exe-file-tree-remove.md`.
Blocking a user prevents them from interacting with repositories, such as opening or commenting on pull requests or issues. Learn more about blocking a user.
목적
설치 구성 › 설치파일 탭을 규칙 카드 중심에서 설치될 모습 그대로 보이는 탐색기형 트리로 바꾸고, 폴더·파일을 직접 추가·삭제한다.
반영 내용
[속성]하위\경로직접 입력. 공용 파일·글꼴·시스템 폴더는 제외FileRule.sourceFolder(패턴 시작 소스 폴더),FileRule.targetRoot(설치 폴더 대신 Windows 폴더 속성, EXE만). 빈 값은 파일에 쓰지 않아 기존 파일·계획 해시 유지.UnsupportedTargetRoot,MissingSourceFolder, 패치에서 바꾸면PatchMovesFileschoose_files)에서 고른 파일을 그 폴더 바로 아래에 정확한 이름 규칙으로 추가. 소스가 연결되지 않았으면 고른 파일의 폴더를 첫 소스로 연결(드라이브 루트는RootSource), 연결된 소스 밖은OutsideSource폴더/**제외. 소스 파일은 지우지 않음. 기본 설치 폴더도 삭제 가능(설치 위치 추가로 복원)preview_files가 저장 전 규칙으로 해시 없이 파일 목록을 읽고, 읽지 못한 규칙만 경고로 표시.isver)검증
file_preview.rs7개(기준 폴더·대괄호 이름, 깨진 규칙 보고, 입력 검사 일치, 소스 매핑·소스 밖 거부, 대상 루트 비충돌·허용 목록, 공통 폴더·드라이브 루트 거부) 포함 전체 통과범위
MSI Directory/Component 생성과 실제 설치는 EXE 빌드와 함께 구현한다. 변경 기록:
docs/changes/2026-11-09-exe-file-tree.md,2026-11-10-exe-target-roots.md,2026-11-11-exe-file-tree-remove.md.반영 결과
366c8fe173