<!-- FILE: _St/IG_StYellow/ai_read_패치.md | ROLE: IG 현재 작업·검증대기 -->

## v287 패키지 버전 동기화
- 상태: `[코드반영]`
- manifest·Side·MAIN/Content 진단 marker와 IG test 기대 버전을 v287로 맞췄다.
- IG 기능 로직은 변경하지 않았다.


## v286 자동 전용 새 탭·exact target 종료
- 상태: `[검증대기]`
- 단일 목표: 자동 WS direct와 수동 다운로드를 분리 유지하면서 자동 시작/계정 전환의 페이지 상태를 계정별 새 탭으로 격리하고 오류 탭을 CDP로 종료한다.
- `teAutoPyFreshStartPreview`: `0/N`을 1번 계정으로 강제하고 기존 페이지 snapshot을 시작 대상으로 사용하지 않는다.
- `teAutoPyStartOnceFromUi`: 새 실행·재개는 새 관리 탭을 먼저 만든다.
- `teAutoPyPrepareAccountQueueForStart`: fresh 탭의 실제 계정을 검증하고 삭제 계정만 명시적으로 건너뛴다.
- Background: replacement tab metadata에 `auto_created/cdp_target_id` 저장, exact CDP close와 Chrome tab 제거 확인 우선, `chrome.tabs.remove` fallback.
- 사용자 탭은 `not_managed_auto_tab`으로 보존하며 CLOSED 이벤트를 만들지 않는다.
- 중지·오류·자동종료는 마지막 관리 탭 종료를 요청한다.
- 테스트: `test_ext_auto_fresh_tab_cdp_close_v286.js`와 전체 IG 회귀 38/38 OK.
- 실제 확인: 2개 이상 계정·첫 목록 밖 다운로드 없음·오류 탭 제거·마지막 탭 제거·수동 다운로드 현재 탭 유지.

## v282 MAIN/SIDE UI 현재 작업
- 상태: `[검증대기]`
- 단일 목표: MAIN 우상단 진단 중복을 한 줄 상태와 `_ / □`로 통합하고, SIDE 0/N을 한 번에 1/N으로 바꾸는 `1부터` 버튼을 추가한다.
- MAIN 표시: `CDP:O · 탭 N · OWNER tab 000000`; 클릭 시 전체 진단 복사, `_` 축소·복원, `□` 상세 열기.
- 상세 패널은 자동 갱신하지 않고 열 때와 `새로고침` 버튼에서만 최신 상태를 읽는다.
- 기존 `CDP`, 탭 표시, `DOM 진단복사`, `MAIN v 👁`의 화면 중복은 숨긴다.
- SIDE `1부터`: 목록 존재 + index 0 + 자동실행 정지일 때만 활성, 클릭 시 index 1 저장, summary 토글 이벤트 차단.
- 변경 모듈: IG Content UI, MAIN ready/DOM 진단 버전 표식, Side HTML/JS, manifest/version.
- 신규 테스트: `IG_StYellow/test_ext_ui_compact_v282.js`.
- 정적 결과: JavaScript syntax 48 OK, IG test 37 OK, Python compile 33 OK, pytest 74 passed.
- 실제 완료 기준: Chrome에서 한 줄 상태만 표시, 클릭 복사, 패널 텍스트 선택 3초 이상 유지, `_ / □` 동작, Side 0/3에서 `1부터`→1/3, 1 이상·실행 중 비활성 확인.
- 제외 목표: OWNER_LOST fallback, pending handoff 정리, Analyze8780 KST 표시는 이번 작업에 포함하지 않는다.

## v281 CDP 수명주기 이전 작업
- 상태: `[검증대기]`
- 단일 목표: 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 표시는 이번 작업에 포함하지 않는다.

## v280 미완료 이전 작업
- 상태: `[검증대기]`
- 목표: 최근 탭 20개·generation·run_seq·READY/OWNER 상태로 OWNER를 관리하고 새 OWNER commit 뒤 이전 탭을 닫는다.
- Background: `IGBLUE_GET_TAB_CONTROL_STATE`, `IGBLUE_CLAIM_TAB_OWNER`, `IGBLUE_COMMIT_TAB_HANDOFF` 추가.
- Side: 새 tab_id 선반영 후 commit, 기존 탭 시작 시 OWNER claim.
- Main: `igblue_main_diag_toggle/panel`을 탭 제어 진단으로 교체, DOM 진단복사에 tab_control 포함.
- 신규 테스트: `test_ext_tab_control_v280.js`.
- 정적 결과: JavaScript syntax 46 OK, IG test 35 OK, Python compile 33 OK, pytest 71 passed.
- 실제 Chrome 완료 기준: CDP:X→O와 CDP:O에서 3계정 연속 실행·OWNER 인계·이전 탭 종료·파일 저장·자동종료.


## v279d 완료 참고
- 상태: `[완료]`
- 단일 목표: 첫 계정과 다음 계정을 새 Instagram 탭으로 준비한 뒤 이전 자동 탭을 닫는다.
- 새 탭은 `active:false` 생성 → ready probe → 활성화 순서다.
- 이전 탭은 새 탭 활성화 뒤에만 종료하며, 종료 guard timeout은 900ms다.
- 새 탭 실패 시 이전 탭 보존·재활성화와 새 탭 제거를 수행한다.
- document_start unload monkey patch 제거로 자동종료 뒤 현재 탭에 지속 후킹을 남기지 않는다.
- 테스트: `test_ext_tab_replacement_v279d.js`, `test_ext_navigation_unload_guard_v279cc.js`, 전체 회귀.
- 정적 결과: JavaScript syntax 45 OK, IG test 34 OK, Python compile 33 OK, pytest 71 passed.
- 실제 Chrome 결과: CDP:O 2계정·3계정, 3계정×Top3, 파일 18/18, 자동종료 `OK`.
## v279ccc 현재 작업
- 상태: `[검증대기]`
- 첫 계정·다음 계정 URL 이동 전 guard 호출/결과/차단/URL update/ready 콘솔 로그 추가.
- guard 실패는 이동 중단이 아니라 진단 후 계속.
- `#IGBLUE_NoTop` 대신 MAIN 스크립트 완료 marker를 준비 기준으로 사용.
- No 미확인 시 `No---` 숨김.
- 자동 진행률은 전체 실행 기준, 발견 자산은 `파일 완료/예정` 표시.
- ETA는 최근 성공 세트 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 결과: `UNKNOWN`.

## v279cc 현재 작업
- 상태: `[검증대기]`
- 단일 목표: 다음 계정 URL 이동 직전 `unload` 전용 guard 설치와 새 문서 Content/Main 준비 확인.
- 변경 파일: `background.js`, `content_instagram.js`, `side.js`, `manifest.json`.
- guard 설치 실패는 `unload_guard_install_failed`로 URL 변경 전에 중단한다.
- `igblue_navigation_ready_probe`는 목표 pathname 일치, Content 응답, Main `#IGBLUE_NoTop` 생성 여부를 반환한다.
- Background는 탭 complete 이후 probe를 반복하며 30초 초과 시 `navigation_ready_timeout`과 마지막 상태를 반환한다.
- Side는 고정 4.5초 sleep 없이 `navigation_ready` 결과 뒤 계정 상태를 검사하고 자동 계속을 예약한다.
- 신규 테스트: `test_ext_navigation_unload_guard_v279cc.js`.
- 정적 결과: JavaScript syntax 39 OK, IG test 32 OK, Python compile 33 OK, pytest 71 OK.
- 실제 Chrome 결과: `UNKNOWN`.
- 완료 기준: 2/2 이후 경고가 사라지거나 guard 차단 로그가 남고, 다음 계정 2/3에서 Main 응답 대기 고착 없이 자동 다운로드가 계속됨.

## v279c 완료 기준
- 상태: `[완료]`
- 단일 목표: v262에서 실제 성공한 Side snapshot → WS8771 MP4/JPG 자동 다운로드 경로 복원.
- `metadata-only` 자동 완료 제거.
- 실제 파일 또는 실제 중복 확인이 없으면 게시물 완료 수 증가 금지.
- 신규 테스트: `test_ext_auto_v262_exact_restore_v279c.js`.
- 정적 결과: JS syntax 38 OK, IG 회귀 30 OK, 폐기 진단 1 SKIP, Python compile 33 OK, pytest 70 OK.
- 실제 Chrome 결과: 사용자 연속 자동 실행에서 MP4/JPG 실제 저장·WS8771 direct 완료 `OK`.
- 확인 항목: CDP:O Top목표 3, MP4/JPG 실제 저장, 화면 집계, 마지막 상태 보존.

## v279bb 현재 작업
- 체크 ID: `MAIN-SCOPE-AUTO-RESTORE-01`
- 상태: `[코드반영]`
- 목표: MAIN hover 비활성 패치의 외부 IIFE 스코프 오류를 제거하고, 실제로 동작했던 자동 Top 다운로드 실행 흐름이 끝까지 등록되게 한다.
- 원인: 첫 MAIN IIFE 내부 `const IGBLUE_MAIN_HOVER_DIAGNOSTIC_ENABLED=false`를 첫 IIFE 종료 뒤의 별도 IIFE가 직접 참조해 `ReferenceError`가 발생했다.
- 수정: 별도 IIFE는 `window.__IGBLUE_MAIN_HOVER_DIAGNOSTIC_ENABLED__ === true`를 안전하게 읽고 false/미정의 시 정리 후 종료한다.
- 유지: v279b 다운로드 상태 보존, Side 계정 클릭 선택, hover 비활성, MAIN 수동 JPG/MP4, WS8771 직접 저장, snapshot 자동 다운로드.
- 자동 다운로드 핵심 3함수는 v279aaaa와 해시 비교 결과 동일하다.
- 정적 결과: JavaScript syntax 37개 OK, IG 테스트 29개 OK, 폐기 진단 1개 SKIP, Python compile 33개 OK, pytest 71개 OK.
- 실제 Chrome 결과: `UNKNOWN`.
- 완료 기준: 새 Instagram 탭에서 콘솔 ReferenceError 없음, 자동 Top에서 AD-03→AD-06→AD-07, 실제 파일 저장, 자동종료 후 마지막 완료 표시 보존.
- 후속 보류: 전체 `IGBLUE_` → `YELLOW` 명칭 전환은 안정화 완료 뒤 별도 버전에서 수행한다.

## v279b 현재 작업
- 체크 ID: `DOWNLOAD-STATUS-HOLD-01`
- 상태: `[코드반영]`
- 목표: 실제 다운로드 시작 전에는 상태 영역을 변경하지 않고, 실제 시작 이벤트에서만 초기화하며, 종료 후 마지막 실제 파일 상세를 보존한다.
- 변경 파일: `side.js`, `side.html`, `manifest.json`, `test_ext_download_status_preserve_v279b.js`.
- 계정 이동·자동 시작·다음 계정 계속은 `teProgressPreserveUntilNextDownload()`만 호출하고 파일 상태를 비우지 않는다.
- `teProgressBeginActualDownload()`는 `ndy_down_progress status=start`에서만 실행한다.
- `done/already_done/error` 결과를 그린 뒤 다음 시작까지 화면 갱신을 잠근다.
- Auto UI만으로 progress box를 생성하지 않으며 초기 자동현황 텍스트도 비워 둔다.
- 정적 결과: 전체 IG 테스트 28개 OK, 폐기 진단 테스트 1개 SKIP, JavaScript syntax OK.
- 실제 Chrome 결과: `UNKNOWN`.
- 완료 기준: 이전 완료 표시 → 새 자동 시작/계정 이동 동안 그대로 → 실제 다음 파일 시작 시 초기화 → 자동종료 후 마지막 파일 경로·shortcode·asset 유지.
## v279aaaa 현재 작업
- 체크 ID: `SIDE-ACCOUNT-CLICK-01`
- 상태: `[코드반영]`
- 목표: Main hover·자동 확인 없이 Side 카드 `IG 계정명` 클릭으로만 수집계정 추가 대상을 선택한다.
- 제거: 400ms 계정 확인 타이머, profile URL 자동 판정, Main current-account 요청, single payload owner fallback, URL 변경 자동 초기화.
- 유지: Side 카드 계정명 표시, 클릭 선택 강조, 계정추가, 중복 차단, 정렬, SQLite 저장.
- 정적 결과: `test_ext_side_account_click_v279aaaa.js` 및 전체 IG 회귀 검사 OK.
- 실제 Chrome 결과: `UNKNOWN`
- 다음 작업: 서로 다른 Side 계정 카드 2개를 연속 클릭하고 버튼명·선택 테두리·추가·저장 결과를 확인한다.

## v279aaa 완료 참고
- 체크 ID: `MAIN-HOVER-01`
- 상태: `[완료]`
- 목표: MAIN hover 계통 비활성 상태에서 JPG/MP4 수동 다운로드와 페이지 이동을 검증한다.
- 비활성 대상: 계정 hover 200ms 타이머, pointer hover 이벤트, hover 색상/좌표 mousemove, hover localStorage/event dispatch.
- 유지 대상: MAIN 카드·다운로드 버튼·click 이벤트·Side·자동 Top·WS8771.
- 실제 Chrome 결과: Auto8700 ON/OFF Main JPG·MP4 저장 `OK`, unload·응답 없음 미발생.
- 다음 작업: hover 비활성 회귀 유지.

## v279aa 코드반영
- [코드반영] Main 수동 다운로드 Background Chrome API fallback 복구
- [코드반영] Filtered 수동 일괄 다운로드 fallback 성공 처리
- [코드반영] legacy `ndy_ig_down`·Blob·objectURL·anchor downloader 제거
- [코드반영] Auto8700/WS8771 기본 → CDP 예약 옵션 순서 교정
- [검증대기] Auto8700 미실행 수동 JPG/MP4와 Filtered 다운로드
- [검증대기] unload 오류 및 페이지 이동 먹통 재발 여부

# IG_StYellow 패치 — v279a 실패 기록

상태: `[보류·실제 Chrome FAIL]`

## 단일 목표

- v279 비다운로드 기능 유지
- 다운로드 실제 전송 core만 v262 방식으로 복원
- v276 `pagehide`·10초 runtime 진단 제거

## 코드 반영

- `content_instagram.js`: v262 `sendMainBackgroundDownload()` 복원
- `background.js`: v262 `igblueDownloadWithApi()` 복원
- `instagram_inject.js`: v276 Runtime/Long Task/V scan/pagehide 표본 제거
- Side의 Video/Image 선택, Top, snapshot, 계정·SPA 기능은 유지

## 정적 검사

- IG JavaScript 문법: OK
- IG test_*: 24/24 OK
- WS8771 연동 테스트: OK
- 실제 Chrome/Windows: UNKNOWN

## 검증대기

1. Main JPG·MP4 개별 다운로드
2. Side 개별·Top·Filtered 다운로드
3. 다운로드 중지·재시작
4. 다운로드 중 unload 메시지·먹통 재발 여부
5. 홈·Explore·Reels·프로필 페이지 이동 먹통 여부

## 다음 분기

- v279a는 수동 다운로드 실패·legacy downloader 잔존으로 보류한다.
- 다른 접근은 `v279b`
- 전체 실검증 완료 뒤 `v280`