docs: devlog #005 + known-issues — rate limit 구조적 수정 기록

This commit is contained in:
Variet Worker
2026-03-12 23:06:15 +09:00
parent 56de71470d
commit 9036f1cefc
2 changed files with 9 additions and 0 deletions

View File

@@ -432,3 +432,11 @@
- **해결**: `_discover_local_projects()``bridge/register/*.json`에서 로컬 프로젝트 목록을 자동 발견, 모든 프로젝트에 대해 폴링. Extension은 L131에서 `project_name` 필터링이 있어 자기 프로젝트만 소비
- **주의**: 멀티 PC 환경에서 `/api/commands/all` 엔드포인트는 크로스 PC 명령 오염을 유발하므로 사용 금지. 각 Collector가 자기 PC의 `register/` 기반으로 프로젝트를 발견하는 것이 올바른 설계
### [2026-03-12] RemoteTransport backing off 무한 반복 — IDLE에서 더 심함
- **증상**: AG 미사용(IDLE) 시 `backing off 1s` 경고가 ~4초마다 영구 반복. 사용 중보다 IDLE 시 더 자주 발생
- **원인**: 3가지 구조적 결함의 복합:
1. **백오프 즉시 리셋**: `_reset_backoff()`가 성공 1회에 `_backoff_seconds=0` → 7개 루프가 같은 transport 공유 → 첫 성공에 리셋 → 지수 백오프가 영원히 1s에서 멈춤
2. **IDLE 시 불필요한 요청**: 6개 프로젝트 command 폴링이 3초마다 빈 응답 반복
3. **asyncio burst**: 7개 루프가 같은 `asyncio.sleep(3)` → 같은 tick에 동시 깨어남 → 순간 burst로 Gateway 1초 윈도우(30 req) 초과
- **해결**: (1) `_on_request_success()` — 연속 5회 성공 후에만 백오프 절반 감소, (2) `_poll_commands_loop` adaptive 간격 (빈 응답 시 3s→10s→30s→60s), (3) Gateway 윈도우 1s/30→10s/100, (4) 루프 stagger (0~3.5s 오프셋)
- **주의**: `_reset_backoff()` [즉시 리셋] 패턴은 **다중 소비자가 같은 transport를 공유하는 환경에서 절대 사용 금지**. 단일 성공이 전체 백오프를 무효화함