- 관리자 지시 (F11) · 판단: 창 사이 끌어 놓기로 복사 · 이동 (태블릿 · PC). 미리 보기 · 확인 · 되돌리기.
- 끌기: PC 마우스는 줄을 8px 넘게 움직였을 때만 (한 번 누르기 = 고르기 · 두 번 = 열기는 그대로).
터치는 선택 모드에서 표시한 줄의 ≡ 손잡이 (길게 누르기 메뉴는 그대로). 누른 줄이 표시한 것이면 표시한 것 모두 (바깥 것만).
- 놓기: 다른 창의 폴더 줄 = 그 폴더 안, 창의 빈 곳 = 그 창의 지금 폴더. 놓을 수 있으면 강조, 못 놓는 곳 (같은 창 · 자기 안 ·
원본 폴더 자신) 은 빨간 테두리이고 놓아도 아무 일 없음. WebDAV 창도 지금의 복사 · 이동으로.
- 설정 "끌어 놓기 기본": 묻기 (처음 값) / 복사 / 이동. 묻기 창은 [복사] 가 처음 고름 (Enter) · [이동] · [취소].
어느 쪽이든 지금의 복사 · 이동 확인 창 (같은 이름 등) · 진행 패널을 그대로 탄다.
- 이동만 끝난 알림에 [되돌리기] (10초): 실제로 옮긴 것만 원래 자리로 (원래 폴더마다 지금의 이동 - 같은 이름이면 지금의 같은 이름 창).
대상에 새로 생긴 항목은 통째로, 이미 있던 폴더에 합친 것은 앱이 옮긴 파일만 (TransferJob.movedFiles) -
그 폴더 전체를 옮기지 않는다. robocopy 로 합친 폴더는 무엇을 옮겼는지 몰라 되돌리지 않고 알린다. 복사 되돌리기는 없음.
- 내 판단: 끝난 알림 (n개 옮김) 은 [되돌리기] 알림으로 바로 바꾼다 (진행 막대가 내려가기를 기다리지 않게).
- 시험: explorer_test 82 (놓는 곳 규칙, 4px 는 누르기, 같은 창 · 묻기 [취소] 는 아무 일 없음,
이동 → 되돌리기 - 합친 폴더의 원래 파일은 그대로 · 옮긴 파일만 돌아옴).
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
- 관리자 지시 (F10): 미리 보기 창 / PC 에서 Space 로 빠른 보기 (썸네일 · 길이 · 코덱).
관리자 판단: 띄우는 창 (옆에 붙는 칸은 넓은 화면용으로 나중에 따로).
- 여는 곳: Windows 탐색기 · X-plore 모양은 Space (빠른 필터가 닫혀 있을 때만 - 칸에 치는 중이면 빈칸), TC 모양은 F3 (Space 는 표시 그대로),
길게 누르기 [미리 보기] (파일).
- 동영상 · 음악: 큰 썸네일 (가로 640, jj_thumbs 에 따로 기억) · 길이 · 영상 코덱 · 해상도 · 소리 (코덱 · 언어) · 자막 트랙.
ffprobe 는 기다리는 동안 "정보를 읽는 중…", 20초 넘으면 "읽지 못했습니다" (창은 멈추지 않음).
- 그림: 그림 그대로. 글 파일 (txt · srt · ass · smi · log · json …): 앞 64KB, UTF-8 이 아니면 "미리 볼 수 없음".
- WebDAV: 썸네일 · ffprobe 없이 이름 · 크기 · 날짜만 (비밀번호를 명령 줄에 넣지 않게 - 관리자 판단).
- ← → (↑ ↓) 로 같은 폴더의 앞 · 다음 (지금 목록 차례 - 필터 · 정렬 반영), Space · Esc 로 닫기, Enter · [열기 · 재생].
- 시험: quick_look_test (글 앞부분 · CP949 · 64KB 경계, ← → · 열기 · Space 닫기), explorer_test 81 (Space · 필터 중 빈칸 · TC F3).
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
- 관리자 지시 (F12): 스타일에 맞는 단축키.
- Total Commander 모양: F5 복사 · F6 이동 · F7 새 폴더 · F8 지우기 · Insert (표시하고 다음 줄로) · Space (표시) · Ctrl+R 새로 고침.
Space 는 이 모양에서 빠른 필터를 열지 않는다 (필터가 열려 있으면 그대로 글자).
- Windows 탐색기 · X-plore 모양: Ctrl+C (담기) · Ctrl+X (잘라내기) · Ctrl+V (지금 폴더에 붙여넣기) · Ctrl+A (지금 폴더 모두 표시) · F5 새로 고침 (예전과 같음).
- 모든 모양 공통 (예전과 같음): Delete · Shift+Delete · F2 · Esc · Ctrl+F · Backspace · Alt+← → · Tab.
- Rsync 화면은 스타일 단축키를 쓰지 않는다 (F5 새로 고침 그대로).
- 내 판단: TC 모양에서는 F5 가 복사라 새로 고침을 Ctrl+R 로 (Total Commander 와 같게).
- 환경 설정 > 파일 탐색기 > 스타일 설명에 단축키를 적었다.
- 시험: explorer_test 83 (TC: Insert · Space 표시 · Space 가 필터를 열지 않음 · F5 복사 창 · F7 새 폴더 / Windows: Ctrl+A · Ctrl+C).
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
① 링크 · junction 을 따라가 세던 것 (같은 것을 여러 번 세어 크게 나오고, 위 폴더를 가리키는 고리면 끝나지 않을 수 있었다 -
실제 예: wt_*\third_party (junction) · .plugin_symlinks):
- 크기를 셀 때 로컬 폴더는 list(followLinks: false) 로 직접 읽고, 심볼릭 링크 · junction 은 0 으로 세고 수만 센다.
"1.2GB · 링크 3개 제외" 로 보인다 (214 의 링크 처리와 같은 판단).
- 안전장치: 이미 센 폴더 (실제 경로) 는 다시 세지 않는다.
② 다른 폴더로 가도 기다리던 계산이 끝까지 돌던 것:
- 화면을 위해 걸어 둔 자동 계산은 그 폴더가 어느 창에도 보이지 않으면 대기 줄에서 빼고, 세는 중이면 멈춘다 (결과는 남기지 않음).
- 길게 누르기 [폴더 크기 계산] 으로 직접 시킨 것만 끝까지 - 아래 알림 [취소] · 같은 메뉴 "폴더 크기 계산 멈추기".
- WebDAV 는 자동으로 하지 않는다. 직접 시키면 "서버에서 안의 것을 모두 읽어 오래 걸릴 수 있습니다" 를 알린다 (관리자 판단).
- 시험: folder_size_test (Windows 에 실제 junction · 심볼릭 링크 · 위 폴더 고리 junction, 화면이 바뀌면 자동 계산 멈춤 · 사용자가 시킨 것은 끝까지 · 취소).
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
- 관리자 지시 (F13): 열 머리를 누르면 그 기준으로 정렬, 폴더마다 정렬을 기억 (선택).
- Windows 탐색기 · Total Commander 모양의 열 머리 (이름 · 날짜 · 유형/확장자 · 크기) 를 누르면 그 기준 (오름차순),
같은 열을 다시 누르면 거꾸로. 지금 정렬 열은 강조색 + ▲ ▼. (X-plore 모양은 열이 없어 예전처럼 [정렬 기준])
- 설정 "정렬을 폴더마다 기억" (처음: 끔 - 예전처럼 모든 폴더가 같은 정렬). 켜면 열 머리 · [정렬 기준] 이 지금 창의 폴더에만 쓰고
(정렬 창에 "이 폴더에만: …"), 기억하지 않은 폴더는 전체 정렬. 300개까지 (오래된 것부터 지움). 틀린 값은 비움.
- 80 의 자동 폴더 크기 · 크기가 나온 뒤 다시 줄 세우기도 그 폴더의 정렬을 따른다.
- 시험: explorer_test 84 (열 머리 · 거꾸로 · ▼, 폴더마다 · 저장 · 틀린 값).
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
a 이름 검사 nameProblem (일괄 미리 보기 · 한 이름 바꾸기 · 새 폴더 공통):
- 어디서나: 빈 이름 · . · .. · \ / : * ? " < > | · 제어 문자 (예전과 같음).
- Windows 의 로컬 경로 (WebDAV 는 빼고): CON · PRN · AUX · NUL · COM1~9 · LPT1~9 (확장자가 붙어도), 끝이 점 · 빈칸, 255자 넘음.
예전에는 미리 보기가 괜찮다고 보인 뒤 [바꾸기] 에서 실패해 되돌려지거나 '.' 이 말없이 빠질 수 있었다.
- Android · WebDAV 는 지금처럼 (관리자 판단).
b 임시 이름 (~jjren_ · ~jjback_) 이 실시간 동기화 · rsync 에 섞이지 않게:
- 일괄 바꾸기는 새 이름 자리가 비는 차례대로 바로 바꾸고, 고른 것끼리 고리로 엮였을 때 (a↔b) 만 하나를 임시 이름으로 비켜 둔다.
되돌리기 (실패 · [되돌리기]) 도 같은 방식.
- lsync: 감시 (Windows 폴더 감시) · 맞출 것 세기 (로컬 · WebDAV) · 지울 것 세기 · 앱이 맞추기 (로컬 · WebDAV) 에서 뺀다.
rsync 인수 --exclude=~jjren_* --exclude=~jjback_*, robocopy /XF. 맞추기 미리 보기에서도 뺀다.
- 탐색기 · Rsync 화면의 rsync 복사 · 이동 (rsyncArgs) 에도 같은 제외 (화면의 명령 줄에도 보임). robocopy 복사 · 이동은 그대로.
- 시험: 이름 검사 (예약 · 끝 점 · 빈칸 · 256자, Windows 규칙일 때만), 이어진 이름은 임시 이름 없이 · 고리는 하나만,
실패 되돌림, lsync 가 임시 이름을 세지 않음 · 인수에 제외, rsync 인수 기대값.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
80 (관리자 지시 F9): 폴더 크기를 목록에 표시하고 크기순으로 정렬 (필요할 때 계산하고 기억).
- FolderSizes: 안의 파일 크기 합, 한 번에 하나씩 (디스크 · NAS 를 몰아 읽지 않게), 이번 실행 동안 기억.
읽지 못한 폴더가 있으면 "1.2GB+". 다시 읽는 폴더 (새로 고침 · 복사 · 이동 · 지우기) 는 그 폴더 · 안쪽 · 위 폴더 크기를 잊는다.
- 설정 "폴더 크기": 크기순 정렬일 때만 (처음 값) / 늘 계산 / 계산 안 함. 길게 누르기 [폴더 크기 계산] 은 늘 된다.
- 내 판단: 자동 계산은 지금 보고 있는 폴더 바로 안의 폴더만 - 트리에 보이는 위 폴더들 (C:\ · 사용자 폴더 …) 까지 하면
드라이브 전체를 읽느라 정작 보고 있는 폴더가 뒤로 밀렸다 (시험에서 발견).
- 보이는 곳: Windows 탐색기 모양은 크기 열, TC 모양은 <DIR> 자리, X-plore · 좁은 화면은 폴더 이름 아래. 계산 중 "…".
- 크기순 정렬은 아는 폴더 크기로 (모르는 폴더는 가장 작게, 폴더는 늘 위 - 예전 그대로). 크기가 나오면 다시 줄 세운다.
- 측정은 바깥 영역 (Zone.root) 에서 - 화면을 그리다 맡긴 계산이 그 영역에 묶이지 않게 (위젯 시험에서 읽기가 끝나지 않았다).
79-a (관리자 판단 10/17): [그 자리로] 로 나가도 [찾기 결과로 돌아가기] 줄을 남긴다.
- 시험: folder_size_test (합 · 기억 · 잊기 · "+" · 정렬), explorer_test 80 (크기순 자동 · 새로 고침 뒤 다시 · "안 함" + 길게 누르기), 79-a 그 자리로.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
c (데이터) 찾기 결과에서 폴더와 그 안의 파일을 함께 고르면 안의 것은 빼고 바깥 것만 (outermostPaths) -
안쪽 파일을 두 번 처리하거나 이동 뒤 "없음" 오류가 나고 확인 창 개수가 부풀 수 있었다.
탐색기의 복사 · 이동 · 지우기 시작에서도 같은 정리를 한다 (탐색기 표시는 이미 정리돼 있어 동작은 같음).
b 아래 줄 합계: "파일 n개 · 크기 / 폴더 m개 (크기 미포함)". 지우기 확인 창에 "그중 폴더 m개 - 안의 파일 · 폴더도 모두 함께".
a 복사 · 이동 · 지우기 뒤 결과 화면은 닫힌 채로, 탐색기 위에 [찾기 결과로 돌아가기] 줄 (✕ 로 닫기).
다시 찾지 않고 결과를 열며, 지운 것은 빼고 옮긴 것은 새 자리로 (고른 폴더와 함께 옮겨진 안쪽 것도).
다음 찾기 · ✕ · 결과 화면을 그냥 닫으면 없어진다. 처음 찾기가 끝나기 전 결과였으면 그렇다고 적는다.
- 내 판단: [그 자리로] (reveal) 로 나가면 돌아가기 줄을 남기지 않는다 (탐색이라서).
d 찾는 중 전체 고르기 단추 글: "지금까지 찾은 n개 모두", 다 찾으면 "모두".
- 시험: explorer_test 79-c 복사 · 이동 · 지우기 (한 번만 · 오류 없음 · 확인 창 개수 · 돌아가기), explorer_search_test (outermostPaths · 단추 글 · 합계).
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
- 관리자 지시 (F7): 번호 [C] · 찾아 바꾸기 · 대소문자, 미리 보기, 되돌리기 (예: "Show S01E01…").
데이터를 바꾸는 기능이라 미리 보기 · 확인 · 되돌리기를 둔다.
- 여럿을 고르고 [이름 변경] (버튼 · F2 · 길게 누르기 아이콘 줄 "n개 이름 일괄 바꾸기") → 일괄 이름 바꾸기 창.
하나면 예전 이름 변경 그대로.
- 77 에서는 여럿일 때 [이름 변경] 이 꺼져 있었다 → 이제 일괄 창을 연다 (77 시험의 기대값을 바꿈).
- 규칙 (차례대로): 이름 틀 (확장자 뺀 이름, [N] 원래 이름 · [C] 번호 시작 · 간격 · 자릿수) → 찾아 바꾸기 (대소문자 무시 기본)
→ 대소문자 (그대로 · 모두 작게 · 모두 크게 · 단어 첫 글자만). 파일 확장자는 그대로 (대소문자 바꾸기만 따름).
- 미리 보기: 원래 → 새 이름, 문제 (쓸 수 없는 이름 · 고른 것끼리 같은 이름 · 고르지 않은 것과 같은 이름, 대소문자 무시)
는 빨갛게 보이고 하나라도 있으면 [바꾸기] 를 막는다. 고른 것끼리 맞바꾸기 (a↔b) 는 된다.
- 번호는 목록에 보이는 차례대로.
- 바꾸기는 모두 임시 이름을 거쳐 두 단계로 (맞바꾸기 때문). 도중에 실패하면 이미 바꾼 것을 원래 이름으로 되돌리고
창에 이유 · 되돌리지 못한 것을 보인다.
- 끝나면 아래 알림 "n개의 이름을 바꿨습니다" + [되돌리기] (10초).
- 내 판단: 규칙은 창을 열 때마다 처음 값 ([N] · 1 · 1 · 2자리) - 설정에 저장하지 않음.
- 시험: batch_rename_test (규칙 · 미리 보기 · 맞바꾸기 · 실패 되돌림 · 되돌리기 · 창), explorer_test 78 (고르기 → 바꾸기 → 되돌리기).
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
- 관리자 지시 (F8): 찾기 결과를 목록으로 보여 그대로 복사 · 지우기 · 재생, 크기 · 날짜 · 확장자 조건
("1GB 넘는 30일 지난 영상"), 2000개에서 멈추면 "더 보기".
- 찾기 창: 이름 (비워도 됨, * ?) · 크기 이상 (MB/GB) · 바뀐 날 (아무 때 / N일 지남 / N일 안) · 종류
(모두 · 동영상 · 음악 · 자막 · 그림 · 확장자 직접). 크기 · 날짜 · 종류를 넣으면 파일만 찾는다.
마지막 조건은 이번 실행 동안 다음 찾기 창의 처음 값.
- 결과 화면 (예전 작은 창 _SearchDialog 를 바꿈): 경로 · 크기 · 바뀐 날, 누르면 파일은 열기 · 재생 (결과 화면 그대로),
폴더는 그 자리로, 줄마다 [그 자리로]. 체크 · 길게 누르기로 고르면 아래 줄에 개수 · 합계 크기와
[복사 → 다른 창] [이동 → 다른 창] [지우기] - 고른 것만, 탐색기와 같은 확인 창 · 진행 패널 · 휴지통 (154 · 155 · 65).
- 2000개마다 멈추고 [2000개 더 보기]. 딱 2000개면 멈췄다고 하지 않는다 (다음 것이 올 때만).
- searchFiles 에 accept (조건) - 이름 없이 조건만으로도 찾는다. 이름도 조건도 없으면 예전처럼 찾지 않음.
- 시험: explorer_search_test (조건 · accept · 더 보기 · 열기 · 고르기 · 폴더), explorer_test 79 (종류만으로 찾아 다른 창으로 복사).
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
① 동영상이 있는데 고른 것이 없으면 빈 목록 안내 ("동영상 추가로 파일을 선택하세요") 대신
"고른 동영상이 없습니다 · 목록에서 동영상을 누르면 여기에 자세히 보입니다" (넓은 · 좁은 화면 모두).
첫 줄 자동 고르기는 하지 않음 (관리자 판단).
② 폰 세로 (폭 412) 위 버튼 줄이 화면보다 길면 끝에 흐림 · [›] (밀었으면 [‹]), 누르면 한 화면쯤 민다
(새 위젯 ScrollMore). 예전에는 세 번째 버튼이 잘린 채 더 있다는 표시가 없었다 (버그).
③ 폰 세로 목록 높이: 화면 32% 고정 → 관리자 판단대로 목록은 내용만큼, 자세히 칸 최소 높이를 남기고
남는 공간은 목록에. 설정 "폰 세로 목록 크기" 자동 (처음 값) / 작게 (25%) / 크게 (55%), 모르는 값은 자동.
- 내 판단: 자동의 자세히 칸 최소 = 고른 동영상이 있으면 62% (261 · 266 의 자막 버튼 보호, 예전 68% 와 비슷),
없으면 안내 자리 120.
- 내 판단: 작업 기록 칸이 비었으면 "작업 기록이 아직 없습니다 …" 를 적는다 (✕ 만 있는 빈 칸으로 보였다, 높이는 그대로).
- 시험 mkv_compact_list_test (412 · 1280, 작게 < 크게 < 자동, [›] 누르기, 빈 기록 안내), 번역 en · ja · zh-Hans.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
- 관리자 지시 (42 가 찾던 것): DNS 강제 프록시를 거친 yt-dlp · aria2 는 "Tunnel connection failed" 만 남겨
줄에는 "연결할 수 없습니다" 뿐이라 이유 · 할 일을 몰랐다.
- 실패한 그때 DNS 강제 + "닿지 않음" 상태이고 오류가 연결 · 프록시 실패이면 줄에 "DNS 서버 (…) 에 닿지 않아 받지 못했습니다".
404 · 로그인 같은 다른 실패는 DNS 탓으로 보지 않는다.
- 아직 DNS 강제면 [시스템 DNS 로 바꾸기] (설정에 저장, 버튼은 사라짐). 다시 받기는 [다시 시도] 로 사용자가 (내 판단: 몰래 다시 받지 않음).
- 번역 en · ja · zh-Hans, 시험 download_error_test (판단 · 줄 · 버튼).
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
- 데이터 (버그, 기기 확인): 폴더 [덮어쓰기] (합치기) 가 안쪽의 더 새 파일을 예전 것으로 덮었다 - 설정 '받는 쪽이 더 새것이면 건너뛰기' 를 안쪽에도
- 이동이면 건너뛴 원본은 남기고 옮긴 것만 지움 ('n개는 원본에 남음'), 같은 이름 창의 폴더 줄에 '안쪽에 받는 쪽이 더 새 파일 n개'
- 맨 위 파일 하나를 사용자가 [덮어쓰기] 로 고른 것은 그대로 따름
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
- 데이터 (버그, 기기 확인 · 10.10 에도 있음): FFmpeg -y 가 처음부터 결과 MKV 에 써서, 다시 만들다 취소 · 실패하면 예전 완성본이 사라졌다
→ 이름.mkv.jjpart 에 만들고 다 된 뒤에만 storage.replaceFile, 취소 · 실패면 임시 파일만 지움
- 결과가 이미 있으면 시작 전에 묻기 (덮어쓰기 · 건너뛰기 · 다른 이름) + 환경 설정 '만들 MKV 가 이미 있으면' (처음 값 묻기)
- 240 집계: 이번 묶음의 이전 상태를 비우고, 시작 못 한 것은 취소로 셈
- 끝난 (코드 0) 뒤에 온 취소는 무시 - 성공으로 (Windows · Android)
- 폰 세로 작업 중 [취소] · 진행을 늘 보이는 자리에, 진행 글 'MKV 3개 중 2번째 · 36%'
- 시험: 가짜 FFmpeg 가 출력을 만들게 (queue_test), 모든 파일이 '있는' 가짜 저장소에서는 덮어쓰기 (ui_test)
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
a4 의 932 기기 확인 (노트 10+): 작업 기록에 "웹 페이지를 열지 못함 (…): net::ERR_TUNNEL_CONNECTION_FAILED" 는 남는데
덮개가 보이지 않았다 (버그 수정).
- 원인: Android 는 본문 오류 (onReceivedError) 뒤에 엔진의 오류 페이지를 또 읽어 진행률이 0 → 100 으로 한 번 더 돈다.
"새로 읽기 시작 (진행률이 1 아래로)" 에서 덮개를 걷어, 뜨자마자 걷혔다. Windows (Edge) 는 이 단계가 없어 통과했다.
- 덮개는 사용자가 옮길 때만 걷는다: 주소 · 뒤로 · 앞으로 · 새로고침 · [다시 시도] (WebNav 를 감싸 알림 - _NavWatch).
덮개가 웹 뷰를 덮고 있어 그 밖의 길로는 옮겨지지 않는다.
- 덮개를 띄우면 작업 기록에 "DNS 안내 덮개를 띄움 (…)" - 기기에서 "띄웠는데 안 보임" 과 "띄우지 않음" 을 가리게.
- DNS 실패 글에 예외 이름 ("TimeoutException:") 을 빼고 이유만 (a4 932).
- 시험: Android 순서 (본문 오류 → 오류 페이지 진행률 0 → 100) 뒤에도 덮개가 남음. 실제 Edge 통합 시험 다시 통과.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
a4 의 931 기기 확인 (노트 10+): DNS 192.0.2.1 에서 브라우저에 덮개가 보이지 않고 ERR_TUNNEL_CONNECTION_FAILED 만 (버그 수정).
- 원인: 덮개가 없을 때는 웹 뷰를, 있을 때는 Stack 안의 웹 뷰를 돌려 트리 모양이 바뀌었다 → 웹 뷰가 새로 만들어져
페이지를 다시 읽고, 다시 읽기 시작에서 덮개가 걷혔다. Windows 실제 Edge 통합 시험에서 재현
("WindowsInAppWebViewController was used after being disposed"). 늘 같은 Stack 모양으로.
- 엔진이 알려 주는 본문 오류 (onReceivedError, Edge · Android) 도 받아 판단한다: 그 이름의 실패 기록이 있거나,
DNS 서버에 지금 닿지 않는 중에 프록시 터널 실패 (TUNNEL · PROXY) 면 덮개. 오류 뒤에 오는 읽기 끝이 덮개를 지우지 않는다.
DNS 강제 중의 본문 오류는 작업 기록에 남긴다 (기기에서 원인을 볼 수 있게).
- 시험: 덮개를 띄워도 웹 뷰를 다시 만들지 않음 · 본문 오류 경로 · DNS 와 상관없는 오류는 엔진 화면 그대로.
실제 Edge: integration_test/dns_block_real_test.dart (덮개 → [다시 시도] → 다시 덮개) 통과.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
관리자 지시 (10/12, 이번 판에 넣을 마지막 끝). 풀었던 곳:
- 번역 json: 세 판으로 열쇠마다 합침 (서로 다르게 바뀐 열쇠 0).
- browser_page import: key_hint (194) 와 cef_setup · settings_page · tor_page (tor_dns) 를 모두.
양쪽을 맞춘 것 (작업 세션 판단):
- 194 (단축키 안내는 PC 에서만): Tor 화면의 이전 · 다음 페이지 · 새로고침도 keyHint.
- 193 (그 설정이 없던 예전 판에서 올라오면 바뀐 동작을 한 번 알림): DNS 강제 (처음 값 직접 지정 8.8.8.8 · 8.8.4.4) 가
없던 판 (10.10 까지) 에서 올라오면 이름을 묻는 서버가 바뀐다 → 'dnsForced' 알림 (되돌리는 곳과 함께). 이미 고른 사람은 알리지 않음.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
- 사용자 편의 (기기 확인, P11 10.03 → 10.10): 한 번 눌렀는데 바로 열려 놀람 - 예전 판에는 키가 없어 알림 조건에 걸리지 않았다. 처음 설치는 알리지 않음
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
관리자 지시 (10/12). 겹친 곳 없이 자동으로 합쳐짐 (번역 json · app_actions · home_page · settings_page).
번역 json 은 정렬 · 모양 그대로 확인, 빠진 번역 0, analyze 0, 전체 시험 646 통과.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
관리자 지시 (10/12, a4 자유 점검): 엔진 기본 오류 "net::ERR_TUNNEL_CONNECTION_FAILED" 만 보여 안내를 닫은 뒤에는
이유를 알 수 없었다. 앱 안 프록시가 기록한 실패 (NetGuard.dnsUnreachableFor: 이 페이지를 읽기 시작한 뒤 그 이름이
DNS 서버에 닿지 않음 · 아직 다시 답하지 않음) 로 판단해, 읽기가 끝나면 웹 뷰 위에 앱이 그린다.
Edge · Chrome 엔진 · Android 모두 같은 길 (엔진마다 다른 오류 콜백에 기대지 않음). 새로 읽기 시작하면 걷힌다.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
- 접근성 (기기 확인): 바깥 Tooltip 으로 감싼 아이콘 버튼은 Android 에 이름이 가지 않았다 - 버튼 자체의 tooltip, 탐색기 펼치기 화살표 이름, 설정 줄 MergeSemantics
- a11y_names_test (다섯 화면 · 세 폭) 로 찾은 넘침도 고침: 모니터링 디스크 줄, MKV 인코딩 줄 (960 보다 좁으면 줄 바꿈 - 내 판단, 관리자 승인)
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
- 233 (버그): 이동 카드인데 '이 복사를' 로 묻던 것
- 관리자 지시: 229 설정이 Rsync 화면 · 모니터링에서도 쓰이므로 Rsync 설정 탭에서도 같은 스위치
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
- 버그 (기기 확인): 현재 방식 실패 글이 'Cannot delete file …' 영어 - 원본을 못 지웠으면 rsync 때 (215) 와 같은 글, 그 밖도 짧은 한글 + 경로 + OS 오류
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
- 243 (사용자 편의, 기기 확인): 이동 카드를 lsync 로 옮기면 원본이 남아 헷갈렸다 (107: 실시간 동기화는 복사로 맞춤) - 확인 창에 알리고 쌍에 '복사로 맞춤'
- 244 (버그, 기기 확인): 대상에만 있는 파일이 있는데 '같습니다' - 대상에만 있는 수를 세어 사실대로
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
관리자 지시 (10/12, 다음 릴리스 준비). 겹친 곳은 양쪽 뜻을 살려 풀었다:
- 번역 json (en · ja · zh): 세 판 (공통 · 양쪽) 으로 열쇠마다 합침 (서로 다른 값으로 바뀐 열쇠 0개).
- 225 (모르는 컴포넌트 · 화면 순서 남기기, 양쪽에 따로 들어감) 를 하나로:
settings.fromJson 은 tor_dns 쪽 (문자열만 남김), 순서 바꾸기는 묶음5 의 AppComponent.reorder (모르는 화면은 그 자리에)
+ tor_dns 의 fullOrder (Tor 는 웹 브라우저 바로 뒤, 켜지 않은 Tor 는 순서에 넣지 않음).
시험은 둘 다 남기고, 이제 tor 를 아는 판이라 "모르는 화면" 은 future_screen 으로.
- build.gradle.kts: Tor jniLibs 폴더 + 195 의 third_party_libs.txt 거르기에 tor 폴더 포함, 목록에 libtor.so 추가.
check_apk.ps1 도 tor 폴더를 본다.
- 201 (브라우저 위 막대 두 줄) 을 Tor 화면에도 (minMiddleWidth 380).
- live_sync · sync_tools · explorer_page · 흔들림 시험 (165 등) 은 tor_dns 가 건드리지 않아 묶음5 그대로.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
테스터 a4 의 914 기기 확인 · 관리자 지시 (10/12, 버그 수정 · 편의):
- 247: 새 버전 확인 실패가 영어 원문 (HttpException: Proxy failed to establish tunnel (502 ...)) 이던 것.
DNS 강제 프록시에서 실패했으면 "DNS 서버 (…) 에 닿지 않아 새 버전을 확인하지 못했습니다" (원문은 작업 기록).
- 248: [시스템 DNS 로 바꾸기] 가 붙은 안내가 12초 만에 사라지던 것 → 사용자가 닫거나 누를 때까지.
- 249: 안내가 1분마다 다시 뜨던 것 → 처음 실패 때 한 번. 상태는 서버가 다시 답하거나 DNS 설정을 바꿀 때까지
환경 설정 > 네트워크 · DNS 와 작업 현황에 "DNS 서버 (…) 에 닿지 않음 (시각부터) · [시스템 DNS 로 바꾸기]".
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
관리자 검토 (10/12): 이름 있는 뮤텍스는 쥔 OS 스레드가 끝나면 버려진 상태가 되어 다음 실행이 첫 실행으로
판단할 수 있다 → 데이터 폴더의 instance.lock 을 파일 핸들 잠금 (LockFileEx) 으로 앱이 끝날 때까지 쥔다.
스레드와 상관없고 프로세스가 죽으면 Windows 가 푼다. GetLastError · FFI 를 쓰지 않는다.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
- 239 (버그, 기기 확인): 창을 보는 사이 다음 동영상이 시작하면 [지금 것만 취소] 가 그 다음 것을 취소했다 - FFmpeg 실행에 꼬리표 (MediaTool tag · cancelTagged), 이미 끝났으면 알리고 다시 묻기
- 240 (사용자 편의, 기기 확인): 여럿이 동시에 돌면 [그대로 두기] · [모두 취소 (n개)], 목록 줄의 ■ 로 하나만
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
- 버그: 미리 보기가 링크 안으로 들어가 실제로는 건너뛰는 (214) 바깥 파일을 옮길 것으로 보였다
- 앱이 직접 (현재 방식 · WebDAV) 이면 '링크 · junction - 따라가지 않고 건너뜀', rsync 는 링크 하나로 셈
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
- 207 원인: Chromium 은 관리자 권한으로 실행되면 권한을 낮춰 다시 띄우려고 스스로 끝난다 (CefInitialize false, 종료 코드 38).
관리자 판단 (보안 우선): 관리자 권한이면 Chrome 엔진을 시작하지 않고 이유 · [Edge 엔진으로 바꾸기] · [그래도 Chrome 엔진 쓰기…] (경고 확인).
환경 설정 > 브라우저 "관리자 권한일 때도 Chrome 엔진 쓰기 (권장하지 않음)" (처음 꺼짐) 를 켜면 --do-not-de-elevate (webview_cef 패치 7).
- 20초 안에 준비되지 않으면 "Chrome 엔진을 시작하지 못했습니다" · [Edge 엔진으로 바꾸기] · [다시 시도]. 시작 중에 닫을 때의 LateInitializationError 고침.
- Chrome 엔진은 프록시 인증에 답하지 않아 (CEF 149 windowless 에서 GetAuthCredentials 가 불리지 않음, 확인) 인증 없는 문을
실행마다 고른 127.x.y.z 의 빈 포트에, Chrome 엔진 웹 뷰가 있는 동안만 연다 (관리자 결정). 듣지 않던 옛 인증 패치는 걷어냄.
- DNS 강제: HttpOverrides 를 main · runAndroid · runSecondWindow 맨 앞에서 건다. 그 전에 만들어 두던 HttpClient
(새 버전 확인 · 구성 요소 · 도구 받기 · 자막 검색) 가 정한 DNS 를 거치지 않고 시스템 DNS 로 나가던 것 (닿지 않는 DNS 시험판에서 발견).
- 안내 문구: DNS 서버에 닿지 않음은 예외 원문 대신 무엇을 확인할지, Tor 연결이 2분 넘게 멈추면 몇 % 에서 멈췄는지와 [다시 시도].
- 시험: cef_elevation_test (4), dns_proxy_test (Chrome 엔진 문 · 일찍 만든 HttpClient 도 정한 DNS).
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
- 데이터 (버그, 관리자 지적): robocopy 는 기본으로 예전 원본 (Older) 으로 대상의 새 파일을 덮어썼다 - 설정이 켜져 있으면 /XO
- 건너뛴 원본은 남기고 알림, 미리 보기 · 명령 줄도 같게. 설정 설명 글에 robocopy 를 넣음
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
- 데이터 (버그): 현재 방식 · WebDAV 의 이동이 받는 쪽의 더 새 파일을 예전 원본으로 덮어쓰고 원본까지 지웠다
- 환경 설정 '받는 쪽이 더 새것이면 건너뛰기' (copySkipNewer, 처음 값 켜짐 - 관리자 판단). rsync -u 와 같음
- 건너뛴 파일은 이동이라도 원본에 남기고 'n개는 원본에 남음' 으로 알림
- 미리 보기: 건너뛰는 것 (받는 쪽이 더 새것 - 건너뜀), 더 새 파일을 덮어쓸 때 주황 굵은 경고
- 시험 sync_preview_test 기대값: -u 일 때 leftold.txt 는 목록에서 빠지지 않고 skipNewer 로 보임 (관리자 승인)
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
- 186 (사용자 편의, 기기 확인 지적): 묶음 실행 중 취소를 누르면 기다리는 항목이 있을 때 세 가지 중 고르기
- 187 (버그): 취소한 항목이 실패로 보이던 것 - JobStatus.cancelled, 회색으로 보이고 기록에 성공 · 취소 · 실패 / 전체
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>