# πŸ“‘ Issue #6 μ’…ν•© 리뷰 및 μ•„ν‚€ν…μ²˜ κ°œμ„  톡합 λ³΄κ³ μ„œ (Rev. 2) - **μž‘μ„± 주체**: μ˜€μΌ€μŠ€νŠΈλ ˆμ΄ν„° (Orchestrator) - **μ°Έμ—¬ 리뷰어**: `planner-reviewer-claude-01` (Claude), `reviewer-creator-grok-01` (Grok), `planner-reviewer-codex-01` (Codex), `reviewer-opencode-01` (OpenCode) - **κ²€ν†  λŒ€μƒ**: Gitea [Issue #6](https://git.godopu.com/tmpl/multi-agent-mux/issues/6) β€” `[Bug] delegate-job μ›Œμ»€ μ‹€νŒ¨ μ‹œ λ ˆμ§€μŠ€νŠΈλ¦¬ λ―Έκ°±μ‹ (Fail-Silent) 및 TUI ν„΄ 마감 레이슀 μ»¨λ””μ…˜ ν•΄κ²°` - **κ²€ν†  κΈ°μ€€ 컀밋**: `f98b958` (`main`, `refactor`, v4.4.0) - **λ¬Έμ„œ 버전**: Revision 2 (Rev. 2 β€” 2μ°¨ λΌμš΄λ“œ 리뷰어 ν”Όλ“œλ°± 전건 반영) --- ## 1. κ°œμš” 및 총평 μ˜€μΌ€μŠ€νŠΈλ ˆμ΄ν„° 루프(`run_loop.sh` / `lib_py.loop`) μ‹€ν–‰ 쀑 λ°œμƒν–ˆλ˜ 3,900초 영ꡬ λŒ€κΈ°(hang) 결함(Issue #6)에 λŒ€ν•΄ 4λͺ…μ˜ 리뷰어가 λ…λ¦½μ μœΌλ‘œ μ†ŒμŠ€ μ½”λ“œ 좔적, λ‹¨μœ„ 격리 μž¬ν˜„, μ‹€μΈ‘ ν¬λ Œμ‹, Herdr 0.8.2 λ„€μ΄ν‹°λΈŒ API 계약 뢄석을 μˆ˜ν–‰ν–ˆμŠ΅λ‹ˆλ‹€. **리뷰어 4인 μ „μ›μ˜ 만μž₯일치 νŒμ • κ²°κ³Ό:** > **"Issue #6μ—μ„œ μ œκΈ°ν•œ 결함 β‘ κ³Ό 결함 β‘‘λŠ” λͺ¨λ‘ μ‹€μ œ μ½”λ“œλ² μ΄μŠ€μ— μ‘΄μž¬ν•˜λŠ” μ‹¬κ°ν•œ μ‹€μž¬ 버그 및 섀계 결함이닀."** 특히 2μ°¨ λΌμš΄λ“œ ꡐ차 κ²€ν† λ₯Ό 톡해 **루프 μ‹€μ‚¬μš© 경둜(`--type direct`)의 μˆ¨μ€ 결함**, **κΈ°μ‘΄ `deadline_timeout` CAS μ—”μ§„ μž¬μ‚¬μš© 원칙**, **κ΅¬λ…μž νƒ€μž„μ•„μ›ƒ μ˜ˆμ‚° μžκ°€ν¬μ‹ λ°©μ§€λ₯Ό μœ„ν•œ 사전 ν•Έλ“œμ…°μ΄ν¬ μˆœμ„œ**, **브둜컀 μž₯μ• (`rc=3`) 격리** λ“± ν”„λ‘œλ•μ…˜ μˆ˜μ€€μ˜ μ •λ°€ν•œ κ°€λ“œλ ˆμΌμ΄ 톡합 λ³΄κ³ μ„œ Rev.2에 μ™„λ²½νžˆ λ³΄κ°•λ˜μ—ˆμŠ΅λ‹ˆλ‹€. --- ## 2. 결함별 μ§„μœ„ κ²€ν†  및 심측 뢄석 ### 2.1 결함 β‘ : `multi-agent-mux-delegate-job` μ›Œμ»€ μ‹€νŒ¨ μ‹œ λ ˆμ§€μŠ€νŠΈλ¦¬ λ―Έκ°±μ‹  (Fail-Silent 버그) - **νŒμ •**: **μ‹€μž¬ν•˜λŠ” 핡심 결함 (CONFIRMED REAL, P0/P1)** - **μ‹€μΈ‘ 및 μž¬ν˜„ κ²°κ³Ό**: 1. **이슈 μ§€λͺ© μœ„μΉ˜(`:358-362`)의 μ§„μœ„**: - `_phase == "worker"`μ—μ„œ `job_status != "completed"`일 λ•Œ `break` ν›„ λ ˆμ§€μŠ€νŠΈλ¦¬(`registry.py status --set error`) κ°±μ‹  없이 ν•¨μˆ˜ λμ—μ„œ 둜그 경둜λ₯Ό 좜λ ₯ν•˜λ©° `exit 0`으둜 μ’…λ£Œλ˜λŠ” ν˜„μƒμ΄ μ •ν™•νžˆ ν™•μΈλ˜μ—ˆμŠ΅λ‹ˆλ‹€. - λ™μΌν•œ 결함이 리뷰어 단계(`:375-378`) μ‘°κΈ° νƒˆμΆœ 뢄기에도 λ™μΌν•˜κ²Œ μ‘΄μž¬ν•©λ‹ˆλ‹€. 2. **μ˜€μΌ€μŠ€νŠΈλ ˆμ΄ν„° μ‹€μ‚¬μš© 경둜(`--type direct:227`)의 μˆ¨μ€ 결함 (전원 곡톡 발견)**: - μƒμœ„ μ˜€μΌ€μŠ€νŠΈλ ˆμ΄ν„°(`lib_py/loop/runner.py:271` 및 `run_loop.sh`)λŠ” 루프 λ‚΄λΆ€μ—μ„œ `--type loop`κ°€ μ•„λ‹Œ **`--type direct`**둜 μ—μ΄μ „νŠΈ μž‘μ—…μ„ μœ„μž„ν•©λ‹ˆλ‹€. - direct 경둜(`:227`)λŠ” `run_agent` μ‹€ν–‰ ν›„ `wait "$sub_pid" || true`둜 κ΅¬λ…μž μ‹€νŒ¨λ₯Ό μ‚ΌμΌœλ²„λ¦¬κ³ , μƒνƒœ 전이λ₯Ό μ „ν˜€ κ±°μΉ˜μ§€ μ•Šμ€ 채 `exit 0`을 λ°˜ν™˜ν•©λ‹ˆλ‹€. - λ”°λΌμ„œ μ΄μŠˆκ°€ μ–ΈκΈ‰ν•œ 루프 λΆ„κΈ°λΏλ§Œ μ•„λ‹ˆλΌ **μ˜€μΌ€μŠ€νŠΈλ ˆμ΄ν„°κ°€ μ‹€μ œλ‘œ νƒ€λŠ” direct 경둜 μ—­μ‹œ μ™„μ „νžˆ 침묡(Fail-Silent)**ν•˜κ³  μžˆμ—ˆμŠ΅λ‹ˆλ‹€. 3. **νŒŒκΈ‰ 효과 (65λΆ„ Hang)**: - μƒμœ„ λ£¨ν”„μ˜ `wait_for_job`은 `completed`, `error`, `cancelled` 3개 터미널 μƒνƒœλ§Œ μ’…λ£Œ 쑰건으둜 μΈμ‹ν•©λ‹ˆλ‹€. - κ΅¬λ…μžκ°€ 120초 idle timeout(`sub_rc=2`)으둜 μ£½μ—ˆμŒμ—λ„ λ ˆμ§€μŠ€νŠΈλ¦¬κ°€ `pending` λ˜λŠ” `running`으둜 λ°©μΉ˜λ˜μ–΄ μƒμœ„ 루프가 기본값인 **3,900초(65λΆ„) λ™μ•ˆ λΈ”λ‘œν‚Ή**λ©λ‹ˆλ‹€. - μ‹€μ œ 운영 λ ˆμ§€μŠ€νŠΈλ¦¬ ν¬λ Œμ‹ κ²°κ³Ό `93a44347`, `2961b822`, `ee242671` 3건의 μ‹€μš΄μ˜ μž‘μ—…μ΄ μ •ν™•νžˆ 이 κ²°ν•¨μœΌλ‘œ μž₯μ‹œκ°„ ꡐ착 μƒνƒœμ— λ°©μΉ˜λ˜μ—ˆλ˜ 사싀이 μ‹€μ¦λ˜μ—ˆμŠ΅λ‹ˆλ‹€. ### 2.2 결함 β‘‘: μ—μ΄μ „νŠΈ 이벀트 λ°œν–‰κ³Ό TUI 볡귀 κ°„μ˜ 레이슀 μ»¨λ””μ…˜ - **νŒμ •**: **μ‹€μž¬ν•˜λŠ” 섀계 결함 (CONFIRMED REAL, P1)** - **μ‹€μΈ‘ 및 μž¬ν˜„ κ²°κ³Ό**: 1. **비동기 μƒνƒœ 뢈일치 레이슀**: - μ—μ΄μ „νŠΈ ν”„λ‘œμ„ΈμŠ€κ°€ MQTT둜 `completed` 이벀트λ₯Ό λ°œν–‰ν•œ 직후에도 터미널 화면은 λ§ˆν¬λ‹€μš΄ λ Œλ”λ§, 버퍼 ν”ŒλŸ¬μ‹œ, 툴 호좜 정리 λ“±μœΌλ‘œ 인해 μ—¬μ „νžˆ `working/busy` μƒνƒœμΌ 수 μžˆμŠ΅λ‹ˆλ‹€. - μ‹€μΈ‘ κ²°κ³Ό Codex λ“± λŒ€ν˜• λͺ¨λΈμ˜ 경우 `completed` λ°œν–‰ ν›„ TUIκ°€ `done`으둜 λ–¨μ–΄μ§€λŠ” 데 μ΅œλŒ€ 31μ΄ˆκ°€ μ†Œμš”λ˜κΈ°λ„ ν–ˆμŠ΅λ‹ˆλ‹€. 2. **ν”„λ‘¬ν”„νŠΈ 묡살 및 μœ μ‹€**: - λ‹€μŒ 단계(리뷰어 λ“±)κ°€ μ¦‰μ‹œ ν”„λ‘¬ν”„νŠΈλ₯Ό μ „μ†‘ν•˜λ©΄ TUIκ°€ μž…λ ₯을 λ¬΄μ‹œν•˜κ±°λ‚˜ 첫 κΈ€μž/단어가 잘린 채 μ£Όμž…λ˜μ–΄ λ¬Έλ§₯이 κΉ¨μ§„ 채 μ‹€ν–‰λ˜κ±°λ‚˜ 무응닡 μƒνƒœμ— λΉ μ§‘λ‹ˆλ‹€. 3. **두 결함 κ°„μ˜ μ•…μˆœν™˜ 증폭**: - 결함 β‘‘(TUI λ―Έμ€€λΉ„ ν”„λ‘¬ν”„νŠΈ μœ μ‹€) λ°œμƒ β†’ μ›Œμ»€ 무응닡 β†’ κ΅¬λ…μž 120초 νƒ€μž„μ•„μ›ƒ(`sub_rc=2`) β†’ 결함 β‘ (Fail-Silent) λ°œλ™ β†’ λ ˆμ§€μŠ€νŠΈλ¦¬ `pending/running` 방치 β†’ μƒμœ„ 루프 65λΆ„ 영ꡬ ꡐ착(Hang). --- ## 3. μˆ˜μ • λ‚œμ΄λ„ 및 곡수 μ‚°μ • (Consensus) | μ˜μ—­ | λ‚œμ΄λ„ | μ˜ˆμƒ 곡수 | 핡심 λ³€κ²½ λŒ€μƒ | | :--- | :---: | :---: | :--- | | **결함 β‘  (Fail-Closed CAS)** | **μ€‘ν•˜ (Low-Med)** | 1.0 ~ 1.5 MD | `skills/.../multi-agent-mux-delegate-job`, `lib_py/delegation/engine.py` | | **결함 β‘‘ (TUI ν„΄ ν•Έλ“œμ…°μ΄ν¬)** | **쀑 (Medium)** | 1.0 ~ 1.5 MD | `.agents/skills/multi-agent-mux-create/scripts/lib.sh` (`send_keys_safe`), Herdr API 연동 | | **톡합 ν…ŒμŠ€νŠΈ & 닀쀑 μ—μ΄μ „νŠΈ μ‹€μΈ‘** | **쀑 (Medium)** | 1.0 ~ 1.5 MD | 4개 μ—μ΄μ „νŠΈ(Claude/Grok/Codex/OpenCode) 싀기동 E2E 검증, Mock λ‹¨μœ„ ν…ŒμŠ€νŠΈ | | **총계** | **쀑 (Medium)** | **3.0 ~ 4.5 Engineer-Days** | μ•ˆμ „ν•˜κ³  ν†΅μ œλœ 점진적 κ΅¬ν˜„ κ°€λŠ₯ | --- ## 4. 상세 기술 μ•„ν‚€ν…μ²˜ 및 κ΅¬ν˜„ 사양 (Rev. 2 보강) ### 4.1 결함 β‘  ν•΄κ²°μ±…: λ ˆμ§€μŠ€νŠΈλ¦¬ Fail-Closed 및 CAS μ—”μ§„ 연동 1. **ν‘œμ€€ CAS 전이(`deadline_timeout`) ν™œμš©**: - μž„μ˜μ˜ μ‹ κ·œ CLI ν”Œλž˜κ·Έ(`--expect-status`)λ‚˜ 운영자 κ°•μ œ μ˜€λ²„λΌμ΄λ“œλ₯Ό 발λͺ…ν•˜μ§€ μ•Šκ³ , 이미 κ²€μ¦λœ `lib_py/delegation/engine.py:50`의 `deadline_timeout` 전이λ₯Ό ν˜ΈμΆœν•©λ‹ˆλ‹€. - `deadline_timeout`은 작이 `pending` λ˜λŠ” `running`일 λ•Œλ§Œ μ›μžμ μœΌλ‘œ `error`둜 μ „μ΄ν•˜λ©°, κ΅¬λ…μž νƒ€μž„μ•„μ›ƒ 직후 λ°±μ—”λ“œμ—μ„œ 늦게 λ„μ°©ν•œ `completed` μ΄λ²€νŠΈκ°€ 이미 μ»€λ°‹λœ 경우 `"conflicting error after terminal completed; refusing"`으둜 μ•ˆμ „ν•˜κ²Œ κ±°λΆ€(No-op)ν•©λ‹ˆλ‹€. - `expected_dispatch_token`을 μ „λ‹¬ν•˜μ—¬ 이전 μ‹œλ„μ˜ λŠ¦μ€ νƒ€μž„μ•„μ›ƒμ΄ μž¬μ‹œλ„ μž‘μ„ μ˜€μ—Όμ‹œν‚€λŠ” ABA 레이슀λ₯Ό μ›μ²œ μ°¨λ‹¨ν•©λ‹ˆλ‹€. 2. **`multi-agent-mux-delegate-job` 곡톡 μ’…λ£Œ 헬퍼 (`finalize_unfinished`) λ„μž…**: - direct 경둜(`:227`) 및 loop/discuss 경둜(`:358`, `:375`)에 곡톡 적용. - κ΅¬λ…μž μ’…λ£Œ μ‹œ `wait "$sub_pid"` μˆ˜μ§‘ 및 λ―Έμ™„λ£Œ μž‘μ— λŒ€ν•΄ `finalize_unfinished`λ₯Ό ν˜ΈμΆœν•˜μ—¬ μƒνƒœλ₯Ό Fail-Closed 처리. - 래퍼 μžμ²΄λ„ μžμ‹ κ΅¬λ…μž ν”„λ‘œμ„ΈμŠ€λ₯Ό μ•ˆμ „ν•˜κ²Œ 수거(`kill "$sub_pid" 2>/dev/null; wait "$sub_pid"`)ν•˜μ—¬ 3,600초 κ³ μ•„ ν”„λ‘œμ„ΈμŠ€ λ°©μ§€. 3. **브둜컀 μž₯μ• (`rc=3`)와 μ›Œμ»€ μ‹€νŒ¨ 격리 (B-15 계약 μ€€μˆ˜)**: - κ΅¬λ…μžκ°€ `rc=3`(`broker_unavailable`)으둜 μ’…λ£Œλ˜μ—ˆμœΌλ‚˜ λ””μŠ€ν¬ 상에 μ΄λ²€νŠΈκ°€ μ‚΄μ•„μžˆμ„ κ°€λŠ₯성이 μžˆλŠ” 경우, μ¦‰μ‹œ μ‹€νŒ¨λ‘œ λ‹¨μ •ν•˜μ§€ μ•Šκ³  작 λ°λ“œλΌμΈκΉŒμ§€ λ ˆμ§€μŠ€νŠΈλ¦¬λ₯Ό μž¬ν™•μΈν•˜μ—¬ 브둜컀 μΌμ‹œ μˆœλ‹¨μ— μ˜ν•œ κ±°μ§“ μ‹€νŒ¨λ₯Ό λ°©μ§€ν•©λ‹ˆλ‹€. 4. **λ¦¬ν…ŒμΈ 이벀트 μ˜€μ—Ό λ°©μ§€ (O-1)**: - loop/discuss λͺ¨λ“œ μ‹€νŒ¨ μ‹œ MQTT에 `error` 이벀트λ₯Ό retain μƒνƒœλ‘œ λ°œν–‰ν•˜μ§€ μ•Šμ•„, μž¬μ‹œλ„ μ‹œ 이전 μ—λŸ¬ μ΄λ²€νŠΈκ°€ μ¦‰μ‹œ μž¬μˆ˜μ‹ λ˜λŠ” ν˜„μƒμ„ λ°©μ§€ν•©λ‹ˆλ‹€. 5. **μ˜€μΌ€μŠ€νŠΈλ ˆμ΄ν„° λŸ¬λ„ˆ Fail-Fast μ—°κ²°**: - `lib_py/loop/runner.py:delegate_job`이 래퍼 μ‹€νŒ¨(rcβ‰ 0) μ‹œμ—λ„ `registered job:` 좜λ ₯을 νŒŒμ‹±ν•˜μ—¬ `wait_for_job`에 λ„˜κΈ°λ„λ‘ 보μž₯ (λ””μŠ€ν¬κ°€ 이미 `error`μ΄λ―€λ‘œ 1초 λ‚΄ False λ°˜ν™˜ν•˜μ—¬ 65λΆ„ ꡐ착 μ›μ²œ 차단). ### 4.2 결함 β‘‘ ν•΄κ²°μ±…: TUI ν„΄ ν•Έλ“œμ…°μ΄ν¬ μ‹œν€€μŠ€ 및 μ˜ˆμ‚° 보강 1. **ν•Έλ“œμ…°μ΄ν¬ μ‹€ν–‰ μˆœμ„œ (κ΅¬λ…μž μ‹œμž‘ μ „ 배치)**: - **μ€‘μš”**: `wait_for_agent_idle` ν•Έλ“œμ…°μ΄ν¬λŠ” λ°˜λ“œμ‹œ **κ΅¬λ…μž(`job_subscriber.py`) 기동 μ „**에 μ™„λ£Œλ˜μ–΄μ•Ό ν•©λ‹ˆλ‹€. - κ΅¬λ…μž μ‹€ν–‰ 후에 λŒ€κΈ°ν•  경우, μ—μ΄μ „νŠΈμ˜ 유휴 λŒ€κΈ° μ‹œκ°„(15~30초)이 κ΅¬λ…μžμ˜ 120초 idle timeout μ˜ˆμ‚°μ„ μž μ‹(μžκ°€ 포식)ν•˜λŠ” 결함이 λ°œμƒν•©λ‹ˆλ‹€. 2. **유휴 λŒ€κΈ° μ˜ˆμ‚° ν™•λŒ€ (15초 β†’ 120초)**: - Codex λ“± λ³΅μž‘ν•œ λ§ˆν¬λ‹€μš΄/도ꡬ 좜λ ₯을 λ Œλ”λ§ν•˜λŠ” λŒ€ν˜• λͺ¨λΈμ€ `completed` 이벀트 ν›„ TUIκ°€ μ™„μ „νžˆ `done`으둜 λ³΅κ·€ν•˜λŠ” 데 μ‹€μΈ‘ 31μ΄ˆκ°€ κ±Έλ ΈμŠ΅λ‹ˆλ‹€. - λ”°λΌμ„œ 15초 ν•˜λ“œμ½”λ”© λŒ€μ‹  κΈ°λ³Έ 120초(`SKS_IDLE_TIMEOUT_MS=120000`)λ₯Ό μ μš©ν•˜κ³  ν™˜κ²½λ³€μˆ˜λ‘œ μœ μ—°ν•˜κ²Œ μ‘°μ ˆν•  수 μžˆλ„λ‘ ν•©λ‹ˆλ‹€. 3. **Herdr λ„€μ΄ν‹°λΈŒ λŒ€κΈ° API μš°μ„  μ‚¬μš© 및 Fallback 견고화**: - `herdr agent wait --until idle --until done --timeout "$SKS_IDLE_TIMEOUT_MS"`λ₯Ό μš°μ„  호좜. - `lib_py.loop.watcher.wait_once` λ©”μ»€λ‹ˆμ¦˜μ„ μž¬μ‚¬μš©ν•˜μ—¬ μ‰˜ 쀑볡 κ΅¬ν˜„μ„ λ°©μ§€. - ν—€λ“œλ¦¬μŠ€ ν™˜κ²½ λ“± `agent_status`κ°€ `unknown`인 ν™˜κ²½μ—μ„œλŠ” 기쑴의 `_pane_quiescent` μ •λ°€ νœ΄λ¦¬μŠ€ν‹±μœΌλ‘œ μš°μ•„ν•˜κ²Œ Fallback. 4. **수락 확인 및 이전 ν„΄ μž”μ—¬ 토큰 였판 λ°©μ§€**: - ν‚€ 전솑 ν›„ `herdr agent prompt --wait --until working` 수락 확인. - Fallback κ²½λ‘œμ—μ„œ 이전 ν„΄μ˜ μž”μ—¬ busy 토큰(`esc to interrupt` λ“±)이 ν‚€ 전솑 μ „ 캑처 화면에 이미 μ‘΄μž¬ν–ˆλ˜ 경우, 이λ₯Ό μƒˆ μž…λ ₯의 μž‘μ—… μ‹œμž‘ 근거둜 μ˜€νŒν•˜μ§€ μ•Šλ„λ‘ 사전 μŠ€λƒ…μƒ·κ³Ό 비ꡐ 검증. --- ## 5. 단계별 μ‹€ν–‰ κ³„νš (5-Phase Roadmap) - **Phase 1: λ ˆμ§€μŠ€νŠΈλ¦¬ CAS ν‘œμ€€ 연동 및 delegate-job Fail-Closed κ΅¬ν˜„** - `engine.py` `deadline_timeout` 호좜 경둜 확립 - `multi-agent-mux-delegate-job` λ‚΄ `direct`(:227) 및 `loop/discuss` μ’…λ£Œ 정리뢀 일원화 - **Phase 2: `send_keys_safe` 사전 유휴 ν•Έλ“œμ…°μ΄ν¬(Pre-Subscriber Idle Wait) κ΅¬ν˜„** - `SKS_IDLE_TIMEOUT_MS` κΈ°λ³Έ 120초 지원 - `herdr agent wait` 1μ°¨ 게이트 및 μž”μ—¬ 토큰 였판 λ°©μ§€ - **Phase 3: μ˜€μΌ€μŠ€νŠΈλ ˆμ΄ν„° λŸ¬λ„ˆ Fail-Fast 방어막 보강** - `lib_py/loop/runner.py` μ˜ˆμ™Έ 및 비정상 μ’…λ£Œ μ‹œ μ‘°κΈ° 수거 μ—°κ²° - **Phase 4: λ‹¨μœ„/계약 격리 νšŒκ·€ ν…ŒμŠ€νŠΈ 슈트 ꡬ좕** - `tests/test_issue6_fail_closed.py` - `tests/test_issue6_turn_handshake.py` - κΈ°μ‘΄ 750개 pytest 100% 무결성 검증 - **Phase 5: 4개 싀기동 μ—μ΄μ „νŠΈ(Claude, Grok, Codex, OpenCode) λŒ€μƒ E2E 검증** - νƒ€μž„μ•„μ›ƒ μ£Όμž… 및 TUI 연속 ν”„λ‘¬ν”„νŠΈ μ£Όμž… μ‹€μΈ‘ 톡과 확인 --- ## 6. κ²°λ‘  Issue #6은 μ½”λ“œλ² μ΄μŠ€μ˜ ꡬ쑰적 결함이라기보닀, **비동기 이벀트 λΆ„μ‚° ν™˜κ²½μ—μ„œ λ°œμƒν•˜λŠ” μƒνƒœ 뢈일치(Event vs TUI)와 비정상 μ’…λ£Œ μ‹œμ˜ μ˜ˆμ™Έ 처리 λˆ„λ½(Fail-Silent)**이 맞물렀 λ°œμƒν•œ μ „ν˜•μ μΈ λΆ„μ‚° μ‹œμŠ€ν…œ 레이슀 μ»¨λ””μ…˜μž…λ‹ˆλ‹€. λͺ¨λ“  리뷰어가 진단과 해결책에 μ™„μ „νžˆ ν•©μ˜ν•˜μ˜€κ³ , 2μ°¨ λΌμš΄λ“œλ₯Ό 톡해 μ—£μ§€μΌ€μ΄μŠ€κΉŒμ§€ λ°©μ–΄ 사양이 μ™„λ²½νžˆ μˆ˜λ¦½λ˜μ—ˆμœΌλ―€λ‘œ λ³Έ Rev.2 사양에 따라 μ¦‰μ‹œ κ΅¬ν˜„μ— μ°©μˆ˜ν•  수 μžˆμŠ΅λ‹ˆλ‹€.