diff --git a/.agents/references/known-issues.md b/.agents/references/known-issues.md index 2b92872..1385c5c 100644 --- a/.agents/references/known-issues.md +++ b/.agents/references/known-issues.md @@ -4,12 +4,30 @@ > �뵒踰꾧퉭�씠�굹 援ы쁽 �쟾�뿉 **諛섎뱶�떆** �씠 �뙆�씪�쓣 �솗�씤�븯�꽭�슂. > �꽭�뀡 醫낅즺 �떆 �깉濡� 諛쒓껄�맂 �씠�뒋瑜� �씠 �뙆�씪�뿉 異붽���빀�땲�떎. -> [!TIP] -> �빐寃� �셿猷뚮맂 怨쇨굅 �씠�뒋�뒗 [`known-issues-archive.md`](file:///c:/Users/Variet-Worker/Desktop/gravity_control/.agents/references/known-issues-archive.md)�뿉 蹂닿���릺�뼱 �엳�뒿�땲�떎. -> 鍮꾩듂�븳 臾몄젣媛� �옱諛쒗븯硫� archive�뿉�꽌 寃��깋�븯�꽭�슂. - +# Known Issues & Lessons Learned + +> **씠 뙆씪 SSOT(Single Source of Truth)엯땲떎.** +> 뵒踰꾧퉭씠굹 援ы쁽 쟾뿉 **諛섎뱶떆** 씠 뙆뙆씪쓣 솗씤븯꽭슂. +> 꽭뀡 醫낅즺 떆 깉濡 諛쒓껄맂 씠뒋瑜 씠 뙆뙆씪뿉 異붽빀땲떎. + +> [!TIP] +> 빐寃 셿猷뚮맂 怨쇨굅 씠뒋뒗 [`known-issues-archive.md`](file:///c:/Users/Variet-Worker/Desktop/gravity_control/.agents/references/known-issues-archive.md)뿉 蹂닿릺뼱 엳뒿땲떎. +> 鍮꾩듂븳 臾몄젣媛 옱諛쒗븯硫 archive뿉꽌 寃깋븯꽭슂. + --- +### [2026-04-13] [Extension] HTTP Bridge UTF-8 인코딩 깨짐 — 한글 description 손실 +- **증상**: pending/ 파일의 description 필드에서 한글이 `[AI ]`처럼 깨져서 저장됨. Discord로 전달되는 승인 요청 본문도 깨짐 +- **원인**: Node.js HTTP 서버의 `req.on('data', chunk)` 콜백에서 chunk가 Buffer 타입으로 전달되는데, `body += chunk`로 string 결합 시 Buffer의 기본 인코딩(latin1)이 사용되어 multi-byte UTF-8 문자가 손실됨 +- **해결**: 모든 POST 핸들러(`/pending`, `/dump-html`, `/chat`, `/deep-inspect-result`, `/test-rpc`)에 `req.setEncoding('utf8')` 추가 (v0.5.39) +- **주의**: Node.js HTTP 서버에서 POST body를 문자열로 수집할 때는 반드시 `req.setEncoding('utf8')`을 호출하거나, Buffer를 배열로 모은 후 `Buffer.concat().toString('utf8')`로 변환해야 함 + +### [2026-04-13] [Extension] Observer noise 필터 미작동 — textContent가 아이콘 텍스트를 줄바꿈 없이 합침 +- **증상**: pending description에 `Thought for 1s`, `chevron_right` 등 Material 아이콘명과 UI 노이즈가 그대로 남아있음 +- **원인**: DOM `textContent`는 block 요소 사이에 newline을 삽입하지 않아 `[AI 본문 요약]Thought for 1schevron_right[결행 명령]`처럼 한 줄로 합쳐짐. `cleanLines()`의 줄 단위 noise 필터(`^pattern$`)가 매칭 실패. 또한 `codeText` 추출에는 `cleanLines()`가 아예 미적용 +- **해결**: `cleanLines()`에 인라인 pre-strip 추가 — icon명 18종을 regex로 먼저 `\n`으로 치환 후 줄 단위 필터 적용. `codeText`에도 `cleanLines()` 적용 (v0.5.39) +- **주의**: DOM에서 텍스트 추출 시 `textContent`는 레이아웃 무시, `innerText`는 detached 노드에서 미작동. 노이즈 필터링은 줄 단위뿐 아니라 인라인 패턴 제거도 병행해야 함 + ### [2026-04-13] [Extension] html-patcher String.replace() `$'` 특수 패턴으로 인라인 스크립트 SyntaxError - **증상**: Observer v8 인라인 스크립트가 workbench.html에 삽입되었으나 렌더러에서 전혀 실행되지 않음 (BEACON 핑 0건). V8 캐시 삭제 + AG 재시작 후에도 동일 - **원인**: `html-patcher.ts`에서 `html.replace('', '\n' + inlineBlock + '\n')`를 사용. 인라인 스크립트의 NOISE_RE 정규식에 `')$', 'i'`가 있는데, `$'`는 JS `String.replace()`의 특수 대체 패턴(match 뒤의 텍스트)으로 해석됨. 이로 인해 `` 뒤의 원본 HTML 구조(``, `\n`; +let html_buggy = html.replace('', `\n${inlineBlock_buggy}\n`); + +// 4. 패치 시뮬레이션 — 수정 후 (FIX) +const inlineBlock = `\n\n`; +const safeInlineBlock = inlineBlock.replace(/\$/g, '$$$$'); +let html_fixed = html.replace('', `\n${safeInlineBlock}\n`); + +console.log(`\n[3] BUGGY result: ${html_buggy.length} chars`); +console.log(`[4] FIXED result: ${html_fixed.length} chars`); + +// 5. JS 코드 추출 및 SyntaxError 검증 +function extractAndCheckJS(patchedHtml, label) { + const match = patchedHtml.match(/