Commit Graph

157 Commits (2913332a8c86d0f4188d99b07e40ad36fc1ca027)

Author SHA1 Message Date
RyuJongJin 2913332a8c M4 2묶음: LanFinder 의 망 종류 (netKindsOf) 를 바꿀 수 있는 전역 변수에서 보통 함수로 + 사용 점검 복사 창 장면은 창 애니메이션 뒤에 찍기
- lan_scan.netKindsOf: 시험은 그 위 (WifiShareNet · findLanSmb) 를 넘기므로 바꿀 자리가 필요 없음 - 보통 함수로
- 점검만 (바꾸지 않음): TorService.dataDir 는 main 이 한 번 정하는 설정 (원격 서버 목록과 같은 꼴) · WebProxy.target 은 이미 주입 자리 ·
  keepPlayingWhenHidden 은 켤 때 설정에 한 번 이음
- 시험: explorer_use_check 의 "복사 단추" 장면은 창이 뜨며 어두운 막이 덮이는 중에 찍혀 [←] 밝기가 흔들렸다 - 400ms 뒤에 찍음
  (두 번 base11 214장 0px)
- 사용자가 보게 될 동작: 없음

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-25 18:50:48 +09:00
RyuJongJin 23cc9f6e5b M4 1묶음: "Android 인지" 전역 함수 둘 (앱 관리자 단추 · 볼륨 키) 을 PlatformInfo 로 + WakeLock (보기 화면 화면 켜 두기) 을 주입으로
- ExplorerButton.explorerValues · defaultOrder · fromSettings 는 android 를 받는다 (부르는 쪽이 c.services.platform.isAndroid) -
  예전 바꿀 수 있는 전역 함수 appsButtonSupported
- 보기 화면 볼륨 키는 c.services.platform.isAndroid (예전 ReaderPage.volumeKeysSupported)
- PlatformServices.keepScreenOn (처음 값 WakelockPlus - 예전 ReaderPage.keepScreenOn)
- 시험: app_manager · explorer_archive_trash · explorer_conflict · reader · reader_more 는 주입으로 (2회 통과). 볼륨 키 시험은
  Android 조립과 Windows 조립 두 화면으로
- 사용자가 보게 될 동작: 없음

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-25 18:00:31 +09:00
RyuJongJin 39b76e2423 M3 ThumbPolicy: 원격 썸네일 "Wi-Fi 에서만" 의 망 판단 (전역 함수 activeMeteredOf) 을 PlatformServices.isMetered 주입으로
- lan_scan.dart: deviceMetered (실제 - Android 만 묻고 PC 는 false, 물을 수 없으면 true) 는 그대로 함수로 두고, 바꿀 수 있는 전역 변수는 뺌
- remoteThumbsAllowedNow 는 c.services.isMetered 를 부름 (처음 값 = deviceMetered)
- 시험: remote_thumbs_test 는 isMetered 를 넘김 (2회 통과)
- 썸네일 캐시 상한 · 받기 허락은 이미 RemoteThumbs 생성자로 넘기는 값이라 그대로. netKindsOf (망 종류) 는 M4 LanFinder 몫
- 사용자가 보게 될 동작: 없음

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-25 17:21:29 +09:00
RyuJongJin 26d6b01752 M3 PrivilegedFs: 시스템 폴더 · 루트 읽기의 static 넷 · 전역 함수 둘을 주입으로
- core/shizuku.dart PrivilegedFs: Shizuku 뒤쪽 · 루트 뒤쪽 · 임시 폴더를 한 곳에서. 앱은 켤 때 PlatformServices.privileged 를 건다
  (Android 조립만 PrivilegedFs.device(앱 임시 폴더) 를 넘김, 원격 서버 목록처럼 한 번). 예전 ShizukuRemote.backend · rootBackend ·
  tempDir · SuRoot.start (static) 를 대신 - SuRoot 의 프로세스 시작은 생성자로 넘김
- shizukuSupported · rootSupported (전역 함수) 를 빼고 c.services.platform.isAndroid (M1 PlatformInfo) 로
- Android 에서 Shizuku · 루트 내용을 잠깐 받는 곳이 시스템 TEMP (앱 캐시) → 앱 임시 폴더 (앱 데이터/tmp, 켤 때 비움) - 둘 다 앱 전용
- 시험: privileged_fs_contract_test (넘기면 걸고 안 넘기면 그대로 · device 꼴). shizuku · root · 보관함 시험은 PrivilegedFs.use 로 2회 통과
- 사용자가 보게 될 동작: 없음

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-25 16:46:49 +09:00
RyuJongJin f1624759ba M3 VaultLocation: 보관함 자리 전역 함수 셋 (vaultDirOf · vaultViewRootOf · vaultPickFolder) 을 주입으로 + 실제 60만 번 시험
- lib/app/vault_location.dart: 보관함 폴더 · [보기] 로 잠깐 푼 파일 자리 · 꺼낼 폴더 고르기. device = 지금과 같은 실제 자리
  (앱 조립 PlatformServices.create 가 씀), under(tempDir) = 앱 임시 폴더 아래 (손으로 조립할 때 처음 값 - 시험이 사용자 보관함 ·
  앱 데이터를 건드리지 않음. 예전 flutter_test_config 의 전역 덮어쓰기를 대신)
- 보관함 화면 · 보기 세션 · 넣기 · 꺼내기 · 켤 때 남은 것 정리 (app_runtime) 가 c.services.vault (또는 넘겨받은 자리) 를 부른다
- KdfParams 점검: 반복 수는 이미 화면 · 만들기에 넘기는 값 (static 아님) - 바꾸지 않음. 실제 반복 수 (60만) 로 만들기 · 다시 열기 ·
  읽기 · 틀린 비밀번호 시험을 vault_modules_test 에 (2회 통과, 4초)
- 시험: vault_location_contract_test (손 조립 처음 값 · 주입 그대로). 보관함 시험 · 캡처는 주입으로
- 사용자가 보게 될 동작: 없음 (자리는 그대로) - 보관함 캡처 앞 · 뒤 두 번씩 0px

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-25 14:01:05 +09:00
RyuJongJin cf69c200a1 시험: bigtext 캡처는 스크롤 막대가 다 사라진 뒤에 찍기 (bigtext_rsync 흔들림 - 두 창의 스크롤 막대가 사라지는 중이었음)
- 두 번 60장 0px

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-25 13:17:41 +09:00
RyuJongJin 1b09030b80 W FloatingAction: 떠 있는 단추 자리 판단을 FloatingActions 하나로 + 작업 기록 시계 주입 + 캡처 흔들림 고정
- lib/ui/floating_actions.dart: 좁거나 낮으면 (글자 배율로 나눈 높이 500 미만 - F7) 내용 안 단추 줄, 넓으면 오른쪽 아래에 떠 있고
  내용 아래를 단추 높이만큼 비움 (206). MKV 자세히 [이동] 단추가 부르기만 한다 (예전에는 화면 안에 판단 · Stack 이 있었음). 보이는 것 그대로
- MessageText 점검: 문장 잇기는 이미 joinSentences (tr.dart) 하나 - 손으로 빈칸 잇는 곳 없음, 바꾸지 않음
- 주입: PlatformServices.clock → AppLog(now:) (처음 값 실제 시계 - 작업 기록의 [시:분:초])
- 시험: floating_actions_contract_test (떠 있음 / 내용 안 · 비울 높이 · 첫 단추 맨 아래 · floatingInline 4 경우)
- 캡처 흔들림 (시험 쪽): mkvdetail (폴더 · 시각 · 기록 시각) · bigtext (JJ_SHOT_TMP 아래 · 드라이브 남은 공간 shotDevice).
  b3_52 의 받는 중 파일 (.jjpart) 시각은 찍기 전에 고정해 보았으나 복사가 아직 쓰는 중이라 목록이 읽은 시각이 남아 그대로 (까닭을 시험에 적음)

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-25 13:01:19 +09:00
RyuJongJin 5a65dbf693 W DangerDialog: 확인 창 두 벌 (confirm.dart · confirm_dialog.dart) 을 confirmDialog 하나로 + 체크해야 켜짐 · 첫 초점 [취소] 를 공용으로
- confirm_dialog.dart 하나: confirmAction (글만 묻는 꼴) 은 confirmDialog 를 부른다 (confirm.dart 지움, 16 파일 import 바꿈).
  빨강은 테마 위험 색 (danger) 하나로 - 지우기 · 덮어쓰기 확인의 빨강이 다른 지우기 단추와 같아짐 (FF5252 → FF5C6C)
- 새 약속: cancelFirst (빨강이 아니어도 되돌리기 어려운 일은 첫 초점 [취소] - Enter 로 실행 안 됨) · canConfirm (체크 · 두 비밀번호가
  같아야 [확인] 켜짐). 시스템 폴더 · 루트 보기 켜기 (설정), 루트 탭 경고 (탐색기), 보관함 비밀번호 바꾸기가 부르기만 한다.
  창마다 글 · 단추 이름은 그대로
- confirmAction 도 같은 규칙: danger 면 첫 초점 [취소], 아니면 [확인] (관리자 결정 10/22)
- 시험: confirm_dialog_contract_test 에 cancelFirst · canConfirm · confirmAction 3개 (관리자 10/25 조건)
- 주입: LiveSync(now:) (처음 값 실제 시계 - 카드의 "마지막: HH:MM"). 시험 쪽 고정: b3 (폴더 · 시각 · CPU · 디스크) ·
  lsync_p0 (폴더 · 시각 · 대상 디스크). b3_52 의 받는 중 파일 (.jjpart) 시각은 실제 복사가 만든 때라 그대로 (흔들림 2장 남음)

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-25 11:05:26 +09:00
RyuJongJin d1081f337e W JjChip: 고르기 칩 21곳을 JjChip 하나로 + 여럿 고르기 목록은 withPicked 하나로 + 모니터 캡처 흔들림 고정
- lib/ui/jj_chip.dart: 아이콘 없는 칩은 Material 처음 꼴 (고르면 앞에 ✓), 아이콘 칩은 고르면 그 자리에 ✓ 만 (62ba78d 규칙 -
  예전에는 화면 · 색 보정 비율 칩 한 곳만 손으로). multi 면 FilterChip. 화면 · 색 보정 · 압축 · 찾기 · 일정 · 저장 공간 · 보기 ·
  정리 · 받기 설정 · 즐겨찾기 · 자막 찾기 · 복사 방식 · 원본 정리 등 21곳이 부르기만 한다. 탐색기 왼쪽 / 오른쪽 창 고르기 칩은
  고르기가 아니라 탭이라 그대로
- lib/core/picked_list.dart withPicked: 여럿 고르기 목록 켜고 끄기 (설정 3곳에 같은 코드가 있던 것)
- 시험: jj_chip_contract_test (아이콘 ✓ 바꾸기 · 처음 꼴 · multi · 못 누름 · withPicked)
- 앞 · 뒤 캡처 9 묶음 132장 각 두 번: 앞 · 뒤 0px (보이는 것은 그대로)
- 시험 쪽: monitor_shot 도 고정 폴더 · shotServices (CPU · 메모리 · 디스크 · 대상 디스크)

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-25 09:06:21 +09:00
RyuJongJin 7970dba271 W TailText: 창 위 경로 줄도 끝 (지금 폴더) 이 보이게 · 폭 재기는 path_label.textWidth 하나로 + 탐색기 캡처 흔들림 고정
- pane_view 의 경로 줄 (폴더 + 파일 목록 · TC 모양 오른쪽): 예전에는 끝을 "…" 로 잘라 지금 폴더가 안 보였다 → TailText (앞을 줄임)
- TailText 의 폭 재기를 path_label 의 textWidth 로 (글 방향 · 다 쓴 TextPainter 놓기 - 예전에는 매번 새로 만들고 놓지 않음)
- AdaptiveRow · ColumnTable 점검: 좁을 때 모양을 바꾸는 다른 곳은 목록 / 자세히 세로 쌓기 · 칩 줄 따로 등 "앞 묶음 · 뒤 묶음" 꼴이 아니라 그대로.
  열 판단은 이미 columnLayout (순수 함수, 312 조합 시험) 하나를 열 머리 · 줄이 같이 씀
- 시험 쪽 흔들림 고정: support/shot_services (shotServices - CPU · 메모리 · 디스크, shotDevice - 드라이브 남은 공간) 를
  check_shot · explorer_shot · explorer_text 가 같이 씀. explorer_text 는 JJ_SHOT_TMP 아래 고정 폴더 · 시각, xplore 는 고정 폴더 ·
  시각 · 압축 안 항목 시각
- 사용자가 보게 될 동작: 탐색기 두 창 · 폴더 + 파일 목록의 오른쪽 위 경로 줄이 "…\Videos\Movies" 처럼 끝이 보임

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-25 07:32:36 +09:00
RyuJongJin 4985887a5b P2 재생 화면 조절 줄 좁을 때 두 줄 · 재생 목록 모듈 (소리 파일은 소리끼리) 을 새 구조로 옮김 (82a87da, after_1020)
- lib/ui/row_fit.dart: fitRow (판단만 - 82a87da 그대로) + FitButtonRows (그 판단대로 한 줄 / 두 줄로 그림, 단추 크기 그대로,
  소리 막대만 남는 폭 최대 100). 재생 화면은 부르기만 한다 (player_page 580 → 576줄)
- 재생 목록 모듈 (core/playlist.dart): isPlayableFile · samePlayKind · folderPlaylist. buildPlaylist 의 형제는 고른 파일과 같은 종류만,
  폴더 [재생] 은 동영상이 없으면 소리 파일 (안내 글 "이 폴더에 재생할 동영상 · 소리 파일이 없습니다." - en · ja · zh 사전 함께).
  컨트롤러 (playback_prep) · 탐색기 (explorer_buttons · open_flow) 는 부르기만
- 시험: row_fit_contract_test (새) · player_test 약속 줄 · full_player_test 실제 mpv 장면 (82a87da 에서 옮김).
  explorer_flows_contract_test 의 알림 글을 새 글로 (틀 것이 없으면 알림은 그대로)
- full_player_test: 앞 판은 mp3 목록이 [ep1.mkv, Other - Track 2.mp3] 로 실패 (결함 재현), 뒤 판은 목록은 통과하나
  "audio 재생 시작" 에서 멈춤 - 이 PC 는 소리 출력 장치가 모두 꺼져 있음 (AudioEndpoint 모두 Unknown). 조절 줄 장면은 기기 (노트 10+) 확인 몫

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-25 04:31:13 +09:00
RyuJongJin 14543115d9 F9 자막 편집 표 좁을 때 두 단 (단추 누를 자리 48) 을 새 구조로 옮김 + ui2 시험 360 (7247aeb, after_1020)
- subtitle_editor_panes.dart (예전 subtitle_editor_page 의 표): 두 단일 때 위 # · 시작 · 끝, 아래 내용 · 단추 (오른쪽 끝).
  예전 (62ba78d) 은 단추를 위 단에 넣고 누를 자리를 40 으로 줄여 360 에서 위 단이 43px 넘쳤다. 단추는 기본 누를 자리 그대로
- windows_ui2_shot_test (7247aeb 에서 옮김): 360 · 412 · 960 × ko · ja, 넘쳐도 먼저 찍고, F11 (✕ 화면 안 · [모두 초기화] 이름 ·
  안내 글 숨기지 않음) · F9 (줄 단추 누를 자리 48 + 밀도 조정) 을 본다. 앞 판은 360 자막 편집에서 43px 넘쳐 실패

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-25 03:31:51 +09:00
RyuJongJin 48a2ba56dc W JjTitleBar 2: 창 · 판 안의 제목 줄 6곳을 JjHeaderRow 로 + F11 · G1 · G2 를 새 구조로 옮김 (7247aeb · a22832d, after_1020)
- lib/ui/jj_header_row.dart: 아이콘 · 제목 (titleLines 줄까지, "…") · 설명 (넓으면 옆, 좁으면 제목 아래 - 숨기지 않음) ·
  단추 (늘 오른쪽 끝에 다 보임, 좁으면 narrowActions). 다운로드 창 · 재생 목록 판 · 즐겨찾기 판 · 작업 현황 판 ·
  저장 공간 정리 창 · 화면 · 색 보정이 부르기만 한다
- F11 (7247aeb): 화면 · 색 보정 제목 줄 - 560 미만이면 안내 글은 제목 아래, [모두 초기화] 는 같은 이름의 아이콘 단추, ✕ 늘 보임
- G1 (a22832d): 다운로드 종료 창 제목 두 줄까지 · ✕ 늘 보임
- G2 (a22832d): jjTitleBar 에 lowerActions - AI 비교는 600 미만이면 원본 / 올린 것 고르기만 둘째 줄 가운데, [저장] 은 그대로.
  앱 안 폴더 고르기는 단추 셋이 함께 둘째 줄로
- 시험: jj_header_row_contract_test · windows_hdr360_shot_test (a22832d 에서 옮김 - 앞 판은 360 에서 47px 넘쳐 실패)
- 캡처 흔들림 고정 (시험 쪽): bigtext (폴더 · 기록 시각 · 대상 디스크) · magnet (움직이는 "준비 중…" 막대, TickerMode)
- 주입: AppController.note(at:) (처음 값 지금) · PlatformServices.diskSpace + DiskSpaceInfo(space:) (처음 값 실제 디스크)

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-25 03:28:46 +09:00
RyuJongJin 21e1d90f82 W JjTitleBar 1: 쪽 위 막대 (AppBar) 17곳을 jjTitleBar 하나로 + 캡처 흔들림 wifi · vault 고정
- lib/ui/jj_title_bar.dart: 제목은 늘 한 줄 (넘치면 "…", 경로는 TailText 로 끝이 보이게) · 넓은 단추를 가진 쪽은 좁으면
  단추들을 제목 아래 둘째 줄로 (거기도 넘치면 그 줄만 줄임, 숨기지 않음). 휴지통 · 보관함 · 저장 공간 · 압축 · 글 보기 ·
  찾기 결과 · DLNA (경로) · AI 비교 · 앱 안 폴더 고르기 등 17곳이 부르기만 한다
- 바뀐 동작: AI 올리기 비교 · 앱 안 폴더 고르기는 좁은 폭에서 단추가 제목 아래 줄로 (예전에는 412 ja 폴더 고르기가 넘쳤음)
- 주입: WifiSharePage.random (접속 코드 난수, 처음 값 안전한 난수) · Vault.add(added) (넣은 때, 처음 값 지금)
- 시험: jj_title_bar_contract_test · titlebar_places_shot_test. wifi (폴더 · 코드 · 스크롤 막대) · vault (폴더 · 넣은 날) 고정

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-25 00:39:36 +09:00
RyuJongJin 2d9968929d W JjField 2: 도움 글 글 칸을 JjField 하나로 (SecretField 도 그 위) + 캡처 흔들림 b6 · p3 · xptools 고정
- lib/ui/jj_field.dart: 칸 이름 짧게 · 도움 글 칸 아래 3줄까지 (helperLines 로 늘림) · 오류 글 · 칸 끝 단추 · 여러 줄 · 테두리 · 가림.
  WebDAV · FTP · SFTP · SMB 서버 창 · AI 서비스 · 해시 비교 · 시드 · 패턴으로 고르기 · 동기화 일정 · 이름 틀이 부르기만 한다.
  SecretField 는 JjField 위에 눈 단추만 더한다
- 바뀐 동작: 패턴으로 고르기 · 동기화 일정 창의 도움 글이 한 줄에서 "…" 로 잘리던 것이 3줄까지 보임 (F2 와 같은 결함)
- 시험: jj_field_contract_test · field_places_shot_test (패턴 · 일정 창, 캡처가 없던 곳)
- 시험 쪽 고정: b6 · p3 · xptools 도 고정 폴더 · 시각 (pinTestTimes 가 만든 · 바뀐 · 열어 본 시각 모두)

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-24 22:53:11 +09:00
RyuJongJin 36069a8707 W JjField 1: 비밀 칸 6곳을 SecretField 하나로 + 캡처 흔들림 (check_shot 37·65·94 · sshkey) 을 시험 쪽에서 고정
- lib/ui/secret_field.dart: 비밀번호 · API 키 · 키 암호 칸 (처음 늘 가림, 눈 단추로 켜고 끄기, 자동 고침 · 추천 끔,
  바깥 가리기로 칸 여럿을 단추 하나로). WebDAV · FTP · SFTP · SMB · AI 서비스 · 압축이 부르기만 한다
- 눈 단추 모양 · 툴팁을 하나로 (AI 창의 채운 24 아이콘 → 다른 곳과 같은 테두리 18, 툴팁 '보이기/가리기'),
  쓰지 않게 된 사전 글 '비밀번호 보기/숨기기' 를 en · ja · zh 에서 뺌
- 시험: secret_field_contract_test (처음 가림 · 켜고 끄기 · 칸 여럿 · 300/412 · 배율 2 넘침 없음)
- 시험 쪽 고정: testFixedTempDir · pinTestTimes (폴더 이름 · 파일 · 폴더 시각), 시험 SFTP 서버 fixedPort · fixedHostKey

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-24 20:19:59 +09:00
RyuJongJin 2eb5f335db W NoticeBand 다듬기: 제목은 짧게 · 긴 설명은 아래 · ⚠ 빼기 (관리자 10/24) + 캡처 흔들림 3장을 시험 쪽에서 고정
- FTP 평문 띠: 제목 "평문 FTP: 암호화 안 됨" (굵게) · 설명은 아래 보통 굵기 · 글 앞 ⚠ 뺌 (자물쇠 아이콘 하나). 라디오 이름 "⚠ 평문 FTP (암호화 안 됨)" 은 띠가 아니라 그대로
- 동영상 오류 띠: 제목 "실패" (있던 사전 글) · 오류 글은 아래 설명 (골라 복사)
- 다른 띠: 탐색기 · 실시간 동기화는 이미 짧은 제목 + 설명, AI 그림 안내 · AI 서비스 경고는 한 문장 (그대로)
- 사전 en · ja · zh: 새 제목 3 · 설명은 예전 번역에서 ⚠ 만 뺌 (빠진 번역 0)
- 캡처 흔들림 (시험 쪽에서만, lib 그대로): check_shot 의 위 막대 CPU % (실제 값 5% ↔ 7%) → 시험이 늘 같은 값을 내는 사용량 원천을 조립에 넘김 ·
  FTP 960 의 창 스크롤 막대가 사라지는 중간에 찍힘 → 찍기 전 1.5초 기다림 · 커서 깜빡임 고정 (debugDeterministicCursor)
- 새 기준: notice_places · ftp_shot · check_shot 을 두 번 찍어 이번에 바뀐 자리 모두 0px (check_shot 의 37 · 65 · 94 는 실행마다 임시 이름 · 시각이 달라 예전부터 흔들림)

사용자가 보게 될 동작: FTP 평문 경고 띠의 제목이 짧아지고 설명이 아래로 · 동영상 오류 띠의 제목이 "실패"

확인: analyze 0 · 단위 1525 ×2 · 통합 6/6 ×2 · base10 214장 0px

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-24 18:48:58 +09:00
RyuJongJin dac47bdd20 W NoticeBand 1: 공용 안내 띠 (lib/ui/notice_band.dart) - 파일 탐색기 안내가 이것을 부름 (모양 그대로)
- NoticeBand(icon, title, body, actions, color): 연한 바탕 · 테두리 · 둥근 띠, 제목 굵게 · 설명 작고 흐리게 · 단추는 넘치면 다음 줄 (Wrap).
  탐색기 pane_notices 의 _noticeBox 와 같은 모양 (탐색기 캡처 214장 0px)
- 약속 시험 notice_band_contract (27): 폭 300 · 412 · 960 × 글자 배율 1 · 1.3 · 2 × ko · en · ja - 넘침 없음 · 단추가 띠 안 · 좁고 크면 다음 줄
- 캡처 시험 notice_places_shot (나머지 자리를 모으기 전후 견줄 것): 실시간 동기화 카드 (멈춤 · 마스터 기다림) · 동영상 자세히 오류 상자 · AI 서비스 경고

사용자가 보게 될 동작: 바뀌는 것 없음 (탐색기 띠 모양 그대로)

확인: analyze 0 · 단위 1525 ×2 · 통합 6/6 ×2 · base10 214장 0px

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-24 16:10:18 +09:00
RyuJongJin 093cf3252e translate 시험 2개: 좁은 도구 막대에서는 [더 보기] 메뉴로 누른다 (예전부터의 실패, rc2 에서도)
- 시험 창의 브라우저 화면이 804 너비라 도구 막대가 좁은 꼴 (640 미만) - 번역 · 작업 현황 단추가 [더 보기] 메뉴 안에 있어
  툴팁으로 찾던 시험이 실패했다. 앱 쪽 문제 아님 (관리자 10/24: 시험 쪽이면 기대값 그대로, 메뉴를 열어 누름)
- tapToolbar: 넓으면 그 단추, 좁으면 도구 막대 안의 [더 보기] → 같은 항목. 고른 결과는 메뉴가 닫힌 뒤 들어오므로
  (번역이 도는 동안 그리기가 느림) 메뉴가 닫힐 때까지 기다림

확인: analyze 0 · translate_split 1 ×2 · web_translate 1 ×2

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-24 06:08:55 +09:00
RyuJongJin b9b23e9122 browser_real 시험: 좁은 도구 막대에서도 동영상 감지를 본다 (예전부터의 실패, rc2 에서도)
- 시험 창의 브라우저 화면이 804 너비라 도구 막대가 좁은 꼴 (640 미만) - [다운로드] 가 글 없는 아이콘 단추라 '다운로드' 글로 찾던 시험이
  감지와 상관없이 실패했다. 앱의 동동영상 감지는 제대로 됨 (RESULT true)
- 감지는 넓든 좁든 같은 알림 글로 본다 (찾았으면 '다운로드', 못 찾았으면 '다운로드 (… 찾지 못했지만 …)'). 누르기도 알림 글로

확인: analyze 0 · browser_real 1 ×2 (동영상 감지 true · 쿠키 내보내기 · yt-dlp 읽기)

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-24 05:55:55 +09:00
RyuJongJin f9d4257c0d 통합 시험 4개: E6 (Windows 처음 모양 TC) 뒤로 실패하던 것 - X-plore 를 직접 고르고, TC 로 쓰는 화면은 TC 단계를 더함
- windows_b6_input · rsync_page: 시험이 X-plore 모양을 직접 고름 (TC 는 폴더를 [이름], 파일은 이름 · 확장자를 다른 칸에 보여 이름 글을 찾지 못했다)
- windows_move_left_shot · windows_rsync_narrow_shot: X-plore 시험은 그대로 두고, Total Commander 모양으로 같은 일을 보는 단계를 더함
  (관리자 10/24: 사용자가 TC 로 쓰므로). move_left TC: [D] 고르기 → F6 이동 → 알림 → Enter 로 원본 D 에 들어가 남은 것만.
  rsync_narrow TC: [sub] · [rsub] 고르기 → 좌 → 우 확인 창. 캡처 이름은 …_tc_…

확인: analyze 0 · b6_input 2 ×2 · move_left 12 ×2 · rsync_narrow 12 ×2 · rsync_page 3 ×3
(rsync_page 1회째는 시작 4초 만에 시험 앱이 끝나 did not complete - 시험 논리와 무관, 그 뒤 3회 모두 통과)

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-24 05:49:46 +09:00
RyuJongJin eaaa096ea1 (가) 10곳: 시험이 앱 동작을 바꾸던 길을 주입 · 모듈로 (lib 의 @visibleForTesting 은 들여다보기 4곳만 남음)
- Tor: debugRunning · executable 없앰 → 떠난 뒤 잠시 켜 두기를 IdleStop 모듈로 (schedule · cancel · stopNow).
  환경 설정 > Tor 는 IdleStop 을 받음 (처음 값 = 앱의 Tor), [지금 끄기] = stopNow
- Wi-Fi 공유: debugLoopbackOnly · debugAddresses · loopbackOnly 인자 없앰 → WifiShareNet 주입 (열 주소 · 설정 열기).
  WifiSharePage(net:) 가 debugLaunch 를 대신함. debugFail 없앰 - 시험이 실제 다른 루프백 주소 (127.0.0.x) 에서 틀린 코드를 보냄
- 관리자 권한: Elevation.debugElevated 없앰 → PlatformInfo.elevated (조립 주입), CefView(elevated:)
- CEF 시작 시간: 바꿀 수 없게 (const) - 시험은 가짜 시간을 넘김
- 단일 실행: debugStopListening 없앰 - 시험이 instance.json 을 아무도 듣지 않는 포트로 (받는 곳이 죽은 첫 창)
- SMB 찾기: 전역 debugFindSmbServers 없앰 → PlatformServices.findLanSmb 주입
- 남은 @visibleForTesting (들여다보기만): browser_page · tor_page debugNav, secret_store dpapiAt, reader_page dropMissingFiles

확인: analyze 0 · 단위 1473 ×2 · 통합 6/6 ×2 · base10 214장 0px · windows_wifi_shot ×2 · windows_smbfind_shot ×2

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-24 01:06:00 +09:00
RyuJongJin 512c9d8b14 M2-b: Windows 휴지통 주입 (전역 recycleBinForTest 없앰)
- recycle_bin: RecycleBinBackend 약속 + WindowsRecycleBin (이 기기의 휴지통). 전역 recycleBinForTest · recycle() · restoreRecycled() 없앰
- delete_ops: deletePaths(bin:) · undoRecycle(bin:) - 처음 값 WindowsRecycleBin
- ExplorerDevice.recycleBin → ExplorerFlows · ExplorerDeleteFlow(recycleBin:)
- 시험: useTestRecycleBin(device) 가 시험 기기에 시험 폴더 안의 휴지통을 넣음. 영구 삭제만 하는 약속 시험 4개는
  휴지통으로 보내면 실패하는 것을 넘김 (사용자 휴지통에 닿지 않게). 넘겨받은 휴지통 약속 시험 1개 더함
- 시험용 휴지통: 자기 폴더가 없어졌으면 다시 만들지 않고 그대로 알림 (진단)
- 전부터 있던 실패 2개 고침 (E6 부터 Windows 처음 모양이 Total Commander 라 이름 · 확장자가 다른 칸):
  windows_check_shot_test · windows_b3_shot_test 가 X-plore 모양을 직접 고름

확인: analyze 0 · 단위 1472 ×2 · 통합 6/6 ×2 · base10 214장 0px · windows_check_shot ×2 · windows_b3_shot ×2
(첫 확인의 통합 1회에서 412 지우기가 '경로를 찾을 수 없음' 으로 11장 벗어남 - 다시 4회 모두 0px, 원인 미확인)

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-24 00:22:23 +09:00
RyuJongJin 3434ad4937 M1-2: lib 의 …ForTest 이름 정리 (실제 기능 · 주입으로)
- SuRoot.resetForTest → forgetGrant (이번 실행의 su 허락 잊기)
- ComGuard.releaseForTest → release (ensure 와 짝인 CoUninitialize)
- debugUpscalerForTest 전역 → PlatformServices.createUpscaler 주입
- 원격 썸네일 reset…ForTest 3개 → forgetRemoteThumbHub · forgetRemoteRangeSupport · forgetRemoteThumbNet
- vaultIterationsForTest 전역 → VaultPage(iterations:) (처음 값 VaultCrypto.defaultIterations)
- 남은 recycleBinForTest 는 M2 (TrashBackend) 에서 정리

확인: analyze 0 · 단위 1470 ×2 · 통합 6/6 ×2 · base10 214장 0px · com_guard_test · windows_vault_shot_test ×2

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-23 20:45:32 +09:00
RyuJongJin 6f9d8f6284 목록에서 두 번 누르면 도로 나오던 것 고침 · TC Enter = 열기
- 원인 (실제 앱): 목록 줄 (TC · '폴더 + 파일 목록') 의 폴더 · '..' 는 한 번에 열려, 두 번 누르면 두 번째 누르기가 같은 자리의 '..' 에
  맞아 도로 나왔다
- TC 모양: 폴더 · '..' 도 한 번 = 고르기, 두 번 = 열기 (ClickPolicy doubleOpens - Total Commander 와 같게)
- TC 모양: Enter = 열기 (폴더는 들어가기, 파일은 열기) - 바꿀 수 있는 키 동작 'open', 처음 키는 TC 모양일 때만 Enter
- '폴더 + 파일 목록': 한 번 열기는 그대로, 연 직후 두 번 누르기 시간 (300ms) 안의 다음 누르기는 버림 (마지막 틀 시각으로 잼)
- 약속 시험: 누르기 표 (TC) · TC 한 번 / Enter / '..' 두 번 · 목록 배치 곧바로 두 번째 누르기 · 시간 지난 '..' 한 번
- 점검 시험: TC 를 두 번 누르기 · Enter 로 되돌림 (실제 시간에서 들어가기 · 나오기 됨), 목록 배치 단계 더함 - 214장 2회 같음 (base10)

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-23 18:48:45 +09:00
RyuJongJin afe15620bd E6 보충 (관리자 결정 10/23): 지운 뒤 초점 · 좁은 TC 줄의 확장자 · TC 전용 점검 단계
- 지운 뒤 초점: 지운 줄의 다음 줄로, 마지막이었으면 앞 줄로 (TC · X-plore 같음) - focus_after_delete (순수 함수, 약속 시험 4) +
  지우기 흐름이 부름. 실제 화면 시험: TC 목록에서 F8 단추로 지우면 다음 줄이 지금 줄
- TC: 확장자 칸이 없으면 (좁은 줄 · 좁아 숨긴 열) 이름에 확장자를 붙인다 ('notes.txt') - 정보를 숨기지 않게.
  기존 큰 글자 시험 3곳의 TC 기대를 'a' → 'a.txt' 로 (이 결정에 따른 것, 주석에 적음)
- 탐색기 점검 시험: TC 전용 단계 (Backspace 로 맨 위 · 메뉴 [열기] 로 들어가기 · Backspace 로 나오기 · F5 · F6 · F8 · 지운 뒤 초점,
  단계마다 폴더 시각 다시 고정 + Ctrl+R). 두 번 누르기는 이 실제 시간 시험에서 열기로 잡히지 않아 단위 약속 시험이 본다
- 확인: 단위 1461 ×2 · 통합 6/6 ×2 · 캡처 201장 2회 0px 같음 (base9) · X-plore 는 '삭제 확인' 3장만 바뀜 (초점)

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-23 10:30:21 +09:00
RyuJongJin ae3365bff1 E6 2 · 3: Total Commander 모양 (창마다 목록 · '..' · 아래 F3~F8 · 남은 공간) · 좁은 창의 줄 모양 (공용 줄 부품)
- TC 모양: 트리 대신 지금 폴더의 목록 (paneListRows - '폴더 + 파일 목록' 의 목록과 같은 함수, 목록의 스크롤).
  사용자가 고른 '폴더 + 파일 목록' 배치 · Rsync 화면은 그대로 트리
- tc_key_bar: F3 보기 · F4 편집 · F5 복사 · F6 이동 · F7 새 폴더 · F8 삭제 - 이미 있는 동작을 부름
- tc_drive_space: 창 위 남은 공간 / 전체 - ExplorerDevice.diskSpace 로 받음 (시험은 TestExplorerDevice.space)
- 좁은 창 (창 폭 200 아래, narrowRowWidth): 아이콘 칸 줄임 · 끌기 손잡이 숨김 · 열 대신 이름 먼저 (크기 · 날짜는
  두 줄이 들어가는 줄 높이에서 이름 아래 - TC 26 은 이름만) · 열 머리도 이름만. X-plore · TC 가 같은 ExplorerRowView
- 약속 시험 explorer_tc_look_test 4개. 점검 시험은 X-plore · TC 두 모양을 찍는다 (폴더 시각 · 남은 공간 고정)
- 확인: 단위 1456 ×2 · 통합 6/6 ×2 · 캡처 180장 2회 정확히 같음 (base8) · X-plore 1920 · 960 은 base7 과 같음

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-23 07:48:42 +09:00
RyuJongJin 8c561a6133 알림 시간을 시험 전용 길이 대신 주입으로: NoticeTiming (InheritedWidget, 없으면 appNoticeDuration 10초)
- lib/ui/notice.dart 의 noticeDurationForTest 를 지움 (lib 에 시험 전용 길이를 두지 않음 - 관리자 10/23)
- 탐색기 점검 시험은 MaterialApp 을 NoticeTiming 으로 감싼다. 약속 시험: 감싸면 그 시간, 없으면 10초
- 확인: 캡처 2회 90/90 같음 · 앞 판 (5303663) 과도 90/90 같음 → base7

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-23 04:53:09 +09:00
RyuJongJin 53036633d3 알림 시간 주입: 시험이 알림 시간을 정할 수 있게 (앱은 그대로 10초 - U2)
- notice.dart: appNoticeDuration (10초, 앱의 값) · noticeDuration (읽기) · noticeDurationForTest (시험만, @visibleForTesting)
- 탐색기 점검 시험: 알림이 실제 시간으로 닫히지 않게 두고, 정한 자리 (복사 알림은 선택을 끈 뒤 · 휴지통 알림은 이동을
  누르기 전) 에서 닫는다 - 찍는 때와 10초가 겹쳐 장면 14 · 27 이 실행마다 달라지던 것
- 확인: 같은 판 2회 90/90 픽셀까지 같음

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-23 04:42:59 +09:00
RyuJongJin d83b0b5aef 설정 A: 일반 분야 (GeneralSettings) · 남은 키 정리 - toJson · fromJson 은 분야 목록만 돈다
- 일반: 즐겨찾기 · 저장 공간 정리 · 바뀐 기본값 알림 · 안쪽 → 바깥 · 비밀번호 기억 · 휴지통 · 모든 파일 안내 (allFilesHint2)
- imageExts 는 보기 화면 분야 (ReaderSettings) 로
- 표시 cookieScopeV2 → 다운로드, robocopyLinksV1 → 복사 분야로
- AppSettings 에 남은 것: 분야 목록 · 모르는 항목 보존 · 비밀 값 빼기 · 바뀐 기본값 알림 · 실행 중 값 (webViewDataDir)

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-23 00:15:58 +09:00
RyuJongJin 7fe2f0562f 설정 A: MKV · 자막 분야 (MkvSettings) - 저장 위치 · 이동 버튼 · 인코딩 · AI 자막 · OpenSubtitles 키를 분야로
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-23 00:11:13 +09:00
RyuJongJin c5aa8c657b 설정 A 분야 13: 화면 · 앱 모양 (DisplaySettings) - 키 13 · clampUiScale → DisplaySettings.clampScale
- ComponentManifest 의 자기 필드 components 는 그대로 (같은 이름이라 잘못 바뀐 것을 되돌림)

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-23 00:06:30 +09:00
RyuJongJin 8d26d1af1e 설정 A 분야 12: 원격 서버 (RemoteSettings) - WebDAV · SFTP · SMB · FTP 목록 · 쉬는 시간 · WebDAV 외부 열기, 키 7
- 비밀 값 처리 (webdavServers 의 plainSecrets · 새 비밀 값은 평문으로 쓰지 않음) 그대로, 설명 주석도 함께 옮김

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-22 23:37:49 +09:00
RyuJongJin a35293271e 설정 A 분야 10: 암호 보관함 (VaultSettings) - 키 3
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-22 23:30:18 +09:00
RyuJongJin 056ca186d9 설정 A 분야 9: 실행 · 종료 · 업데이트 (RunSettings) - 키 11 · backgroundRun 함께
- 도구 고침: setter 안의 '      closeAction = v' 줄을 선언으로 잡던 것 (타입은 글자로 시작 · 첫 선언만)
- 문서 주석 [AppSettings.run.x] → [RunSettings.x]

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-22 23:28:09 +09:00
RyuJongJin 7c6320165a 설정 A 분야 8: 웹 브라우저 (BrowserSettings) - 키 10
- 이미 옮긴 분야 뒤의 같은 이름 (s.tor.homeUrl) 은 바꾸지 않음
- browser_page 의 _CefView 자기 필드 cefWhenElevated 는 그대로 (같은 이름이라 잘못 바뀐 것을 되돌림)

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-22 23:23:30 +09:00
RyuJongJin 6beeb22e43 설정 A 분야 7: 다운로드 · YouTube (DownloadSettings) - 키 12
- settings_group.dart 에 pickEnum (분야들의 읽기가 같이 씀 - fromJson 의 지역 함수 pick 대신)
- AppSettings.resolvedDownloadRoot 는 download.root 를 씀

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-22 23:20:58 +09:00
RyuJongJin 6054daf17a 설정 A 분야 6: 보기 화면 (ReaderSettings) - 키 9 · zipComicV2 표시
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-22 23:16:46 +09:00
RyuJongJin 506803ca65 설정 A 분야 5: AI 그림 · 해상도 올리기 (AiImageSettings) - 키 27 · aiServices 의 비밀 값 처리 (plainSecrets) 그대로
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-22 23:14:56 +09:00
RyuJongJin 059c8cba59 설정 A 분야 4: 복사 · 이동 · rsync · 실시간 동기화 (CopySettings) - 키 16 · 도우미 _method 함께
- 부르는 곳: s.copyTasks → s.copy.tasks 꼴 (RsyncRun 의 자기 필드 copySkipNewer 는 그대로 - 같은 이름이라 잘못 바뀐 것을 되돌림)
- 문서 주석 [AppSettings.x] → [CopySettings.x] 등

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-22 23:10:42 +09:00
RyuJongJin ee7524e1c7 설정 A 분야 3: Tor 브라우저 (TorBrowserSettings) - 키 5 · defaultTorHome → TorBrowserSettings.defaultHome
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-22 22:43:02 +09:00
RyuJongJin 1db0bda829 설정 A 분야 2: 네트워크 · DNS (NetworkSettings) - 키 4 · dnsConfig → network.config
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-22 22:29:42 +09:00
RyuJongJin 428fe99a82 설정 A 분야 1: 파일 탐색기 (ExplorerSettings) - 키 31 · 옮김 표시 3
- lib/app/settings/explorer_settings.dart: 탐색기 설정의 이름 · 처음 값 · 읽기 · 쓰기를 한 곳에
- AppSettings 는 explorer 분야를 갖고 분야 목록을 돌며 합치기만 (toJson · fromJson 에서 탐색기 키를 지움)
- 부르는 곳: s.explorerLayout → s.explorer.layout 꼴 (옛 이름 getter 없음), 저장 키 이름은 그대로
- 고침: fromJson 이 바뀐 기본값 알림 (_migrated) 을 분야를 읽기 전에 계산하던 것 - 분야를 먼저 읽음
- JSON 약속 시험: 알림 목록 (__migrated) · 옛 판 설정 경우를 더함, 기준은 옛 판 (db45f80) 에서 다시 만듦

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-22 22:08:55 +09:00
RyuJongJin f9f67f11f4 점검 시험: 복사 · 이동 뒤 진행 패널이 다 내려간 뒤 찍음 (PC 빠르기에 따라 캡처가 달라지던 것 - 기대값 그대로)
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-22 22:08:49 +09:00
RyuJongJin d537d1c3e1 설정 B: settings_page (1,697) 를 분야 섹션 모듈로 (→ 282)
- lib/ui/settings/settings_tiles.dart: 작은 제목 · 글 넣는 줄 · 폴더 줄 · CountSelector
- general_sections (일반 · 화면 · 앱 아이콘) · media_sections (MKV · 자막 · 재생 · 이동 버튼 · 외부 플레이어 · 오른쪽 클릭 메뉴)
- browser_section · files_section (원격 썸네일 캐시 · 읽기 전용 보기 경고) · transfer_sections (Rsync · 다운로드)
- app_sections (실행 · 종료 (단축키) · 저장 공간 정리 · 프로그램 정보)
- 페이지는 틀 · 잠금 · 분야 막대 · 묶음 카드만, CountSelector 는 그대로 내보냄
- 약속 시험: test/settings_sections_contract_test.dart
- 캡처: integration_test/settings_sections_shot_test.dart (ko · en · ja × 412 · 960, 전체) - 나누기 전 판과 픽셀까지 같음 (2회)

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-22 15:56:37 +09:00
RyuJongJin de4ba076b8 탐색기 시험용 정적 이름 5개를 주입으로 (ExplorerDevice)
- lib/app/explorer_device.dart: ExplorerDevice 약속 (저장 장치 목록 · 드라이브 열림 · Android 경로 · 앱 휴지통 · .nomedia) + RealExplorerDevice (이 기기 그대로)
- ExplorerPage 생성자 인자 device (clock 처럼, 처음 값은 RealExplorerDevice)
- 지움: ExplorerPage.probeDrive · debugVolumes · debugAndroidPaths · debugAndroidTrash · debugNomedia
- 시험: test/support/test_explorer_device.dart (정한 것만 바꿈), harness 가 시험마다 새로 만들어 넘김
- 약속 시험: test/explorer_device_contract_test.dart

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-22 15:04:38 +09:00
RyuJongJin 067746223b E5c: 압축 보기 · 여는 길 · 목록에서 숨기기 · Rsync 실행을 모듈로 + 점검 통합 시험
관리자 승인 E5 계획 (E5a~E5e). 동작은 바꾸지 않음
- lib/app/archive_browse.dart ArchiveBrowser: 압축을 폴더처럼 (읽기 · 바뀌면 다시 읽고 잊음 알림 · 안의 목록 · 하나 꺼내기),
  archive_ops 를 부르기만, 7-Zip 실행 파일은 부르는 쪽이 줌
- lib/app/file_opener.dart openRouteFor: 열 때 어느 길 (플레이어 · 압축 풀기 · 그림 · PDF · ZIP · HWP · 문서 · 바깥 앱) - 순수
- lib/core/app_hidden.dart HiddenList: 목록에서 숨긴 경로 (대소문자 · 옮기면 따라감 · 실제로 없어진 것만 뺌)
- lib/app/rsync_runner.dart RsyncRun: Rsync 화면 실행 (막는 조건 · 작업 · 옵션 (⇄ 의 ← 는 지우지 않음 · -u) · 미리 보기 ·
  차례로 실행) - sync_preview · sync_tools · rsync_filter · CopyCenter 를 부르기만 (modular_sync 는 rc2 그대로라 겹침 없음,
  15 의 RsyncPlan · RsyncLaunch 가 생기면 그것을 부르게 맞춤)
- lib/ui/explorer/rsync_run_dialog.dart: Rsync 확인 창 위젯 (RsyncRun 만 부름)
- integration_test/explorer_use_check_test.dart: 탐색기 점검 통합 시험 (관리자 승인) - 시험 폴더 이름 · 파일 시각 고정
  (픽셀 비교 기준), 시험 폴더만 씀
- explorer_page 6,267 → 5,922

확인: analyze 0 · 전체 단위 2회 통과 1,329 · 건너뜀 18 · 실패 0 (E5b 에서 고친 explorer_test
"X-plore e: Android 앱 휴지통 - 지우기 = 휴지통으로 · [되돌리기] · [휴지통] 화면에서 되살리기" 도 이 2회 통과) ·
점검 통합 시험 (1920 · 960 · 412) 2회 통과.
캡처 픽셀 비교 (고정 기준 = E5a 를 두 번 찍은 것, 기준끼리 87장 같음): 90장 중 87 · 88장 픽셀까지 같음,
다른 2 · 3장은 기준끼리도 다른 움직이는 장면 (이동 확인 · 선택 끝)
약속 시험 (실제 시험 폴더 · 실제 ZIP · 실제 폴더 비교): test/explorer_modules_e5c_contract_test.dart 5

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-22 09:51:34 +09:00
RyuJongJin 6e1e191779 rc2: after_1020 62ba78d (15 - 73fcd97 비밀 열쇠 꼴 규칙 · 62ba78d 화면 · 색 보정 칩 · 자막 편집 F9 · F10 · ftp28) 다시 합침
충돌: lib/ui/subtitle_editor_page.dart - after_1020 의 F9 (좁으면 두 단, 단추 폭) 를 따르고, xplore_p3b 의 JjColors (테마 색) 쪽
const 빼기를 다시 적용 (_hdr 는 final, 분석기 기준 3곳)

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-21 19:49:58 +09:00
RyuJongJin c65f4851f7 rc2: 탐색기 Windows · TC 날짜 열이 "2026-10-2…" 로 잘리던 것 - 모자라면 짧은 꼴, 그래도 모자라면 숨김 (28 지적, 관리자 지시 10/21)
- 날짜 열 폭 (열 비율 · 창 폭) 과 날짜 글 폭 (줄의 흐린 글 모양 · 지금 글꼴 · 기기 × 목록 글자 배율, TextPainter) 을 견줘:
  다 들어가면 "2026-10-21 14:05" (예전 그대로) → 아니면 짧은 꼴 (올해 "10-21 14:05" · 아니면 "2025-10-21") → 아니면 유형을 먼저 숨기고 (아직이면)
  다시 봄 → 그래도 모자라면 날짜 숨김. 열 머리 · 줄이 같은 결정을 씀 (두 창 · 폴더 + 파일 목록 모두)
- 일본어는 / ("2026/10/21 14:05" · "10/21 14:05"), 한국어 · 중국어 · 영어는 예전 꼴 그대로
- 함께 찾은 것: 300 폭 · 글자 1.3 × 150% 에서 위 막대 제목 ("파일 탐색기") 이 넘쳐 그리기 오류 → 경로 막대에 80 남짓 남을 때까지는
  제목 폭 그대로, 그보다 좁으면 제목을 "…" 로 (보통 화면은 바뀌지 않음)
- 시험 integration_test/windows_datecol_shot_test.dart: 실제 글꼴로 312 조합 (폭 13 × 스타일 2 × 언어 ko · ja · zh × 글자 배율 4) -
  날짜 칸 잘림 0 (RenderParagraph.didExceedMaxLines), 넓은 창은 다 쓴 꼴, 짧은 꼴 칸 162 · 날짜 숨김 84 조합, 360 · 412 는 PNG.
  목록이 빈 채로 남는 일이 가끔 있어 (빙글이 없이, 3번 중 2번 실행에서 1~2 조합) 그림을 남기고 [새로 고침] 뒤 확인 - 따로 알림

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-21 19:39:14 +09:00
RyuJongJin 62ba78dfeb 화면 · 색 보정 칩 ✓ 만 · 자막 편집 제목 / 파일 이름 두 줄 · F9 자막 표 좁으면 두 단 · F10 미리보기 글 위로 · ftp28 처음 연결만 한 번 다시 (관리자 지시 10/21, 28 · 15 찾음)
- 화면 · 색 보정 창 (28): 고른 비율 칩 ("세로 9:16" 등) 은 그림이 있는 칩이라 기본 체크가 그림 위에 겹쳤다 → 고르면 그림 자리에 ✓ 만
  (showCheckmark: false). 맞추기 · 회전 칩은 원래 ✓ 만
- 자막 편집 화면 (28): 960 에서도 "자막 편집 · …" 로 잘려 파일 이름이 안 보였다 → 제목은 "자막 편집", 파일 이름은 그 아래 한 줄
  (path_label.middleEllipsis 로 가운데를 줄여 끝 .srt 가 보임, Tooltip 으로 길게 누르면 · 마우스를 올리면 전체). 열쇠 '자막 편집 · {0}' → '자막 편집'
- F9: 자막 편집 표의 칸 폭 (# 48 · 시작 130 · 끝 130 · 단추 96) 이 412 에서 넘쳤다 (24 · 27px) → 내용 칸까지 한 줄에 들지 않으면 두 단
  (위: # · 시작 · 끝 · 단추, 아래: 내용). 시간 칸은 줄이지 않고, 두 단일 때 # 칸 28 · 단추 누를 자리 40 으로 위 단이 412 에 듬. 넓으면 그대로
- F10: 화면 · 색 보정 미리보기의 파일 이름 · 시각 글이 412 에서 [누르고 있으면 조정 전] 위에 겹쳤다 → 좁을 때 (< 560) 만 미리보기 위쪽으로
  (한 줄 · 줄임, 돌아가는 표시 자리는 비움). 단추 자리는 그대로
- ftp28 (28 원문: 부하 중 시험 서버가 처음 연결에 16초 답하지 않음): 시험 도우미가 처음 연결 (서버 준비) 이 "닿지 않음" 일 때만 2초 뒤
  한 번 다시 시도, 맞추기 도중 실패 · 비교 차이는 다시 시도하지 않음. 다시 시도했으면 jj_ftp28_fail 기록에 "다시 시도함" (통과해도)
- 캡처 windows_ui2_shot_test (ko · ja × 412 · 960): 칩 ✓ 만 · 제목 "자막 편집" · 파일 이름 끝 .srt · 넘침 없음 - 4개 통과, 직접 봄.
  ftp_test · ui_test 15개 통과, l10n 빠진 것 0

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-21 19:38:39 +09:00