# IG_StYellow 삭제·폐기 기준

- origin calibration과 구형 물리 클릭·물리 hover 검증은 제거 상태를 유지한다. 사용자 계정 선택용 DOM hover는 별도 기능이다.
- popup 전환 후 `window.close()`로 Side를 닫는 로직을 사용하지 않는다.
- `chrome.sidePanel.close()`, `chrome.tabs.remove()`, `chrome.windows.remove()`로 Instagram UI를 닫지 않는다.
- 수집계정 원본에 전체 URL을 저장하지 않는다.
- `/explore/`, `/reels/`, `/p/`, `/reel/`을 username으로 해석하지 않는다.
- localStorage를 PC 공통 계정목록 원본으로 사용하지 않는다.
- 계정명과 No 순위를 한 박스로 다시 합치지 않는다.
- 삭제 계정을 수집 카운트에 포함하지 않는다.

- 자동 직접 다운로드 background 중복 확인을 `force_probe` 없이 실행하지 않는다.
- 정상 자동 cycle 상세 상태를 사용자 로그에 반복 출력하지 않는다.

## v239 Main UI 회귀 금지

- 원점·mouse·HOVER·DEV·RTC 정보를 Main 오른쪽에 상시 큰 패널로 다시 노출하지 않는다.
- 진단 토글을 CDP와 무관한 먼 위치에 배치하지 않는다.
- 원점 데이터 로딩 자체를 삭제하지 않는다. 진단 패널에서 읽을 원본 상태는 유지한다.
- Main의 날짜·통계 막대를 Side와 다른 표시 기준으로 분리하지 않는다.



## v240 수집계정 회귀 금지

- 저장 후 `@` 없는 계정명과 Instagram 전체 URL을 혼합 표시하는 방식
- 대소문자·URL·`@account` 형식 차이를 다른 계정으로 보고 중복 저장하는 방식
- `🗑️ @account`를 URL 생성 함수에 전달해 프로필 이동을 재시도하는 방식
- 삭제 계정과 활성 계정이 중복될 때 삭제 tombstone을 해제하는 방식

## v244 회귀 금지

- `_St.zip 다운로드` 안내를 접힌 다운로드 목록 안에 다시 배치하는 방식
- WS 상태를 확인하지 않아 안내가 영구 숨김 또는 영구 표시되는 방식
- Side 표시 v240을 남긴 채 manifest·ZIP만 다른 버전으로 올리는 방식

## v245 회귀 금지
- JPG를 자동 진행 총 다운로드 개수에 합산하는 방식
- 댓글·하트 최소 입력을 Top 후보 필터에 적용하지 않는 방식
- WS 설치 실행 파일을 yjm_win2rtc 배치로 안내하는 방식


## v246 회귀 금지
- 조회수 미제공 게시물을 0 조회수로 간주해 Top 후보에서 제거하는 방식
- 조회수 미제공 후보에 정상 No 순위를 만들지 않는 방식
- 공유와 리포스트를 같은 필드로 저장·표시하는 방식
- 입력값 0인 참여 항목을 참여점수 합산에 포함하는 방식

## v247 통계 UI·수집 회귀 금지

- 통계 단독 기본값을 통계 연동으로 바꾸는 방식
- 설정을 메인 화면의 자주 누르는 다운로드 버튼 사이에 배치하는 방식
- 실제 인젝션이 아닌 Side 복원 payload를 새 통계로 저장하는 방식
- 공유 입력·Sort by·카드 항목을 다시 표시하거나 share_count를 0 이외 값으로 전달하는 방식
- 다운로드 실행 여부에 따라 observation batch를 생략하는 방식
- 같은 계정·같은 시간의 변경 없는 shortcode를 인젝션마다 반복 송수신하는 방식


## v248 scope 회귀 금지
- 현재 URL 검증 없이 누적 media map 전체를 observation batch로 보내는 방식
- URL 변경 후 이전 계정 cache를 유지하는 방식
- 같은 shortcode를 한 payload에서 여러 번 저장하는 방식

## v249 폐기

- `다운위치/Down/10만/계정.폴더통합/위치 열기` Side UI
- Chrome downloads 권한과 기본 다운로드 폴더 열기
- WS 실패를 다운로드 허용으로 바꾸는 수동 fallback
- 사용자 저장값으로 root·계정 통합 여부를 변경하는 기능


## v250 자동 fixed-tab 로직 폐기
- 자동 시작 전에 fixed-tab session을 반드시 확보하는 방식
- 마지막 연결 tab_id와 URL을 자동 시작 대상으로 복구하는 방식
- Instagram 탭 전체를 검색해 후보를 고르는 방식
- 계정 이동 후 18초 owner·DOM 완전 일치를 요구하는 방식
- 모든 캐시 보완·snapshot 복원 자체를 제거하는 방식
- owner 불일치만으로 자동 전체를 중단시키는 방식

## v252 잘못된 패치 폐기
- 수동 탭 추종을 확대 수정한 `v252_manual_active_tab_fixed`는 사용하지 않는다.


## v251 회귀 금지
- Injection 다운로드 메타를 rank label의 축약 통계만으로 만드는 방식
- 성공 응답 shortcode가 없는데 확장자만으로 여러 버튼을 완료 처리하는 방식
- 재생 아이콘을 한글 완료 문자열로 교체하는 방식
- carousel의 media_index를 모두 0으로 보내는 방식


## v255 자동 완료 회귀 금지

- 마지막 No 도달 또는 후보 배열 길이를 실제 Top목표 완료로 사용하는 방식
- 후보 0개에서 swipe하지 않고 즉시 계정을 끝내는 방식
- 날짜 경계·게시물 처음 확인 없이 목표 부족 종료하는 방식
- 같은 shortcode의 MP4/JPG를 완료 게시물 2개로 세는 방식
- 완료 결과 표시 자체를 0/n으로 덮는 방식
- 다음 실행 시작 index와 직전 완료 결과 n/n을 같은 상태값으로 관리하는 방식
- 완료 제목에서 `자동종료`를 누락하는 방식

## v256 메모리·증분 전송 회귀 금지

- `img_b64` Base64 썸네일 누적
- 매초 누적 전체 목록 재전송
- 화면 밖 모든 썸네일 동시 로딩
- 처리 대기 통계 스냅샷 무한 queue
- 첫 1시간 batch 성공 후 같은 시간 신규 게시물 skip
- 100개 batch를 제거하고 500개 초과를 한 번에 전송
- 페이지별 100개 순위로 전체 Top 순위를 변경


## v257 가상 목록·로컬 통계 회귀 금지

- 전체 게시물 수만큼 `.post-item` DOM을 다시 생성·유지하는 방식
- 메모리 절약을 이유로 전체 순위 데이터를 100개 페이지별 순위로 분리하는 방식
- 범위 밖 카드 제거 시 `IntersectionObserver`와 이미지 src를 남기는 방식
- 모든 썸네일을 고정 비율로 강제해 기존 자연 비율을 바꾸는 방식
- 새 10분 bucket이라는 이유만으로 동일 통계를 다시 Analyze8780에 전송하는 방식
- `saved_count=0`을 요청 항목 수로 치환해 저장 성공 수를 거짓 증가시키는 방식


## v258 가상 스크롤 anchor 회귀 금지

- 가상 범위 변경마다 `box.replaceChildren(fragment)`로 현재 화면 카드까지 전체 교체하는 방식
- 현재 가시 카드 anchor 없이 spacer 높이만 바꾸는 방식
- 브라우저 자동 anchor와 수동 scroll 보정을 동시에 적용하는 방식


## v259 폐기

- 최대 120개만 DOM에 남기는 가상 목록
- 스크롤 중 카드 제거·생성·`insertBefore` 재배치
- top/bottom virtual spacer
- 실측 행 평균 높이 재계산
- 첫 가시 카드 anchor와 `window.scrollBy` 위치 보정
- 이미지 natural ratio 적용으로 카드 높이를 변경하는 방식
- 현재 계정 MP4만 `총`으로 표시하는 방식
- v257의 `전체 카드 DOM 유지 금지` 기준은 사용자 최신 지시로 폐기됐다.


## v260 자동 상태 회귀 금지

- 다른 탭·Chrome 창 사용, 같은 시작 탭의 Instagram 외 주소, WS/Main/현재 No 일시 미준비를 즉시 자동중단으로 처리하는 방식
- `no_instagram_tab` 하나만 보고 대상 없음 또는 전체 자동종료로 처리하는 방식
- 대기 상태에서 계정 index·No·run_seq 흐름·전체 실행 집계를 초기화하는 방식
- `automatic_end` 문구만으로 실제 목록 index를 n/n으로 강제 표시하는 방식
- 시작 탭 보존을 이유로 열린 Instagram 탭 전체 검색·마지막 연결 탭 복구·후보 탭 순회를 되살리는 방식
- v260 시작 탭 보존은 새 자동 시작 당시 현재 활성 Instagram 탭 한 개만 저장하는 경량 세션이며, v250 fixed-tab 검색·복구·owner 강제 gate와 다르다.


## v261 Side 작업 화면 회귀 금지

- `탭 새로읽기`를 기존 `🔄`와 동일하게 페이지 reload로 처리하는 방식
- 재읽기 버튼에서 swipe 또는 계정 이동을 실행하는 방식
- 사용자 중단 뒤 재시작할 때 queue·현재 No·현재/전체 집계·완료 shortcode를 초기화하는 방식
- 화면상 방식 2/3 번호 변경과 내부 다운로드 handler·통신 mode 변경을 혼합하는 방식
- 현재 실제 규칙과 맞지 않는 Video only·ID-date filename·다운 지연 영문 설명을 다시 표시하는 방식


## v262 Side UI 회귀 금지

- 재시작 실패 시 스냅샷을 삭제하는 방식
- 8780 열기를 JavaScript click handler로 강제 실행하는 방식
- 오프라인 상태에서 이전 8780 href를 유지하는 방식
- `현재계정추가`를 고정 문구로 두거나 표시값과 클릭값을 분리하는 방식
- 현재 대상 미확인 시 이전 계정명을 남기는 방식
## v263 회귀 금지

- 별도 `자동재시작` UI·전용 복원 함수·첫 로딩 재시작 버튼을 되살리는 방식
- 자동시작 준비 중 중지 버튼을 비활성화하는 방식
- 일반 저장에서 계정 목록을 자동 정렬하는 방식
- 계정 추가 시 queue index를 0으로 강제 초기화하는 방식
- 정렬 후 기존 위치 기반 진행상태를 유지하는 방식
- Explore hover 계정명 대신 불확실한 페이지 URL만 사용해 대상 계정을 판정하는 방식

## v264 회귀 금지 — 렌더링 문자열 기반 hover 계정 판정

- `.igblue-main-account-row span`의 화면 문자열을 hover 계정 원본으로 다시 읽지 않는다.
- 인젝션 카드는 `pointer-events:none`일 수 있으므로 카드 자체 document pointerover만으로 썸네일 hover를 판정하지 않는다.
- 실제 Instagram media host에 hover를 연결하고 카드의 현재 `data-code → S(code)` 결과만 Side에 전달한다.
- 같은 카드가 새 shortcode로 재사용될 때 새 pointerover를 기다리지 않고 `N()` 재연동 시 계정을 갱신한다.



## v265 회귀 금지

- Explore 상세 팝업 전환에서 전체 Explore media map 삭제
- popup 복귀 카드 복원을 F5에 의존
- pointerenter 즉시 hover 계정 변경
- Side 이동 pointerleave에서 확정 선택 제거

## v266/v267 폐기·회귀 금지 — Main 순위 시각 UI와 Side 과삭제

- Main 카드의 `No000` 행, Rank badge, 순위 연동 미디어 종류 행을 다시 생성하지 않는다.
- 우측 `1 / Prev / Current / Next / 마지막` 이동 버튼 DOM·CSS·click handler를 다시 만들지 않는다.
- Main용 순위 체크·Main rank payload를 다시 넣지 않는다.
- v266에서 Side 순위 탭·No000·Rank badge까지 제거한 과삭제는 폐기한다. Side 순위 기능은 유지한다.
- 자동실행 Current/Next를 `#IGBLUE_NoNav_*` 요소 검색·클릭 방식으로 되돌리지 않는다.
- Main 준비 완료를 시각 버튼 존재 여부로 판정하지 않는다.
- 자동실행 내부 순번은 `IGBLUE/internal_no_nav_state`, 내부 Current/Next handler, shortcode 기반 `.ndy_ins_info[data-code]` 탐색으로 유지한다.
- 시각 helper 삭제 뒤 `teMainAnchorId()` 같은 폐기 함수 호출을 남겨 내부 활성 대상 설정 실패를 숨기지 않는다.


## v267 진단 단계

- 실제 생성경로가 확인되기 전에 같은 shortcode 카드를 전역 하나로 강제 병합하지 않는다.
- 생성경로 색상은 진단용이며 hover 확정 청록색보다 우선하지 않는다.


## v268 회귀 금지

- 다른 article의 동일 shortcode를 전역 병합하지 않는다.
- hidden video 때문에 image-only 인젝션을 제거하지 않는다.
- Explore SPA 수집을 fetch wrapper 하나에만 의존하지 않는다.
- 링크 1개 이상·카드 0개 상태를 성공으로 처리하지 않는다.

## v269 회귀 금지

- `play_count=-1` 또는 `views_available=0`을 실제 조회수로 취급해 비공개 후보를 탈락시키는 방식
- 조회수 비공개인데 좋아요·댓글·리포스트 활성 조건이 하나도 없는데 후보를 만드는 방식
- 참여순위에 고정 가중치나 비활성 지표·공유 수를 포함하는 방식
- Main 시각 No DOM이 없다는 이유만으로 snapshot No001을 다운로드하지 않는 방식
- AD-03 `[체크실패]` 뒤 AD-04·AD-05 또는 cache direct download를 진행하는 방식



## v270 회귀 금지

- Top목표 전체 후보가 모일 때까지 첫 다운로드를 미루는 방식
- 완전한 snapshot을 Main 시각 No·Current·카드 연결에 다시 종속시키는 방식
- 완료 shortcode를 새 snapshot에서 다시 다운로드하는 방식
- 목표 미달이지만 날짜 범위 안인 상태를 중단으로 처리하는 방식
- 날짜 범위 종료 뒤 다음 계정으로 이동하지 않고 같은 계정 swipe를 계속하는 방식
- `instagram_inject.js` IIFE 밖의 `teMainEnsureHoverAccountStyle();` 단독 호출


## v271 overlay 표시 회귀 금지

- Side 선택 UI만 유지하고 content bridge 함수 정의를 제거하지 않는다.
- `download` 모드는 통계만 숨기고 MP4/JPG 버튼은 유지한다.
- `none` 모드는 인젝션 카드 전체를 숨긴다.
- overlay 복구와 무관한 자동·수동 다운로드 흐름을 함께 변경하지 않는다.


## v272 Visual settings·다운로드 상태 회귀 금지

- `main` 체크값을 `side` 값으로 덮거나 Side 값으로 저장하지 않는다.
- Side 렌더링은 `side`, Main 렌더링은 `main`을 사용한다.
- 버튼 가로폭을 줄이거나 활성 대상 버튼만 크게 만드는 구 `다운버튼 크게 표시` 의미를 복원하지 않는다.
- shortcode·asset_kind 없는 진행 메시지로 임의 DOM을 강조하지 않는다.
- 실패·부분완료를 성공 배지로 표시하지 않는다.
- background의 `runtime.sendMessage`만으로 content/Main 상태 전달을 대체하지 않는다.


## v273 자동 계정·SQLite 파일 회귀 금지

- indexed start 전에 Instagram 탭 존재를 요구하지 않는다.
- 명시적인 not_found 외 상태를 휴지통 처리하지 않는다.
- tombstone 저장 뒤 같은 URL을 다시 열지 않는다.
- 새 파일·다른이름 저장으로 기존 SQLite를 덮어쓰지 않는다.
- DB 전환 뒤 이전 계정목록·index를 혼합 유지하지 않는다.


## v274 자동실행 제어·ETA 회귀 금지

- 0/N 비 Instagram에서 running을 켜고 Injection을 무한 대기하는 방식
- 사용자 중지 뒤 stopping을 영구 유지하는 방식
- 이전 stop 응답으로 새 실행 상태를 덮는 방식
- 자동종료에서 Auto PY를 자동 해제하는 방식
- 중지·자동종료 완료 뒤 두 제어 버튼을 모두 비활성화하는 방식
- tab_id 하단 중복·무효 탭 과거 ID 유지
- 전체 계정 수와 Top목표를 제외한 현재 계정 기준 ETA
- 실패·중복 시간을 성공 평균에 포함하는 방식


## v276 진단 회귀 금지

- `unload` 경고 제거를 응답 없음 해결로 처리하지 않는다.
- EventTarget 전역 monkey patch와 자동 reload를 넣지 않는다.
- runtime 표본은 ring 제한을 유지하고 진단 때문에 자동 다운로드 순서를 바꾸지 않는다.
