## B. sort 프로젝트 전용 지침 ### 1. sort / Instagram 자동화 현재 절대 구조 #### Heart8772 * DOM origin(x,y)만 제공한다. * Chrome 추적을 유지한다. * 클릭 기능은 없다. * 실제 마우스 이동 기능도 없다. * 다운로드, 파일 처리, JSON 처리를 하지 않는다. #### Main/content / Ext * Instagram 페이지 내부 DOM 분석 담당 * DOM 좌표 계산 담당 * client_x/client_y 제공 * hover 검증 * 클릭 결과 검증 * 오차 계산 담당 * marker/overlay 표시 담당 * shortcode, rank, asset_kind, button_rect 등 페이지 내부 정보 추출 * OS 마우스 이동, 파일 시스템 접근, Chrome 프로세스 제어는 하지 않는다. #### WS8771 * Heart8772 origin + Ext client_x/client_y를 합산한다. * `screen_x = origin_x + client_x` * `screen_y = origin_y + client_y` * 실제 마우스 이동/클릭을 수행한다. * JS가 보낸 screen_x/screen_y는 참고 로그로만 본다. * 파일/JSON/MD5/다운로드 결과 검증을 담당한다. * 중복 검사와 canonical 파일명 검증을 담당한다. #### Auto8700 * 서비스 관리자 * WS8771, Heart8772, RTC8790_8791 실행/감시 * Chrome 실행 관리 * CDP 포트 확인 * Profile 9 관리 * `/status`, `/cdp_test` 같은 진단 페이지 제공 * Chrome debug 실행 여부와 CDP 상태를 명확히 표시한다. #### RTC8790_8791 * 원격 화면/제어 담당 * viewer 제공 * control on/off 상태 표시 * 마우스 제어 충돌 가능성을 표시한다. * Auto/WS의 실제 마우스 제어와 충돌할 수 있으므로 테스트 항목에 포함한다. --- ### 2. CDP / JS / WS / Heart 역할 구분 #### Ext JS로 가능한 기능 ```text 현재 페이지 DOM 읽기 querySelector/querySelectorAll 게시물 카드 찾기 썸네일 위치 계산 getBoundingClientRect() client_x/client_y 계산 shortcode 추출 owner 후보 추출 본문/alt/title 등 DOM 텍스트 추출 버튼 존재 여부 확인 Top sorted medias 영역 확인 No001/No002/No003 후보 찾기 페이지 안 marker/overlay 표시 hover 대상 판정 DOM 변화 MutationObserver 감시 페이지 title 변경 localStorage/sessionStorage 읽기 페이지 안 element.click() WS로 현재 상태 전송 ``` #### CDP로만 가능한 기능 ```text Chrome CDP 연결 상태 확인 /json/version 확인 /json/list 탭 목록 확인 Target 목록 조회 특정 탭에 attach 탭별 WebSocket debugger 연결 Runtime.evaluate를 브라우저 외부에서 실행 Page.reload Page.navigate Network 요청/응답 감시 Console 로그 수집 Performance trace 브라우저 내부 exception 수집 DOM snapshot 수집 현재 탭 focus/activate 탭 생성/닫기/전환 브라우저 버전/디버거 WebSocket 확인 ``` #### CDP도 JS도 못하는 기능 ```text Windows 실제 마우스 커서 이동 OS 레벨 클릭 다른 이름으로 저장 창 제어 파일 저장창 위치 이동 D:\_Down 파일 존재 확인 MD5 계산 JSON 파일 직접 수정 Chrome 프로세스 강제 종료 Chrome.exe 실행 --remote-debugging-port=8700으로 실행 포트 8700 점유 PID 종료 Heart origin screen 좌표 생성 다중 모니터 실제 화면 보정 ``` 이 기능들은 Auto8700, WS8771, Heart8772가 역할에 맞게 담당한다. --- ### 3. sort 프로젝트 폴더 기준 기기1: 로컬 PC WSL 경로 ```text /mnt/d/_St/Auto8700 /mnt/d/_St/WS8771 /mnt/d/_St/Heart8772 /mnt/d/_St/IG_Sorter_Yello /mnt/d/_St/RTC8790_8791 /mnt/d/_St/Shared ``` Windows 기준: ```text D:\_St\Auto8700 D:\_St\WS8771 D:\_St\Heart8772 D:\_St\IG_Sorter_Yello D:\_St\RTC8790_8791 D:\_St\Shared ``` 기기2: 원격 우분투 서버 ```text /var/www/html ``` ZIP 생성 시 base_root는 기존 프로젝트 구조와 동일하게 유지한다. base 폴더명이 버전마다 달라지면 안 된다. --- ### 4. sort 프로젝트 test_* 파일 기준 #### Auto8700 ```text Auto8700/ test_auto8700_module.py test_auto8700_cdp.py ``` 테스트 항목: ```text Auto8700 실행 여부 8707 웹서버 응답 /status 응답 manager version 로그 생성 최근 로그 10개 유지 WS8771 health Heart8772 health RTC8790_8791 health Chrome 실행 경로 8700 포트 확인 /json/version 확인 /json/list 탭 목록 확인 Instagram 탭 확인 debug 없이 열린 Chrome 감지 Profile lock 의심 상태 감지 ``` #### WS8771 ```text WS8771/ test_ws8771_module.py test_ws8771_mouse_coord.py test_ws8771_file_download.py ``` 테스트 항목: ```text 8771 포트 listen ping 응답 ws_build_version 확인 Heart8772 연결 heart_state 확인 heart_dom_origin 수신 origin + client 좌표 합산 DPI 정보 확인 mouse_control_ok 확인 remote_mouse_grab_suspected 판정 D:\_Down 접근 파일 존재 확인 canonical 파일명 생성 No001/No없음 규칙 확인 JSON 읽기/쓰기 MD5 가능 여부 completion_diagnostic_begin 존재 cdp_ok 포함 mouse_control_ok 포함 last_failed_stage 포함 cycle_stage 포함 ``` #### Heart8772 ```text Heart8772/ test_heart8772_module.py test_heart8772_origin.py ``` 테스트 항목: ```text 8772 포트 확인 health 확인 Chrome 창 감지 window_rect 확인 origin_x/origin_y 계산 DOM origin 상태 확인 클릭 기능 없음 확인 마우스 이동하지 않음 확인 다운로드/파일 처리하지 않음 확인 ``` #### RTC8790_8791 ```text RTC8790_8791/ test_rtc8790_module.py test_rtc8790_control.py ``` 테스트 항목: ```text 8790 포트 확인 8791 포트 확인 viewer.html 접근 WebSocket 연결 token 생성/확인 desktop capture 동작 fps 설정 quality 설정 max-width 설정 control on/off 상태 원격 마우스 제어 활성 여부 Auto/WS 마우스 제어와 충돌 가능 상태 ``` #### IG_Sorter_Yello / Ext ```text IG_Sorter_Yello/ test_ext_module.html test_ext_module.js test_ext_dom.js test_ext_ws_bridge.js ``` 테스트 항목: ```text background 연결 content script 연결 현재 탭 ID 현재 URL Instagram 페이지 여부 extension version Top sorted medias 영역 Filtered medias 영역 게시물 카드 목록 No001/No002/No003 rank shortcode 추출 owner 후보 추출 asset kind 확인 다운로드 버튼 DOM 확인 getBoundingClientRect 확인 client_x/client_y 계산 marker 렌더 확인 hover zone 확인 button rect 확인 WS ping hover_status 전송 browser_origin 전송 candidate 정보 전송 cycle_state 전송 OS 마우스 제어 불가 표시 파일시스템 직접 접근 불가 표시 CDP 실행/포트 열기 불가 표시 Chrome 프로세스 제어 불가 표시 ``` #### Shared ```text Shared/ test_shared_canonical.py test_shared_log_policy.py ``` 테스트 항목: ```text 목록 화면 No001/No002 파일명 생성 단일 reel/p 화면 No없음 생성 owner/upload_stamp/shortcode/ext 조합 신규/중복 동일 canonical 확인 D:\_Down 기준 경로 생성 사용자명/도메인/목표 폴더 조합 JSON 경로 생성 실행 로그 생성 에러 로그 생성 최근 10개 유지 로그 미사용 설정 ok/fail/unknown 구분 exists=true일 때만 차단 timeout/unknown은 다운로드 차단 금지 ``` --- ### 5. 다운로드 기준 * 목록 화면에서는 rank가 있으면 파일명에 `_No000_` 형식을 반드시 넣는다. * 순위가 없으면 `_No없음_`으로 한다. * 단일 `/reel/`, `/reels/SHORTCODE`, `/p/SHORTCODE` 화면에서는 `_No000_`이 없으므로 `_No없음_`으로 넣는다. * 신규 다운로드와 기존 중복 반환 모두 canonical 규칙을 따른다. 기본 규칙: ```text {owner}_{upload_stamp}_No000_{shortcode}.{ext} ``` 단일 화면 규칙: ```text {owner}_{upload_stamp}_No없음_{shortcode}.{ext} ``` 중복 체크 기준: * `exists=true`가 확실할 때만 차단한다. * WS 실패, timeout, 불확실 상태에서는 다운로드를 막지 않는다. * WS 미접속, Heart 미실행, 재시작 중은 예상 가능한 정상 상태다. --- ### 6. 자동화 진행 기준 대량 자동화는 아래 단계로 진행한다. ```text 1. CDP ON 복구 2. 원격 마우스 점유 상태 분리 3. 원점찾기 성공 4. 프로필 1개 × 목표 3개 성공 5. 프로필 10개 테스트 6. 프로필 100개 테스트 7. 프로필 2000개 큐 처리 ``` 프로필 리스트 한도가 2000개라면: ```text 프로필 1개씩 순차 처리 프로필당 목표 다운로드 개수만큼 처리 중간 상태 저장 중단 후 재개 가능 done/partial/failed/skipped 구분 ``` 상태값: ```text pending running done partial failed skipped ``` --- ### 7. CDP 테스트 페이지 기준 Auto8700에 CDP 테스트 페이지를 둔다. 예시: ```text http://127.0.0.1:8707/cdp_test ``` 버튼 구성: ```text [1] CDP 상태 확인 [2] 8700 포트 확인 [3] /json/version 확인 [4] /json/list 탭 목록 확인 [5] Chrome 프로세스 확인 [7] Chrome debug 실행 [8] CDP 재확인 [9] 기존 Chrome 상태 표시 [11] Instagram 탭 찾기 [12] 활성 탭 URL 읽기 [13] 활성 탭 title 읽기 [14] Runtime.evaluate 테스트 [15] DOM document 읽기 [16] 현재 탭 focus [17] 현재 탭 reload [18] 간단 JS 실행 ``` 완료 기준: ```text CDP_CHECK_OK port=8700 endpoint=/json/version chrome_debug_alive=True cdp_ok=True ``` 복사 진단에는 아래가 나와야 한다. ```text Chrome:ON WS:OK 프로필OK cdp_ok=True chrome_debug_alive=True cdp_last_error= ``` --- ### 8. sort 프로젝트 현재 우선순위 현재 우선순위는 아래 순서로 간다. ```text 1. ai_read* 문서 체계 정리 2. test_list.md 생성 3. 각 모듈 test_* 기본 파일 생성 4. Auto8700 CDP 테스트 구현 5. WS 진단 복사/좌표/마우스 테스트 고정 6. Heart origin 테스트 고정 7. Ext DOM/WS bridge 테스트 고정 8. RTC control 상태 테스트 고정 9. Shared canonical 테스트 고정 10. 통합 dry-run 테스트 11. 실제 자동 다운로드 회귀 테스트 ``` --- ### 9. sort 프로젝트 완료 선언 기준 아래 조건이 맞아야 완료로 선언한다. ```text 1. 해당 기능 test_* 존재 2. test_list.md에 항목 존재 3. 테스트 실행 결과 OK 4. ai_read_완료.md에 기록 5. 기존 완료 기능 회귀 테스트 통과 6. manifest/version 반영 7. 최종 ZIP 1개 생성 ``` 이 기준을 만족하지 않으면 “코드반영” 또는 “검증대기”로만 표시한다. --- ### 10. 핵심 선언 ```text 이 프로젝트는 앞으로 test_* 기반으로 관리한다. 기능 추가는 반드시 test_* 추가와 함께 한다. test_*에 없는 기능은 완료 기능으로 인정하지 않는다. 완료는 코드 반영이 아니라 테스트 OK 로그가 있을 때만 완료다. ai_read.md는 현재 기준서이고, test_list.md는 진행률 기준표다. 다음 채팅방으로 이동해도 ai_read*와 test_list.md만 보면 현재 상태, 전체 진행률, 남은 작업을 알 수 있어야 한다. ```