<!-- FILE: _St/ai_read_패치.md | ROLE: sort 전체 현재 작업 -->

## v281 현재 작업
- 상태: `[검증대기]`
- 단일 목표: YELLOW 관리 새 탭을 Instagram 로드 전에 CDP로 선삽입해 unload 등록을 차단하고 실제 등록·호출 원인을 로그로 확인한다.
- `CL-01`: Background→Auto8700 bootstrap target 탐색 요청.
- `CL-02`: `Page.addScriptToEvaluateOnNewDocument` 등록 확인.
- `CL-03`: 빈 문서 즉시 설치 후 Instagram 이동 확인.
- `CL-04`: unload 차단 또는 beforeunload/pagehide/visibilitychange 등록·실행 source/stack 수집.
- 변경 모듈: Auto8700, IG Background, IG Content bridge, manifest/version.
- 신규 테스트: `IG_StYellow/test_ext_cdp_lifecycle_preload_v281.js`, Auto8700 lifecycle 단위 테스트 3개.
- 정적 결과: JavaScript syntax 47 OK, IG test 36 OK, Python compile 33 OK, pytest 74 passed, 생성 스크립트 동적 모형 OK.
- 실제 완료 기준: 3계정 이상 자동 실행에서 각 replacement 탭마다 CL-01→CL-03 완료, 문제 unload는 BLOCKED_REGISTER/BLOCKED_PROPERTY 기록, 이전 탭 종료 뒤 다음 계정 자동 계속, 응답 없음 재발 없음.
- 제외 목표: OWNER_LOST fallback 교정, pending handoff 정리, Main 복사 UI, Analyze8780 KST 표시는 이번 작업에 포함하지 않는다.

## IG v280 미완료 이전 작업
- 상태: `[검증대기]`
- 체크 ID: `T-IG-V280-TAB-OWNER-001`
- 단일 목표: 여러 Instagram 탭의 OWNER를 최근 이력으로 관리하고 새 탭 OWNER 확정 뒤 이전 탭을 닫는다.
- Background는 최근 20개 탭 이벤트, generation, run_seq, pending handoff를 저장하고 서비스 워커 재시작 시 수명 상태를 복원한다.
- Side는 새 tab_id를 먼저 세션에 반영한 뒤 `IGBLUE_COMMIT_TAB_HANDOFF`를 호출한다.
- Main `igblue_main_diag_toggle/panel`과 DOM 진단복사에 CDP·탭 수·OWNER·인계 이력을 표시한다.
- v279c WS8771 direct 다운로드는 변경하지 않는다.
- 테스트: `test_ext_tab_control_v280.js`, `test_ext_tab_replacement_v279d.js`, 전체 회귀.
- 정적 결과: JavaScript syntax 46 OK, IG test 35 OK, Python compile 33 OK, pytest 71 passed.
- 실제 Chrome 완료 기준: CDP:X→O 시작과 CDP:O 시작 모두 3계정 완료, 매 전환 OWNER 선확정, 이전 탭 종료, 중단 없음.


## IG v279d 완료 참고
- 상태: `[완료]`
- 체크 ID: `T-IG-V279D-TAB-REPLACE-001`
- 단일 목표: 자동 계정 전환을 기존 탭 URL 재사용에서 새 탭 교체 방식으로 변경한다.
- 새 탭을 비활성으로 생성하고 Content/Main 준비 확인 후 활성화한 다음 이전 자동 탭만 닫는다.
- 새 탭 실패 시 이전 탭을 보존하고 새 탭만 제거한다.
- 이전 탭 종료 guard는 900ms 제한을 두며 실패·timeout이 새 탭 진행을 막지 않는다.
- document_start unload 전역 후킹은 제거하고 이전 탭 종료 직전의 제한 guard만 남긴다.
- 유지: v279c WS8771 direct MP4/JPG 저장, v279ccc 진행률·No·ETA.
- 테스트: `test_ext_tab_replacement_v279d.js`, `test_ext_navigation_unload_guard_v279cc.js`, 전체 IG 회귀.
- 정적 결과: JavaScript syntax 45 OK, IG test 34 OK, Python compile 33 OK, pytest 71 passed.
- 실제 Chrome 확인: 첫 계정 새 tab_id, 이전 tab_id 종료, 다음 계정 반복, 자동종료 후 현재 탭 클릭, MP4/JPG 저장.
- 제외: 카테고리 100개, Analyze8780 성장 분석 UI.
## IG v279ccc 현재 작업
- 상태: `[검증대기]`
- 첫 계정·다음 계정 URL 이동 전 guard 호출/결과/차단/URL update/ready 콘솔 로그를 남긴다.
- guard 실패는 첫 URL 이동 중단이 아니라 `GUARD_FAILED_CONTINUE` 기록 후 이동 계속으로 변경했다.
- `#IGBLUE_NoTop` 생성만 기다리지 않고 MAIN 스크립트 끝의 ready marker를 확인한다.
- 다운로드 No는 실제 rank가 있을 때만 표시하고 `No---` 기본값은 제거했다.
- 자동 진행률은 전체 계정×Top 목표 기준이며 자동종료 전 100%가 되지 않는다.
- 발견 자산은 shortcode+mp4/jpg 단위로 예정/완료를 집계해 `파일 완료/예정`으로 표시한다.
- 종료예상은 최근 성공 세트 20개의 전체 처리시간 이동평균과 설정 대기시간을 사용한다. 표본 전에는 `계산중`이다.
- 테스트: `test_ext_navigation_unload_guard_v279cc.js`, `test_ext_progress_eta_v279ccc.js`, 전체 IG 회귀.
- 정적 결과: JavaScript syntax 44 OK, IG test 33 OK, Python compile 33 OK, pytest 71 passed.
- 실제 Chrome 결과: CDP:O 2계정·3계정, 3계정×Top3, 파일 18/18, 자동종료 `OK`.

## 이전 IG v279cc URL 이동 unload guard·준비 확인
- 상태: `[검증대기]`
- 체크 ID: `T-IG-V279CC-NAV-UNLOAD-READY-001`
- 단일 목표: 자산 2/2 완료 뒤 다음 계정 URL 이동에서 `unload` 등록을 제한하고 새 문서 Content/Main 준비가 확인된 뒤 자동 실행을 재개한다.
- 변경: URL 이동 전 MAIN world에서 `unload` addEventListener와 `window.onunload`만 차단한다.
- 변경: guard 설치 실패 시 URL을 열지 않고 오류·tab_id·guard 결과를 남긴다.
- 변경: Side 고정 4.5초 대기를 제거하고 Background가 목표 URL·탭 complete·Content probe·Main panel을 확인한다.
- 진단: `unload_guard`, `navigation_ready`, 실제 URL, 탭 status, probe 오류, 시도 횟수, 준비 소요시간을 cycle 결과에 남긴다.
- 신규 테스트: `IG_StYellow/test_ext_navigation_unload_guard_v279cc.js`.
- 정적 결과: JavaScript syntax 39 OK, IG test 32 OK, Python compile 33 OK, pytest 71 OK.
- 실제 Chrome 확인: 2/2 완료 → 다음 계정 이동, Permissions policy 경고 억제 여부, 1/3→2/3 자동 재개, 다운로드 회귀.
- 제외: 다운로드 진행률/No/ETA, 기본 카테고리 100개, Analyze8780 시각화.

## IG v279c v262 자동 다운로드 exact 복원
- 상태: `[완료]`
- 체크 ID: `T-IG-V279C-AUTO-V262-RESTORE-001`
- 기준: v262 CDP:O 사용자 실제 확인 — 2개 계정 순회, 전체 게시물 5개, MP4 5개, JPG 5개, `WS8771 direct download`, 실제 저장 경로 표시.
- 변경: 자동 snapshot 자산은 MP4/JPG URL만 허용하고 `metadata`를 자동 완료 자산에서 제거했다.
- 변경: 자동 direct/cache pair와 WS8771 direct asset 전송을 v262 구현으로 복원했다.
- 완료 조건: 실제 파일 저장 또는 실제 중복 파일·JSON·보고서 확인. metadata만 저장된 경우 완료 수 증가 금지.
- 유지: 수동·Filtered metadata 정책, Side 계정 클릭 선택, MAIN hover 비활성, v279b 상태 보존.
- 정적 결과: JS syntax 38 OK, IG test 30 OK, 폐기 진단 1 SKIP, Python compile 33 OK, pytest 70 OK.
- 실제 Chrome v279c 결과: 사용자 연속 실행 MP4/JPG 실제 저장·WS8771 direct 완료 `OK`.
- v279c 항목은 완료 처리하고 v279cc URL 이동 회귀에서 자동 저장이 유지되는지 확인한다.

## IG v279bb MAIN 스코프·자동 다운로드 복구
- 상태: `[코드반영]`
- 체크 ID: `T-IG-V279BB-MAIN-SCOPE-001`
- `IGBLUE_MAIN_HOVER_DIAGNOSTIC_ENABLED is not defined` 오류를 제거했다.
- v279bb 당시 v279aaaa 동일 비교는 실제 자동 파일 저장을 보장하지 못했고, 사용자 확인에서 MP4/JPG 0개로 실패했다. v279c에서 v262 exact 경로로 대체했다.
- 정적·단위 결과: JS syntax 37 OK, IG test 29 OK, 진단 1 SKIP, Python compile 33 OK, pytest 71 OK.
- 실제 Chrome 자동 다운로드는 검증대기다.
- `IGBLUE_` → `YELLOW` 전체 변경은 별도 후속 작업이다.

## IG v279b 현재 작업
- 체크 ID: `DOWNLOAD-STATUS-HOLD-01`
- 상태: `[코드반영]`
- 단일 목표: 다운로드 시작 전에는 상태 표시를 변경하지 않고, 실제 시작 순간에만 초기화하며, 완료 후 마지막 실제 파일 정보를 보존한다.
- 제거: 계정 이동·새 자동실행·`auto_account_continue`에서 다운로드 상태를 선제 초기화하는 처리.
- 제거: 다운로드 전 `자동현황 대기 / 다운로드 진행 없음`, `No---`, `asset: 파일`, `파일: 대기중`을 자동 생성하는 처리.
- 유지: 자동 Top, 수동 JPG/MP4, Side 계정 클릭, Auto8700·WS8771, 완료 집계·자동종료.
- 정적 결과: `test_ext_download_status_preserve_v279b.js` 및 전체 IG 회귀 검사 OK.
- 실제 Chrome 결과: `UNKNOWN`.
- 다음 확인: 완료 표시가 있는 상태에서 새 자동실행을 시작해 후보 탐색·계정 이동 동안 표시가 그대로인지, 실제 다음 다운로드 시작 순간에만 새 파일 상태로 바뀌는지 확인한다.

### 제공 로그 검토
- 첫 실행: 11:31:20~11:31:53, 3개 계정×목표 2개 완료 로그 존재.
- 두 번째 실행: 11:33:22~11:33:59, 첫 계정 2개·마지막 계정 2개 완료 로그 존재.
- 두 번째 실행의 2/3 계정은 `AD-02` 이후 로그가 없으며 다음 계정으로 전환됐다. 현재 로그만으로 후보 없음 사유는 확인 불가하므로 별도 완료·실패 판정하지 않는다.
## IG v279aaaa
- [코드반영] Side `IG 계정명` 클릭 전용 추가 대상 선택.
- [코드반영] `계정 확인중`을 `IG 계정 선택`으로 교체.
- [코드반영] 자동 계정 확인 타이머·Main current-account polling·URL 자동 초기화 제거.
- [검증대기] 다른 계정 카드 연속 선택·계정추가·SQLite 저장 실제 확인.

## IG v279aaa
- `[코드반영]` MAIN hover 비활성 진단.
- 실제 Chrome에서 MAIN JPG/MP4 및 페이지 이동 재검증 필요.

<!-- FILE: _St/ai_read_패치.md | ROLE: sort 전체 현재 작업·검증대기 -->
# sort 현재 패치 — v279aa

## IG v279aa
- 수동 다운로드 복구와 Auto8700 안내 우선순위 교정
- 실제 Chrome 검증대기

상태: `[코드반영·실제 Windows 검증대기]`

## 단일 목표

Auto8700의 `자동실행`과 `CDP모드 실행`이 8700 포트만 남은 불완전 상태를 정상으로 오판하지 않고, 실제 CDP Chrome과 Instagram Runtime을 준비하도록 복구한다.

- `/json/version` 응답만으로 실행 성공 처리하지 않음
- Instagram page target·webSocketDebuggerUrl·Runtime.evaluate 응답 확인
- `/json/new`는 PUT으로 호출하고 실패 시 browser `Target.createTarget` 사용
- 수동 `자동실행`·`CDP모드 실행`은 기존 정상 Instagram 탭을 앞으로 표시
- 8700만 열리고 Runtime이 없으면 `CDP:PORT`·`CDP 복구` 표시
- 전용 `D:\cdp-data-dir` Chrome만 복구 종료 후 재실행
- 일반 Chrome User Data 프로세스는 종료하지 않음
- 설정 창에 CDP 실행 성공 또는 실패 원인 표시

## 실제 확인

- Auto8700 `자동실행` 클릭 → 전용 CDP Chrome 실행 또는 기존 탭 앞으로 표시
- 설정 `CDP모드 실행` 클릭 → 같은 동작과 결과 문구 확인
- 전용 CDP Chrome 강제 종료·8700 잔류·Instagram 탭 없음 상태 각각 복구 확인
- 일반 Chrome 창·프로필은 유지

## 제외

- Instagram 다운로드 로직
- Main 계정 hover/click
- 응답 없음 이후 계정 자동 스킵
- Analyze8780 UI 변경