<!-- FILE: _St/ai_read_완료.md | ROLE: sort 전체 실제 완료 기록 -->


## v323 수동 JPG 원래 브라우저 다운로드 완료 — 2026-08-14
- 테스트 ID: `T-IG-V323-MANUAL-JPG-001`.
- 사용자 실제 Chrome 확인: Side JPG 수동 다운로드 정상, MAIN JPG 수동 다운로드 정상.
- JPG는 WS8771 direct/자동다운로드 집계 대상이 아니며 원래 브라우저 다운로드 경로로 저장된다.
- 결과: OK. 자동 MP4-only 다계정 화면 검증은 별도 항목으로 유지한다.

## v317 수동 MP4 편집폴더 1건 복사 완료 — 2026-08-12
- 테스트 ID: `T-IG-WS-V317-MANUAL-EDIT-COPY-001`.
- 사용자 실제 Windows 확인: 수동 MP4 클릭 → 원본 위치 정상 다운로드 → 편집폴더 picker 정상 표시 → 폴더 선택 → 해당 MP4 1건 복사 완료.
- 결과: OK. 자동 다중 편집복사는 사용하지 않는다.

## v307 실제 Windows CDP·버전 완료 — 2026-08-07
- 테스트 ID: `T-CDP-V307-FINAL-O-001`, `T-VERSION-V307-MANIFEST-001`.
- 실제 로그 `auto_run_log_20260807_161101_pid22296.log`에서 CR-01 `Runtime.evaluate=2`, CR-02 EXT `2.3.8.305 → 2.3.8.307` reload, CR-03 content `2.3.8.307` 확인 후 `CDP:O` 허용을 확인했다.
- 사용자 실제 Side 복사 화면에서 `v307` 표시 정상도 확인했다.
- 결과: OK. 이후 버전에서도 회귀 테스트로 보호한다.

## v304 정적 검증 완료
- Cache8701 단위 테스트에 비활성 OWNER 감시 유지와 로그 파일 20개 회전을 추가했다.
- 전체 pytest 111 passed, IG Node 43/43 OK, Python compile 35 OK, JavaScript syntax 55 OK, JSON 6 OK, HTML inline 2 OK를 확인했다.
- 실제 이미지 저장·SQLite·8780·로그 파일 생성은 아직 완료로 기록하지 않는다.

## v303 정적 검증 완료
- `IG_StYellow/test_ext_v303_core_regression.js`로 CDP 상태 원본·Cache 독립·Swipe 보호·Explorer 클릭 보존 계약을 고정했다.
- 전체 pytest `108 passed`, IG Node `42 OK`, JavaScript syntax `54 OK`, Python compile `35 OK`, JSON `6 OK`, HTML inline `2 OK`다.
- 실제 Windows 동작은 완료로 기록하지 않는다.


## v297 정적·단위 검증 완료
- 전체 pytest: 105 passed.
- Node `test_*.js`: 45 OK.
- JavaScript 파일 syntax: 53 OK, HTML inline script syntax: 2 OK.
- Python compileall 35개, JSON 6개, manifest `2.3.8.2970 / 2.3.8.297`: OK.
- 숫자형 미디어 API 제거, `_StDown/instagram` 가상 URL, 실제 확장자 MIME·MP4 Range: OK.
- 게시물 갱신의 shortcode 표준 파일 자동 발견, asset id 없는 응답, path guard: OK.
- 실제 경로 표시·복사·Explorer 선택 정적 계약과 미등록 표준 파일 삭제: OK.
- 기존 10분 통계·동일 observation 중복 처리 회귀: OK.
- 실제 Windows 8780 이미지·MP4·경로 복사·Explorer 선택은 완료로 올리지 않는다.

## v296 정적·단위 검증 완료
- 전체 pytest: 103 passed.
- Node `test_*.js`: 45 OK.
- JavaScript syntax: 52 OK.
- Python compileall, JSON 6개, manifest `2.3.8.2960 / 2.3.8.296`: OK.
- Cache8701 shortcode+실제확장자, duplicate DB 등록, event UUID 중복 방지: OK.
- Shared source mode·공통 경로·legacy 탐색·명시 DB 등록: OK.
- Analyze8780 현재 DB 복구·실제 파일 우선·stale asset CDN fallback·실제 확장자 배지: OK.
- 이미지 등록이 `post_stat_10m`을 생성하지 않는 회귀: OK.
- 실제 Windows v296 CI-06·신규 파일명·8780 화면은 완료로 올리지 않는다.


## v295 정적·단위 검증 완료
- `Cache8701/test_cache8701_module.py`와 `Auto8700/test_auto8700_module.py`: 실제 포트 연결정보, generation, flattened sessionId 명령 계약 OK.
- 전체 pytest: 96 passed.
- IG `test_*.js`: 41 OK.
- JavaScript syntax: 51 OK.
- Python compileall 및 `test_verification_checklist.py`: OK.
- Cache8701 HTTP `/api/health` 기동: OK.
- 실제 Chrome response body·`_StDown` 파일·SQLite는 실행 로그가 없어 완료로 올리지 않는다.


## v288 Analyze8780 코드 검증
- `test_analyze8780_module.py`, `test_analyze8780_ui.js`, `Shared/test_shared_storage.py`: raw LIKE·quick_check·DB 버튼 계약·미디어 전체/Range·folder launcher·개별 DB/통계/파일 삭제·공유 경로 차단 OK
- 전체 회귀: JSON 5 OK, JavaScript syntax 47 OK, Analyze UI Node 1 OK, IG 37 OK, RTC JS 3 OK, Python compile 33 OK, pytest 82 passed
- 실제 Windows UI 클릭·탐색기·재생·삭제는 검증대기다.


## v286 실제 Windows 자동 경로 검증 완료 — 2026-08-04
- 테스트 ID: `T-IG-V286-WIN-AUTO-001`
- 로그: `auto_run_log_20260804_190432_pid15296.log`, `ws_run_log_20260804_190441_pid19000.log`, `ws_project_progress_log_20260804_190441_pid19000.log`
- 계정 2/2, 게시물 6개, MP4 6개, JPG 6개, 파일 12/12, 자동종료 OK
- 첫 자동 target `A97F58...`은 다음 계정 준비 후 `Target.closeTarget` 1회로 제거 확인 OK
- 마지막 target `BD77B2...`은 `automatic_end`에서 1회로 제거 확인 OK
- 목록 밖 Explore 자료 혼입과 unload·검은 화면 재발 없음: 사용자 확인 OK
- 오류 탭을 의도적으로 만든 강제 종료와 수동 다운로드 회귀는 별도 검증대기다.

## v287 Analyze8780 코드 검증
- `test_analyze8780_module.py` + `test_shared_storage.py`: 33 passed
- `test_analyze8780_ui.js`: OK
- 전체 회귀: JavaScript syntax 50, IG 38, RTC JS 3, Python compile 33, pytest 80 passed
- 실제 Windows UI·ApexCharts CDN·대량 게시물은 검증대기다.

## IG v279c 자동 다운로드 실제 완료 — 2026-08-02
- 사용자가 v279c CDP:O에서 자동 실행을 두 차례 연속 확인했다.
- 다계정 순회에서 MP4/JPG 실제 절대경로와 `WS8771 direct download complete`가 표시됐다.
- Top 목표 완료·전체 실행 집계·자동종료가 실제 파일 저장과 함께 확인됐다.
- `T-IG-V279C-AUTO-V262-RESTORE-001` 결과는 `OK`, 상태는 `[완료]`다.
- `No---`, asset 종류 표시, URL 이동 후 Main 응답 대기는 별도 후속 항목이며 v279c 파일 저장 완료를 취소하지 않는다.

## v262 자동 다운로드 실제 기준 확인 — 2026-08-02
- 사용자 확인 환경: CDP:O, 표시 버전 v262.
- 계정 목록 2/2 순회.
- 전체 실행 게시물 5개, MP4 5개, JPG 5개.
- 현재 계정 게시물 2개, MP4 3개, JPG 2개.
- `WS8771 direct download` 상태와 MP4 절대경로·JPG 추가 저장 상대경로가 화면에 표시됨.
- 이 기록은 v279c 복원 기준으로 시작했으며, 이후 v279c 자체 실제 저장도 별도 확인되어 완료 처리됐다.

## IG v279aaa 실제 완료
- Auto8700 ON/OFF에서 Main JPG·MP4 수동 다운로드 실제 파일 저장 OK.
- MAIN hover 비활성 상태에서 unload 오류·응답 없음 미발생.

## IG v279aa Side/WS 실제 확인
- MAIN Injection OFF에서 자동 Top 2/2, MP4 2개, JPG 2개, WS8771 저장, 자동종료 OK.

## IG v279aa 정적 검증
- manifest `2.3.8.2792` / 표시 `2.3.8.279aa`: OK
- IG JavaScript 문법 6개: OK
- IG `test_*.js` 25/25: OK
- WS8771 모듈 회귀: OK
- 실제 Chrome 수동·Filtered 다운로드 및 unload 재발 여부는 검증대기다.

# 완료·검증 기록 — 패키지 v279aa

## 이전 유지 완료

- v223: 구형 마우스·원점 자동화 제거, `IG_StYellow` 기준
- v224: SQLite v2·MySQL v45/v46 구조
- v225: IG→WS→Shared `MEDIA_SAVED` 연결
- v226: 메인 주입 `IG account` 표시

## v227 완료 항목

### Side 계정·순위 분리

- 테스트: `IG_StYellow/test_ext_module.js`
- 결과: OK
- 검증:
  - `IG account` 독립 라벨
  - `No000` 독립 라벨
  - Top 조건이 없으면 `No000` 숨김
  - 직접 다운로드 기존 토큰 유지

### SQLite v3·10분 repository

- 테스트: `Shared/test_shared_storage.py`
- 결과: OK
- 검증:
  - 기존 v1 DB에서 v3까지 추가 마이그레이션
  - 10분 내림 처리
  - 같은 버킷 UPSERT와 `sample_count`
  - 계정·게시물 페이지 조회
  - 최근 10분 증가량과 시간당 환산
  - 계정·게시물 soft-delete
  - DELETE sync_queue

### Analyze8780

- 테스트: `Analyze8780/test_analyze8780_module.py`
- 결과: OK
- 검증:
  - health
  - account list
  - account posts
  - 10분 통계
  - account DELETE
  - deleted account tombstone API
  - 임시 포트 HTTP 실행

### 삭제 계정 Side 제외

- 테스트: `IG_StYellow/test_ext_module.js`
- 결과: OK
- 검증:
  - `🗑️` prefix 인식
  - 삭제 항목 수집 목록 제외
  - 삭제 항목 카운팅 제외
  - Analyze8780 삭제 목록 polling 코드 존재

## 완료로 표시하지 않는 항목

- 실제 Windows Chrome Side 렌더링
- 실제 운영 SQLite 데이터 마이그레이션
- IG 실시간 observation 전송
- PHP/MySQL 10분 중앙 저장
- 대본 추출


## v228 완료 항목

### Analyze8780 자동 실행 설정

- 테스트: `Auto8700/test_auto8700_module.py`
- 결과: OK
- 검증: 서비스 등록, 자동 시작, 8780 포트, HTTP JSON health, bat catalog, Shared restart 연동

### Side 계정목록 명시 저장

- 테스트: `IG_StYellow/test_ext_module.js`
- 결과: OK
- 검증: `💾 저장`, dirty 표시, blur 자동 저장 제거, 삭제 polling 미저장 보호

### Analyze8780 실행 BAT

- 테스트: `Analyze8780/test_analyze8780_module.py`
- 결과: OK
- 검증: `py312` 실행 명령과 health version `2.3.8.228`


## v229 완료 항목

### 게시물 canonical URL

- 테스트: `Shared/test_shared_storage.py`, `WS8771/test_ws8771_module.py`, `Analyze8780/test_analyze8780_module.py`
- 결과: OK
- 검증:
  - `/explore/`, `/reels/`, 프로필, 홈, CDN URL의 post_url 저장 차단
  - shortcode 일치 `/reel/`, `/p/`, `/tv/` permalink 유지
  - 유효 링크가 없으면 영상 `/reel/`, 그 외 `/p/` 생성
  - 기존 잘못된 DB URL의 Analyze8780 조회 표시 교정
  - 기존 다운로드·MEDIA_SAVED·10분 repository 회귀 유지


## v230 완료 항목

### Chrome·Instagram 탭 유지

- 테스트: `Auto8700/test_auto8700_module.py`, `IG_StYellow/test_ext_module.js`
- 결과: OK
- 검증: Side·background 닫기 API 제거, Auto 종료 시 Chrome/CDP 유지, Chrome 종료 토큰 부재

### WS Instagram 저장창 Enter

- 테스트: `WS8771/test_ws8771_module.py`, `IG_StYellow/test_ext_module.js`
- 결과: OK
- 검증: 다운로드 전 arm await, prefix·shortcode·Instagram 파일명 판별, Enter 처리, 다른 Save As 제외

### Analyze8780 health 반복 제거

- 테스트: `Auto8700/test_auto8700_module.py`
- 결과: OK
- 검증: 동일 서비스 실행 중 상태 refresh 3회에도 `/api/health` 호출 1회, 이후 반복 HTTP·TCP health 없음

## v231 완료 항목

### 수집계정 username SQLite 동기화

- 테스트: `IG_StYellow/test_ext_module.js`, `Analyze8780/test_analyze8780_module.py`, `Shared/test_shared_storage.py`
- 결과: OK
- 검증:
  - 화면 owner username 기반 추가
  - Explore·Reels·게시물 URL 저장 거부
  - Analyze8780 GET/PUT API
  - SQLite `collection_account_queue` 순서·enabled·is_deleted 보존
  - localStorage 캐시 fallback

### WS Save As와 `_StDown` 저장 경로

- 테스트: `WS8771/test_ws8771_module.py`, `IG_StYellow/test_ext_module.js`
- 결과: OK
- 검증:
  - Save As 제목 부분 일치
  - Instagram prefix·shortcode·파일명 판별
  - 계정별 `_StDown/instagram` 경로 계산
  - 파일명 입력칸 경로 지정 후 Enter
  - 완료 파일 이동 fallback
  - 기존 MEDIA_SAVED·canonical URL 회귀 유지

### 완료로 표시하지 않는 항목

- 실제 Windows 저장창 입력·Enter
- 실제 Chrome 프로필 변경 후 SQLite 복원
- IG 실시간 10분 observation 전송
- PHP/MySQL 중앙 동기화


## v232 완료 유지 항목

### SQLite 저장 폴더·원본 파일 조회

- 테스트: `Shared/test_shared_storage.py`, `Analyze8780/test_analyze8780_module.py`
- 결과: OK
- 검증: SQLite v5 migration, `folder_name`, `file_name`, `relative_path`, Analyze API·UI 표시, 서버 sync 경로 비노출

### WS 진단 callback·canonical 회귀

- 테스트: `WS8771/test_ws8771_module.py`, `Shared/test_shared_storage.py`
- 결과: OK
- 검증: `save_dialog_state` 존재, 영상 저장 시 기존 Reel URL 유지

### 완료로 표시하지 않는 항목

- 실제 파일·Analyze8780 화면 확인


## v233 검증대기 기록

- v232 CDP 다운로드 경로는 정적 테스트는 통과했으나 실제 Chrome에서 적용되지 않았다. 완료 기준에서 제외하고 폐기 기록으로 이동했다.
- v233 WS 직접 다운로드 코드는 자동 회귀가 통과했지만 실제 Windows 파일 저장 로그 전까지 완료로 기록하지 않는다.


## v234 코드 검증

### Auto8700 main-thread UI·총괄 종료

- 테스트: `Auto8700/test_auto8700_module.py`
- 결과: OK
- 검증: UI main thread 실행, daemon UI thread 제거, X 종료 event, WS/Analyze/RTC 종료, Chrome/CDP 제외
- 실제 Windows 창 표시와 프로세스 종료는 검증대기


## v235 코드 검증

- Auto8700 주 모니터 위치 보정·단계별 HWND 로그 회귀 OK
- IG direct download 전체 msg/meta 전달 회귀 OK
- WS 중첩 finalize 완료 응답 해석 회귀 OK
- 메인 IG 계정·No·미디어 종류 별도 줄 회귀 OK
- 실제 Windows·Chrome 동작은 검증대기


## v236 문서 운영 기준 완료

### 기능 체크형 로그 기준

- 결과: 문서 반영 OK
- 반영 문서: `ai_read.md`, `ai_read_패치.md`, `ai_read_완료.md`, `ai_read_삭제.md`, `test_list.md`
- 완료 범위: 로그 상태, 중복 방지, 단계 진행 조건, 예외추적, 문서 연결 기준
- 주의: 실제 프로그램 소스의 로그 전환은 아직 수행하지 않았으며 기능별 별도 작업으로 진행한다.


## v237 코드 검증

- 자동 다운로드 background 사전 확인에 강제 WS probe 적용 코드 확인
- `AD-01~AD-07` 체크 ID와 한국어 상태 로그 코드 확인
- 동일 cycle 체크 로그 중복 방지 코드 확인
- WS8771 기능 체크 로그의 한국어 형식·중복 방지 회귀 확인
- 실제 Chrome 자동 다운로드와 실제 파일 생성은 검증대기


## v237 실제 Windows 로그 확인

### Auto8700 창·종료

- 실제 로그: 창 `VERIFY_OK`
- 실제 로그: WS8771·Analyze8780·RTC8790_8791 전체 종료
- 실제 로그: Chrome/CDP 유지
- 결과: OK

### 자동 직접 다운로드

- No001 `northbendescapes`: MP4·JPG·JSON·HTML 저장 OK
- No002 `allbeauty_addiction`: MP4·JPG·JSON·HTML 저장 OK
- 저장 위치: `_StDown/instagram/{계정}/{원본파일명}`
- 결과: OK
- 서버 `media_insert` HTTP 500은 로컬 다운로드 완료와 분리된 실패 항목으로 유지한다.

## v238 프로젝트 진행로그 코드 검증

- 테스트: `WS8771/test_ws8771_module.py`
- 결과: 10 passed / OK
- 검증:
  - 프로젝트 진행로그 별도 파일명
  - 같은 체크 중복 방지
  - 실패 시 기존 상세로그 검색 표식
  - 상세로그 경로·검색키워드 연결
  - 실패 발췌로그 생성
- 실제 Windows 파일 생성은 검증대기다.

## v238 프로젝트 진행로그 실제 Windows 확인

- `ws_project_progress_log_*` 생성 확인
- 실패 시 상세 실행로그 전체 경로와 `*** 상세로그 ***` 검색키워드 연결 확인
- `ws_failure_log_*` 실패 발췌 생성 확인
- `media_insert` HTTP 500을 로컬 저장과 분리한 비차단 실패 기록 확인
- AD-03 중간 실패의 복구완료와 AD-06·AD-07 로컬 성공 판정은 후속 수정 필요

## v239 Main UI 코드 검증

- 테스트: `IG_StYellow/test_ext_module.js`, `IG_StYellow/test_ext_main_ui.js`
- 결과: OK
- JavaScript syntax: OK
- 전체 Python 회귀: 44 passed / OK
- 검증 범위: 진단 상시영역 숨김, CDP 옆 진단 토글, 상태 미러링, Main rank map 복원, Side 날짜·통계 설정 연동, 현재 선택 강조
- 실제 Chrome 렌더링은 검증대기


## v239 실제 Windows 자동 다운로드 확인

- 실행 로그: `ws_run_log_20260722_174137_pid516.log`
- 계정: `syanjajsmartcleaning`, `lotor_food_studio`
- 게시물: 4개
- MP4: 4개 `DIRECT_DOWNLOAD_OK`
- JPG: 4개 `DIRECT_DOWNLOAD_OK`
- 총 8개 `MEDIA_SAVED_OK`
- JSON·MD5/.md5·계정 HTML 보고서 갱신: OK
- 서버 `media_exists`: OK
- 서버 `media_insert`: 완료 아님, HTTP 500으로 패치 문서에 유지

## v240 코드·정적 검증

- WS8771 실행 버전: `2.3.8.240`
- Python compile: OK
- PHP syntax: `yellow.php`, `yellow_func.php`, `yy_db_conn.php` OK
- `WS8771/test_ws8771_module.py`: 12 passed
- `/var/www/html/i/test_yellow_php_static.py`: 4 passed
- HTTP 500 JSON body 보존 테스트: OK
- PHP 단계별 오류 토큰·스키마 진단 정적 테스트: OK
- `yellow_schema_v46_compat.sql` 비파괴 검사: OK

### 완료로 표시하지 않는 항목

- 운영 서버 배포
- 실제 MySQL schema_check 결과
- 실제 `media_insert OK`
- AD-03 복구완료와 AD-06·AD-07 최종 판정


## v240 HTTP 오류 본문 실제 Windows 검증 — 2026-07-24

- 테스트 파일/로그: `ws_run_log_20260724_091916_pid22744.log`, `ws_failure_log_*_AD-06-S01_*`
- `http_status=500`: OK
- `error_stage=schema_check`: OK
- `server_message=... near '?' at line 1`: OK
- WS가 PHP 오류 본문을 보존하고 실패 발췌로그에 연결: OK
- 영향 범위: `T-SERVER-ERROR-BODY-001` 완료
- `media_insert` 자체는 완료 아님

## v250 기준 변경 메모

- 기존 Auto8700 전체종료에서 WS8771·Analyze8780·RTC8790_8791 종료가 확인된 로그는 v249 이전 동작의 역사 기록이다.
- v250부터 Analyze8780 유지로 기준이 변경됐으므로 `T-AUTO-WIN-001`은 완료 집계에서 제외하고 실제 Windows 재검증대기로 이동했다.


## v255 코드·정적 회귀 검증

- `IG_StYellow/test_ext_auto_target_completion.js`: OK
- 기존 Ext 회귀 3개: OK
- RTC JavaScript 회귀 3개: OK
- 전체 JavaScript syntax 15개: OK
- 전체 Python pytest: 60 passed / OK
- 정적 검증 범위: 실제 완료 shortcode 고유 집계, Top목표 로딩 요구, 기간/All time 끝 판정 토큰, 상태 제목, 자동종료
- 계정 n/n 유지는 실제 v257 실행에서 14/44→44/44 강제 표시가 확인되어 완료 판정을 취소하고 `test_list.md` FAIL·검증대기로 이동
- 실제 Chrome·Windows 동작은 완료로 표시하지 않고 검증대기로 유지한다.

## v256 코드·정적 회귀 검증

- `IG_StYellow/test_ext_memory_windowing.js`: OK
- `IG_StYellow/test_ext_stats_incremental.js`: OK
- 기존 Ext 회귀 4개: OK
- 전체 JavaScript syntax 17개: OK
- 전체 Python pytest: 60 passed / OK
- 증분 전송 단위 테스트: 신규 250개를 100/100/50으로 전송, 같은 데이터 재호출 0개, 지표 변경 1개만 재전송 OK
- 검증 범위: Base64 썸네일 미생성, 변경/30초 전체 전달, 화면 주변 lazy load·화면 밖 해제, offscreen 렌더링 containment, 통계 최신 스냅샷 1개, 로컬 10분 표본 유지, shortcode별 같은 시간 증분 전송
- 실제 Chrome 400~600개 메모리·CPU·누락과 실제 WS 로그는 완료로 표시하지 않고 검증대기로 유지한다.


## v257 코드·정적 회귀 검증

- `IG_StYellow/test_ext_virtual_list.js`: OK
- Ext 전체 테스트 7개: OK
- Side 1,000개 범위 계산에서 실제 카드 window 최대 120개: OK
- 10분 변경분 판정: 같은 bucket 보류, 새 bucket 변경 저장, 새 bucket 동일 생략 OK
- Analyze8780 동일값 `saved_count=0`, `skipped_count=1`: OK
- Shared 동일 통계·동일 메타 전체 쓰기 생략, history·10분 중복행 차단·정상 조회수 보존: OK
- 전체 JavaScript syntax: OK
- 전체 Python pytest: 61 passed / OK
- 실제 Chrome 400~600개 스크롤·운영 SQLite 장시간은 완료로 표시하지 않고 검증대기로 유지한다.


## v259 코드 검증

- manifest/version_name `2.3.8.259`
- Ext JavaScript 테스트 7개: OK
- 전체 JavaScript syntax 18개: OK
- Python compile 32개: OK
- 전체 Python pytest 61 passed: OK
- 전체 카드 DOM 유지·가상 spacer/anchor 제거·화면 밖 이미지 src/srcset 해제 회귀: OK
- 현재 계정/전체 실행 게시물·MP4·JPG 집계 회귀: OK
- 실제 Chrome 128·600~800개 스크롤/메모리와 다계정 화면 집계는 완료가 아니라 검증대기다.


## v260 코드 검증

- IG manifest/version_name `2.3.8.260`
- Ext JavaScript 테스트 8개: OK
- 전체 JavaScript syntax 19개: OK
- Python compile 32개: OK
- 전체 Python pytest 61 passed / OK
- 시작 탭 보존, 무한 대기·재개, 실제 queue 완료 guard, 전체 실행 집계 계정 전환 유지 정적 회귀: OK
- WS 중복확인·직접 다운로드 도중 연결 단절 시 같은 게시물·파일에서 무한 대기 후 재시도 정적 회귀: OK
- 실제 Chrome 탭 전환·복귀, WS 재연결, 대상 0개 44/44 종료는 완료가 아니라 검증대기다.


## v260 실제 Chrome 검증 — 2026-07-28

- 다른 탭 또는 Chrome 창 사용 시 `⚠ 자동 대기중` 표시: OK
- 대기 위치 계정 `13/44`와 전체 실행 집계 유지: OK
- 원래 자동실행 탭 복귀 시 `자동 재개됨` 표시: OK
- 중단했던 동일 단계에서 자동 재개: OK
- 사용자 직접 중단 시 `⛔ 자동 중단`, 사유, 계정 `29/44` 표시: OK
- 영향 범위: `T-AUTO-WAIT-RESUME-001` 완료
- WS 단절·Instagram 외 주소 복귀·44/44 종료는 이 실제 검증에 포함하지 않으며 계속 검증대기다.

## v261 코드·정적 회귀 검증

- IG manifest/version_name `2.3.8.261`
- `test_ext_side_reread_restart_ui.js`: OK
- Ext JavaScript 테스트 9개: OK
- 전체 JavaScript syntax 20개: OK
- Python compile 32개: OK
- 전체 Python pytest 61 passed: OK
- 무새로고침 현재 탭 재읽기, 사용자 중단 스냅샷·자동재시작, queue 계정명, 방식 2/3 배치, 구 영문 안내 삭제 정적 회귀: OK
- 실제 Chrome의 카드 복원·자동재시작 상태 보존·화면 배치는 완료가 아니라 검증대기다.


## v262 코드·정적 검증

- 사용자 중단 정리 후 `자동재시작` 활성 상태 재계산 코드와 함수 실행 테스트를 추가했다.
- Analyze8780을 온라인일 때만 href가 존재하는 실제 링크로 변경하고 강제 탭·창 열기 경로를 제거했다.
- 프로필·현재 재생/선택 게시물 owner를 판정해 `현재계정추가` 표시값과 클릭값을 하나의 상태로 통일했다.
- 대상 미확인 시 이전 계정값 제거와 버튼 비활성화를 회귀 테스트로 확인했다.
- Ext JavaScript 회귀 10개, JavaScript syntax 21개, Python compile 32개, 전체 pytest 61 passed: OK.
- 실제 Chrome 사용자 동작은 확인 전이므로 v262 신규 항목을 `[완료]`로 올리지 않는다.

## v263 코드 검증

- `IG_StYellow` manifest/version_name `2.3.8.263`
- 자동시작 처음/이어하기 통합, 진행상태 리셋, 준비 중 중지 활성 정적 회귀: OK
- 계정 추가 끝 삽입, 일반 저장 입력순서 보존, 명시 정렬 정적 회귀: OK
- Explore·Reels hover 계정 전달·청록 강조 정적 회귀: OK
- Shared SQLite 계정 position 입력순서 보존 단위 회귀: OK
- 실제 Chrome 이어하기·저장 재열기·hover 동작은 완료가 아니라 검증대기다.
- IG Ext JavaScript 10개, JavaScript syntax 17개, Python compile 32개, 전체 pytest 60 passed: OK

## v264 코드 검증

- manifest/version_name `2.3.8.264`
- `test_ext_spa_injection.js`: target shortcode carry, fetch·History·DOM·video 트리거, 한글 함수 역할 주석, 실제 host hover, 같은 카드 `data-code` 재연동 계정 변경 함수 실행 OK
- 기존 렌더링 문자열 기반 hover fallback 제거 회귀: OK
- IG Ext JavaScript 11개, JavaScript syntax 22개, Python compile 32개, 전체 pytest 60 passed: OK
- 실제 Chrome Explore→게시물, Reels 최초·연속 이동, hover 고정 상태 계정 갱신은 완료가 아니라 검증대기다.



## v264 실제 Chrome 검증 — 2026-07-29

- Explore → 게시물 SPA 전환 후 F5 없이 인젝션 표시: OK
- `/reels/` 최초 진입과 다음 Reel 이동 인젝션 표시: OK
- History·URL·DOM·video `play/loadeddata`·fetch 기반 재판정: OK
- URL 변경 직후 이전 Side 계정 제거, 현재 shortcode 일치 계정만 적용: OK
- 렌더링 문자열 기반 hover fallback 제거 상태: OK
- `T-IG-SPA-INJECTION-001`: 완료
- 단, 팝업 닫기 후 Explore 전체 카드 map 손실은 별도 `T-EXPLORE-POPUP-RETURN-001` 회귀로 분리한다.

## v265 코드 검증

- manifest/version_name `2.3.8.265`
- `test_ext_spa_injection.js`: Explore 팝업 왕복 전체 map 유지, hover 200ms 확정, Side 이동 중 선택 유지, data-code 재연동, DOM 진단복사·nav 숨김 회귀 OK
- IG Ext JavaScript 11개, JavaScript syntax 22개, Python compile 32개, 전체 pytest 60 passed: OK
- 실제 Chrome 팝업 복귀·hover 이동·DOM 복사·자동실행 No 이동은 완료가 아니라 검증대기다.

## v266 코드·정적 회귀 검증

- manifest/version_name `2.3.8.266`
- Main `No000`·Rank badge·순위 종류 행·우측 1/Prev/Current/Next/마지막 DOM·순위 설정 탭 부재: OK
- `#IGBLUE_NoNav_*` query/click 부재, 내부 `IGBLUE/internal_no_nav_state`·Current/Next handler·shortcode 카드 탐색 존재: OK
- 삭제된 시각 helper `teMainAnchorId` 잔여 호출 제거: OK
- IG Ext JavaScript 12개: OK
- 전체 JavaScript syntax 23개: OK
- Python compile 32개: OK
- 전체 pytest 60 passed: OK
- 실제 Chrome 자동실행 Current/Next·중지 후 이어하기는 완료가 아니라 검증대기다.

## v265 DOM 진단복사 실제 결과 — 2026-07-29

- Explore 콘텐츠 카드 20개 중 20개 인젝션: OK
- 추가 스크롤 후 콘텐츠 카드 27개 중 27개 인젝션: OK
- 진단상 `has_injection=false` 1건은 게시물 썸네일이 아니라 Instagram 좌측 `/reels/` 메뉴 링크로 확인
- `DOM 진단복사` 실제 클립보드 출력: OK


## v267 코드·정적 회귀 검증

### Side 순위 복원·Main 분리

- 테스트: `IG_StYellow/test_ext_rank_visual_removal.js`, `test_ext_main_ui.js`, `test_ext_module.js`
- 결과: OK
- 확인:
  - Side `No000`·Rank badge·Side 전용 순위 설정·저장/복원 코드 존재
  - Side 설정에 Main 체크·Main 순위 payload 없음
  - Main `No000`·Rank badge·우측 이동 버튼 DOM 부재
  - 내부 Current/Next handler·shortcode 카드 탐색 유지

### 홈 중복 인젝션 생성경로 진단

- 테스트: `IG_StYellow/test_ext_home_injection_source_diagnostic.js`
- 결과: OK
- 확인:
  - H/D/B_HOME/B_DETAIL/B_REELS 생성경로 속성·색상 존재
  - hover 확정 청록색 우선순위 유지
  - DOM 진단의 duplicate_codes/create_sources/same_parent/same_article 필드 존재
- 실제 홈 중복 원인과 차단은 Chrome 진단 전이므로 완료로 기록하지 않는다.
- 전체 정적 회귀: Ext 13개 OK, JavaScript syntax 24개 OK, Python compile 32개 OK, pytest 60 passed.


## v267 홈 중복 생성경로 실제 확인 — 2026-07-29

- Instagram 홈 동영상 게시물에서 `H_IMAGE_LINK` 카드 1개와 `D_VIDEO_LINK` 카드 1개가 같은 shortcode로 겹친 것을 사용자가 생성경로 색상으로 확인했다.
- 이미지 전용 게시물에서는 2개가 생성되지 않았다.
- `T-HOME-INJECT-SOURCE-DIAG-001`: 완료.
- 중복 제거 동작 자체는 v268 신규 검증대기다.

## v269 사용자 실동작 완료 반영 — 2026-07-29

관련 정적·단위 회귀: Ext JavaScript 15개 OK.

- `T-ANALYZE-SIDEBAR-001`: 8780 계정 목록에서 클릭 시 해당 계정 검색·상세 표시 정상
- `T-IG-MAIN-DIAG-001`: Main DOM 진단복사와 Side 막대 차트·날짜 테두리 정상
- `T-HTML-REPORT-THUMB-001`: 기존 계정 HTML 보고서 존재·열림
- `T-SIDE-MIN-FILTER-001`: 댓글·하트 최소 필터 정상
- `T-ITEM-ONLY-001`: 다운로드 없이 통계 수집 정상
- `T-AUTO-V249-FLOW-001`: 자동 계정 이동·다른 탭 사용 후 복귀 정상
- `T-SIDE-ANALYZE-LINK-001`: Side 계정별 8780 링크 정상
- `T-SIDE-TAB-REREAD-001`: 현재 탭 재읽기 정상
- `T-AUTO-PROGRESS-CONTINUE-001`: 중단 후 이어하기·진행상태 리셋 정상
- `T-SIDE-CURRENT-ACCOUNT-ADD-001`: 현재 계정 추가 수정본 정상
- `T-ACCOUNT-ORDER-SAVE-001`: 계정 순서 저장·명시 정렬 정상
- `T-EXPLORE-HOVER-ACCOUNT-001`: Explore·Reels hover 계정 전달 정상
- `T-EXPLORE-POPUP-RETURN-001`: Explore 팝업 복귀 후 인젝션 유지 정상
- `T-EXPLORE-HOVER-DELAY-001`: 0.2초 hover 통과 오감지 방지 정상
- `T-SIDE-RANK-RESTORE-001`: Side No·순위 복원 정상
- `T-HOME-INJECT-DUPLICATE-001`: 홈 동영상의 이미지+동영상 이중 인젝션 제거 정상
- `T-EXPLORE-SPA-ENTRY-RECOVERY-001`: 홈→Explore 첫 진입 인젝션 정상

부분 확인으로 완료 승격하지 않은 항목:

- `T-INJECT-DOWNLOAD-META-001`: 개별 게시물 MP4와 Side 썸네일 수동 다운로드는 정상. 전체 메타·정확한 ✅·carousel은 미확인
- `T-AUTO-RUN-COUNT-001`: Analyze8780 계정별·전체 집계는 확인됐으나 Side 현재 계정·전체 실행 집계 기준은 별도 확인 필요
- `T-SIDE-STATS-MODE-001`: 설정 UI·기본 연동 표시는 확인됐으나 비연동 실제 실행 미확인

## v269 코드 검증

- manifest/version_name: `2.3.8.269`
- Ext JavaScript `test_ext_*`: 15개 OK
- 전체 JavaScript syntax: 26개 OK
- Python compile: 33개 OK
- 전체 pytest: 61 passed
- `test_ext_private_views_auto_download.js`: 조회수 -1·views_available=0, 활성 참여지표 단순합산, snapshot No001 AD-03 통과, 실패 뒤 다운로드 금지 OK
- 실제 Instagram 비공개 조회수 Top 1 자동 다운로드는 완료가 아니라 검증대기다.



## v270 코드 검증

- manifest/version_name: `2.3.8.270`
- `test_ext_immediate_top_download.js`: 첫 pending 후보 선택, 완료 shortcode 재다운로드 방지, snapshot 직접 준비, 날짜/끝 이후 계정 이동 기준, 외부 hover-style 호출 부재 OK
- Ext JavaScript `test_ext_*`: 16개 OK
- 전체 JavaScript syntax: 27개 OK
- Python compile: 33개 OK
- 전체 pytest: 61 passed
- 실제 Chrome에서 No001 즉시 다운로드·완료 후 swipe 재개·날짜 종료 뒤 다음 계정 이동은 완료가 아니라 검증대기다.


## v271 코드 검증

- manifest/version_name: `2.3.8.271`
- `test_ext_overlay_mode_bridge.js`: 3개 Side 옵션, content bridge 함수 정의·실행, mode fallback, ER weights·visual settings 전달, MAIN class/CSS 계약 OK
- IG Ext JavaScript `test_ext_*`: 17개 OK
- 전체 JavaScript syntax: 28개 OK
- Python compile: 33개 OK
- 전체 pytest: 61 passed
- 실제 Chrome의 Detail·Down icon only·None 전환과 새로고침·SPA 유지 확인 전에는 `T-INJECT-OVERLAY-MODE-001`을 완료로 표시하지 않는다.


## v272 사용자 실동작 완료 반영 — 2026-07-29

- 사용자가 조회수 비공개 조건에서 후보 1개가 실제 다운로드됐다고 확인했다.
- 다운로드 뒤 다음 계정 URL로 정상 이동했다고 확인했다.
- 관련 테스트가 OK이므로 다음 항목을 `[완료]`로 승격했다.
  - `T-SIDE-PRIVATE-VIEW-RANK-001`
  - `T-AUTO-IMMEDIATE-TOP-001`

## v272 코드 검증

- manifest/version_name: `2.3.8.272`
- `test_ext_visual_settings_download_status.js`: Visual settings 기본값, Use/Side/Main 독립 저장, background storage 저장, content/Main 전달, 다운로드 상태 분류·표시 helper OK
- IG Ext JavaScript `test_ext_*`: 18개 OK
- 전체 JavaScript syntax: 29개 OK
- Python compile: 33개 OK
- 전체 pytest: 61 passed
- `검증목록_v272.md`: 01~43 연속·v272 항목 포함 OK
- 실제 Chrome의 Side/Main 교차 체크와 MP4/JPG 다운로드 상태 강조는 검증 전이므로 `T-VISUAL-SIDE-MAIN-001`, `T-MAIN-DOWNLOAD-STATUS-001`을 `[코드반영]`으로 유지한다.

## v273 코드 검증

- manifest/version_name: `2.3.8.273`
- `test_ext_account_queue_v273.js`: 0/N·1/N 분리, background 직접 URL 이동, 명시적 not_found 분류, private/auth 오판 방지, 휴지통·DB UI 계약 OK
- IG Ext JavaScript `test_ext_*`: 19개 OK
- 전체 JavaScript syntax: 30개 OK
- Python compile: 33개 OK
- 전체 pytest: 63 passed
- `검증목록_v273.md`: 01~49 연속·v273 항목 포함 OK
- Shared SQLite 선택·다른이름 backup·새 파일·기존 파일 열기·경로 입력 거부: OK
- Analyze8780 database-files/open/new/save-as HTTP API와 활성 계정목록 전환: OK
- 실제 Chrome의 0/N·1/N 시작, 없어진 계정 tombstone·다음 URL, 실제 Windows의 선택 DB 지속·다운로드 저장은 검증대기다.


## v272 사용자 실동작 추가 완료 반영 — 2026-07-31

- `T-VISUAL-SIDE-MAIN-001`: Metric bars·Date border의 Use/Side/Main 독립 저장·적용 정상 확인
- `T-MAIN-DOWNLOAD-STATUS-001`: Main DOM의 MP4/JPG 다운로드 상태 강조와 기존 Glow 설정 적용 정상 확인
- 관련 정적 회귀: `test_ext_visual_settings_download_status.js` OK

## v273 부분 실동작 확인 — 2026-07-31

- `T-AUTO-INDEXED-START-001` 중 `1/N 이상 지정 계정 URL 직접 시작`: OK
- 같은 test ID의 `0/N 비 Instagram 시작`은 v273 실패가 확인되어 전체 완료로 올리지 않는다.
- `T-AUTO-PROGRESS-CONTINUE-001`은 과거 이어하기 완료 기록을 유지하되 v273 `중지중...` 고착 회귀로 재개방한다.


## v274 코드 검증

- manifest/version_name: `2.3.8.274`
- `test_ext_auto_control_eta_v274.js`: OK
- IG Ext JavaScript `test_ext_*`: 20개 OK
- 전체 JavaScript syntax: 31개 OK
- Python compile: 33개 OK
- 전체 pytest: 63 passed
- `검증목록_v274.md`: 01~52 연속·v274 test ID 포함 OK
- 0/N 비 Instagram 실제 안내, 사용자 중지·자동종료 후 버튼 상태, tab_id 탭 전환, 장시간 전체 ETA는 실제 Chrome/Windows 검증 전이므로 완료 처리하지 않는다.
## v275 코드·정적 회귀 검증

- manifest/version_name: `2.3.8.275`
- `test_ext_side_operator_manual_v275.js`: 자동실행 한국어 UI·기본 사용, 방식 3 tab_id 위치, 톱니바퀴 우측 정렬, 표시계정추가 제거, Side IG 계정 클릭 대상 선택, 수동 MP4/JPG 즉시 start payload 계약 OK
- IG Ext JavaScript `test_ext_*`: 21개 OK
- 전체 JavaScript syntax: 32개 OK
- Python compile: 33개 OK
- 전체 pytest: 63 passed
- `검증목록_v275.md`: 01~55 연속·v275 test ID 포함 OK
- 실제 Side 화면 배치·카드 클릭 대상·수동 다운로드 시작 강조는 실제 Chrome 검증 전이므로 신규 항목을 `[코드반영]`으로 유지한다.
- v272 다운로드 결과 강조 완료 기록과 v275 수동 클릭 순간 시작 강조 검증을 분리한다.



## v276 코드·정적 회귀 검증

- manifest/version_name: `2.3.8.276`
- `test_ext_runtime_diagnostic_v276.js`: MAIN runtime API·10초 ring 표본·Long Task·DOM scan·Observer·auto account correlation·no unload patch/no auto recovery 계약 OK
- IG Ext JavaScript `test_ext_*`: 22개 OK
- 전체 JavaScript syntax: 33개 OK
- Python compile: 33개 OK
- 전체 pytest: 63 passed
- `검증목록_v276.md`: 01~56 연속·v276 test ID 포함 OK
- 실제 3/3 응답 없음 재현과 원인 확정은 완료가 아니라 검증대기다.


## v277 코드 검증

- manifest/version_name: `2.3.8.277`
- WS8771 표시 버전: `2.3.8.277 / v277`
- `test_ext_side_control_save_v277.js`: 저장 정책 4조합·CDP gate·popup handoff·metadata 상태 계약 OK
- IG Ext JavaScript `test_ext_*`: 23개 OK
- 전체 JavaScript syntax: 34개 OK
- Python compile: 33개 OK
- `test_ws8771_module.py`: 20 passed, metadata-only JSON·HTML 단위 검증 OK
- 전체 pytest: 65 passed
- `검증목록_v277.md`: 01~59 연속·v277 test ID 포함 OK
- 실제 Chrome/Windows CDP 전환·popup handoff·4조합 파일 저장은 완료가 아니라 검증대기다.


## v278 코드·정적 회귀 검증

- manifest/version_name: `2.3.8.278`
- `test_ext_download_cache_recovery_v278.js`: exact snapshot No·shortcode·owner·선택 자산 URL 복구, Main actual shortcode 충돌 차단, 수동 `MANUAL_SINGLE` 유지 계약 OK
- `test_ext_private_views_auto_download.js`, `test_ext_auto_v249_regression.js`, `test_ext_main_ui.js`: v262 cache 회복 복원 회귀 OK
- IG Ext JavaScript `test_ext_*`: 24개 OK
- 전체 JavaScript syntax: 35개 OK
- Python compile: 33개 OK
- 전체 pytest: 65 passed
- `검증목록_v278.md`: 01~60 연속·`T-AUTO-CACHE-RECOVERY-001` 포함 OK
- 실제 v278 Chrome·Windows의 Video/Image 조합별 다계정 다운로드와 `[복구완료]` 로그는 검증 전이므로 `T-AUTO-CACHE-RECOVERY-001`은 `[코드반영]`으로 유지한다.


## v279 코드·정적 회귀 검증

- manifest/version_name: `2.3.8.279`
- Auto8700 version/version_name/build_tag: `2.3.8.279 / v279`
- `test_auto8700_module.py`: 19 passed — PUT `/json/new`, Instagram Runtime 확인, 수동 bring-to-front·최소화 창 복원, 전용 CDP process 필터, 자동실행 visible launch 계약 OK
- IG Ext JavaScript `test_ext_*`: 24개 OK
- 전체 JavaScript syntax: 35개 OK
- Python compile: 33개 OK
- 전체 pytest: 71 passed
- `검증목록_v279.md`: 01~61 연속·`T-AUTO-CDP-LAUNCH-001` 포함 OK
- `test_list.md`: 완료 55 / 전체 115 = 48%
- 실제 Windows의 Chrome 창 실행·복구는 아직 검증 전이므로 `T-AUTO-CDP-LAUNCH-001`은 `[코드반영]`으로 유지한다.

## v279d 코드·정적 회귀 검증 — 2026-08-03
- manifest/version_name: `2.3.8.27910 / 2.3.8.279d`
- 새 탭 생성→ready→활성화→이전 탭 종료 순서 정적 테스트: OK
- 새 탭 실패 시 이전 탭 보존·새 탭 제거 정적 테스트: OK
- 이전 탭 unload 전용 guard와 900ms timeout 정적 테스트: OK
- IG JavaScript test_*: 34개 OK
- 전체 JavaScript syntax: 45개 OK
- Python compile: 33개 OK
- 전체 pytest: 71 passed
- 실제 Chrome 자동 전환은 아직 검증대기이므로 기능 완료로 기록하지 않는다.


## v279d 실제 Chrome 완료 — 2026-08-03
- CDP:O에서 2계정·3계정 자동 실행을 완료했다.
- 3계정×Top3, 게시물 9개, MP4/JPG 파일 18/18, WS8771 direct 저장, 자동종료를 확인했다.
- 새 tab_id 준비 후 이전 탭 종료와 다음 계정 진행이 정상 동작했다.
- CDP:X→O 시작 경로의 OWNER 인계 누락은 v280 후속 항목으로 분리했다.

## v280 코드·정적 회귀 검증 — 2026-08-03
- manifest/version_name: `2.3.8.2800 / 2.3.8.280`
- 2단계 OWNER 인계, 최근 20개 이력, pending 복원, Main 탭 진단 정적 회귀: OK
- IG JavaScript test_*: 35개 OK
- 전체 JavaScript syntax: 46개 OK
- Python compile: 33개 OK
- 전체 pytest: 71 passed
- 실제 Chrome CDP:X→O·다중 탭 인계는 검증대기다.

## v290 Analyze8780 코드 검증
- Python compile, pytest 10개, UI Node 회귀, inline JS syntax: OK
- 실제 Windows 재생·탐색기·차트 화면은 완료로 기록하지 않음


## v291 코드 검증

- Auto8700·Shared·Analyze Python 회귀 84 passed.
- JavaScript syntax·실행 회귀 42개 OK.
- 실제 Chrome JPG 저장 기능 완료는 아니며 `[검증대기]` 유지.

## v292 코드 테스트 완료
- Auto8700 단위 테스트: 28 passed.
- IG_StYellow JavaScript 회귀: 39개 OK.
- Python compile 및 JavaScript syntax: OK.
- 실제 Windows JPG 생성은 검증대기이며 완료 처리하지 않음.

## v293 코드 테스트 완료
- IG JavaScript `test_*`: 40개 OK.
- 신규 `test_ext_auto_thumbnail_settings_v293.js`: 톱니바퀴 탭·기본값·중복 제거·저장 우선순위 OK.
- JavaScript syntax 51개, Python compile, 전체 pytest 86 passed, manifest JSON: OK.
- 실제 Chrome 화면 확인 전이므로 기능 완료가 아니라 코드 테스트 완료만 기록한다.

## v294 정적 완료
- Cache8701 단위 4 OK, 전체 pytest 90 OK, IG Node 41 OK.
- 실제 CDP body·파일 저장은 완료로 기록하지 않고 검증대기 유지.

## v312 Explorer Swipe/scroll 인젝션 실제 확인
- 상태: [완료]
- 테스트 파일: `IG_StYellow/test_ext_explore_clips_scroll_v312.js`
- 정적 결과: OK
- 실제 결과: 사용자 실제 Chrome에서 Explorer 첫 화면 이후 Swipe/scroll 시 새 카드에 인젝션이 계속 붙는 동작 확인 OK.
- 영향 범위: `IG_StYellow/js/instagram_inject.js` Explorer clips `layout_content.medias` 파서.
## v322 Side Settings 실제 Chrome 완료 — 2026-08-14
- 상태: [완료]
- 테스트 파일: `IG_StYellow/test_ext_settings_modal_restore_v322.js`
- 정적 결과: OK — 복원 전역 + 기존 handler + `T()` 실행 후 `settingsModal` DOM 생성.
- 실제 결과: 사용자 실제 Chrome v322에서 Side 톱니바퀴 클릭 시 Settings 창 정상 표시 확인 OK.
- 영향 범위: v319 accidental deletion으로 사라진 Side overlay/ER 전역 선언 복원.
- 회귀 기준: 해당 전역 선언과 Settings handler를 독립 dead-code 삭제에 포함하지 않는다.

