# AIWK EXT4 관리 메모

## 현재 기준 버전

- 전역 버전: `AIWK.version = "v036"`
- 확장 버전: `0.0.36`
- 테스트 관리 방식: 자동 실행이 아니라 수동 실행

## v030에서 정리된 원칙

1. 테스트 항목은 코드에 박지 않고 JSON으로 정의한다.
2. 사용자가 직접 `수행` 버튼을 눌러 테스트한다.
3. 예상 답/성공 조건은 JSON 항목의 `expected`에 둔다.
4. 수동 실행 방법은 JSON 항목의 `manual_steps`에 둔다.
5. 완료 여부는 사용자가 직접 체크한다.
6. 휴지통은 실제 삭제가 아니라 논리 삭제/숨김 토글이다.
7. 완료 항목은 `완료숨김`으로 숨길 수 있다.
8. 휴지통 항목은 `휴지통 보기`로 다시 볼 수 있다.
9. 오류 항목은 버그 아이콘/색상으로 남겨 추적한다.
10. 모든 창 헤더에는 전역 버전 배지를 표시한다.

## 상태 이모지

- 🧪 테스트 항목
- ✅ 완료 항목
- 🐞 오류 발생 항목
- 📦 모듈 항목
- 🗑 휴지통 항목

## 수동 테스트 JSON 위치

`/AIWK_COMMON/test/aiwk_manual_tests.json`

## 수동 테스트 관리 모듈

`/AIWK_COMMON/modules/dev/manual_test_manager.js`

## 진행률 체크

- v028: 약 38%
- v030: 약 40%

## 남은 큰 작업

- 접속 유지/새로고침 복원
- 접속창 종료 버튼
- 전체 창 숨김/보임/접기/펼치기
- 창관리 우상단 미니 아이콘
- 수동 테스트 항목 편집 강화
- WSS 실운영 로그 저장
- Node-RED 실작업 연결
- ZIP 감시/다운로드 감시
- selector/capture/input/click/watch
- macro commander
- HMI/dashboard


## v030 관리 메모
- 진행률: 약 43%.
- 즉시 구현: client_id 배지, popup 전체 창 제어, 열린 창 순차 복원, 3단 접기 아이콘 모드, placeholder tooltip, 수동 테스트 완료 시점/소요시간/보상 메시지.
- 계획 반영: skin cascade, domain js(on)/css/html, module market/license, D3.js node graph/workflow editor, 계정별 reward/rank.
- D3.js 단계는 p07-d3-node-editor로 분리한다. 접힌 창을 노드로 보고 선긋기/연결/의존성 표시를 목표로 한다.


## v031 관리 메모
- 접힌 창 복구 조작점 부족 문제 해결: v031 배지/접기 메뉴/더블클릭 펼침.
- 접속창 전체 제어는 전체1단/전체2단/전체3단/전체펼침/숨김/보임/종료 기준으로 정리.
- 다음 빠른 계획: 제어창 안에 skin/template 선택 UI, 팔레트 기본 패키지 목록, 차트 패키지 1개 샘플 등록.
- Tailwind 사용 상태: 현재는 전체 Tailwind 빌드 기반이라기보다 내부 CSS 유틸 일부와 전용 base CSS 병행 구조. 정식 스킨/템플릿 단계에서 빌드 산출물 기준을 확정해야 한다.

## v033 관리 메모
- 1단/2단/3단 접기 상태에서는 우하단 resize 핸들을 숨긴다. 메뉴 클릭 방해 방지 목적이다.
- 창 맨좌측에 `☰` 창 메뉴를 추가했다. 접기/펼침, TEST, JS, 디자인, 닫기 기능의 진입점이다.
- `⋯` 접기 메뉴는 hover 간격 때문에 사라지지 않도록 다리 영역과 pointerdown stop 처리를 추가했다.
- 버튼/메뉴 항목은 `.aiwk-nobr` 기준으로 줄바꿈을 막는다.
- 1단 접기는 body/status만 숨기는 접기 상태로 유지한다.
- 2단 접기는 D3.js 노드 선긋기를 고려해 좌우 연결점 pseudo element를 추가했다.
- 3단 아이콘은 향후 제어창 팔레트/아이콘 도크에 모아 클릭해 사용하는 방향이다.
- 전체 접기/숨김/보임은 `AIWK.win.issueGlobalCommand()`와 tick 구조로 확장했다. 향후 macro_break/pause/stop 중앙 명령으로 연결한다.
- 접속 popup은 접속 후 바로 닫지 않고 전체 창 제어 버튼을 사용할 수 있게 유지한다.
- 진행률: v033 기준 약 48%.


## v036 관리 메모
- 2단 노드 상태의 제목 줄바꿈을 금지하고 overflow hidden/clip으로 앞부분만 보이게 했다.
- 3단 아이콘 상태에서는 client_id(A1)를 숨기고 기능 이모지 + order 번호를 표시한다. client_id는 2단까지만 표시한다.
- 창 메뉴에 JS 구조, CSS 구조, 패키지/팔레트, Apex차트, 후킹/인스타 계획 진입점을 추가했다.
- `/AIWK_COMMON/packages/aiwk_packages.json`를 추가하여 기본 패키지/추가 패키지 후보를 Node-RED 팔레트식으로 관리하기 시작했다.
- 실제 ApexCharts/Instagram/TikTok/D3 구현은 v036에서 하지 않는다. 먼저 범용 패키지/팔레트/스킨/템플릿 구조를 굳히는 것이 우선이다.
- 진행률: v036 기준 약 49%.


## v036 관리 메모
- ☰ 창 메뉴에 `메뉴 수정`을 추가했다.
- 창별로 전체 제목, 2단 짧은 제목, 3단 이모지, order 번호를 localStorage와 복원 레이아웃에 저장한다.
- 2단 노드 상태는 짧은 제목을 우선 표시하고, 없으면 overflow hidden/clip으로 디자인이 깨지지 않게 한다.
- 다음 단계 후보: 메뉴 항목 자체 추가/삭제/이름변경, 2단 서브메뉴 편집기, 팔레트 패키지 등록 UI.
- 진행률: v036 기준 약 50%.


## v036 관리 메모

- 표준 구조: `project -> stage1 -> stage2 -> win -> module/port`.
- 무한 그룹 중첩은 금지한다. 단계 수를 명시해 전달한다.
- 통신 주소: `net.room.client_id#endpoint/project/stage1/stage2/win/port`.
- WSS는 `net.room.client_id`까지만 중계하고 `endpoint/route`는 클라이언트 내부에서 처리한다.
- `route`는 실제 파일 경로가 아니다. 실제 파일 위치는 `dir/path/file_path`라고 부른다.
- 공용 lib 파일은 `yw-` 접두를 사용한다. 이번 버전에서 `yw-route.js`, `yw-window-state.js`를 추가했다.
- 모든 창 상태 저장/복원 대상: `project_id`, `stage1_id`, `stage2_id`, `singleton`, `fold_level`, `visible`, `rect`, `icon_rect`, `route`, `address`.
- 진행률: v036 기준 약 52%.


## v037 관리 메모

- group은 기존 WSS/인증/토큰 호환 용어로 유지한다. group→net 일괄 치환 금지.
- route 뒤쪽 `/.../...`는 그룹이 아니라 `folder_route`, 즉 폴더식 논리 경로로 부른다.
- 각 창의 첫 ☰ 메뉴는 고정 진입점이다. v037부터 2단 메뉴로 접기/기능/구조/패키지를 나눈다.
- 기능 설정 메뉴는 module/singleton/folder_route를 창별로 저장한다.
- 다음 단계는 폴더식 route 목록 UI와 팔레트에서 창 추가 흐름이다.


## v039 WSS token/tab_id 표시 보강
- content.js의 profile 저장에 authToken/token/authPayload를 포함한다.
- service_worker.js가 AIWK_GET_TAB_ID에 응답한다.
- WSS 통신 테스트창 상단에 tab_id/token/auth/address를 표시한다.
- group 용어는 기존 WSS 호환으로 유지하고, / 뒤쪽은 폴더식 route로 유지한다.

## v039 tab_id별 client_id/token 세트 관리

- 접속창에서 현재 tab_id별로 client_id와 token을 한 세트로 저장한다.
- 저장된 client_id 항목을 선택하면 매칭된 token/auth 메타도 같이 로드한다.
- 저장 항목 삭제 버튼을 추가했다.
- active tab_id를 얻지 못하면 popup fallback tab_id를 생성해 저장키로 사용한다.
- 기존 group 용어는 유지하고, folder_route 개념은 그대로 유지한다.


## v040 WEB+EXT 상호진단 / 도메인 계층 규칙

- WEB 콘솔: `/AIWK_WEB/index.php`는 WEB1 진단 콘솔 역할을 한다.
- EXT4: A1/A2/HOST1 등 실제 실행자 역할을 한다.
- ChatGPT 탭: 진단 JSON 전달 대상이다. `#prompt-textarea`에 자동 입력까지만 하고 전송은 사용자가 직접 누른다.
- 도메인 폴더: `AIWK_COMMON/domains/{domain_family}/{full_domain}/folders/{folder_key}/`.
- ChatGPT 테스트 폴더: `AIWK_COMMON/domains/chatgpt/chatgpt.com/folders/chatGPT/`.
- 인스타 수집 MVP는 계획/규칙 파일만 추가했고, 실제 추출 로직은 기존 EXT 분석본을 받은 뒤 연결한다.
- 진행률: 전체 최종형 기준 56%, MVP 기준 약 67%.


## v041 관리 메모

- 진행률: 전체 최종형 약 58%, 실사용 MVP 약 70%.
- 도메인 구조는 `AIWK_COMMON/domains/{service_or_group}/{representative_domain}/`로 확정한다.
- 대표도메인 아래 `$folders`는 가변이다. 인스타에서는 계정명일 수 있다.
- `folders/account` 같은 고정 폴더를 모든 도메인에 강제하지 않는다.
- 공통 모듈은 대표도메인 바로 아래에 둔다.
- 계정별 MCP 키, 팬관리, 이벤트, 댓글/고객관리처럼 계정별 커스터마이징이 필요할 때만 하위 폴더로 내려간다.
- v041 팝업에는 도메인검사, 탭에저장, 탭 설정삭제, 현재탭복제, 설치/사용/실행 UI를 추가했다.
- 최종 테스트 구조는 WEB(home.yjm.kr/aiwk)+EXT4+ChatGPT 탭 입력을 1차로, home.yjm.kr Tab BUS 관제를 2차로 둔다.


## v042 관리 메모
- home.yjm.kr/aiwk는 WEB+EXT4가 동시에 떠서 서로 상태를 검사하는 1차 기준 도메인이다.
- popup의 home 셀프테스트는 현재 탭 content script에서 진단 JSON을 만들고 WEB 콘솔로 postMessage 한다.
- popup의 ChatGPT 로그전달은 현재 탭 진단 JSON을 만들고 열린 ChatGPT 탭 #prompt-textarea에 입력한다. 자동 전송은 하지 않는다.
- client_id/token은 tab_id 전용 설정과 별개로 AIWK_CLIENT_PROFILE_VAULT_V042에 지속 프로필로 저장한다. 삭제하기 전까지 목록에 남아야 한다.
- token 원문은 ChatGPT 전달 JSON과 서버 진단 로그에 포함하지 않는다.

## v043 관리 메모
- 버전: v043 / 0.0.43.
- 진행률: 전체 최종형 약 62%, 실사용 MVP 약 74%.
- 도메인 로딩 규칙을 `domains/index.json` 매핑 필수 방식에서 폴더 존재 기반 자동 상속 방식으로 변경했다.
- 현재 host 기준으로 `/domains/ → /domains/{root}/ → /domains/{base_domain}/ → /domains/{host}/` 후보를 만든다.
- 존재하는 폴더만 상위에서 하위 순서로 로드한다.
- 형제 도메인은 로드하지 않는다. 예: `i.yjm.kr`은 `n.yjm.kr`을 보지 않는다.
- JSON/i18n은 하위가 상위를 덮어쓰고, JS/CSS는 상위부터 하위 순서로 로드한다.
- `ai_read.md`를 주요 폴더에 추가했다. 이는 실행 대상이 아니라 AI/개발자용 폴더 안내 파일이다.
- 접속창 상단에 진행률 표시를 추가했다.


## v044 WEB1 디버그 브리지
- WEB1은 home.yjm.kr/aiwk 기본 웹 진단 콘솔 client_id이다.
- EXT4 popup에서 WEB1 로그전달과 ChatGPT 직접전달을 분리했다.
- WEB1은 PHP 로그 저장과 ChatGPT 전달용 JSON 생성을 담당한다.


## v045 WEB1 button guide / communication pulse
- WEB1 자가진단: home.yjm.kr/aiwk WEB 콘솔 자기 진단 및 PHP 로그 저장 확인.
- WEB1로 로그전달: 현재 EXT4 탭 진단 JSON을 WEB1 관제 콘솔로 전달.
- ChatGPT 입력: 진단 JSON을 ChatGPT #prompt-textarea에 입력하며 전송은 사용자가 직접 수행.
- WSS/BUS/NR 송수신 시 모든 창은 테두리 펄스로 처리 상태를 표시한다.
- side panel 디버그는 보류, popup 디버그 허브와 WEB1 로그를 우선 사용한다.


## v046 WSS/BUS/NR 접속창 통합 제어
- WSS/BUS/NR은 각 통신 테스트창별 버튼이 아니라 AIWK EXT4 접속창에서 통합 제어한다.
- 토큰 로그인 성공 전에는 통신 제어 영역을 disabled/회색으로 표시한다.
- 연결 상태는 색상 배지로 표시한다. 연결=초록, 연결중/준비=주황, 끊김=빨강/회색.
- BUS는 Tab BUS registry 등록/해제, NR은 N1(Node-RED) 선택 연결 테스트로 본다.
