fix(extension): diff_review steps=[] race condition — in-memory metadata cache (v0.3.13)

Root cause: Collector deletes pending file before Extension reads edit_step_indices.
Fix: diffReviewMetadata Map caches step indices in Extension memory.
Known issue added. Devlog entry 003.
This commit is contained in:
Variet Worker
2026-03-16 16:09:04 +09:00
parent 12a1cf8692
commit 9ef2c3f07c
9 changed files with 163 additions and 43 deletions

View File

@@ -4,3 +4,4 @@
|---|------|------|------|------|
| 001 | 07:30~11:10 | 승인 상태 관리 근본 원인 분석 + v0.3.12 수정 (sawRunningAfterPending gate) + approval-flow.md 시스템 Flow 문서 + known-issues 2건 추가 | `2d9fe96` | ✅ |
| 002 | 13:25~14:20 | diff_review 핸들러 2-strategy 리팩토링 + 배포 불일치 발견/수정 + pending 순서 8초 지연 + 1차 테스트 (버튼 OK, RPC 미배포→재배포) + known-issues 2건 | `f302984` | 🔧 |
| 003 | 15:18~16:06 | diff_review steps=[] 근본 원인 분석 + diffReviewMetadata 인메모리 캐시 수정 (v0.3.13) + 2차 E2E 테스트 (원인 확인) + known-issues 1건 | `00b9491` | 🔧 |

View File

@@ -0,0 +1,31 @@
# diff_review steps=[] 근본 원인 분석 + v0.3.13 수정
- **시간**: 2026-03-16 15:18~16:06
- **Commit**: `00b9491`
- **Vikunja**: #384 diff_review 원격 승인 테스트 → 진행중
## 분석 결과
2차 E2E 테스트에서 `AcknowledgeCascadeCodeEdit(steps=[])``SUCCESS: {}` 반환 확인.
RPC 자체는 성공하지만 빈 step 배열로 호출하면 no-op — AG의 diff review 바 유지됨.
**근본 원인 체인:**
1. Extension이 `writePendingApproval()`로 diff_review pending 생성 (edit_step_indices=[86] 포함)
2. Collector가 Gateway에 전달 후 로컬 pending 파일을 삭제 (collector.py L259)
3. Discord Accept 클릭 → Gateway → Collector가 response 파일 작성
4. Extension의 `processResponseFile`이 pending 파일에서 `edit_step_indices` 읽으려 함 → **파일 이미 없음**
5. `trackedSteps=[]``AcknowledgeCascadeCodeEdit(steps=[])` → no-op
## 수정 (v0.3.13)
- `diffReviewMetadata` 인메모리 Map 추가 (extension.ts L57)
- `writePendingApproval`에서 diff_review pending 생성 시 메타데이터를 메모리에 캐시
- `processResponseFile`에서 메모리 먼저 조회, pending 파일은 fallback
- `modifiedFiles` 변수를 Strategy 1/2 공유 스코프로 호이스팅
## 미완료
- **AG 풀 재시작 후 3차 E2E 테스트** 필요
- `[DIFF-REVIEW-CACHE]` 로그 확인
- `[DIFF-REVIEW-RPC]` steps 배열에 실제 인덱스 포함 확인
- AG에서 diff review 바 사라지는지 확인