Commit Graph

12 Commits (modular)

Author SHA1 Message Date
RyuJongJin e82c34a0b8 M4 3묶음: 시작 메뉴 (StartMenu) 의 static 셋을 인스턴스 · PlatformServices.startMenu 주입으로 - 시험이 사용자 시작 메뉴를 건드리지 않게
- StartMenu 는 run · userAreaLocked · shortcutPath 를 가진 인스턴스. StartMenu.user = 사용자 시작 메뉴 · HKCU (앱 조립 create 가 넘김),
  StartMenu.locked(dir) = 늘 막힘 · 바로 가기 자리는 dir 아래 (PlatformServices 를 손으로 조립할 때의 처음 값). 예전 static run ·
  userAreaLocked · shortcutPathOverride 를 바꾸던 것을 대신
- main · 설정 [시작 메뉴에 등록] 은 c.services.startMenu 를 부른다
- 시험: start_menu_test 는 가짜 run · 시험 폴더 바로 가기를 넘긴 인스턴스로 (사용자 영역 0), 손 조립 처음 값이 막혀 있고 사용자 시작 메뉴가
  아님을 새로 봄 (2회 통과). start_menu_real_test (실제 사용자 시작 메뉴) 는 JJ_TEST_LAUNCHER 가 있을 때만 - 예전과 같음
- 사용자가 보게 될 동작: 없음

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-25 19:27:57 +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 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 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 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 44c69af83e 통합 시험 종료 코드: 다 통과했는데 0 이 아니던 것 (ai_e2e · browser_keep · dns_block_real) 고침 (관리자 지시 10/20)
- ai_e2e: 앱 임시 폴더 (jj_mkvmaker) 가 실행 폴더에 남아 exit 2 → 새 도우미 appTempInto 로 시험 폴더 아래에 두고
  시험 끝에 기준을 되돌린 뒤 함께 지움 (ai_cancel · ai_long 도 같게). 사용자 %TEMP%\jj_mkvmaker 는 건드리지 않음
- dns_block_real (· cef_dns_real · tor_dns_real): Edge (WebView2) 사용자 데이터 폴더는 heldByApp (jj_held_)
- tool/test_temp_check.ps1: 실행 폴더 지우기를 Edge 가 놓을 때까지 2초 간격 최대 30번 다시 해 봄,
  rd 오류는 cmd 안에서 버림 (PowerShell 의 2>$null 이 ErrorActionPreference Stop 에서 오류가 되어 exit 1 이었음).
  지우는 것은 그 실행 폴더 안뿐
- 확인: 다섯 파일 모두 -d windows · test_temp_check 로 exit 0, 남은 것 0, 실행 폴더 지워짐. analyze 문제 없음

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-20 19:46:21 +09:00
RyuJongJin 84863c1569 WIP 시험 임시 폴더 검사: 실행마다 %TEMP%\t_jjrun_<표> 로 TEMP · TMP 를 돌려 그 안만 셈 - 다른 세션 시험과 섞여 거짓 실패하던 것 · 앱 코드가 남긴 것도 잡음 · 도우미가 표 밖에 생기면 실패 · Edge 데이터 폴더 (앱이 끝날 때까지 잡힘) 는 jj_held_ 로 보이기만 하고 함께 지움 (관리자 지시 10/20, 검토 대기)
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-20 12:39:46 +09:00
RyuJongJin 25a0cd3c96 WIP 통합 시험 · 캡처의 임시 폴더: 시험 끝에 (실패해도) 지우기 · test_temp_check 가 통합 시험에도 (검토 대기)
관리자 지시 (10/19, 28 이 찾음): Windows 캡처 · 통합 시험 (integration_test, -d windows) 이 %TEMP%\jj_* 시험 폴더를 남겼다
(시험 본문 끝의 deleteSync 는 실패하면 건너뛰고, 앱 · WebView 가 파일을 잡고 있으면 지우기가 실패했다).
- 새 integration_test/support/temp_dir.dart: testTempDir(prefix, {base}) - 만들면서 addTearDown 으로 지우기를 걸어 실패해도 지운다.
  잠겨 있으면 0.25초씩 20번 다시 (실제 시간 - 가짜 시계 밖), 긴 경로는 \?\, 끝내 못 지우면 알리기만.
  통합 시험 26개 파일의 Directory.systemTemp.createTempSync('jj…') 를 모두 이것으로 (JJ_SHOT_TMP 를 쓰는 캡처 도우미 포함).
- tool/test_temp_check.ps1: integration_test 의 이름 (testTempDir 포함) 도 모은다. 넘겨받은 .dart 파일이 있으면 그 파일과 그것이 import 하는
  support 파일의 이름만 센다 - 같은 때 다른 세션 · worktree 가 돌린 시험의 폴더 (jj_explorer_ · jj_sync_ · jj_fake_recycle_) 를 세던 거짓 실패를 없앰.
  시험 소스에 없는 이름의 새 jj 폴더는 참고로만 보인다. 사용: test_temp_check.ps1 integration_test\windows_b6_shot_test.dart -d windows
- com_guard_test 의 쓰지 않는 dart:io import 정리 (analyze).

시험: windows_b6 · windows_xplore · windows_ftp · windows_wifi 캡처 통과 · 새로 남은 것 0 (test_temp_check), analyze 문제 없음.

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