[{"data":1,"prerenderedAt":334},["ShallowReactive",2],{"doc:\u002Fhistory\u002Fhistory.20260604":3},{"id":4,"title":5,"body":6,"description":303,"extension":327,"meta":328,"navigation":329,"path":330,"seo":331,"stem":332,"__hash__":333},"docs\u002Fhistory\u002Fhistory.20260604.md","작업 이력 — 2026-06-04",{"type":7,"value":8,"toc":302},"minimark",[9,13,20,24,27,132,137,157,161,179,182,185,193,205,211,221,227,237,243,253,259,269,277,287,292],[10,11,5],"h1",{"id":12},"작업-이력-2026-06-04",[14,15,16],"blockquote",{},[17,18,19],"p",{},"6\u002F3 작업 없음 — 6\u002F2 다음 작업 재개.",[21,22,23],"h2",{"id":23},"종합",[17,25,26],{},"PMS 분석 모달 UX와 임베드 인터페이스, Vision 이미지 URL 안정화 4개 흐름 진행:",[28,29,30,55,72,102],"ol",{},[31,32,33,37,38,42,43,46,47,50,51,54],"li",{},[34,35,36],"strong",{},"임베드 모드 신호 정리"," — ",[39,40,41],"code",{},"\u002Fprojects\u002F[id]"," 페이지에 ",[39,44,45],{},"isEmbedded"," 도입(",[39,48,49],{},"?embed=1","). 임베드 시 PMS 내부 nav(\"📋 게시글 목록 →\", breadcrumb) 숨김. ",[39,52,53],{},"?modal=open","(모달 자동 오픈)과 시그널 분리해서 혼동 제거.",[31,56,57,37,60,63,64,67,68,71],{},[34,58,59],{},"\"최근 활동\" 풀 타임스탬프",[39,61,62],{},"slice(0,7)","(YYYY-MM)에서 ",[39,65,66],{},"slice(0,19).replace('T',' ')","로 확장 (KST 기준 ",[39,69,70],{},"YYYY-MM-DD HH:mm:ss",").",[31,73,74,77,78,81,82,85,86,89,90,93,94,97,98,101],{},[34,75,76],{},"QaEvalCard 인-모달 상태 전환"," — 외부 로딩\u002F에러 Teleport 2개 제거. 모달이 클릭 즉시 열리고 같은 모달 안에서 ",[39,79,80],{},"로딩(✨ 펄스) → 분석 결과 \u002F 에러(다시 시도)","로 자연 전환. 프로젝트 브리핑 모달과 동일 UX. props에 ",[39,83,84],{},"loading?","·",[39,87,88],{},"error?"," 추가, ",[39,91,92],{},"qa"," nullable, ",[39,95,96],{},"retry"," emit 신설. 모달 임베드 전용 페이지 ",[39,99,100],{},"\u002Fposts\u002F[id]\u002Feval","도 같은 패턴으로 통일.",[31,103,104,107,108,111,112,115,116,119,120,123,124,127,128,131],{},[34,105,106],{},"Vision 이미지 URL 절대화 확장"," — 원본 PMS 본문의 이미지 src가 ",[39,109,110],{},"..\u002Fdata\u002F1\u002F..."," 같은 상대 경로일 때 OpenAI Vision이 ",[39,113,114],{},"invalid_image_url"," 400. ",[39,117,118],{},"toAbsolute","(API 측)와 ",[39,121,122],{},"fixPmsHtml","(PMS 측) 모두 ",[39,125,126],{},"\u002Fdata\u002F·..\u002Fdata\u002F·.\u002Fdata\u002F·data\u002F"," 등 모든 상대경로를 ",[39,129,130],{},"https:\u002F\u002Fppm.malgn.co.kr\u002Fdata\u002F...","로 변환하도록 확장.",[133,134,136],"h3",{"id":135},"결정사건","결정\u002F사건",[138,139,140,148,151],"ul",{},[31,141,142,144,145,147],{},[39,143,49],{}," = PMS 임베드 시그널(내부 nav 숨김) \u002F ",[39,146,53],{}," = 모달 자동 오픈 — 두 시그널 의도 분리",[31,149,150],{},"QaEvalCard는 모달이 항상 열리는 동안 내부 상태(loading\u002Ferror\u002Fresult) 분기. UX 안정성이 별도 모달 전환보다 자연스러움",[31,152,153,156],{},[39,154,155],{},"admin"," repo nuxt.config의 colorMode 항목도 PMS와 일관성 위해 제거(13903cc)",[133,158,160],{"id":159},"다음-작업-후보","다음 작업 후보",[138,162,163,170,173],{},[31,164,165,166,169],{},"안내글 평가(",[39,167,168],{},"\u002Fpms\u002Fposts\u002F:id\u002Fannounce-eval\u002Fgenerate",") PMS UI 통합 — 작성자 staff 분기 + 모달 재활용",[31,171,172],{},"OpenSearch 셋업 + 자료 업로드 MVP (M2 진입)",[31,174,175,178],{},[39,176,177],{},"\u002Fadmin\u002Fevals","에서 LLM 행 클릭 시 모달 즉시 열기",[180,181],"hr",{},[21,183,184],{"id":184},"배포",[133,186,188,189,192],{"id":187},"_1633-malgn-helper-pms-cloudflare-pages","16:33 — ",[39,190,191],{},"malgn-helper-pms"," → Cloudflare Pages",[138,194,195,202],{},[31,196,197,198,201],{},"커밋: ",[39,199,200],{},"074504b"," (신규 커밋: yes)",[31,203,204],{},"메시지: feat(projects): 임베드 모드(?embed=1 또는 ?modal=open) — 게시글 목록 버튼·breadcrumb 숨김",[133,206,208,209,192],{"id":207},"_1635-malgn-helper-pms-cloudflare-pages","16:35 — ",[39,210,191],{},[138,212,213,218],{},[31,214,197,215,201],{},[39,216,217],{},"f743545",[31,219,220],{},"메시지: feat(projects): 최근 활동 표시를 yyyy-MM에서 yyyy-MM-dd HH:mm:ss로 확장",[133,222,224,225,192],{"id":223},"_1649-malgn-helper-pms-cloudflare-pages","16:49 — ",[39,226,191],{},[138,228,229,234],{},[31,230,197,231,201],{},[39,232,233],{},"2c9aca3",[31,235,236],{},"메시지: feat(QaEvalCard): 모달이 클릭 즉시 열리고 안에서 loading→결과\u002F에러 상태 전환 (프로젝트 분석과 동일 UX)",[133,238,240,241,192],{"id":239},"_1706-malgn-helper-pms-cloudflare-pages","17:06 — ",[39,242,191],{},[138,244,245,250],{},[31,246,197,247,201],{},[39,248,249],{},"7dad92b",[31,251,252],{},"메시지: fix(projects): isEmbedded는 ?embed=1만 — modal=open과 분리 + 새 청크 hash로 캐시 갱신",[133,254,256,257,192],{"id":255},"_1722-malgn-helper-pms-cloudflare-pages","17:22 — ",[39,258,191],{},[138,260,261,266],{},[31,262,197,263,201],{},[39,264,265],{},"9c14a01",[31,267,268],{},"메시지: refactor(posts\u002Feval): 인-모달 loading\u002Ferror 패턴으로 통일 (적용 URL 변경 없음)",[133,270,272,273,276],{"id":271},"_1732-malgn-helper-api-cloudflare-workers","17:32 — ",[39,274,275],{},"malgn-helper-api"," → Cloudflare Workers",[138,278,279,284],{},[31,280,197,281,201],{},[39,282,283],{},"3dd0abf",[31,285,286],{},"메시지: fix(vision): Vision 이미지 URL 변환에 ..\u002Fdata\u002F .\u002Fdata\u002F data\u002F 등 상대경로 모두 절대화",[133,288,272,290,192],{"id":289},"_1732-malgn-helper-pms-cloudflare-pages",[39,291,191],{},[138,293,294,299],{},[31,295,197,296,201],{},[39,297,298],{},"8d51e8b",[31,300,301],{},"메시지: fix(fixPmsHtml): ..\u002Fdata\u002F .\u002Fdata\u002F 등 상대경로 자산도 PMS 도메인으로 절대화",{"title":303,"searchDepth":304,"depth":304,"links":305},"",3,[306,311],{"id":23,"depth":307,"text":23,"children":308},2,[309,310],{"id":135,"depth":304,"text":136},{"id":159,"depth":304,"text":160},{"id":184,"depth":307,"text":184,"children":312},[313,315,317,319,321,323,325],{"id":187,"depth":304,"text":314},"16:33 — malgn-helper-pms → Cloudflare Pages",{"id":207,"depth":304,"text":316},"16:35 — malgn-helper-pms → Cloudflare Pages",{"id":223,"depth":304,"text":318},"16:49 — malgn-helper-pms → Cloudflare Pages",{"id":239,"depth":304,"text":320},"17:06 — malgn-helper-pms → Cloudflare Pages",{"id":255,"depth":304,"text":322},"17:22 — malgn-helper-pms → Cloudflare Pages",{"id":271,"depth":304,"text":324},"17:32 — malgn-helper-api → Cloudflare Workers",{"id":289,"depth":304,"text":326},"17:32 — malgn-helper-pms → Cloudflare Pages","md",{},true,"\u002Fhistory\u002Fhistory.20260604",{"title":5,"description":303},"history\u002Fhistory.20260604","WmRmdwHHeh1vCgmJngTjGtwJQyPvAbfmXmAfp1wm6Cg",1780986551106]