<!-- FILE: _St/WS8771/ai_read.md | ROLE: WS8771 현재 기준 -->

## v319 현재 기준
- 실행/표시 버전 `2.3.8.319 / v319`.
- `ig_copy_to_edit_folder`는 Tk control queue를 통해 GUI main thread에서 실행하며 수동 MP4 1건만 받는다.
- picker 선택 후 copy2 성공 시 같은 GUI main thread에서 `폴더를 열까요?` 확인/취소를 표시한다.
- 확인은 기존 `handle_open_local_path(..., "ig_open_folder")`로 즉시 탐색기를 열고, 취소는 열지 않는다. 둘 다 target_folder 응답은 유지한다.

## v317 현재 기준
- `ig_copy_to_edit_folder` GUI main-thread picker는 유지하되 호출 의미는 수동 MP4 1건 편집복사다. 자동 다운로드 다중 누적/자동종료 일괄복사는 사용하지 않는다.
- 요청 `file_paths`는 현재 방금 저장 완료한 MP4 한 개가 정상 기준이며 경로는 저장하지 않는다.


## 패키지 v316 동기화
- 실행/표시 버전은 `2.3.8.316 / v316`.
- `ig_copy_to_edit_folder`는 thread-direct에서 제외하고 Tk control queue를 통해 GUI main thread에서 처리한다.
- Windows 편집폴더 picker는 `filedialog.askdirectory()`를 GUI main thread에서 호출한다. 선택 경로는 영구 저장하지 않는다.
- 복사는 신규 MP4만 수행하고 동일 파일명은 덮어쓰지 않는다.

## 패키지 v314 동기화
- 실행/표시 버전은 `2.3.8.315 / v314`; 기존 최소창·Tray 동작은 그대로 유지한다.

## v310 Tray 아이콘 기준
- 기존 `_ → 상태색 ㅁ`, `.` Tray 이동, X 종료 의미는 유지한다.
- Tray는 `_St/Shared/assets/ig_styellow_tray.ico` 공용 프로젝트 아이콘을 사용한다.
- 표시 버전은 `2.3.8.310 / v310`이다. 실제 Windows 아이콘 표시는 `[검증대기]`.

## v309 최소창·Tray 현재 기준
- WS8771 `_`의 기존 34px `ㅁ` 최소창과 enter_mode 상태색은 유지한다.
- full/compact UI에 `.` 버튼을 추가하며 클릭 시 Windows Tray 아이콘 생성 성공 후 화면을 `withdraw()`한다.
- Tray 아이콘 클릭/더블클릭/우클릭 요청은 Tk main thread에서 복원한다.
- Auto8700 사각형은 보라색 고정색, WS 사각형은 기존 상태색이므로 화면에서 구분한다.
- X는 기존 WS 종료이며 Tray 이동과 별개다.
- 표시 버전은 `2.3.8.309 / v309`다.
- 실제 Windows Tray 이동/복원은 `[검증대기]`다.

# WS8771 현재 기준 — v277

- 기존 직접 다운로드·해시·JSON·보고서·Shared MEDIA_SAVED 흐름은 유지한다.
- `ig_media_metadata_collect`는 파일을 만들지 않고 계정 부모 JSON의 `shortcode::metadata::0` 항목과 HTML/index.htm을 생성한다.
- metadata 항목은 caption·통계·퍼머링크·thumbnail/video 직접링크와 5개 요청/저장 상태를 유지한다.
- 보고서 v4는 빈 file_name metadata 항목을 게시물 카드로 표시하고 로컬 파일 0개와 MP4/JPG 직접링크를 구분한다.
- Injection 수동 다운로드의 `sort`를 우선 사용하고 없으면 `sort_snapshot`을 동일 통계로 사용한다.
- 기존 shortcode+asset_kind+media_index 항목 갱신 시 신규 payload에서 미제공된 통계·URL·caption은 기존 정상값을 유지한다. 명시적 0은 `metric_presence=true`일 때 반영한다.
- 이미 다운로드된 자산의 중복 확인 경로도 현재 메타를 JSON·보고서에 병합한다.
- `ig_observation_sync_hour`는 동일 계정·UTC 1시간 bucket·최대 500개 observation을 받는다.
- 모든 item의 account가 요청 account와 일치해야 한다.
- PHP `media_stat_hour_upsert`에 `items_json` 한 batch로 요청하고 requested_count=saved_count를 강제한다.
- 저장 성공 후 `media_stat_hour_list`로 같은 account+hour를 수신한다. 송신·수신 중 하나라도 실패하면 `ok=false`다.
- 통계 요청에는 공유 수, 로컬 파일 경로, thumbnail/video 직접 CDN URL을 보내지 않는다.
- HTTP 오류 body·stage·누락 컬럼 보존과 기능 체크 로그 기준을 유지한다.
## v277 현재 기준

- 모든 다운로드 예상 경로는 `_StDown/instagram/{계정}`이며 `account_folder_merge=true` 입력도 무시한다.
- `ig_report_rebuild_all`은 부모의 계정 JSON을 읽어 계정 HTML과 폴더 `index.htm`을 다시 생성한다.
- 보고서 v4는 item owner가 비어 있어도 JSON `folder_name`을 계정으로 사용해 Analyze8780 링크를 생성한다.
- 서버 `top_n`은 `meta.top_n`만 사용하며 `rank_total`로 대체하지 않는다.
- 실제 Windows 파일·보고서 재생성 결과는 검증대기다.
