fix(a3): resolve shift buffer race condition with call-unique tokens, atomic write, and automatic GC (100% PASS)

This commit is contained in:
2026-08-06 23:52:57 +09:00
parent 0f6dd8ba8b
commit 3530e8b65a
3 changed files with 330 additions and 16 deletions
+11 -9
View File
@@ -1,9 +1,9 @@
# 🛠️ Multi-Agent Mux 종합 개선 및 미해결 과제 백로그 (`IMPROVEMENTS.md`)
- **최종 갱신일**: 2026-08-06 (B-3 herdr real binary preflight verification 완료 반영)
- **최종 갱신일**: 2026-08-06 (A-3 call-unique buffer isolation & automatic GC 완료 반영)
- **통합 관리 대상**: 기존 `CODEBASE_REVIEW_REPORT.md` + `OPTIMIZATION.md`
- **총 추적 미해결 과제**: **15** (아키텍처 2건, 엣지케이스 7건, 오케스트레이션 2건, 레거시 잔재 4건)
- **완료된 과제**: **6** (A-1, A-5, B-1, B-3, C-1, O-1)
- **총 추적 미해결 과제**: **14** (아키텍처 1건, 엣지케이스 7건, 오케스트레이션 2건, 레거시 잔재 4건)
- **완료된 과제**: **7** (A-1, A-3, A-5, B-1, B-3, C-1, O-1)
---
@@ -13,16 +13,12 @@
---
## 1. 🔴 아키텍처 결함 (Architecture Flaws — 2건)
## 1. 🔴 아키텍처 결함 (Architecture Flaws — 1건)
### **A-2: 공개 브로커 + HMAC 인증 Off + 와일드카드 전파**
- **현상**: `mqtt_common.py`의 기본 브로커가 공개 서버(`broker.hivemq.com`), HMAC 무조건 True 반환으로 설정되어 있습니다.
- **파급 효과**: 외부에서 유입되는 malicious `error` 이벤트 수신 시 `reconcile.sh`가 라이브 에이전트 pane을 `kill-session`으로 강제 파괴하는 치명적 보안/안정성 위험이 존재합니다.
### **A-3: 시프트 버퍼 단일 파일 공유 및 동시 주입 오염**
- **현상**: `send_keys_safe` 시프트의 `set/paste/delete-buffer``-b` 세션 버퍼 이름을 무시하고 단일 `.mam/shim/tmp_buffer` 파일 하나만을 공유합니다.
- **파급 효과**: 다중 에이전트 동시 주입 시 대화 텍스트 교차 오염 및 무음 유실(t5 silent loss)이 발생합니다.
---
## 2. 🟠 엣지 케이스 및 런타임 버그 (Edge-case Bugs — 7건)
@@ -84,12 +80,18 @@
---
## 5. 🎉 완료된 과제 (Completed Tasks — 6건)
## 5. 🎉 완료된 과제 (Completed Tasks — 7건)
### **A-1: 워크스페이스 세션 격리 & drift-B 오등록 방지** — ✅ 완료
- `derive_workspace_slug` 헬퍼 함수를 추가하여 워크스페이스 경로 기반 단일 소켓 슬러그(`mam-<parent>-<work>`) 도출 체계를 구축했습니다.
- `reconcile.sh` drift-B 자동 등록 시 foreign cwd 차단 게이트를 구축하여 세션 오등록을 방지했습니다.
### **A-3: 시프트 버퍼 동시 주입 오염 & 자동 GC 체계 구축** — ✅ 완료
- `lib.sh``send_keys_safe` 시프트 버퍼 명령의 임시 파일명을 `sks_${sess}_${job_id}_$$_${RANDOM}_$(date +%s%N)` 식 호출 단위 독립 토큰으로 변환하여 다중 에이전트 동시 주입 시 대화 교차 오염 및 무음 유실(T5)을 원천 차단했습니다.
- `set-buffer` 시 원자적 임시 쓰기(`.$buf.$$.tmp`) 및 rename(`mv -f`) 구조를 구현하여 파티셜 레코드 관측을 방지했습니다.
- 인터럽트/예외 종료 시 남는 stale 버퍼 파일을 자동으로 정리하는 60분 내장 GC(`find -mmin +60 -delete`)를 내장했습니다.
- 전용 회귀 테스트 스위트 `tests/test_a3_buffer_isolation.py` (12/12 PASS)를 작성하여 입증했습니다.
### **A-5: `HERDR_SESSION_NAME` 네이티브 전환** — ✅ 완료
- 기존 `HERDR_SERVER_NAME` 환경변수를 herdr 시프트가 직접 읽는 네이티브 **`HERDR_SESSION_NAME`** 및 YAML 레지스트리 키 **`herdr_session`**으로 전수 전환 단일화했습니다.