# Known Issues & Lessons Learned



> **�씠 �뙆�씪��� SSOT(Single Source of Truth)�엯�땲�떎.**

> �뵒踰꾧퉭�씠�굹 援ы쁽 �쟾�뿉 **諛섎뱶�떆** �씠 �뙆�씪�쓣 �솗�씤�븯�꽭�슂.

> �꽭�뀡 醫낅즺 �떆 �깉濡� 諛쒓껄�맂 �씠�뒋瑜� �씠 �뙆�씪�뿉 異붽���빀�땲�떎.



# 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-18] [Extension] ★ WS response 파일이 processResponseFile에 의해 삭제 → Observer pollResponseGroup 실패 (v0.5.78)
- **증상**: `!auto` Retry가 작동하지 않음. Observer가 `/response/{rid}`를 폴링하지만 항상 `{waiting: true}` 반환.
- **원인**: extension.ts의 WS 응답 핸들러가 `response/{rid}.json` 파일 작성 → 300ms 후 response watcher(`processResponseFile`)가 파일 감지 → pending 파일이 없어 `isDomObserver=false` → `fs.unlinkSync()` 실행 → Observer가 폴링할 때 파일이 이미 삭제됨.
- **해결 (v0.5.78)**: WS 응답 파일에 `_from_ws: true` 마커 추가. `processResponseFile`에서 `_from_ws` 파일 스킵 (WS 핸들러에서 이미 `tryApprovalStrategies` 실행하므로 중복 방지도 함께 해결).
- **주의**: http-bridge의 `_handlePending`는 pending 파일을 생성하지 않음 (WS 전송만 수행). 따라서 `processResponseFile`의 `isDomObserver` 판별이 실패함. WS 경로로 들어오는 모든 response는 반드시 마커로 구분해야 함.

### [2026-04-18] [Extension] ★ extractContextFromNearby 조상 탐색만으로는 명령어 추출 불가 (v0.5.79)
- **증상**: Discord auto-approve 알림에 "Always run"만 표시되고 실제 명령어가 안 보임. depth를 10으로 늘려도 동일.
- **원인**: AG Native DOM 구조에서 "Always run" 버튼은 `footer` 내부에 있고, 실제 명령어(`pre.font-mono`)는 `footer`의 **형제(sibling)** 요소에 있음. 조상 탐색(parentElement)으로는 도달 불가. trail: `d0:button → d1:div → d2:footer` (footer.parentElement가 null).
- **해결 (v0.5.79)**: `extractContextFromNearby`에 형제 탐색 로직 추가. 각 depth에서 `node.parentElement.children`을 순회하며 `pre.font-mono, pre, code`를 찾음 → `CONTEXT-OK src=sibling` 성공.
- **주의**: Observer 코드 변경은 HTML 인라인 스크립트이므로 AG 2번 재시작(Quit + Relaunch × 2) 필요.

### [2026-04-18] [Extension] Thinking 블록이 AI 응답으로 릴레이됨
- **증상**: AI의 내부 사고 과정(thinking/reasoning)이 Discord에 릴레이됨.
- **원인**: Observer의 `scanChatBodies`가 `.leading-relaxed.select-text` 블록을 전부 캡처하는데, thinking 블록도 이 셀렉터에 매칭됨.
- **해결**: thinking 블록의 조상에 `max-h-[200px]` 클래스가 있는지 확인하여 필터링.
- **주의**: AG UI 업데이트로 thinking 블록의 클래스가 변경될 수 있음.


- **증상**: Step Probe의 RT-CAPTURE, HB-CAPTURE가 현재 대화 중에 전혀 발동하지 않음. POLL에서 `status=IDLE, steps=928, delta=0` 고정. Heartbeat probe에서도 `real=928 known=928` 불변.
- **원인**: AG Native의 `GetCascadeTrajectorySteps` API는 **cascade가 완전히 종료(IDLE 전환)된 후에만** 새 step을 반환합니다. 진행 중인 cascade에서는 step count가 동결됩니다. `GetAllCascadeTrajectories`의 `stepCount`도 마찬가지.
- **영향**: Step Probe 기반의 모든 실시간 캡처(RT-CAPTURE, HB-CAPTURE, USER_INPUT 감지)가 **구조적으로 불가능**. Observer DOM이 유일한 실시간 데이터 경로.
- **해결**: Observer DOM 기반 chat relay를 재활성화 (v0.5.72). Step Probe는 cascade 완료 후 보완 용도로만 사용.
- **주의**: 이 제약은 AG Native 아키텍처의 근본적 특성. Polling 주기나 heartbeat 빈도를 변경해도 해결 불가. **실시간 릴레이는 반드시 Observer DOM 경로를 사용해야 함.**
- **참조**: `.agents/references/relay-architecture.md` (상세 분석)

### [2026-04-18] [Extension] Observer의 /pending POST에 명령어 컨텍스트가 없음 (Always run만 전달)
- **증상**: Discord auto-approve 알림에 "Always run"만 표시되고 실제 명령어가 안 보임.
- **원인**: Observer가 `/pending` POST 시 `command: "Always run"`, `description: "Always run"`만 보냄. `extractContextFromNearby(btn)`이 버튼 주변 DOM에서 유의미한 텍스트를 찾지 못함.
- **해결 (부분)**: v0.5.69에서 bridge/pending/ 디렉토리의 최신 Step Probe pending 파일에서 명령어를 읽는 fallback 추가. Step Probe pending이 있을 때만 작동.
- **주의**: Step Probe WAITING 감지가 진행 중 cascade에서 불가하므로 (위 이슈 참조), 현재 대부분의 경우 fallback도 실패. Observer의 DOM 컨텍스트 추출 개선이 필요.

### [2026-04-18] [Extension] Observer의 사용자 메시지 셀렉터 미매칭
- **증상**: 사용자가 AG에서 입력한 메시지가 Discord에 전혀 전달되지 않음.
- **원인**: Observer의 셀렉터(`.text-ide-message-block-user-color`, `[data-message-role="user"]` 등)가 AG Native DOM에서 매칭되지 않음. AI 응답만 `.leading-relaxed.select-text`로 매칭됨.
- **해결**: DOM 덤프에서 사용자 메시지 블록의 실제 CSS 클래스를 식별 후 셀렉터 추가 필요.
- **주의**: Step Probe의 USER_INPUT 캡처도 진행 중 cascade에서 불가 (위 이슈 참조).

### [2026-04-16] [Extension] ★ AG Native 세션 AI 응답이 Discord에 CSS로 전달됨 (v0.5.52 수정, #632)
- **증상**: Discord에 AI 대화 응답 대신 **CSS 스타일시트 코드** (`remark-github-blockquote-alert/alert.css`)가 전달됨. `scanChatBodies()` → POST /chat 경로는 작동하지만 내용이 CSS.
- **원인**: `extractCleanStepText()`에서 clone한 DOM에서 버튼/SVG/아이콘은 제거하지만 **`<style>` 태그는 제거하지 않음**. AG Native 마크다운 렌더러가 `.leading-relaxed.select-text` 내부에 `<style>` 블록을 주입하는데, 이 CSS textContent가 AI 응답 텍스트로 추출됨.
- **해결 (v0.5.52)**: `extractCleanStepText()` 최상단에 `clone.querySelectorAll('style, script, noscript, link[rel="stylesheet"]')` 제거 로직 추가. CSS/JS가 텍스트로 포함되는 것을 원천 차단.
- **배포**: v0.5.52 VSIX 설치 + v0.5.50/out/ JS 직접 복사 + V8 CachedData 삭제. AG File→Quit 재시작 필요.
- **이전 블로커 해결 이력**:
  - SDK 경로: AG Native는 Cascade trajectory API 미등록 → step-probe RT-CAPTURE 불가 (구조적 한계)
  - DOM 경로: v15에서 `#conversation` + `.leading-relaxed.select-text` 셀렉터 추가로 해결
  - BEACON=0: AG 프로세스 완전 재시작으로 해결 (Reload Window로는 렌더러 HTML 캐시 유지)
- **주의**: AG Native 마크다운 렌더링은 `<style>` 블록을 응답 DOM 내부에 인라인으로 삽입함. DOM 텍스트 추출 시 반드시 style/script 태그를 먼저 제거해야 함.
- **Vikunja**: #632

### [2026-04-16] [Extension] ★ AG Native Observer innerText로 인한 마크다운 포맷 유실 및 사용자 요청 누락
- **증상**: Discord로 릴레이되는 AI 응답에서 리스트 번호(`1. 2.`)나 불릿(`-`) 등 마크다운 포맷이 완전히 유실되고 텍스트만 이어져서 나옴. 그리고 사용자가 입력한 메시지(요청)는 아예 릴레이되지 않음.
- **원인 1**: `extractCleanStepText()`에서 `innerText`를 사용하여 텍스트를 추출할 때, 렌더링되지 않은 DOM이나 CSS 카운터로 생성된 list-item 마커가 무시됨.
- **원인 2**: `scanChatBodies()` 로직이 `.leading-relaxed.select-text` (AI 응답 블록)만을 타겟팅하여 사용자의 메시지 박스(예: `.text-ide-message-block-user-color`)는 추출 대상에서 제외됨.
- **해결 (계획 중)**: `innerText` 대신 HTML DOM 노드를 순회하며 `convertNodeToMarkdown` 변환 함수를 통해 마크다운 문법을 보존하도록 개선. User 블록도 함께 감지하여 브릿지에 `role: 'user'` 플래그를 추가 전송하도록 수정 예정.
- **주의**: Webview 내에서 텍스트 노드를 파싱할 때 `innerText`는 브라우저 레이아웃 엔진에 의존하므로 완전한 마크다운 보존을 위해서는 Node Type 순회를 활용한 구조 복원이 보장되어야 함.

### [2026-04-16] [Extension] 터미널 출력(stdout) 텍스트가 명령어로 Discord에 전송 (v0.5.50)
- **증상**: Discord에 `cmd="No extension.log found"`, `cmd="AG CLI not found..."`, `cmd="Log found: C:\..."` 등 터미널 **출력** 텍스트가 명령어로 전송됨
- **원인**: Observer가 code 블록 2개를 감지: (1) 프롬프트+명령어 → JUNK_CODE_RE로 스킵, (2) 터미널 출력 → 유효한 code로 판단 → description에 포함. http-bridge enrichment에서 description에 prompt marker(`>`)가 없으면 rawDesc 전체를 enrichedCmd로 채택
- **해결 (v0.5.50)**: `promptMatch` 실패 시(description에 `>` 없음) → 터미널 OUTPUT으로 판단하여 `terminal_output` 사유로 즉시 필터. 실제 명령어는 항상 `…\project > command` 프롬프트를 포함
- **주의**: enrichment은 반드시 prompt marker가 있는 경우에만 수행. description에 `>` 없으면 code 블록의 출력 텍스트

### [2026-04-15] [Extension] Observer fallback 컨텍스트가 채팅/UI 텍스트를 명령어로 추출 (v0.5.46)
- **증상**: Discord에 `cmd="실 동작검증을 해봐야하는데"`, `cmd="variet.gravity-bridge"` 등 사용자 채팅/AI 응답 텍스트가 명령어로 전송됨
- **원인**: v0.5.45에서 `PROMPT_ONLY_RE`가 `code/pre` 요소 스킵 성공했으나, `extractContextFromNearby()`의 fallback(`span/div/p` 수집)이 여전히 작동하여 DOM 트리의 채팅 본문/UI 라벨을 명령어로 추출
- **해결 (v0.5.46)**: Observer v13에 `_promptOnlySkipped` 플래그 — code 요소가 모두 prompt-only이면 fallback 비활성화. http-bridge에 generic button + no-context일 때 무조건 필터
- **주의**: 프롬프트 스킵과 fallback 비활성화는 항상 연동해야 함. VSIX 설치 누락 방지를 위해 빌드 후 즉시 `code --install-extension` 확인 필수

### [2026-04-15] [Extension] PROMPT_ONLY_RE regex fixes — prompt-only terminal text leaking as enriched cmd (v0.5.45)
- **증상**: Discord에 `cmd="…\gravity_control >"` (실제 명령어 없는 빈 터미널 프롬프트)가 전송됨. 명령어가 포함된 경우는 정상 작동
- **원인 1 (Observer)**: `PROMPT_ONLY_RE` 의 `\\\\s`(4중 backslash)가 template literal 안의 regex 리터럴에서 "literal backslash+s"가 되어 whitespace class가 아닌 문자열 매칭
- **원인 2 (http-bridge)**: `PROMPT_ONLY_RE = /^[\s\\\/]*[\w_.-]+\s*[>»$#]\s*$/` — AG 터미널 프롬프트가 `…`(U+2026 ellipsis)로 시작하는데 첫 문자 클래스에 포함 안 됨
- **해결 (v0.5.45, `d2c44fe`)**: Observer `\\s`→`\s`, http-bridge 패턴을 `/^.*[>»$#]\s*$/`로 단순화
- **검증**: 11개 테스트 케이스 전체 통과

---

### [2026-04-14] [Extension] Observer template literal 정규식 이스케이핑 오류 — "Running N commands" 스킵 미작동
- **증상**: v9에서 `Running N commands` 그룹 헤더를 스킵하는 정규식 `/^Running\s*\d+\s*commands?$/i`를 추가했으나, 실제로 "Running2 commands" 텍스트를 전혀 매칭하지 못하여 여전히 Discord에 `cmd="Running2 commands"`가 전송됨
- **원인**: `observer-script.ts`의 전체 코드가 TypeScript template literal (`` ` `` ... `` ` ``) 안에 있으므로, 정규식 리터럴의 백슬래시가 2중 해석됨:
  - TS 소스 `\\\\s` (4중) → template literal 출력 `\\s` → **브라우저에서 regex 리터럴 `\\s` = 리터럴 백슬래시+s** ❌
  - TS 소스 `\\s` (2중) → template literal 출력 `\s` → **브라우저에서 regex 리터럴 `\s` = whitespace class** ✅ 
  - TS 소스 `\s` (1중) → template literal에서 이스케이프 소멸 → **출력 `s`** ❌
- **영향 범위**: `NOISE_CODE_RE`, `cleanLines()` (word boundary `\b`, newline `\n`), `cleanButtonText()` (whitespace `\s`), port 탐색 regex `\d`, "Running N commands" 스킵 regex 전부 미작동이었음
  - 단, `NOISE_RE` (new RegExp() 사용)는 문자열 이스케이핑이므로 4중 백슬래시가 올바름 (string → RegExp는 별도 이스케이핑 레이어)
- **해결**: 모든 정규식 리터럴 (`/pattern/flags`) 안의 `\\\\s` → `\\s`, `\\\\d` → `\\d`, `\\\\b` → `\\b`, `\\\\n` → `\\n` 으로 수정 (v0.5.41, `8e89209`)
- **주의**: **template literal 안에서 정규식 특수문자를 쓸 때 반드시 구분:**
  - `new RegExp('pattern')` 문자열: `\\\\s` (4중) — string 이스케이핑(1번)+regex 이스케이핑(1번) = 총 2번
  - `/pattern/` 정규식 리터럴: `\\s` (2중) — template literal 이스케이핑(1번)만 = 총 1번
  - **검증법**: `node -e "var f = require('./extension/out/observer-script.js').generateApprovalObserverScript; require('fs').writeFileSync('tmp.js', f(0)); console.log(require('fs').readFileSync('tmp.js','utf8').match(/Running.{10}/g));"` 으로 생성된 코드 확인

---

### [2026-04-13] [Extension] Observer v8 "Running N commands" 그룹 헤더를 승인 버튼으로 오인 — Discord 빈 내용+잘못된 버튼
- **증상**: Discord 승인 요청에 command="Running2 commands", description 비어있음, 버튼도 "Running2 commands / Always run" 형태. 실제 코드/명령어 내용이 전혀 표시되지 않음
- **원인 1**: `observer-script.ts`의 `isActionBtn()`에 `/Running\\s*\\d*\\s*command/i` 패턴이 있어 AG UI의 그룹 헤더 버튼("Running 3 commands")을 승인 버튼으로 분류. `scan()`이 이 버튼을 먼저 만나고 `break`로 나가 실제 "Always run"/"Cancel" 버튼은 처리 안 됨
- **원인 2**: `extractStepContext()`가 `data-step-index` 속성 없으면 `cleanButtonText(btn)` = "Running2 commands"를 그대로 반환. AG Native에는 `data-step-index`/`data-testid` 속성이 없음 (DOM 덤프로 확인)
- **원인 3**: `http-bridge.ts`의 "Run/Always run" 필터가 step-probe 미활성(activeSessionId 비어있음) 시에도 DOM observer 신호를 차단
- **해결**: observer v9 (v0.5.40):
  1. `isActionBtn()`에서 "Running N commands" 패턴 제거
  2. `scan()`에서 `^Running\\s*\\d+\\s*commands?$` 명시적 스킵
  3. `extractContextFromNearby()` 추가: `data-step-index` 없이 DOM 트리를 20레벨까지 올라가며 `pre`/`code` 블록에서 실제 명령어 추출
  4. `collectSiblingButtons()` 범위를 parent → grandparent → great-grandparent로 확대, 그룹 헤더 스킵
  5. `http-bridge.ts`의 "Run" 필터에 `ctx.activeSessionId` 체크 추가 — step-probe 미활성 시 DOM observer 허용
- **주의**: AG Native UI의 "Running N commands"는 아코디언/그룹 헤더이며, 실제 승인 버튼은 하위 레벨의 "Run"/"Always run"/"Cancel". DOM 구조상 버튼 탐색 시 그룹 헤더를 반드시 스킵해야 함

### [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('</body>', '\n' + inlineBlock + '\n</body>')`를 사용. 인라인 스크립트의 NOISE_RE 정규식에 `')$', 'i'`가 있는데, `$'`는 JS `String.replace()`의 특수 대체 패턴(match 뒤의 텍스트)으로 해석됨. 이로 인해 `</body>` 뒤의 원본 HTML 구조(`<!-- Startup -->`, `<script src="workbench.js">`, `</html>`)가 JS 코드 중간(정규식 리터럴 안)에 삽입되어 **치명적 SyntaxError** 발생
- **해결**: `inlineBlock.replace(/\$/g, '$$$$')`로 모든 `$`를 이스케이프한 후 replacement 문자열로 사용 (v0.5.38, `d6ed876`)
- **주의**: `String.prototype.replace()`의 replacement 문자열에서 `$&`, `$'`, `` $` ``, `$1` 등은 특수 패턴. 동적 콘텐츠를 replacement로 사용할 때 반드시 `$` → `$$` 이스케이프 필요

### [2026-04-12] [Extension] V8 CachedData가 Observer 스크립트 로딩을 차단
- **증상**: html-patcher가 workbench-jetski-agent.html에 observer v7 인라인 스크립트를 성공적으로 삽입했지만, deep-inspect가 렌더러에서 응답 없음 (10s timeout). AG 재시작 후에도 observer가 로드되지 않음
- **원인**: `%APPDATA%\Antigravity\CachedData\` (50MB)에 V8 캐시가 남아있어, AG가 패치된 HTML 대신 캐시된 이전 버전을 로드. extension.log에 `patcher.install() called (needs reload)` 메시지가 표시되지만 실제 적용이 안 됨
- **해결**: `Remove-Item "$env:APPDATA\Antigravity\CachedData\*" -Recurse -Force` 실행 후 AG 재시작. known-issues-archive #6에도 동일 케이스 있음
- **주의**: HTML 패치 변경 시 **반드시** V8 CachedData 삭제 + AG 재시작 필요. 단순 AG 재시작만으로는 부족

### [2026-04-12] [DOM] text-ide-message-block-bot-color는 AI 응답 컨테이너가 아닌 NUX tooltip 전용
- **증상**: observer-script가 `.text-ide-message-block-bot-color`를 AI 응답 컨테이너로 사용하지만, 실제 AI 텍스트를 추출하지 못함
- **원인**: 번들 분석(jetskiAgent/main.js 10.8MB)으로 확인 결과, 이 클래스는 `hsn` 컴포넌트(NUX Tooltip 텍스트 색상)에서만 사용. AI 응답 텍스트는 `plannerResponse` step의 `Whi` 렌더러 → `div.px-2.py-1` → `MarkdownRenderer` 내부에 렌더링됨
- **해결**: observer-script에서 `.text-ide-message-block-bot-color` 의존성 제거 필요. `markdown-body` 클래스도 AG Native에 존재하지 않음
- **주의**: AI 응답 마크다운은 `prose` 관련 클래스나 MarkdownRenderer 내부 구조로 타겟팅해야 함. 실제 DOM 덤프로 정확한 셀렉터 확인 필요

### [2026-04-12] [SDK/DOM] AG Native 세션은 Cascade SDK API에 등록되지 않음 — DOM이 유일한 데이터 소스
- **증상**: AG Native 세션에서 Discord 릴레이로 AI 응답이 전혀 전달되지 않고, 대신 UI 노이즈(`content_copy`, `Always run`, `keyboard_arrow_up`, `Cancel`)가 전송됨
- **원인 1 (SDK)**: `GetCascadeTrajectorySteps(cascadeId=세션ID)` → `500 trajectory not found`. `GetDiagnostics` → `404`. AG Native 세션은 Cascade trajectory API에 전혀 등록되지 않는 별도 시스템
- **원인 2 (DOM)**: `observer-script.ts` v6의 `scanChatBodies()`가 `.text-ide-message-block-bot-color` 컨테이너의 `textContent`를 통째로 가져오면서 내부 버튼/아이콘 텍스트까지 포함
- **해결**: `observer-script.ts` v7로 전면 재설계:
  1. `[data-testid="conversation-view"]` + `[data-step-index]` 기반 step-aware 파싱
  2. `extractCleanStepText()`: 클론 후 button/svg/icon 엘리먼트 제거 → 마크다운 텍스트만 추출
  3. `extractStepContext()`: `getStepContainer()` → step 헤더 + code 블록만 추출
  4. `NOISE_RE`: Material icon 이름, 버튼 레이블, UI 텍스트 전면 차단
  5. 최초 `conversation-view` 감지 시 DOM 구조 자동 덤프 (`/dump-html`)
- **주의**: SDK 경로(step-probe RT-CAPTURE)는 AG Native에서 사용 불가. DOM이 유일한 콘텐츠 소스이므로 AG UI 업데이트 시 `data-testid`/`data-step-index` 속성 존재 여부 반드시 확인 필요


### [2026-04-09] [Bridge] Discord Body Content Missing Due to Step Probe Dummy Payload
- **利앹긽**: ���洹쒕え UI 留덉씠洹몃젅�씠�뀡 �썑, �뵒�뒪肄붾뱶 �듅�씤 硫붿떆吏� 蹂몃Ц�뿉 �떎�뻾�븷 肄붾뱶/紐낅졊�뼱媛� �셿�쟾�엳 �늻�씫�릺怨� "Step #15"��� 媛숈�� �뵒�뤃�듃 �뀓�뒪�듃留� �쟾�넚�맖.
- **�썝�씤**: Native UI 蹂�寃쎌쑝濡� �씤�빐 DOM observer媛� 異붿텧�븳 踰꾪듉 �뀓�뒪�듃("Always run")媛� `http-bridge.ts` �븘�꽣 �슦�쉶 諛� bot.py�뿉�꽌 吏��뿰(defer) 泥섎━�맖. 諛섎㈃ `step-probe.ts`媛� `GetAllCascadeTrajectories` �뤃留곸쓣 �넻�빐 �룞�떆�뿉 諛쒖깮�떆�궓 dummy pending payload (紐낅졊�뼱 �긽�꽭 �궡�슜�씠 �뾾�씠 `Step #XX` �씪�뒗 �뀓�뒪�듃留� �룷�븿)媛� 遊뉗뿉 �쓽�빐 癒쇱�� �옄�룞 �듅�씤�릺硫댁꽌 �젙�옉 �떎�젣 肄붾뱶 �쁺�뿭 �젙蹂닿�� 利앸컻�븿.
- **�빐寃�**: `step-probe.ts` �궡�뿉 `formatStepProbeCommand` �뿬�띁 �븿�닔瑜� 異붽���븯�뿬, WAITING �긽�깭 �뒪�뀦�쓽 `argumentsJson` �뜲�씠�꽣瑜� 吏곸젒 �뙆�떛�븯怨� `CommandLine`, `TargetFile` �벑 �떎�젣 紐낅졊�뼱��� �긽�꽭 �씤�옄/肄붾뱶瑜� `command`��� `description`�쑝濡� �븷�떦�븯�뿬 釉뚮┸吏�濡� �꽆湲곕룄濡� �뙣移섑븿. DOM �샃���踰꾩쓽 遺덉븞�젙�꽦怨� 愿�怨꾩뾾�씠 �씪愿��맂 蹂몃Ц �쟾�떖 蹂댁옣.
- **二쇱쓽**: UI �뒪�겕�옒�븨�뿉 �쓽議댄븯�뒗 DOM Observer 諛⑹떇��� UI �젅�씠�븘�썐, �븘�씠肄� �궫�엯 �벑�뿉 痍⑥빟�븯誘�濡�, �긽�꽭 �럹�씠濡쒕뱶 異붿텧��� �빆�긽 100% �떊猶� 媛��뒫�븳 SDK RPC(`step-probe.ts`) �뜲�씠�꽣瑜� �슦�꽑 �궗�슜�븯�룄濡� 援ъ꽦�빐�빞 �븿.



## �룷留�



### [2026-03-23] [Extension] Cross-Project DOM Observer Leakage

- **利앹긽**: �떎以� �썝寃� 而댄벂�꽣�뿉�꽌 �룞�씪�븳 �봽濡쒖젥�듃紐낆쑝濡� �떎�뻾�맂 VS Code�뱾�씠 �꽌濡쒖쓽 `execute JavaScript` (Allow) �듅�씤 �떊�샇瑜� 媛�濡쒖콈嫄곕굹 �뿁�슧�븳 �꽌踰꾨줈 蹂대깂.

- **�썝�씤**: Extension�씠 `workbench.html`�뿉 �뒪�겕由쏀듃瑜� 二쇱엯�븷 �븣 寃곗젙濡좎쟻 �룷�듃瑜� �븯�뱶肄붾뵫�뻽�뒗�뜲, �쟾�뿭 罹먯떆�맂 HTML �뙆�씪�쓣 紐⑤뱺 濡쒖뺄/�썝寃� �뿰寃곗씠 怨듭쑀�븯硫댁꽌 留덉��留됱뿉 �뿴由� �봽濡쒖젥�듃�쓽 �룷�듃 踰덊샇濡� �뜮�뼱�뵆�썙吏�.

- **�빐寃�**: `extension.ts`�뿉�꽌 �긽�깭 �몴�떆以�(Status Bar) `tooltip`�뿉 �룷�듃瑜� 二쇱엯�븯怨�, `observer-script.ts`�뿉�꽌 DOM 荑쇰━瑜� �넻�빐 �룞�쟻�쑝濡� �옄�떊�쓽 李�(Window)�뿉 �븷�떦�맂 �룷�듃瑜� 李얠븘�궡�룄濡� �닔�젙. `vscode.env.asExternalUri`瑜� �궗�슜�븯�뿬 �룷�듃 異⑸룎 �떆 �슦�쉶�맂 二쇱냼源뚯�� 濡쒖뺄 �룷�썙�뵫�뿉 留ㅽ븨�릺�룄濡� 吏��썝.

- **二쇱쓽**: VS Code UI 肄붿뼱(HTML) �뙣移� �떆, �뿬�윭 李�(Window)�씠�굹 �떎以� �썝寃� �젒�냽 �떆 �솚寃�(Scope) 遺꾨━�뿉 媛곷퀎�븳 二쇱쓽媛� �븘�슂�븿. �쟾�뿭 �옄�썝�뿉 �쓽議댄븯�뒗 �븯�뱶肄붾뵫 吏��뼇.



### [�궇吏�] [�궎�썙�뱶] ��� �븳以� �슂�빟

- **利앹긽**: 臾댁뾿�씠 �옒紐삳릺�뿀�뒗媛�

- **�썝�씤**: 洹쇰낯 �썝�씤

- **�빐寃�**: �삱諛붾Ⅸ �빐寃� 諛⑸쾿

- **二쇱쓽**: �옱諛� 諛⑹��瑜� �쐞�븳 援먰썕

```



---



### [2026-04-08] [Discord Bot] Channel Deletion Cache Desync

- **利앹긽**: 遊뉗씠 耳쒖졇 �엳�뒗 �긽�깭�뿉�꽌 Discord 梨꾨꼸(g-project-name)�쓣 �궘�젣�븯硫�, 遊뉗씠 �궘�젣瑜� �씤吏��븯吏� 紐삵븯怨� �깉 梨꾨꼸�쓣 �깮�꽦�븯吏� �븡�쑝硫� 硫붿떆吏��룄 利앸컻�븿.

- **�썝�씤**: ot.py�쓽 self.project_channels �뵓�뀛�꼫由ъ뿉 梨꾨꼸 媛앹껜媛� 罹먯떆�릺�뼱 �엳�뼱, API �샇異� �뾾�씠 罹먯떆�맂(�궘�젣�맂) 梨꾨꼸濡� 硫붿떆吏�瑜� 蹂대궡�젮 �떆�룄�븯�떎 404 �뿉�윭 諛쒖깮 �썑 �떎�뙣�븿.

- **�빐寃�**: 梨꾨꼸 留듯븨�씠 瑗ъ���쓣 �븣�뒗 **Python 遊�(Docker 而⑦뀒�씠�꼫)�쓣 �옱�떆�옉**�븯�뿬 罹먯떆瑜� 珥덇린�솕�븯怨� 梨꾨꼸 紐⑸줉�쓣 �깉濡� 媛깆떊�븯寃� �븿.

- **二쇱쓽**: 梨꾨꼸 愿�由щ뒗 罹먯떆�뿉 �쓽議댄븯湲� �븣臾몄뿉 媛뺤젣濡� Discord UI�뿉�꽌 梨꾨꼸�쓣 吏��썱�쓣 �븣�뒗 諛섎뱶�떆 遊뉗쓣 �옱援щ룞�빐�빞 �븿.



### [2026-04-08] [Extension] Multiple Workspace LS Cross-Connection

- **利앹긽**: ariet-llm 李쎌뿉�꽌 耳곗쑝�굹 gravity_control�쓽 諛깃렇�씪�슫�뱶 援щ룞 以묒씤 LS�뿉 �뿰寃곕릺�뼱 �옄湲� �옄�떊 李쎌쓽 �떊�샇瑜� �옟吏� 紐삵븿.

- **�썝�씤**: �뿬�윭 VS Code 李쎌쓣 �쓣�썱�쓣 �븣 �뼱�뼡 李쎌뿉�꽌�뒗 Antigravity �뙣�꼸�쓣 �늻瑜댁�� �븡�븘 �쟾�슜 LS媛� �떆�옉�릺吏� �븡�쓬. ixLSConnection()�씠 �옄湲� 紐レ쓽 LS瑜� 李얠�� 紐삵븯怨� fallback�쑝濡� 湲곗〈�뿉 �뼚 �엳�뜕 �떎瑜� 李쎌쓽 LS�뿉 �뿰寃곕맖.

- **�빐寃�**: ����긽 李쎌뿉�꽌 Developer: Reload Window �떎�뻾 �썑 **�궗�씠�뱶諛붿쓽 濡쒖뺄 Antigravity 梨쀫큸 �뙣�꼸�쓣 �븳 踰� �뿴�뼱** �옄�떊�쓽 LS �봽濡쒖꽭�뒪瑜� �쓣�슫 �뮘�뿉 Gravity Bridge瑜� Start�븿.

- **二쇱쓽**: LS�뒗 �옄�룞�쑝濡� �떆�옉�릺吏� �븡怨� �궗�슜�옄媛� 梨꾪똿 �뙣�꼸�쓣 �븳 踰� �겢由�/�솢�꽦�솕�빐�빞留� Spawn �맖.



## �윍� Active/Recent Issues



### [2026-04-09] [Extension] Agent UI Native Migration & Icon Text Gluing

- **利앹긽**: UI Tailwind/Native 留덉씠洹몃젅�씠�뀡 諛� �븘�씠肄� �쟻�슜 �썑, Discord 釉뚮┸吏�濡� �떊�샇媛� �쟾�넚�릺吏� �븡�쓬.

- **�썝�씤**: �꽕�씠�떚釉� UI 踰꾪듉�쓽 `textContent` 異붿텧 �떆, Codicons �벑 �븘�씠肄� �룿�듃 臾몄옄�뿴(e.g., `渽� Accept`)�씠 �븵遺�遺꾩뿉 蹂묓빀(Gluing)�릺硫댁꽌, 湲곗〈�쓽 `^` �빑而ㅺ�� �룷�븿�맂 �젙洹쒖떇 留ㅼ묶(`/^(?:Always\s*)?Run/i`)�씠 �떎�뙣�븿.

- **�빐寃�**: `observer-script.ts`�쓽 �뒪罹�, Sibling 踰꾪듉 �닔吏�, Webview Trigger-click �벑 `textContent`瑜� 異붿텧�븯�뒗 紐⑤뱺 DOM �씫湲� 援ш컙�뿉 `txt.replace(/^[^a-zA-Z0-9]+/, '')` �쟾泥섎━瑜� �쟻�슜�븯�뿬 �꽑�뻾 湲고샇/�븘�씠肄섏쓣 �븞�쟾�븯寃� �젣嫄�.

- **二쇱쓽**: Native UI 而댄룷�꼳�듃 �솚寃쎌뿉�꽌�뒗 �뀓�뒪�듃 �끂�뱶肉먮쭔 �븘�땲�씪 �븘�씠肄�/SVG 而댄룷�꼳�듃�쓽 �뀓�뒪�듃 湲�猷⑥엵 �쁽�긽�쑝濡� �씤�빐 �뾼寃⑺븳 �떆�옉�젏(`^`) �젙洹쒖떇�씠 源⑥쭏 �닔 �엳�쑝誘�濡�, �빆�긽 遺덊븘�슂�븳 �듅�닔臾몄옄 �쟾泥섎━瑜� �꽑�뻾�빐�빞 �븿.



### [2026-04-09] [Extension] Agent UI Native Migration & CodeLens False Positive Filter

- **利앹긽**: UI Tailwind/Native 留덉씠洹몃젅�씠�뀡 �쟻�슜 �썑, Discord 釉뚮┸吏�濡� �떊�샇媛� �쟾��� �쟾�넚�릺吏� �븡�쓬

- **�썝�씤**: Agent �뙣�꼸�씠 �꺆/�뿉�뵒�꽣 蹂몃Ц�뿉 吏곸젒 �젋�뜑留곷릺硫댁꽌, 湲곗〈 �삤�옉�룞 諛⑹�� 濡쒖쭅(`if (b.closest('.monaco-editor'))`)�뿉 �뙣�꼸 �쟾泥� 踰꾪듉�씠 �룷李⑸릺�뼱 臾댁떆�맖

- **�빐寃�**: �꼫臾� 愿묐쾾�쐞�븳 `.monaco-editor` 諛⑹뼱瑜� �빐�젣�븯怨�, 肄붾뱶 �젋利� 怨좎쑀 而⑦뀒�씠�꼫�씤 `.codelens-decoration` �궡遺��씪 寃쎌슦�뿉留� 臾댁떆�븯�룄濡� ����룷�씤�듃 �닔�젙

- **二쇱쓽**: DOM �샃���踰� �븘�꽣 議곌굔 �옉�꽦 �떆 �옒�띁 �겢�옒�뒪�뒗 UI �뵒�옄�씤 媛쒗렪(Native, Editor Tab �벑 �쐞移� 蹂�寃�)�뿉 留ㅼ슦 痍⑥빟�븿. 媛��옣 援ъ껜�쟻�씤 �궡遺� �끂�뱶 �겢�옒�뒪�굹 ���寃� 怨좎쑀 �냽�꽦�쓣 �넻�빐 �븘�꽣留곹븷 寃�



### [2026-03-31] [step-probe] GetAllCascadeTrajectories 10-Item Hard Limit (Signal Drop)

- **利앹긽**: `guitar_score` �벑�뿉�꽌 �솢�꽦�솕�맂 �꽭�뀡�쓽 �뵒�뒪肄붾뱶 �듅�씤 �떊�샇瑜� "怨꾩냽�빐�꽌" �옟吏� 紐삵븿. (WS 60珥� ����엫�븘�썐蹂대떎 �뜑 移섎챸�쟻�쑝濡� �떊�샇媛� �븘�삁 媛�吏� �븡�쓬)

- **�썝�씤**: Extension�씠 �솢�꽦 �꽭�뀡�쓣 李얘린 �쐞�빐 �샇異쒗븯�뒗 `GetAllCascadeTrajectories` LS API媛� `{}`(鍮� �씤�옄)濡� �샇異쒕맆 �븣, 湲곕낯�쟻�쑝濡� **10媛쒖쓽 �꽭�뀡留� 諛섑솚�븯�뒗 �븯�뱶 由щ컠(Pagination Limit)**�씠 嫄몃젮�엳�쓬. �씠濡� �씤�빐 �옉�뾽 �궡�뿭�씠 �늻�쟻�릺硫� �닔留롮�� 理쒖떊/吏꾪뻾 以� �꽭�뀡�뱾�씠 10媛� 紐⑸줉�뿉�꽌 諛��젮�굹 �늻�씫�맖. �씡�뒪�뀗�뀡��� �꽭�뀡�씠 �뾾�떎怨� �뙋�떒�빐 媛뺤젣濡� `IDLE` 紐⑤뱶�뿉 吏꾩엯�븯硫�, �듅�씤 ���湲곗뿴(WAITING) �옄泥대�� 寃��궗�븯吏� �븡寃� �맖.

- **�빐寃�** (v0.5.14): `v0.5.13`�뿉�꽌 �룄�엯�뻽�뜕 `{ limit: 100 }`�씠 LS �떒�쓽 荑쇰━ 怨쇰���븯濡� �씤�븳 VS Code UI �봽由ъ쭠(DoS)�쓣 �쑀諛쒗븯�뿬 濡ㅻ갚�븯�뒗 以� �븘�닔 �젙�젹 �뙆�씪誘명꽣(`descending: true`)源뚯�� �냼�떎�릺�뿀�뜕 �떎�닔瑜� 援먯젙�븿. 理쒖쥌�쟻�쑝濡� `{ limit: 30, descending: true }`瑜� �쟻�슜�븯�뿬 �뙆�떛 遺��븯 理쒖냼�솕 諛� 理쒖떊 �꽭�뀡 理쒖긽�떒(Index 0) 議고쉶瑜� �븞�쟾�븯寃� 援ы쁽�븿.

- **二쇱쓽**: LS�쓽 湲곕낯 SQLite/DB �쓳�떟 Limit 洹쒖튃�뿉 �쓽議댄븯�뿬 �쟾泥� �뜲�씠�꽣 �뒪罹붿쓣 �닔�뻾�븯�뒗 濡쒖쭅��� �뼵�젣�뱺 Truncation �씠�뒋(Data Loss)瑜� �쑀諛쒗븷 �닔 �엳�쓬.



### [2026-03-31] [WS] Browser API Fallback 60s Timeout (Zombie Connection)

- **利앹긽**: `guitar_score` �벑 紐⑤뱺 �옉�뾽 �솚寃쎌뿉�꽌 �빟 60珥덈쭏�떎 WebSocket �뿰寃곗씠 �걡湲곌퀬 �옱�뿰寃곕릺�뒗 �쁽�긽�씠 諛섎났�릺硫�(extension.log�뿉 `Heartbeat timeout` 怨꾩냽 異쒕젰), 洹� �궗�씠 �뵒�뒪肄붾뱶 �듅�씤 �떊�샇瑜� �넃移�.

- **�썝�씤**: Extension�씠 `ws` 紐⑤뱢 濡쒕뱶 �떎�뙣(VS Code �솚寃� �벑)濡� �씤�빐 釉뚮씪�슦��� �궡�옣 `WebSocket` 媛앹껜濡� Fallback �맖. 釉뚮씪�슦��� WS�뒗 �꽌踰꾩쓽 �꽕�씠�떚釉� ping�쓣 諛쏆븘 pong�쓣 �옄�룞 �쓳�떟�븯吏�留� JS�뿉 �씠踰ㅽ듃瑜� �끂異쒗븯吏� �븡�쓬. �씠濡� �씤�빐 `lastPongTime` 媛깆떊�씠 遺덇���뒫�빐�졇, `Date.now() - lastPongTime > 60000` 議곌굔�씠 臾댁“嫄� �넻怨쇰릺�뼱 硫�姨≫븳 �뿰寃곗쓣 媛뺤젣 醫낅즺�븿 (False Positive).

- **�빐寃�** (v0.5.12): 

  1. `hub.py`: `{"type": "heartbeat"}` JSON 硫붿떆吏� �닔�떊 �떆 紐낆떆�쟻�쑝濡� `{"type": "pong"}` JSON�쓣 �쓳�떟�븯�룄濡� �닔�젙.

  2. `ws-client.ts`: 紐낆떆�쟻 `pong` �빖�뱾�윭 異붽��. JSON pong 吏��썝 �꽌踰꾧굅�굹 Node.js ws瑜� �궗�슜�븷 �븣留� 60珥� ����엫�븘�썐 寃�利앹쓣 嫄곗튂�룄濡� 議곌굔 蹂닿컯 (`forceHeartbeatTimeoutIfNoPong`).

- **二쇱쓽**: 釉뚮씪�슦��� �몴以� WebSockets(W3C)�뒗 ping/pong �젣�뼱 �봽�젅�엫�쓣 JS濡� �끂異쒗븯吏� �븡�쓬. �뤃由ы븘/�겕濡쒖뒪�뵆�옯�뤌 WS �옒�띁 �궗�슜 �떆 �븯�듃鍮꾪듃�뒗 諛섎뱶�떆 JSON 硫붿꽭吏� �삎�깭�쓽 Application Layer Ping/Pong�쑝濡� ����뼱�궡嫄곕굹, Native WS API �뿬遺�瑜� �솗�떎�엳 泥댄겕�빐�빞 �븿.



### [2026-03-28] [step-probe] GetCascadeTrajectorySteps UTF-8 �뿉�윭 臾댄븳 猷⑦봽

- **利앹긽**: `guitar_score` �봽濡쒖젥�듃�뿉�꽌 `[STEP-PROBE] error: ...invalid UTF-8` �뿉�윭媛� 5珥덈쭏�떎 諛섎났�릺硫� Discord �듅�씤 �떊�샇媛� �쟾�떖�릺吏� �븡�쓬.

- **�썝�씤**: AG LS �꽌踰꾩뿉�꽌 �듅�젙 step�쓽 `CortexStepEphemeralMessage.content`�뿉 諛붿씠�꼫由� �뜲�씠�꽣(�씠誘몄�� �벑) �룷�븿 �넂 proto UTF-8 吏곷젹�솕 500 �뿉�윭. `catch(e)` 釉붾줉�뿉�꽌 `stallProbed=true`瑜� �꽕�젙�븯吏� �븡�븘 `!ctx.stallProbed` 議곌굔�씠 �빆�긽 true �넂 5珥덈쭏�떎 �룞�씪 �슂泥� 臾댄븳 �옱�떆�룄.

- **�빐寃�** (v0.5.11): `catch` 釉붾줉�뿉�꽌 UTF-8 �뿉�윭 媛먯�� �떆 `stepOffset=currentCount-20`�쑝濡� fallback �슂泥�. offset�룄 �떎�뙣 �떆 `stallProbed=true` �꽕�젙�븯�뿬 猷⑦봽 李⑤떒. `delta>0` �씠踰ㅽ듃 諛쒖깮 �떆 L433�뿉�꽌 �옄�룞 由ъ뀑.

- **二쇱쓽**: `stallProbed=true`�뒗 �쁺援� Lock�씠 �븘�떂 ��� `delta>0` �떆 �옄�룞 由ъ뀑. UTF-8 �뿉�윭�뒗 AG �꽌踰� 痢� 臾몄젣(�씠誘몄��/諛붿씠�꼫由� �뜲�씠�꽣媛� ephemeral message�뿉 �룷�븿)�씠誘�濡� Extension�뿉�꽌 graceful fallback留� 泥섎━.



### [2026-03-28] [approval-handler] stepIndex 誘명솗�젙 �떆 wrong-stepIndex RPC �궘鍮�

- **利앹긽**: DOM observer 寃쎈줈濡� `terminal_command` pending �깮�꽦 �썑 Discord �듅�씤 �떆 `HandleCascadeUserInteraction(stepIndex=0)` �넂 `"input not registered for step 0"` �넂 LS reconnect �넂 �옱�떆�룄 �넂 DOM click fallback�쑝濡� ����븯. (wrong-LS��� �룞�씪�븳 利앹긽�씠�굹 �떎瑜� �썝�씤)

- **�썝�씤**: `ctx.lastPendingStepIndex=-1` (step-probe媛� UTF-8 �뿉�윭濡� WAITING 誘멸컧吏�)�엫�뿉�룄 `Math.max(0, -1)=0`�쑝濡� clamp�릺�뼱 議댁옱�븯吏� �븡�뒗 step 0�뿉 RPC �쟾�넚.

- **�빐寃�** (v0.5.11): `effectiveStepIndex = stepIndex >= 0 ? stepIndex : (lastPendingStepIndex >= 0 ? lastPendingStepIndex : -1)`. `effectiveStepIndex < 0`�씠硫� RPC 釉붾줉 �쟾泥� skip �넂 DOM click 吏곹뻾 (湲곗〈怨� �룞�옉 �룞�씪, LS reconnect �궘鍮� �젣嫄�).

- **二쇱쓽**: 湲곗〈 洹쒖튃 #14(`uint32`�뿉 �쓬�닔 湲덉��)��� 異⑸룎泥섎읆 蹂댁씠�굹, `effectiveStepIndex=-1`�씪 �븣 RPC �옄泥대�� **�쟾�넚�븯吏� �븡�쑝誘�濡�** �쐞諛� �븘�떂. RPC �쟾�넚 �떆�뿉�뒗 �뿬�쟾�엳 �쑀�슚�븳 stepIndex留� �궗�슜.



### [2026-03-25] [Architecture] Discord Signal Drop & Extension Freezes

- **利앹긽**: �옣�떆媛� �옄由щ퉬��� �썑 蹂듦�� �떆 Discord濡� �듅�씤 �떊�샇媛� �삤吏� �븡嫄곕굹 VS Code UI媛� 媛꾪뿉�쟻/吏��냽�쟻�쑝濡� 硫덉땄(Freeze).

- **�썝�씤**: 

  1. `ws.onerror` 諛쒖깮 �썑 `onclose` �늻�씫 �떆 �옱�뿰寃� 肄쒕갚 �샇異쒖씠 �씠猷⑥뼱吏�吏� �븡�븘 臾댄븳 ���湲� (�옣�떆媛� 留덈퉬)

  2. `ws-client` �옱�뿰寃� �떆 �늻�쟻�맂 200媛� �걧瑜� �룞湲곗떇 burst �쟾�넚�븯�뿬 Hub�쓽 �냽�룄 �젣�븳(60媛�/10珥�)�뿉 嫄몃젮 �솗�젙 �쁺援� �궘�젣�맖

  3. 濡쒖뺄 釉뚮┸吏� `http-bridge.ts`�쓽 怨쇨굅 �쑀�궛�씤 `FALSE_POSITIVE_RE` �젙洹쒖떇�씠 AI 怨좎쑀 踰꾪듉(Allow, Deny, Accept) 留덉�� �븘�꽣留곹븯�뿬 Discord �쟾�넚 �썝泥� 李⑤떒

  4. `step-probe.ts` �뤃留� 猷⑦봽 �궡 �룞湲곗떇 �뙆�씪 I/O �궗�슜�쑝濡� �씤�븳 �봽由ъ쫰

- **�빐寃�** (v0.5.10): ws-client�뿉 �븯�뱶 ����엫�븘�썐 諛� 50ms Paced-flush �쟻�슜, http-bridge�쓽 �젙洹쒖떇 湲곕뒫 �셿�솕, step-probe 鍮꾨룞湲� I/O �쟾�솚 泥댁젣 �쟻�슜, observer-script�쓽 �븘�꽣�맂 �떊�샇 臾댄븳 HTTP �뤃留� 諛⑹뼱 肄붾뱶 諛섏쁺.

- **二쇱쓽**: Extension �궡遺� 濡쒖쭅 踰꾧렇����쑝誘�濡� Hub(Python) 肄붾뱶�뒗 嫄대뱶由ъ�� �븡�쓬. Hub �냽�룄 �젣�븳��� �젙�긽 諛⑹뼱 湲곗젣�씠誘�濡� �겢�씪�씠�뼵�듃 �떒�쓽 Pacing�씠 �삱諛붾Ⅸ 諛⑺뼢�엫.

### [2026-03-24] DOM Observer /trigger-click �젋�뜑留� �닚�꽌 �삤�옉�룞 諛� False Positive �봽由ъ쭠

- **利앹긽**: v0.5.9 �뙣移� �씠�썑 肄붾뵫 �떆 Agent �솕硫댁씠 �걡�엫�뾾�씠 �꽌紐� ���湲�(Pending) �긽�깭濡� 硫덉땄. �삉�뒗 �뵒�뒪肄붾뱶�뿉�꽌 `Approve` �떆 �뿉�뵒�꽣 �궡�쓽 �뿁�슧�븳 `Run Test`(肄붾뱶 �젋利�)瑜� �겢由��븿.

- **�썝�씤**: �뀓�뒪�듃��� �젙洹쒖떇(`/^Run/i` �벑)�뿉留� �쓽議댄븯�뿬 `querySelectorAll`�쓣 �닔�뻾�븷 寃쎌슦, DOM �듃由ъ뿉 �젋�뜑留곷맂 �닔留롮�� VS Code �꽕�씠�떚釉� 肄붾뱶 �젋利� 踰꾪듉�쓣 Agent 踰꾪듉蹂대떎 癒쇱�� 李얠븘踰꾨━�뒗 諛쒖깮 �쐞移�(Context)�쓽 �븳怨꾩젏.

- **�빐寃�** (v0.5.10):

  1. 媛먯��(Scan): `isVSCodeMainWindow` 諛� �깘�깋 �끂�뱶 `isBodyRoot` �솗�씤�쓣 �넻�빐, �뿉�뵒�꽣 蹂몃Ц �쁺�뿭�뿉�꽌�뒗 "Run", "Approve" 媛먯��瑜� �썝泥� �젣嫄� (�삤吏� �뙣�꼸 �궡濡� �븳�젙).

  2. �겢由�(Trigger-click): `deepFindButtons()` �궡�뿉�꽌 `findPanel()`(�뿉�씠�쟾�듃 �뙣�꼸) -> �븣由� Toasts -> Document 蹂몃Ц �닚�쑝濡� �깘�깋 **�슦�꽑�닚�쐞(Priority)**瑜� 媛뺤젣 �쟻�슜.

- **二쇱쓽**: 踰꾪듉 �씠踰ㅽ듃 �썑�궧 �떆 �뀓�뒪�듃 留ㅼ묶�뿉留� �쓽議댄븯吏� 留먭퀬, 諛섎뱶�떆 DOM �깘�깋 �슦�꽑�닚�쐞��� 而⑦뀓�뒪�듃 踰붿쐞瑜� �븿猿� �븘�꽣留곹븯�뿬 False Positive瑜� 李⑤떒�븷 寃�.



### [2026-03-24] DOM Observer ��� VS Code Native UI Blind Spot

- **利앹긽**: "Always Allow" 諛� �씪諛� "Allow Alt+�넻" 沅뚰븳 �븣由� 踰꾪듉�씠 �뵒�뒪肄붾뱶 沅뚰븳 �꽱�떛�뿉�꽌 �셿�쟾�엳 �늻�씫�맖.

- **�썝�씤**: VS Code �꽕�씠�떚釉� �븣由� 諛� 梨꾪똿 �뙣�꼸 �궡�쓽 踰꾪듉��� `<button>` �깭洹� ����떊 `<a role="button">`, `<vscode-button>` �벑�쓣 �궗�슜�븯�뒗�뜲, 湲곗〈 DOM scan 濡쒖쭅�씠 `querySelectorAll('button')`�쑝濡� �븯�뱶肄붾뵫�릺�뼱 �끂�뱶瑜� �븘�삁 李얠�� 紐삵븿. (異붽��濡� Always Allow �젙洹쒖떇 �늻�씫)

- **�빐寃�** (v0.5.9): DOM scan, 由ъ뒯 �썒 �벑 紐⑤뱺 �깘�깋 濡쒖쭅 ����젆�꽣瑜� `button, [role="button"], vscode-button, .monaco-text-button` �쑝濡� �쟾硫� 媛쒗렪. �젙洹쒖떇�쓣 `/^(?:Always )?Allow/i`濡� �닔�젙.



### [2026-03-24] Python Hub ��� 醫�鍮� 而ㅻ꽖�뀡 諛� UI �봽由ъ쭠

- **利앹긽**: `npm run` 紐낅졊�씠 `�떎�뻾 �젙梨�` 愿��젴 �삤瑜섎줈 �떎�뙣

- **�썝�씤**: PowerShell �뒪�겕由쏀듃 �떎�뻾 �젙梨낆씠 �젣�븳�쟻

- **�빐寃�**: `cmd /c npm run dev` �삎�떇�쑝濡� cmd瑜� �넻�빐 �떎�뻾

- **二쇱쓽**: npm 愿��젴 紐낅졊��� �빆�긽 `cmd /c` �젒�몢�뼱 �궗�슜 沅뚯옣



### [2026-03-08] PowerShell curl ��� Invoke-WebRequest 異⑸룎

- **利앹긽**: `curl` 紐낅졊�씠 �삁�긽怨� �떎瑜� �쓳�떟 �삎�떇�쓣 諛섑솚

- **�썝�씤**: PowerShell�뿉�꽌 `curl`��� `Invoke-WebRequest`�쓽 蹂꾩묶

- **�빐寃�**: **`curl.exe`**瑜� 紐낆떆�쟻�쑝濡� �궗�슜

- **二쇱쓽**: HTTP 愿��젴 紐⑤뱺 紐낅졊�뿉�꽌 `curl.exe` �궗�슜 �븘�닔



---



## 誘명빐寃� �씠�뒋



### [2026-03-23/24] �룊�깮 吏��냽�릺�뒗 WebSocket 醫�鍮� 而ㅻ꽖�뀡 諛� False Positive 媛뺤젣 �뿰寃� �걡源� (v0.5.5 �넂 0.5.8)

- **利앹긽**: 

  1. (v0.5.5) �젅�쟾 紐⑤뱶 蹂듦뎄 �떆 �떎�뿰寃곗씠 �걡�뼱議뚯쓬�뿉�룄 �솗�옣�씠 �씠瑜� �씤吏��븯吏� 紐삵븯�뒗 醫�鍮�(Half-open) �냼耳� 諛쒖깮.

  2. (v0.5.6) 醫�鍮� �냼耳볦쓣 �옟湲� �쐞�빐 10珥� ����씠癒�(`pongTimeoutTimer`)瑜� �꽔�뿀�쑝�굹, VS Code�쓽 臾닿굅�슫 �뙆�씪 寃��깋 �떆 Event Loop媛� 釉붾줈�궧�릺硫� 硫�姨≫븳 �뿰寃곗씤�뜲�룄 �뿀�쐞 ����엫�븘�썐(False Positive) �뙋�젙�쑝濡� �뿰寃곗쓣 媛뺤젣 醫낅즺�븿. �씠濡� �씤�빐 �늻�쟻�맂 �옱�뿰寃� �뵜�젅�씠(Exponential Backoff)媛� 60珥덇퉴吏� �뒛�뼱�굹硫댁꽌 �솗�옣�씠 �떖媛곹븯寃� 硫덉땄(Freeze).

- **�썝�씤**: Node.js `ws` �씪�씠釉뚮윭由ъ쓽 `ws.ping()`��� 鍮꾨룞湲� I/O �꽕�듃�썙�겕 �걧瑜� ���吏�留�, `setTimeout(..., 10000)` ����엫�븘�썐��� Event Loop 釉붾줈�궧 �빐�젣 吏곹썑 怨㏓컮濡� 留뚮즺�릺�뼱 踰꾨┝. �뵲�씪�꽌 �꽕�듃�썙�겕 I/O �쓳�떟(pong)蹂대떎 濡쒖뺄 ����씠癒멸�� 癒쇱�� �꽣�졇�꽌 �젙�긽�쟻�씤 �냼耳볦쓣 二쎌엫.

- **�빐寃�** (v0.5.8 �셿�꽦): 

  - �쐞�뿕�븳 `setTimeout` 諛⑹떇 �룓湲�.

  - 湲곗〈�쓽 25珥� 二쇨린 `setInterval` �븯�듃鍮꾪듃 猷⑦봽 �궡遺��뿉 `Date.now() - lastPongTime > 60000` (60珥� 珥덇낵 �떆 ����엫�븘�썐) 寃�利� 濡쒖쭅�쓣 �룄�엯. 

  - 留뚯빟 Event Loop媛� �닔�떗 珥� 諛�由щ뜑�씪�룄, 釉붾줈�궧 �빐�젣 �썑 �걧�맂 I/O �씠踰ㅽ듃(`pong`)媛� `setInterval` ����씠癒� 肄쒕갚 �씠�쟾�뿉 癒쇱�� 泥섎━�릺嫄곕굹(Node.js Phase 洹쒖튃), �쟻�뼱�룄 60珥덈씪�뒗 踰꾪띁 �뜒遺꾩뿉 **False Positive 媛��뒫�꽦�쓣 �썝泥� 李⑤떒**�븿怨� �룞�떆�뿉 醫�鍮� �냼耳볦쓣 �븞�젙�쟻�쑝濡� �젣嫄고븿.

- **二쇱쓽**: Node.js�쓽 �떒�씪 �뒪�젅�뱶 Event Loop �솚寃�(�듅�엳 臾닿굅�슫 �룞湲� �옉�뾽�씠 �옦��� VS Code Extension)�뿉�꽌 �꽕�듃�썙�겕 I/O瑜� 濡쒖뺄 `setTimeout`怨� 寃쎌＜(Race)�떆�궎�뒗 �꽕怨꾨뒗 �븘�뿰�쟻�쑝濡� False Positive瑜� �궠�쓬. Timestamp(`Date.now()`) 湲곕컲 媛꾧꺽 寃�利�(Interval check)�씠 �썾�뵮 �븞�쟾�븿.



### [2026-03-11] rejectAgentStep / !stop ��� AG 誘몃벑濡� 而ㅻ㎤�뱶 + �젋�뜑�윭 �쟾�슜 �븿�닔 + �뒪�뀒�씪 �봽由щ�명떚釉�

- **利앹긽**: `!stop` 紐낅졊�씠 AI瑜� 硫덉텛吏� 紐삵븿. 濡쒓렇: "No active cascade" / "no session tracked yet"

- **�썝�씤**: (1) `antigravity.agent.rejectAgentStep`��� AG 誘몃벑濡� 而ㅻ㎤�뱶. (2) ���泥댄븳 `getActiveCascadeId()`�뒗 **�젋�뜑�윭(DOM) �쟾�슜 �븿�닔** ��� Extension host�뿉�꽌 �빆�긽 `undefined` 諛섑솚. (3) **v0.4.5 �닔�젙�룄 �떎�뙣**: `extension.ts`�쓽 `getActiveSessionId: () => activeSessionId`媛� module-level �뒪�듃留� �봽由щ�명떚釉뚮�� 李몄“ ��� step-probe媛� `ctx.activeSessionId`瑜� �뾽�뜲�씠�듃�빐�룄 extension.ts�쓽 蹂��닔�뒗 遺덈�� (�봽由щ�명떚釉� 蹂듭궗)

- **�빐寃�** (2026-03-18 v0.4.6): `step-probe.ts`�뿉�꽌 `getActiveSessionId()` getter �븿�닔 export �넂 extension.ts closures�뿉�꽌 `getStepProbeSessionId()` �샇異�. �씠�젣 step-probe�쓽 live `ctx.activeSessionId`瑜� 吏곸젒 �씫�쓬 (`ab0c116`)

- **二쇱쓽**: JS�뿉�꽌 **string/number�뒗 �봽由щ�명떚釉뚮씪 李몄“ �쟾�떖 遺덇��** ��� 媛앹껜 �냽�꽦�쓣 怨듭쑀�븯�젮硫� getter �븿�닔�굹 媛앹껜 �옒�띁 �궗�슜 �븘�닔

- **Vikunja**: #411, #410



### [2026-03-19] browser_subagent Allow ��� �옒紐삳맂 RPC payload

- **利앹긽**: �꽌釉� �뿉�씠�쟾�듃 "execute JavaScript on localhost" Allow 踰꾪듉�씠 �옄�룞 �듅�씤�릺吏� �븡�쓬

- **�썝�씤**: `step-probe.ts`�뿉�꽌 `browser_subagent` toolName�씠 step_type 遺꾨쪟 �뾾�씠 raw toolName�쑝濡� �쟾�떖 �넂 `approval-handler.ts`�뿉�꽌 `runExtensionCode` 留ㅽ븨�뿉 �룷�븿�릺吏� �븡�븘 default `runCommand` RPC payload �궗�슜 �넂 AG媛� �옒紐삳맂 interaction type�쑝濡� 臾댁떆

- **�빐寃�** (v0.5.1): `approval-handler.ts` L384�뿉 `browser_subagent` 異붽��, `step-probe.ts` L481/L549�뿉 `browser_subagent`/`open_browser_url` step_type 遺꾨쪟 異붽�� (`549af6d`)

- **二쇱쓽**: �깉濡쒖슫 AG �룄援� 異붽�� �떆 諛섎뱶�떆 (1) step-probe step_type 留ㅽ븨 (2) approval-handler RPC payload 留ㅽ븨 �뼇履� 紐⑤몢 �뾽�뜲�씠�듃



### [2026-03-21] Idle�넂Resume �떊�샇 �냼�떎 ��� 3以� 踰꾧렇

- **利앹긽**: AG �옣�떆媛� idle �썑 �옉�뾽 �옱媛� �떆 Discord �듅�씤 �떊�샇媛� �쟾�떖�릺吏� �븡�쓬

- **�썝�씤**: (1) `ws-client.ts` `auth_fail` �떆 `shouldReconnect=false` ��� JWT 24h 留뚮즺 �떆 WS �쁺援� 醫낅즺. (2) `hub.py` `_disconnect`�뿉�꽌 �쑀�씪 �뿰寃� �떆 `pending_owners` �궘�젣 ��� �옱�뿰寃� �썑 Discord 踰꾪듉 臾댄슚. (3) `step-probe.ts` `stallProbed=true` + `lastPendingStepIndex=N`�씠 WS �옱�뿰寃� �떆 由ъ뀑 �븞 �맖 ��� WAITING step �옱�쟾�넚 �쁺援� 李⑤떒

- **�빐寃�** (v0.5.2): (1) `auth_fail` �넂 `registrationCode` �옱�떆�룄. (2) `pending_owners` orphan 留덉빱濡� 蹂댁〈+�옱�븷�떦. (3) `resetPendingStateForReconnect()` + `onConnected`�뿉�꽌 �샇異�

- **二쇱쓽**: WS `onConnected`�뿉�꽌 諛섎뱶�떆 step-probe �긽�깭 由ъ뀑 �븘�닔. `stallProbed`/`lastPendingStepIndex`�뒗 TTL �뾾�뒗 �쁺援� 媛�



---



> [!NOTE]

> v0.4.5 �닔�젙 �궗�빆(Hub pending_owners, diff_review WS, auto_approve �씠以묒벐湲�, WS dual-write, ApprovalView fallback)���

> 肄붾뱶 �닔�젙 �셿猷뚮맖. E2E �넻�빀 寃�利앹�� Vikunja #410�뿉�꽌 異붿쟻 以�.



### [2026-03-21] stepIndex=-1 ��� AG proto uint32 �뿉�윭

- **利앹긽**: DOM observer媛� Allow 踰꾪듉 媛먯�� �넂 Discord �듅�씤 �넂 RPC `HandleCascadeUserInteraction` 400 �뿉�윭

- **�썝�씤**: DOM observer 寃쎈줈�뒗 step index瑜� 紐⑤쫫 �넂 `stepIndex=-1` �쟾�떖 �넂 AG proto `uint32` �븘�뱶�뿉 �쓬�닔 遺덇��

- **�빐寃�**: `Math.max(0, ...)` 濡� clamp. `permission` type �넂 `runExtensionCode.confirm` 留ㅽ븨 異붽�� (v0.5.4)

- **二쇱쓽**: DOM observer 寃쎈줈�쓽 step_type��� �빆�긽 `stepIndex=-1`�씪 �닔 �엳�쑝誘�濡� proto �쟾�떖 �쟾 �뼇�닔 蹂댁옣 �븘�닔



### [2026-03-21] reviewAbsoluteUris ��� latestNotifyUserStep �븘�뱶紐� 遺덉씪移�

- **利앹긽**: `notify_user`�쓽 PathsToReview �뙆�씪 由대젅�씠媛� �븳 踰덈룄 �옉�룞�븯吏� �븡�쓬

- **�썝�씤**: AG �떎�젣 �븘�뱶紐� `reviewAbsoluteUris` vs 肄붾뱶 `pathsToReview`/`paths_to_review`/`filePaths`

- **�빐寃�**: `reviewAbsoluteUris` 瑜� 泥� 踰덉㎏ �썑蹂대줈 異붽�� (v0.5.3)

- **二쇱쓽**: AG RPC �븘�뱶紐낆�� extension.log `[NOTIFY-STEP] keys=` 濡� �솗�씤 媛��뒫. 異붿륫 湲덉��



### [2026-03-21] �꽭�뀡 �쟾�솚 ��� 泥� WAITING 媛먯�� 20-25s 吏��뿰

- **利앹긽**: �깉 ����솕 �떆�옉 �썑 泥� run_command �듅�씤�씠 Discord�뿉 �븞 �삤怨� AG�뿉�꽌 吏곸젒 �듅�씤�빐�빞 �븿

- **�썝�씤**: `lastModTime=''` 由ъ뀑 �넂 `modTimeChanged=true` �넂 THINKING 遺꾧린 諛섎났 �넂 probe 15-25s 吏��뿰

- **�빐寃�**: `lastModTime=currentModTime` + `return` �젣嫄� + 利됱떆 probe 媛뺤젣 + �쉶洹� 媛��뱶 異붽�� (v0.5.3)

- **二쇱쓽**: �꽭�뀡 �쟾�솚 �떆 `wasRunning`/`pendingModifiedFiles` 由ъ뀑 �븘�닔 (�씠�쟾 �꽭�뀡 �옍�뿬臾쇰줈 false diff_review 諛⑹��)



---



## �빑�떖 �옉�뾽 洹쒖튃 (怨쇨굅 �씠�뒋�뿉�꽌 諛섎났�맂 �뙣�꽩)



> �븘�옒�뒗 怨쇨굅 �씠�뒋�뿉�꽌 諛섎났�쟻�쑝濡� �굹����궃 �뙣�꽩�쓣 洹쒖튃�쑝濡� �젙由ы븳 寃껋엯�땲�떎.



| # | 洹쒖튃 | 愿��젴 �씠�뒋 (archive 李몄“) |

|---|------|--------------------------|

| 1 | **Hub WS��� file bridge�뒗 �긽�샇 諛고���쟻** ��� `if hub: ws + return` / `else: file` | WS dual-write, _auto_approve �씠以� �벐湲� |

| 2 | **WS 寃쎈줈 異붽�� �떆 file-bridge�쓽 紐⑤뱺 遺꾧린瑜� �룷�똿** | diff_review WS regression |

| 3 | **AG RPC `{}` �쓳�떟��� �떎�뙣濡� 媛꾩＜** ��� 硫붿꽌�뱶紐� ����젮�룄 �뿉�윭 �뾾�씠 `{}` 諛섑솚 | AcknowledgeCascadeCodeEdit |

| 4 | **ResolveOutstandingSteps�뒗 CANCEL �룞�옉** ��� �듅�씤�뿉 �젅��� �궗�슜 湲덉�� | Step probe reject |

| 5 | **Extension 肄붾뱶 �닔�젙 �썑 諛섎뱶�떆 VSIX 鍮뚮뱶 + AG ��� �옱�떆�옉** | Extension 踰꾩쟾 誘몃같�룷 |

| 6 | **HTML �뙣移� 蹂�寃� �떆 V8 CachedData �궘�젣 �븘�닔** | V8 CachedData, CSP |

| 7 | **`bridge/pending/` 議곗옉 �떆 諛섎뱶�떆 `project_name` + `conversation_id` �븘�꽣** | �겕濡쒖뒪 �봽濡쒖젥�듃 DEDUP MERGE |

| 8 | **`processResponseFile` �긽�깭 由ъ뀑��� `sawRunningAfterPending=true`留�** | processResponseFile 臾댄븳 猷⑦봽 |

| 9 | **fs.watch Windows 遺덉븞�젙 ��� 諛섎뱶�떆 polling fallback 蹂묓뻾** | fs.watch silent fail |

| 10 | **diff_review�뒗 VS Code 而ㅻ㎤�뱶留� �쑀�슚** ��� RPC 3媛� �쟾�왂 紐⑤몢 �떎�뙣 �솗�젙 | diff_review RPC dead-end |

| 11 | **HttpBridgeContext�뿉 �봽由щ�명떚釉� by-value 蹂듭궗 湲덉��** ��� 蹂꾨룄 媛앹껜 �깮�꽦 �떆 getter �궗�슜 | HttpBridgeContext stale primitive |

| 12 | **�깉 AG �룄援� 異붽�� �떆 step-probe step_type 留ㅽ븨 + approval-handler RPC payload 留ㅽ븨 �뼇履� �븘�닔** | browser_subagent Allow |

| 13 | **WS `onConnected`�뿉�꽌 step-probe �긽�깭 由ъ뀑 �븘�닔** ��� `stallProbed`/`lastPendingStepIndex`�뒗 TTL �뾾�뒗 �쁺援� 媛� | Idle�넂Resume �떊�샇 �냼�떎 |

| 14 | **AG proto `uint32` �븘�뱶�뿉 �쓬�닔 �쟾�떖 湲덉��** ��� `stepIndex` �벑��� `Math.max(0, ...)` �븘�닔 | stepIndex=-1 RPC 400 |

| 15 | **RPC "input not registered" = wrong-LS �뿰寃�** ��� `fixLSConnection()` �옄�룞 �옱�떆�룄 �븘�닔, `lines.length<=1` 議곌린醫낅즺 湲덉�� | Deriva wrong-LS (v0.5.5) |

| 16 | **�씡�뒪�뀗�뀡(Bridge)��� �옄�쓽�쟻 鍮꾩쫰�땲�뒪 �뙋�떒 �젅��� 湲덉��** ��� `SafeToAutoRun` �벑�쓽 議곌굔 釉뚮옖移� 遺꾧린�뒗 紐⑤몢 遊뉗쑝濡� �쐞�엫 (Agnostic Bridge) | SafeToAutoRun Deadlock (v0.5.15) |

| 17 | **package.json 鍮뚮뱶 �뒪�겕由쏀듃 媛뺤젣** ��� `vscode:prepublish` 異붽��濡� �궊��� �냼�뒪 諛고룷 �썝泥� 李⑤떒 | VSIX v0.5.15 鍮뚮뱶 �늻�씫 |

| 18 | **�룞湲곗떇 `cp.execSync` �궗�슜 湲덉��** ��� Windows �솚寃쎌뿉�꽌 硫붿씤 �씠踰ㅽ듃猷⑦봽 �봽由ъ쭠 諛� WS heartbeat �떒�젅 �쑀諛� | detectProjectName �봽由ъ쭠 |


### [2026-04-09] [Bot/Extension] Discord Signal Relay Failure & Empty Body
- **利앹긽**: �뵒�뒪肄붾뱶 遊뉗�� '�옄�룞 �듅�씤�맖'�쓣 �쓣�슦吏�留� �떎�젣 肄붾뱶 蹂몃Ц�씠 �몴�떆�릺吏� �븡怨�, 梨꾨꼸�뿉 吏꾩쭨 梨꾪똿 硫붿떆吏��굹 �븣由쇱씠 �뒪�뙵 �걧 �뮘�뿉 諛��젮 �쟾�넚�릺吏� �븡�쓬.
- **�썝�씤**: 1) observer-script.ts�뿉�꽌 踰꾪듉 �뀓�뒪�듃 留ㅼ묶 �떆 Run �떒�뼱�쓽 寃쎄퀎(\b) 泥섎━瑜� �븯吏� �븡�븘 VS Code �븯�떒�쓽 'Running 1 command'瑜� 媛�濡쒖콈�뼱 PENDING �뒪�뙵 臾댄븳 �깮�꽦. 2) bot.py�뿉�꽌 �옄�룞 �듅�씤 Embed �깮�꽦 �떆 req.description�쓣 洹몃━吏� �븡怨� 踰꾪듉 �뀓�뒪�듃(req.command)留� �몴�떆. 3) step-probe.ts�뿉�꽌 �꽭�뀡 援먯껜 �떆 理쒓렐 �븣由� �씤�뜳�뒪 珥덇린�솕瑜� �옒紐삵븯�뿬 �꽭�뀡�쓽 泥� 硫붿떆吏�瑜� 臾댁“嫄� �뱶濡�.
- **�빐寃�**: DOM 媛먯�� �젙洹쒖떇�뿉 \b 媛뺤젣 遺��뿬 (/Run\b/), bot.py�쓽 Auto-Approve 履� Embed 蹂몃Ц�뿉 req.description �젋�뜑留� 異붽��, step-probe.ts�뿉�꽌 session init �떆 index瑜� -1濡� 由ъ뀑.
- **二쇱쓽**: Native UI �뀓�뒪�듃 媛먯�� �떆 �떒�뼱 寃쎄퀎(\b)源뚯�� 寃�利앺빐�빞 False Positive瑜� 留됱쓣 �닔 �엳�쑝硫�, Auto-Approve�뒗 諛섎뱶�떆 蹂몃Ц�쓣 �끂異쒗빐�빞 �븿.

### [2026-04-10] [Extension] AI Response Content Missing (Nested PlannerResponse)
- **利앹긽**: �뵒�뒪肄붾뱶 梨꾪똿諛⑹뿉 Agent�쓽 �뀓�뒪�듃 �쓳�떟(AI �쓳�떟)�씠 �븘�삁 �늻�씫�릺�뼱 �쟾�넚�릺吏� �븡�쓬.
- **�썝�씤**: GetCascadeTrajectorySteps媛� 諛섑솚�븯�뒗 plannerResponse媛� �봽濡쒗넗肄� 諛⑹떇�뿉 �뵲�씪 理쒖긽�떒(s.plannerResponse)�씠 �븘�땶 s.step.plannerResponse�뿉 以묒꺽�릺�뼱 �뱾�뼱�삱 �닔 �엳�쓬. 湲곗〈 �뙆�꽌�뒗 �븯�뱶肄붾뵫�맂 �븘�뱶 諛� �뵆�옯 援ъ“留� 議고쉶�븯�뿬 �쓳�떟�쓣 踰꾨┝.
- **二쇱쓽**: AG RPC �븘�뱶紐� 援ъ“ 異붿륫 湲덉��. �븘�슂 �떆 �깒�뱶諛뺤뒪濡� �몢 媛�吏� 援ъ“(Flat, Nested) 紐⑤몢 紐⑦궧�븯�뿬 吏곸젒 �뙆�떛 �솗�씤.

### [2026-04-10] [Extension] Fast Execution `<5s` Response Capture Missed (IDLE-to-IDLE)
- **利앹긽**: �뵒�뒪肄붾뱶濡� �궡�슜�씠 �븘�삁 �쟾�떖�릺吏� �븡�쓬. `[RT-CAPTURE]`, `[RESPONSE-CAPTURE]` 濡쒓렇 紐⑤몢 �쟾��� �궓吏� �븡�쓬.
- **�썝�씤**: AI �쓳�떟�씠�굹 肄붾뵫 �옉�뾽�씠 5珥�(�뤃留� 二쇨린) 誘몃쭔�쑝濡� 留ㅼ슦 鍮좊Ⅴ寃� �걹�굹硫�, �솗�옣�씠 `IDLE -> IDLE` �긽�깭留� 愿�李고븯硫� `wasRunning` �뵆�옒洹멸�� `false`濡� �쑀吏��맖. 湲곗〈 `[RESPONSE-CAPTURE]` 議곌굔�떇(`wasRunning && !isRunning && currentCount > ...`)�씠 `wasRunning=false`濡� �씤�빐 釉붾줉�릺�뼱 罹≪쿂 �옄泥대�� �셿�쟾�엳 嫄대꼫�쎇寃� �맖.
- **�빐寃�**: `wasRunning` 寃�利앹쓣 �궘�젣�븯怨� `!isRunning && currentCount > lastResponseCaptureStep` 議곌굔�쑝濡� �셿�솕�븯�뿬 �늻�씫�맂 step�씠 �엳�쓣 �븣 臾댁“嫄� 罹≪쿂�븯�룄濡� 蹂�寃�. 異붽��濡� �삤�옒�맂 `[RESPONSE-CAPTURE]` �궡 �븯�뱶肄붾뵫 �뙆�꽌瑜� `extractPlannerText`濡� �씪�썝�솕 �쟻�슜.
- **二쇱쓽**: �뤃留� 諛⑹떇�뿉�꽌�뒗 �긽�깭(RUNNING->IDLE) �쟾�씠瑜� �솗�떊�븷 �닔 �뾾�쑝誘�濡�, Step Count(�씤�뜳�뒪 �쟾吏�)�씪�뒗 100% �떊猶� 媛��뒫�븳 留덉빱瑜� �넻�빐 �깉 �쓳�떟 �뿬遺�瑜� 媛먯���빐�빞 �븿.

### [2026-04-10] [Bot] chat_snapshot_scanner 臾댄븳 Abort 諛� �뙆�씪 �쟻泥� (Exception �늻�씫)
- **利앹긽**: 遊뉗씠 �뵒�뒪肄붾뱶濡� AI �떟蹂�(梨꾪똿 �뒪�깄�꺑)�쓣 �쟾��� �쟾�넚�븯吏� 紐삵븯怨� �젆�씠 嫄몃┝. ridge/chat_snapshots/�뿉 泥섎━�릺吏� �븡��� JSON �뙆�씪�씠 �닔�떗 媛� �쟻泥대맖.
- **�썝�씤**: ot.py�쓽 chat_snapshot_scanner�뿉�꽌 �뙆�씪�쓣 �닚�쉶 �뙆�떛�븷 �븣 �궡遺��쓽 .unlink() 怨쇱젙�뿉�꽌 諛쒖깮�븯�뒗 �삁�쇅�굹 discord.Embed �깮�꽦 �삁�쇅 �벑�쓣 猷⑦봽 �븞�뿉�꽌 �옟�븘二쇱�� 紐삵븿. 泥� �뿉�윭 �뙆�씪(poison pill)�쓣 留뚮굹�뒗 �닚媛� 猷⑦봽 �쟾泥닿�� �룺�뙆�릺�뼱 �뮘履쎌쓽 �젙�긽 �뙆�씪�뱾�룄 �쁺�썝�엳 泥섎━�릺吏� �븡怨� �떎�쓬 �뤃 �뒪耳�以꾩뿉�꽌 �떎�떆 泥� �뙆�씪�뿉 留됲옒.
- **�빐寃�**: 猷⑦봽 �궡遺��뿉 except Exception�쓣 異붽���븯�뿬 �쟾�뿭 �삁�쇅瑜� �옟�븘 諛⑹뼱. �떎�뙣�븳 �뙆�씪��� glob�뿉�꽌 諛섎났 �떆�룄�릺吏� �븡寃� .json.failed濡� �슦�쉶(rename)�떆耳� �걧瑜� 鍮꾩썙以�.
- **二쇱쓽**: �뤃留�/�뒪罹먮꼫 or 猷⑦봽 �궡遺��뿉�꽌�뒗 媛쒕퀎 �븘�씠�뀥 �뙆�떛 �떒怨꾩뿉�꽌 諛쒖깮 媛��뒫�븳 紐⑤뱺 �삁�쇅 �긽�깭�뿉 ����븳 Defensive Catch 諛� Continue(�슦�쉶) 濡쒖쭅�씠 �븘�닔�엫.

### [2026-04-10] [Extension] GetAllCascadeTrajectories 10-Item Hard Limit Bypass (Signal Drop)
- **증상**: 기존에 작성했던 { limit: 30 } 파라미터가 LS 백엔드에서 무시되어 최신 세션이 10개 제한에 걸려 잘려나감. (Discord로 메시지 단 한 글자도 안 넘어옴).
- **원인**: GetAllCascadeTrajectories는 구조적으로 pagination 옵션을 무시하거나 강제 10 제한이 걸림.
- **해결**: step-probe.ts에서 기본 GetAllCascadeTrajectories와 더불어 모든 트래젝토리를 덤프하는 GetDiagnostics API를 병행 호출하고 머지하여 최신 Session ID를 놓치지 않고 추출하게 함.
- **주의**: LS Backend에서 정의한 RPC의 한계상 Argument 조작으로 제한을 회피할 수 없으므로, 향후 GetDiagnostics 등 백도어 데이터를 활용할 것.



### [2026-04-10] [Probe Logging] ��� AI�쓳�떟 �뀓�뒪�듃 & WAITING �뒪�뀦 �룞�떆 �늻�씫 踰꾧렇

- **利앹긽**: 援됱옣�엳 鍮좊Ⅸ AI �쓳�떟(�삉�뒗 利됯컖�쟻�씤 �댋 �샇異�) �떆 `step-probe.ts`媛� 硫붿떆吏���� �듅�씤 �떎�씠�뼹濡쒓렇瑜� 紐⑤몢 Discord濡� 由대젅�씠�븯吏� 紐삵븿.

- **�썝�씤**: �떎�떆媛� �뀓�뒪�듃 罹≪쿂(`delta > 0`) 議곌굔�뿉 `isRunning &&`�씠 嫄몃젮�엳�뼱, �긽�깭媛� `WAITING`�씠�굹 `IDLE`濡� 利됱떆 �꽆�뼱媛�硫� �뀓�뒪�듃瑜� 罹≪쿂�븯�뒗 猷⑦떞�씠 �쟾遺� �뒪�궢�맖. �삉�븳 �씠 �닚媛� `isStall` 議곌굔�룄 ���吏� �븡�븘 `WAITING` �뵒�뀓�뀡�룄 利앸컻�븿.

- **�빐寃�**: �떎�떆媛� 罹≪쿂 濡쒖쭅�뿉�꽌 `isRunning &&` 議곌굔�쓣 �젣嫄고븯怨�, `delta > 0`�씪 �븣 異붽���맂 理쒖떊 �뒪�뀦�쓣 �뒪罹뷀븯硫댁꽌 `PLANNER_RESPONSE`��� `WAITING` �뒪�뀦�쓣 紐⑤몢 泥섎━�븯�룄濡� �닔�젙�븿.

- **二쇱쓽**: LS Backend 10媛� Session �젣�븳 踰꾧렇媛� �엳�뼱, �떎瑜� 李쎌뿉�꽌 �닔�룞 梨꾪똿(`1fbca84c`)�씠 IDLE濡� �궓�븘�엳�쑝硫� �옄�룞�솕 �뿉�씠�쟾�듃�쓽 �썙�겕�뒪�럹�씠�뒪 �꽭�뀡怨� �뿷媛덈┫ �닔 �엳�쑝�굹, �씠 踰꾧렇�뒗 polling ����씠諛� 臾몄젣����쓬.


### [2026-04-10] [Extension] AI Response Missing for New Sessions (Session Tracking Failure)
- **利앹긽**: �깉濡쒖슫 ����솕(Session) �떆�옉 �떆 泥� AI �쓳�떟 �뀓�뒪�듃媛� �뵒�뒪肄붾뱶�뿉 �쟾��� �쟾�넚�릺吏� �븡�뒗 �쁽�긽.
- **�썝�씤**: 諛깆뿏�뱶�쓽 `GetAllCascadeTrajectories`媛� 10媛� �꽭�뀡留� 諛섑솚�븯�뿬 �깉 �꽭�뀡�씠 �늻�씫�맖. �씠瑜� 蹂댁셿�븯湲� �쐞�빐 `brain/` �뵒�젆�넗由щ�� �뒪罹뷀븯�뒗 Fallback 濡쒖쭅�씠 �룞�옉�뻽�쑝�굹, �떊洹� �꽭�뀡�쓽 泥� �떒怨꾩뿉�꽌 `GetCascadeTrajectorySteps`(stepOffset: 0) �샇異� �떆 �궡遺� �쓳�떟(UTF-8 �뙆�떛 �벑) �뿉�윭濡� �씤�빐 Exception�씠 諛쒖깮, `trajectorySummaries`�뿉 �꽭�뀡�씠 �븘�삁 �벑濡앸릺吏� �븡�쓬. �꽭�뀡�씠 異붿쟻�릺吏� �븡�쑝�땲 `delta > 0` 湲곕컲�쓽 �쓳�떟 罹≪쿂媛� 諛쒖깮�븯吏� �븡�쓬.
- **�빐寃�**: `step-probe.ts`�쓽 Fallback 2 `catch` 釉붾줉�뿉�꽌 �뿉�윭媛� 諛쒖깮�븯�뜑�씪�룄 媛뺤젣濡� `stepCount: 1`濡� �꽭�뀡�쓣 �벑濡앺븯�룄濡� �뙣移섑븯�뿬 �꽭�뀡 �씤�떇 �쑀�떎 諛⑹��.
- **二쇱쓽**: API �샇異� �떎�뙣瑜� 議곗슜�엳 `catch`濡� �꽆湲곕㈃ �쟾泥� �뙆�씠�봽�씪�씤(�뿬湲곗꽌�뒗 �긽�깭 �뤃留�)�씠 �빐�떦 �뜲�씠�꽣瑜� �쁺�썝�엳 臾댁떆�븯寃� �릺�뒗 移섎챸�쟻 踰꾧렇媛� 諛쒖깮�븿. �옣�븷 �뿀�슜 �꽕怨� �떆 湲곕낯媛� 蹂듭썝(Fallback State) �꽕�젙 �븘�닔.



### [2026-04-10] [Extension] Trigger-Click False Positives & Button Matching Failure
- **利앹긽**: �뵒�뒪肄붾뱶�뿉�꽌 �듅�씤(Approve)�쓣 �늻瑜대㈃, �뿉�씠�쟾�듃 �솗�옣 �봽濡쒓렇�옩�씠 �븣留욎�� 踰꾪듉(�삁: `Always run`)�쓣 �늻瑜댁�� 紐삵븯嫄곕굹, �뿁�슧�븳 踰꾪듉(�삁: �긽�떒�쓽 `Running1 command`)�쓣 �닃�윭踰꾨젮 �떎�젣 �듅�씤 泥섎━媛� �늻�씫�릺�뒗 �쁽�긽.
- **�썝�씤**: 1) UI 踰꾪듉 �뀓�뒪�듃�뿉 `keyboard_arrow_up` �벑 癒명떚由ъ뼹 �븘�씠肄� �뀓�뒪�듃媛� �젒李�(`Always runkeyboard_arrow_up`)�릺�뼱 �젙洹쒖떇�씠 �떎�뙣�븷 寃껋쓣 �슦�젮�빐 �떒�뼱 寃쎄퀎(`\b`)瑜� �젣嫄고븳 �뙣移섍�� �썝�씤. �떒�뼱 寃쎄퀎媛� �궗�씪吏�硫댁꽌 `/Run/i` �뙣�꽩�씠 `Running1 command` 媛숈�� �떎瑜� �긽�깭 �뀓�뒪�듃 踰꾪듉�뿉 �삤�깘(False Positive)�맖. 2) DOM �닚�꽌�긽 �긽�깭 �뀓�뒪�듃 踰꾪듉�씠 �븵�꽌 �엳�쑝誘�濡� �삤�깘�맂 踰꾪듉�씠 �슦�꽑 �겢由��맖.
- **�빐寃�**: `trigger-click` 濡쒖쭅 �떎�뻾 �쟾 踰꾪듉�쓽 `textContent`�뿉�꽌 `keyboard_arrow_up` �벑 �븣�젮吏� 瑗щ━ �븘�씠肄� 臾몄옄�뿴�쓣 紐낆떆�쟻�쑝濡� �젣嫄�(strip)�븯怨�, 紐⑤뱺 �듃由ш굅 �젙洹쒖떇�뿉 �떎�떆 �떒�뼱 寃쎄퀎(`\b`)瑜� 媛뺤젣 �궫�엯�븯�뿬 �삤�깘�쓣 �썝泥� 李⑤떒�븿.
- **二쇱쓽**: UI �슂�냼瑜� DOM�뿉�꽌 湲곸뼱�삱 �븣�뒗 �뀓�뒪�듃�뿉 �닲寃⑥쭊 �븘�씠肄�/�쎒�룿�듃 由ш굅爾�(ligatures)媛� �뾾�뒗吏� 寃��넗�빐�빞 �븿. �뙣�꽩 留ㅼ묶 �떆 瑗щ━�몴瑜� 癒쇱�� �젣嫄고븯怨� 紐낇솗�븳 寃쎄퀎瑜� 遺��뿬�븷 寃�.



### [2026-04-10] [Extension] Ghost Session Hijack & Infinite Polling Loop (trajectory not found)

- **利앹긽**: �떊洹� �옉�뾽 �떆 '�떊�샇�븞�뱾�뼱���' (Discord濡� 由대젅�씠 �븞 �맖). 濡쒓렇�뿉 500 error trajectory not found 臾댄븳 諛섎났.\n- **�썝�씤**: Antigravity媛� �옉�뾽�븯硫댁꽌 brain/�뿉 36湲��옄 �뤃�뜑瑜� �깮�꽦�븯�뒗�뜲, Cascade媛� �븘�땲誘�濡� GetCascadeTrajectorySteps�뿉�꽌 500 �뿉�윭瑜� �깄�땲�떎. �븯吏�留� �씠�쟾 �떊洹� �꽭�뀡 �쑀�떎 諛⑹�� �뙣移섍�� �씠 Ghost �꽭�뀡�쓣 RUNNING�쑝濡� 媛뺤젣 �벑濡앺븯硫댁꽌, �솢�꽦 �꽭�뀡(activeSessionId)�쓣 �깉痍⑦븯怨� 臾댄븳 �뿉�윭 猷⑦봽�뿉 鍮좎��寃� 留뚮뱾�뿀�뒿�땲�떎.\n- **�빐寃�**: step-probe.ts�뿉�꽌 �뤃諛� �벑濡� �떆 error message�뿉 'trajectory not found'媛� �룷�븿�릺硫� Ghost �꽭�뀡�쑝濡� 媛꾩＜�빐 媛뺤젣 �벑濡�(continue)�쓣 嫄대꼫�쎇寃� �븯怨�, Stall Probe �뿉�윭 catch�뿉�꽌�룄 UTF-8 �뿉�윭媛� �븘�땲硫� stallProbed=true瑜� 二쇱뼱 �옱�떆�룄 臾댄븳 猷⑦봽瑜� �셿�쟾�엳 �걡�뼱�깉�뒿�땲�떎.\n- **二쇱쓽**: uuid 湲몄씠(36�옄)留뚯쑝濡� �뵒�젆�넗由щ�� �떇蹂꾪븷 �븣 Antigravity��� Google Agent媛� 紐⑦샇�빐吏� �닔 �엳�쑝誘�濡�, 諛섎뱶�떆 Backend �쓳�떟�쓽 �솗�떎�븳 �뿉�윭(trajectory not found) 硫붿떆吏�濡� �삁�쇅 �뙋蹂꾩쓣 �빐�빞 �빀�땲�떎.\n