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

## v309 Windows Tray 공용 helper
- `windows_tray.py`: Auto8700·WS8771이 공유하는 Win32 `Shell_NotifyIconW` tray helper다. 외부 패키지를 사용하지 않는다.
- Tray thread는 Tk UI를 직접 조작하지 않고 restore Event만 기록한다. 각 Tk main thread가 polling하여 복원한다.
- 아이콘은 화면을 Tray로 숨길 때만 추가하고 UI 복원/앱 종료 시 삭제한다.
- Tray 아이콘 생성 성공 여부를 호출 측에 반환하므로 실패했을 때 UI를 숨기지 않는다.
- `test_shared_windows_tray.py`: 비Windows import/cleanup 및 restore Event 1회 소비를 검증한다.

## v303 Cache Image 지원
- `ensure_instagram_account_index()`는 계정 폴더의 최소 `index.htm`만 생성한다.
- legacy md5·계정 JSON·정적 보고서 파일을 정리하며 SQLite 기준은 유지한다.


# Shared 현재 기준 — v297
- Instagram 표준 파일 검색은 `{shortcode}.{실제확장자}`만 허용한다.
- `_thumbnail.*`, `_auto_seen.*` legacy 검색은 제거했다.
- `build_instagram_media_path()`는 향후 플랫폼별 공통 규약의 Instagram 구현 기준이다.
- SQLite media_assets·다운로드 이벤트·10분 통계 스키마는 유지한다. Analyze8780은 `include_media_assets=False`로 목록·상세 미디어 행 조회를 생략한다.

# Shared 현재 기준 — v296
- `CACHE8701_CDP`, `AUTO_SEEN_JPG`를 공통 저장 source mode로 허용한다.
- 공통 파일 규약 함수는 `{shortcode}.{실제확장자}` 경로를 만든다.
- 로컬 탐색은 표준 이름을 먼저 확인하고 기존 `_thumbnail.*`, `_auto_seen.*`를 호환한다.
- `record_downloaded_file()`은 선택적으로 명시 DB 경로를 받아 Analyze8780의 현재 열린 DB 복구에 사용한다.
- 기존 SQLite schema v7, 10분 observation 저장, 다운로드 중복 정책은 유지한다.

# Shared 현재 기준 — v288

- 공통 SQLite 스키마 버전은 7을 유지한다.
- `list_accounts()`는 선택적으로 `search_pattern`을 받아 입력값을 그대로 `username LIKE ? COLLATE NOCASE`에 전달한다.
- 계정 조회 결과에는 현재 검색 결과 `total`, 활성 계정 전체 `total_all`, `table_name=social_accounts`를 포함한다.
- 계정 page size 상한은 10,000이다.
- `list_account_posts()`는 현재 페이지 게시물의 AVAILABLE `media_assets`를 한 번의 추가 쿼리로 묶어 각 게시물의 `media_assets` 배열에 제공한다.
- 브라우저에는 storage root 절대 경로를 제공하지 않는다. 로컬 파일 검증·열기·삭제는 Analyze8780 서버가 수행한다.
- 기존 저장·정렬·통계·다운로드·DB 선택 기능을 유지한다.
