diff --git a/OPTIMIZATION.md b/OPTIMIZATION.md index 1ff2849..8a5c1c9 100644 --- a/OPTIMIZATION.md +++ b/OPTIMIZATION.md @@ -1,40 +1,10 @@ -# πŸ› οΈ Multi-Agent Mux Loop (`/multi-agent-mux-loop`) μ΅œμ ν™” 및 κ°œμ„  λΆ„μ„μ„œ (`OPTIMIZATION.md`) +# πŸ› οΈ Multi-Agent Mux Loop (`/multi-agent-mux-loop`) λ―Έν•΄κ²° μ΅œμ ν™” λΆ„μ„μ„œ (`OPTIMIZATION.md`) -λ³Έ λ¬Έμ„œλŠ” `/multi-agent-mux-loop` μŠ€ν‚¬ 및 μ˜€μΌ€μŠ€νŠΈλ ˆμ΄μ…˜ 슀크립트(`run_loop.sh`)의 λΆˆν•„μš”ν•œ 문ꡬ, μŠ€ν‚¬ λͺ…세와 μ‹€μ œ μ½”λ“œ κ΅¬ν˜„ κ°„μ˜ 괴리, ν•„μˆ˜ 절차의 기계적 κ°•μ œμ„± λΆ€μ‘± ν•­λͺ©μ„ λΆ„μ„ν•˜κ³ , 이λ₯Ό μ½”λ”©μ μœΌλ‘œ κ°•μ œ 및 μ΅œμ ν™”ν•˜κΈ° μœ„ν•œ μ΅œμ’… ν•΄κ²° λ°©μ•ˆμ„ μ •μ˜ν•œ λΆ„μ„μ„œμž…λ‹ˆλ‹€. +λ³Έ λ¬Έμ„œλŠ” `/multi-agent-mux-loop` μŠ€ν‚¬ 및 μ˜€μΌ€μŠ€νŠΈλ ˆμ΄μ…˜ 슀크립트(`run_loop.sh`)의 ν–₯ν›„ κ°œμ„  및 κ°•μ œλ₯Ό μœ„ν•΄ 아직 λ°˜μ˜λ˜μ§€ μ•Šκ³  λ‚¨μ•„μžˆλŠ” λ―Έν•΄κ²° μ΅œμ ν™” ν•­λͺ©λ“€μ„ μ •λ¦¬ν•œ λ¬Έμ„œμž…λ‹ˆλ‹€. (ν•΄κ²° μ™„λ£Œλœ 이슈 1~5 및 8은 μ œκ±°λ˜μ—ˆμŠ΅λ‹ˆλ‹€.) --- -## 1. πŸ” λΆˆν•„μš”ν•œ 문ꡬ, λͺ¨μˆœ 및 쀑볡 ν•­λͺ© (Redundant & Inconsistent Issues) - -### ISSUE-1: CLI μ˜΅μ…˜ μƒν˜Έ 배타성 및 좩돌 경고의 취약함 -- **ν˜„μƒ**: `--all-reviewer` μ˜΅μ…˜κ³Ό `--reviewer "A,B"` μ˜΅μ…˜μ„ ν•¨κ»˜ 전달할 경우, `run_loop.sh`μ—μ„œ κ²½κ³  λ©”μ‹œμ§€λ§Œ 좜λ ₯ν•˜κ³  `--reviewer` λͺ©λ‘μ„ λ¬΄μ‹œν•¨. λ˜ν•œ `--plan` λͺ¨λ“œκ°€ λΉ„ν™œμ„±ν™”λœ μƒνƒœμ—μ„œ `--plan-talk N`을 전달할 경우 μ—­μ‹œ κ²½κ³  ν›„ ν„΄ 섀정을 λ¬΄μ‹œν•˜κ³  진행됨. -- **문제점**: μ—μ΄μ „νŠΈλ‚˜ μ‚¬μš©μžκ°€ 잘λͺ»λœ νŒŒλΌλ―Έν„° 쑰합을 μ£Όμž…ν–ˆμ„ λ•Œ μŠ€ν¬λ¦½νŠΈκ°€ 쑰기에 μ—λŸ¬λ‘œ μ‹€νŒ¨(Fail-Fast)ν•˜μ§€ μ•Šκ³  μ§„ν–‰ν•˜μ—¬ ν˜Όμ„ μ„ 야기함. -- **ν•΄κ²° λ°©μ•ˆ**: - 1. νŒŒλΌλ―Έν„° νŒŒμ‹± λ‹¨κ³„μ—μ„œ μƒν˜Έ 배타적인 μ˜΅μ…˜μ΄ ν¬ν•¨λœ 경우 경고둜 λ„˜κΈ°μ§€ μ•Šκ³  μ¦‰μ‹œ μ—λŸ¬(`exit 1`)λ₯Ό λ°˜ν™˜ν•˜λ„λ‘ 검증 둜직 κ°•ν™”. - 2. `SKILL.md` λ¬Έμ„œ λ‚΄μ˜ μ˜΅μ…˜ μ˜ˆμ‹œ(Workflow μ„Ήμ…˜) 쀑 두 μ˜΅μ…˜μ΄ λ™μ‹œμ— μ‚¬μš©λœ 였λ₯˜ ν‘œκΈ°λ₯Ό μƒν˜Έ 배타 κ·œκ²©μ— 맞게 μ •μ •. - -### ISSUE-2: `SKILL.md` λͺ…μ„Έ λ¬Έμ„œ λ‚΄ λ ˆκ±°μ‹œ μš©μ–΄ 및 문ꡬ -- **ν˜„μƒ**: μŠ€ν‚¬ λͺ…μ„Έμ„œ λ¬Έμ„œ λ‚΄ 일뢀 μ„€λͺ… 및 주석에 TMUX μ‹œμ ˆμ˜ ν‘œν˜„μ΄λ‚˜ λ ˆκ±°μ‹œ νŒŒλΌλ―Έν„° κ΄€λ ¨ μ„€λͺ…이 ν˜Όμž¬λ˜μ–΄ 있음. -- **ν•΄κ²° λ°©μ•ˆ**: Herdr μ—”μ§„ 기반으둜 μ™„μ „νžˆ λ§ˆμ΄κ·Έλ ˆμ΄μ…˜λœ ν˜„μž¬ ꡬ쑰에 맞좰 μŠ€ν‚¬ λͺ…μ„Έμ„œ(`SKILL.md`) λ‚΄ 문ꡬλ₯Ό μ •λˆν•˜κ³  λΆˆν•„μš”ν•œ λ ˆκ±°μ‹œ 언급을 μ œκ±°ν•¨. - ---- - -## 2. ⚠️ λͺ…μ„Έ(Specification)μ—λŠ” μ •μ˜λ˜μ–΄ μžˆμœΌλ‚˜ μ½”λ“œλ‘œ κ°•μ œλ˜μ§€ μ•Šμ€ μž‘μ—… 절차 (Specification vs Implementation Discrepancies) - -### ISSUE-3: `[VERDICT: PASS]` νŒμ • 포맷 ν…œν”Œλ¦Ώμ˜ 기계적 검증 및 κ°€μ΄λ“œ λΆ€μ‘± -- **ν˜„μƒ**: μŠ€ν‚¬ λͺ…μ„Έ 및 κ·œμ•½μ—μ„œλŠ” 리뷰어 λ³΄κ³ μ„œμ˜ "λ§ˆμ§€λ§‰ 쀄 단독 ν–‰"에 `[VERDICT: PASS]` λ˜λŠ” `[VERDICT: NOT PASS]` 토큰이 λͺ…μ‹œλ˜μ–΄μ•Ό 함을 μš”κ΅¬ν•¨. ν•˜μ§€λ§Œ 리뷰어 μ—μ΄μ „νŠΈ ν”„λ‘¬ν”„νŠΈμ— ν…μŠ€νŠΈ 문ꡬ둜만 μ§€μ‹œλ  뿐, μž‘μ„± μ „ν›„ 양식을 κ²€μ¦ν•˜κ±°λ‚˜ λ³΄μ •ν•˜λŠ” μž₯μΉ˜κ°€ 슀크립트 λ ˆλ²¨μ— μ—†μŒ. -- **문제점**: 리뷰어가 λ³΄κ³ μ„œ μž‘μ„± μ‹œ μ€„λ°”κΏˆ λ―Έμž…λ ₯, λ§ˆν¬λ‹€μš΄ μ½”λ“œλΈ”λ‘ 인용, 기타 ν˜•μ‹ 였λ₯˜λ₯Ό λ²”ν•  경우 λ‚΄μš©μ΄ 톡과이더라도 νŒŒμ„œκ°€ `fail-closed`둜 λ™μž‘ν•˜μ—¬ 무쑰건 `NOT PASS` 처리됨. -- **ν•΄κ²° λ°©μ•ˆ**: 리뷰어 μ§€μ‹œ ν”„λ‘¬ν”„νŠΈμ— μ •ν™•ν•œ ν…œν”Œλ¦Ώ 포맷 μ˜ˆμ‹œλ₯Ό κ°•ν™”ν•˜κ³ , ν•„μš”μ‹œ νŒŒμ‹± μ‹€νŒ¨ μ‹œ 1회 ꡬ쑰화 μž¬μž‘μ„± μ§€μ‹œ(Fix-up prompt) 기계적 트리거 마련. - -### ISSUE-4: Definition of Done (DoD) 및 μ›μžμ  컀밋(Atomic Commit)의 기계적 검증 λΆ€μž¬ -- **ν˜„μƒ**: κ·œμ•½ 및 μŠ€ν‚¬ λͺ…μ„Έμ—λŠ” Creator(μž‘μ—…μž)κ°€ κ΅¬ν˜„ μ™„λ£Œ ν›„ DoD 체크리슀트λ₯Ό μ‹€ν–‰ν•˜κ³  μ›μžμ  컀밋을 μˆ˜ν–‰ν•œ λ’€ λ¦¬λ·°μ–΄μ—κ²Œ μ „λ‹¬ν•˜λ„λ‘ λͺ…μ‹œλ˜μ–΄ 있음. -- **문제점**: `run_loop.sh`λŠ” Creator 작이 μ’…λ£Œλœ ν›„ μ‹€μ œ git status λ³€κ²½ μœ λ¬΄λ‚˜ 컀밋 생성 μ—¬λΆ€λ₯Ό ν™•μΈν•˜μ§€ μ•Šκ³  λ‹¨μˆœνžˆ μ§€μ‹œ ν”„λ‘¬ν”„νŠΈμ—λ§Œ μ˜μ‘΄ν•¨. 컀밋이 μˆ˜ν–‰λ˜μ§€ μ•Šκ±°λ‚˜ λ³€κ²½λΆ„(diff)이 0건인 κ²½μš°μ—λ„ 루프가 κ·ΈλŒ€λ‘œ μ§„ν–‰λ˜μ–΄ λ¬΄μ˜λ―Έν•œ 리뷰가 μˆ˜ν–‰λ¨. -- **ν•΄κ²° λ°©μ•ˆ**: Phase 2 (κ΅¬ν˜„ 단계) μ™„λ£Œ 직후 `dod_changed_paths` 헬퍼 및 `git diff` λˆ„μ  κ΄€μ œλ₯Ό μˆ˜ν–‰ν•˜μ—¬, **λ³€κ²½ κ²½λ‘œκ°€ 0건인 경우 `exit 1`둜 μ¦‰μ‹œ μ‹€νŒ¨ 처리**ν•˜κ³  μ›μžμ  컀밋 λ―Έμˆ˜ν–‰ μ‹œ 1회 κ²½κ³  및 μž¬μ§€μ‹œλ₯Ό λ‚΄λ¦¬λŠ” μ½”λ”© 게이트 ꡬ좕. - -### ISSUE-5: 기획-κ΅¬ν˜„ λŒ€ν™” 루프(`--plan-talk`)의 이의제기 수렴 μ—¬λΆ€ νŒλ‹¨ λΆ€μž¬ -- **ν˜„μƒ**: `--plan-talk N` μ„€μ • μ‹œ Planner와 Creator κ°„μ˜ 이의제기(Challenge) 및 κ³„νš κ°±μ‹ (Refine) λŒ€ν™”κ°€ N회 진행됨. -- **문제점**: Creator의 μ΄μ˜μ œκΈ°κ°€ μ‹€μ œλ‘œ Planner에 μ˜ν•΄ 수용 및 ν•©μ˜λ˜μ—ˆλŠ”μ§€ 논리적 μ’…κ²° μ—¬λΆ€λ₯Ό ν™•μΈν•˜μ§€ μ•Šκ³ , 무쑰건 μ§€μ •λœ ν„΄ 수(N)λ₯Ό κΈ°κ³„μ μœΌλ‘œ μ†Œλͺ¨ν•œ ν›„ λ‹€μŒ λ‹¨κ³„λ‘œ 진행함. -- **ν•΄κ²° λ°©μ•ˆ**: Planner κ°±μ‹  λ¦¬ν¬νŠΈμ— `[AGREEMENT: REACHED]` 같은 수렴 νŒμ • 토큰을 λ„μž…ν•˜κ±°λ‚˜, μ΄μ˜μ œκΈ°κ°€ μ—†λŠ” 경우 N회 ν„΄ 전이라도 μ‘°κΈ° μ’…λ£Œ(Early Break)ν•  수 μžˆλŠ” 둜직 μΆ”κ°€. +## 1. ⚠️ λ―Έκ΅¬ν˜„ 절차 및 ν”„λ‘œν† μ½œ (Remaining Discrepancies) ### ISSUE-6: νƒ€λ‹Ήν•˜μ§€ μ•Šμ€ 리뷰 ν”Όλ“œλ°± κ±°λΆ€/반둠 ν”„λ‘œν† μ½œμ˜ 슀크립트 미지원 - **ν˜„μƒ**: `MULTI_AGENT_RULES.md` 1μž₯ κ·œμ•½μ—λŠ” "개발 νŒ€μž₯이 λ¦¬λ·°μ–΄μ˜ νƒ€λ‹Ήν•˜μ§€ μ•Šμ€ ν”Όλ“œλ°±μ„ κ±°λΆ€ν•˜κ³  λͺ…ν™•ν•œ 이유λ₯Ό νšŒμ‹ ν•  수 μžˆλ‹€"κ³  λͺ…μ‹œλ˜μ–΄ 있음. @@ -43,7 +13,7 @@ --- -## 3. πŸ›‘οΈ μ˜€μΌ€μŠ€νŠΈλ ˆμ΄μ…˜ μœ„μž„ 및 μ•ˆμ „μ„±/λ™μ‹œμ„± κ°•μ œμ•ˆ (Orchestration Enforcement & Reliability) +## 2. πŸ›‘οΈ μ˜€μΌ€μŠ€νŠΈλ ˆμ΄μ…˜ μœ„μž„ 및 μ•ˆμ „μ„±/λ™μ‹œμ„± κ°•μ œμ•ˆ (Remaining Reliability & Guards) ### ISSUE-7: 동일 μ›Œν¬μŠ€νŽ˜μ΄μŠ€ λ‚΄ 쀑볡 루프 기동 λ°©μ§€ 락 (Race-Free Lock) 섀계 정ꡐ화 - **ν˜„μƒ**: 동일 μž‘μ—… νŠΈλ¦¬μ—μ„œ λ‹€μˆ˜μ˜ `run_loop.sh` μŠ€ν¬λ¦½νŠΈκ°€ 병렬 기동될 경우 SQLite DB κ°±μ‹  κ²½ν•© 및 YAML 데이터 μ˜€μ—Όμ΄ 일어날 수 있음. @@ -53,16 +23,9 @@ 2. `mkdir` 직후 생성 μ°½ 유예 λŒ€κΈ°(Sleep Grace Period)λ₯Ό λΆ€μ—¬ν•˜μ—¬ 락 λ„λ‚œ λ°©μ§€. 3. `ps` CLI λΆ€μž¬ μ‹œ Fails-Open(락 λ¬΄μ‹œ) λŒ€μ‹  **Fails-Safe(락 쑴쀑 + κ²½κ³ )** 둜 μ „ν™˜ν•˜μ—¬ DB/YAML μ˜€μ—Ό μ›μ²œ λ°©μ§€. -### ISSUE-8: 비동기 작 λͺ¨λ‹ˆν„°λ§ νƒ€μž„μ•„μ›ƒ 및 ν—¬μŠ€μ²΄ν¬ μ΅œμ ν™” -- **ν˜„μƒ**: `wait_for_job` κΈ°λ³Έ νƒ€μž„μ•„μ›ƒμ΄ 3900초(65λΆ„)둜 μ„€μ •λ˜μ–΄ μžˆμ–΄, μ—μ΄μ „νŠΈ μ„Έμ…˜ νŒ¨λ‹‰μ΄λ‚˜ 사망 μ‹œ μ˜€μΌ€μŠ€νŠΈλ ˆμ΄ν„°κ°€ κ³Όλ„ν•˜κ²Œ μ˜€λž«λ™μ•ˆ λŒ€κΈ°ν•¨. -- **ν•΄κ²° λ°©μ•ˆ**: λͺ¨λ‹ˆν„°λ§ μˆ˜μ§‘ 루프 λ‚΄μ—μ„œ herdr μ„Έμ…˜μ˜ 라이브 μƒνƒœ(`alive`)λ₯Ό λ§€ μ£ΌκΈ°λ§ˆλ‹€ ν•‘(Ping) ν™•μΈν•˜μ—¬ μ„Έμ…˜ 사망 μ‹œ μ¦‰μ‹œ `fail-fast` ν•˜λ„λ‘ κ°œμ„ . - ### ISSUE-9: 쑰건뢀 μ˜€μΌ€μŠ€νŠΈλ ˆμ΄μ…˜ μœ„μž„ κ°€λ“œ (Invocation-Aware Scoped Guard) - **ν˜„μƒ**: μ˜€μΌ€μŠ€νŠΈλ ˆμ΄ν„°(Antigravity)κ°€ ν‰μƒμ‹œμ—λŠ” Main Creatorλ‘œμ„œ μ½”λ“œ 및 λ¬Έμ„œλ₯Ό 직접 μ§‘ν•„ν•΄μ•Ό ν•˜μ§€λ§Œ, `/multi-agent-mux-loop` μŠ¬λž˜μ‹œ μ»€λ§¨λ“œ/μŠ€ν‚¬μ΄ 인보크된 μƒν™©μ—μ„œλ„ 이λ₯Ό μΈμ§€ν•˜μ§€ λͺ»ν•˜κ³  μ—μ΄μ „νŠΈλ“€μ—κ²Œ μœ„μž„ν•˜λŠ” λŒ€μ‹  직접 μˆ˜μ •μ„ μ‹œλ„ν•˜λŠ” μ§€μΉ¨ μ΄νƒˆ λ°œμƒ. - **문제점**: μ˜€μΌ€μŠ€νŠΈλ ˆμ΄ν„°μ˜ 파일 직접 μˆ˜μ • κΆŒν•œμ„ 무쑰건 뺏으면(1번 λ°©μ•ˆ λΆ€μž‘μš©) 일반 μž‘μ—…μ΄ λΆˆκ°€λŠ₯ν•΄μ§€κ³ , μžμ—°μ–΄ μ§€μΉ¨μ—λ§Œ μ˜μ‘΄ν•˜λ©΄ μŠ¬λž˜μ‹œ μ»€λ§¨λ“œ 호좜 μ‹œ μœ„μž„μ„ κ±΄λ„ˆλ›°λŠ” λͺ¨μˆœ λ°œμƒ. - **ν•΄κ²° λ°©μ•ˆ**: - **ν‰μƒμ‹œ (일반 μš”μ²­)**: μ˜€μΌ€μŠ€νŠΈλ ˆμ΄ν„°κ°€ **Main Creator**λ‘œμ„œ μ†ŒμŠ€ 및 λ§ˆν¬λ‹€μš΄ 파일 직접 μž‘μ„±/μˆ˜μ • 도ꡬ(`write_to_file`, `replace_file_content`)λ₯Ό 자유둭게 μ‚¬μš©ν•˜μ—¬ 단독 κ΅¬ν˜„ μˆ˜ν–‰. - **`/multi-agent-mux-loop` 호좜 μ‹œ (μŠ€ν‚¬ ν™œμ„±ν™” μƒνƒœ)**: μŠ€ν‚¬ 인터셉터 κ°€λ“œ(Guardrail)κ°€ μž‘λ™ν•˜μ—¬ 직접 μˆ˜μ • 도ꡬ ν˜ΈμΆœμ„ κ±°λΆ€(Interception)ν•˜κ³ , **"μŠ¬λž˜μ‹œ μ»€λ§¨λ“œκ°€ μΈλ³΄ν¬λ˜μ—ˆμœΌλ―€λ‘œ 직접 μˆ˜μ •μ„ μ€‘λ‹¨ν•˜κ³  `run_loop.sh`λ₯Ό μ‹€ν–‰ν•˜μ—¬ μœ„μž„ν•˜μ‹­μ‹œμ˜€"**λΌλŠ” μ—λŸ¬λ₯Ό λ°˜ν™˜ν•΄ `run_loop.sh` 자율 μœ„μž„ 싀행을 μ½”λ”©μ μœΌλ‘œ κ°•μ œ. - ---- -*λ³Έ λΆ„μ„μ„œλŠ” Planner(`claude`)와 Creator(`agy`)의 ν˜‘μ—… κ³„νš(Job `96b6e07b`) 및 리뷰어 만μž₯일치 PASS ν•©μ˜λ₯Ό λ°”νƒ•μœΌλ‘œ μ΅œμ’… μž‘μ„±λœ μˆ˜ν•© μ΅œμ ν™” λͺ…μ„Έμ„œμž…λ‹ˆλ‹€.*