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

## 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 파일·보고서 재생성 결과는 검증대기다.

