# ๐Ÿ› ๏ธ Multi-Agent Mux ์ข…ํ•ฉ ๊ฐœ์„  ๋ฐ ๋ฏธํ•ด๊ฒฐ ๊ณผ์ œ ๋ฐฑ๋กœ๊ทธ (`IMPROVEMENTS.md`) - **์ตœ์ข… ๊ฐฑ์‹ ์ผ**: 2026-08-05 (B-1 ํ•ด๊ฒฐ ๋ฐ ์™„๋ฃŒ ํ•ญ๋ชฉ ์„น์…˜ ๋ถ„๋ฆฌ ๋ฐ˜์˜) - **ํ†ตํ•ฉ ๊ด€๋ฆฌ ๋Œ€์ƒ**: ๊ธฐ์กด `CODEBASE_REVIEW_REPORT.md` + `OPTIMIZATION.md` - **์ด ์ถ”์  ๋ฏธํ•ด๊ฒฐ ๊ณผ์ œ**: **18๊ฑด** (์•„ํ‚คํ…์ฒ˜ 2๊ฑด, ์—ฃ์ง€์ผ€์ด์Šค 8๊ฑด, ์˜ค์ผ€์ŠคํŠธ๋ ˆ์ด์…˜ 3๊ฑด, ๋ ˆ๊ฑฐ์‹œ ์ž”์žฌ 5๊ฑด) - **์™„๋ฃŒ๋œ ๊ณผ์ œ**: **3๊ฑด** (A-1, A-5, B-1) --- ## ๐Ÿ“Œ ๊ฐœ์š” ๋ณธ ๋ฌธ์„œ๋Š” Multi-Agent Mux (MAM) ํ”„๋ ˆ์ž„์›Œํฌ์˜ **์ฝ”๋“œ๋ฒ ์ด์Šค ์•„ํ‚คํ…์ฒ˜ ๊ฒฐํ•จ, ๋Ÿฐํƒ€์ž„ ์—ฃ์ง€์ผ€์ด์Šค, ๋ ˆ๊ฑฐ์‹œ ์ž”์žฌ** ๋ฐ **`/multi-agent-mux-loop` ์˜ค์ผ€์ŠคํŠธ๋ ˆ์ด์…˜ ์ตœ์ ํ™” ๊ณผ์ œ**๋ฅผ ๋‹จ์ผ ๋ฐฑ๋กœ๊ทธ๋กœ ํ†ตํ•ฉ ์ถ”์ ํ•˜๊ธฐ ์œ„ํ•œ ์ข…ํ•ฉ ๊ด€๋ฆฌ ๋ฌธ์„œ์ž…๋‹ˆ๋‹ค. --- ## 1. ๐Ÿ”ด ์•„ํ‚คํ…์ฒ˜ ๊ฒฐํ•จ (Architecture Flaws โ€” 2๊ฑด) ### **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 โ€” 8๊ฑด) ### **B-3: `command -v herdr` ํ”„๋ฆฌํ”Œ๋ผ์ดํŠธ ๋ฌด๋ ฅํ™”** - `create_session.sh`์˜ ํ”„๋ฆฌํ”Œ๋ผ์ดํŠธ ๊ฒ€์‚ฌ ์‹œ `command -v herdr`๊ฐ€ `lib.sh`์— ์ •์˜๋œ bash ํ•จ์ˆ˜(`herdr()`)๋ฅผ ํ˜ธ๋ช…ํ•˜์—ฌ ์‹ค์ œ ์‹œ์Šคํ…œ `herdr` ๋ฐ”์ด๋„ˆ๋ฆฌ๊ฐ€ ์—†์–ด๋„ ํ”„๋ฆฌํ”Œ๋ผ์ดํŠธ๋ฅผ ๋ฌด์กฐ๊ฑด ํ†ต๊ณผํ•ด๋ฒ„๋ฆฝ๋‹ˆ๋‹ค. ### **B-4: ์‹œํ”„ํŠธ `ls`์˜ `created=0` ํ•˜๋“œ์ฝ”๋”ฉ์œผ๋กœ ์žฌ๊ฐœ ๊ฐ€๋“œ ๋ฌด๋ ฅํ™”** - `herdr ls` ์„œ๋ธŒ์ปค๋งจ๋“œ ๋ž˜ํผ๊ฐ€ ์„ธ์…˜ ์ƒ์„ฑ์‹œ๊ฐ์„ ์ƒ์ˆ˜ `0`์œผ๋กœ ๋ฆฌํ„ดํ•˜์—ฌ `reconcile.sh` drift-B ๋“ฑ๋ก ์‹œ epoch 0์ด ๋˜์–ด ์˜ค๋ž˜๋œ ๋Œ€ํ™” jsonl ๋ฐฐ์ œ ๊ฐ€๋“œ๊ฐ€ ๋ถ•๊ดด๋ฉ๋‹ˆ๋‹ค. ### **B-5: `df --output` GNU ์ „์šฉ ํ”Œ๋ž˜๊ทธ ์‚ฌ์šฉ์œผ๋กœ macOS NFS ๊ฐ์ง€ ์‹คํŒจ** - macOS/BSD ํ™˜๊ฒฝ์—์„œ `df --output` ๊ตฌ๋ฌธ ์˜ค๋ฅ˜๋กœ NFS ๊ฐ์ง€๊ฐ€ ์‹คํŒจํ•˜๊ณ  "NFS ์•„๋‹˜"์œผ๋กœ ์˜คํŒ๋˜์–ด SQLite WAL ํฌ๋งท์„ ๊ฐ•ํ–‰ํ•ฉ๋‹ˆ๋‹ค. ### **B-6: ์Šคํ‚ฌ ํŠธ๋ฆฌ์— ์ž„์‹œ ํŒŒ์ผ ๋ณต์‚ฌ ๋ฐ ์œ ์ถœ** - `run_loop.sh::delegate_job_safe`๊ฐ€ ๋ž˜ํผ ์Šคํฌ๋ฆฝํŠธ๋ฅผ `.agents/skills/...` ํŠธ๋ฆฌ ๋‚ด๋ถ€์— `.tmp`๋กœ ๋ณต์‚ฌํ•˜์—ฌ ๋ฒ„์ „ ๊ด€๋ฆฌ ํŠธ๋ฆฌ๋ฅผ ์˜ค์—ผ์‹œํ‚ค๊ณ  rsync ๋ฐฐํฌ ์‹œ ์™ธ๋ถ€๋กœ ์œ ์ถœ๋ฉ๋‹ˆ๋‹ค. ### **B-7: `run_loop.sh` ์ƒ๋Œ€๊ฒฝ๋กœ cwd ์˜์กด ๋ฐ ๋ฏธ์ถ”์  ํŒŒ์ผ ๋ˆ„๋ฝ** - ์ €์žฅ์†Œ ๋ฃจํŠธ ๋ฐ–์—์„œ `run_loop.sh` ๊ตฌ๋™ ์‹œ `wait_for_job`์ด 3900์ดˆ ๋ฌด์Œ ํƒ€์ž„์•„์›ƒ์„ ๋ฐœ์ƒ์‹œํ‚ค๋ฉฐ, `git diff`๊ฐ€ Creator๊ฐ€ ์ƒˆ๋กœ ์ถ”๊ฐ€ํ•œ ๋ฏธ์ถ”์  ์‹ ๊ทœ ํŒŒ์ผ์„ ๋ฆฌ๋ทฐ์–ด์—๊ฒŒ ๋ˆ„๋ฝํ•ฉ๋‹ˆ๋‹ค. ### **B-8: `send_keys_safe` agy ๊ฒฝ๋กœ ๊ฒ€์ฆ ์ดํƒˆ** - agy ์„ธ์…˜ ์ฃผ์ž… ์‹œ ์ฃผ์ž… ์‹คํŒจ ์—ฌ๋ถ€๋ฅผ ๊ฒ€์ฆํ•˜์ง€ ์•Š๊ณ  ๋ฌด์กฐ๊ฑด `return 0`์„ ๋‚จ๊ฒจ ์‹คํŒจ ์‹œ์—๋„ ์„ฑ๊ณต์œผ๋กœ ๋ณด๊ณ ๋ฉ๋‹ˆ๋‹ค. ### **B-9: `LOGS_DIR` import ์‹œ์  cwd ๊ณ ์ •** - `mqtt_common.py` ๋ชจ๋“ˆ ๋กœ๋“œ ์‹œ์ ์˜ cwd๋กœ ๊ฐ์‚ฌ ๋กœ๊ทธ ๊ฒฝ๋กœ๊ฐ€ 1ํšŒ ๊ณ ์ •๋ฉ๋‹ˆ๋‹ค. ### **B-10: `agent_identities` ์“ฐ๊ธฐ ๊ฒฝ๋กœ ๋ถ€์žฌ ๋ฐ PyYAML ์˜์กด์„ฑ** - ์ €์žฅ์†Œ ์ „์ฒด์— `agent_identities` ๋ฅผ ์ƒ์„ฑยท๊ฐฑ์‹ ํ•˜๋Š” ์ฝ”๋“œ๊ฐ€ 0๊ฑด์ด๋ฉฐ, `lib.sh` ์˜ PyYAML ํ•˜๋“œ ์˜์กด์„ฑ์œผ๋กœ ์ธํ•ด `.db` ๋งŒ์œผ๋กœ ์ถฉ๋ถ„ํ•œ ๊ฒฝ์šฐ์—๋„ PyYAML ๋ถ€์žฌ ์‹œ ์ƒํƒœ ์กฐํšŒ๊ฐ€ ๋ฌด๋ ฅํ™”๋˜๋Š” ๋ฌธ์ œ๊ฐ€ ์กด์žฌํ•ฉ๋‹ˆ๋‹ค. --- ## 3. ๐ŸŸก ์˜ค์ผ€์ŠคํŠธ๋ ˆ์ด์…˜ ์ตœ์ ํ™” ๊ณผ์ œ (Orchestration Optimizations โ€” 3๊ฑด) ### **O-1 (๊ตฌ ISSUE-6): ํƒ€๋‹นํ•˜์ง€ ์•Š์€ ๋ฆฌ๋ทฐ ํ”ผ๋“œ๋ฐฑ ๊ฑฐ๋ถ€/๋ฐ˜๋ก  ํ”„๋กœํ† ์ฝœ ๋ฏธ์ง€์›** - **ํ˜„์ƒ**: `MULTI_AGENT_RULES.md` 1์žฅ ๊ทœ์•ฝ์—๋Š” "๊ฐœ๋ฐœ ํŒ€์žฅ์ด ๋ฆฌ๋ทฐ์–ด์˜ ํƒ€๋‹นํ•˜์ง€ ์•Š์€ ํ”ผ๋“œ๋ฐฑ์„ ๊ฑฐ๋ถ€ํ•˜๊ณ  ๋ช…ํ™•ํ•œ ์ด์œ ๋ฅผ ํšŒ์‹ ํ•  ์ˆ˜ ์žˆ๋‹ค"๊ณ  ๋ช…์‹œ๋˜์–ด ์žˆ์Œ. - **๋ฌธ์ œ์ **: `run_loop.sh`๋Š” ๋ฆฌ๋ทฐ์–ด์˜ `NOT PASS` ํ”ผ๋“œ๋ฐฑ ์ „์ฒด๋ฅผ Creator์—๊ฒŒ ์ผ๋ฐฉ์ ์œผ๋กœ ์ฃผ์ž…ํ•  ๋ฟ, Creator๊ฐ€ ํŠน์ • ํ”ผ๋“œ๋ฐฑ์„ ๊ฑฐ๋ถ€ํ•˜๊ฑฐ๋‚˜ ๋ฐ˜๋ก ์„ ์ œ๊ธฐํ•˜์—ฌ ์ƒํ˜ธ ์กฐ์œจํ•˜๋Š” ์ด์˜์ œ๊ธฐ ์ฑ„๋„์ด ์ฝ”๋”ฉ์ ์œผ๋กœ ๊ตฌํ˜„๋˜์–ด ์žˆ์ง€ ์•Š์Œ. - **ํ•ด๊ฒฐ ๋ฐฉ์•ˆ**: Creator ๊ต์ • ๋‹จ๊ณ„ ํ”„๋กฌํ”„ํŠธ์— ๋ฐ˜๋ก  ์ž‘์„ฑ ํ…œํ”Œ๋ฆฟ์„ ํ—ˆ์šฉํ•˜๊ณ , ๋ฐ˜๋ก  ๋ฐœ์ƒ ์‹œ Planner/Reviewer์—๊ฒŒ ์žฌ๊ฒ€ํ† ๋ฅผ ์š”์ฒญํ•˜๋Š” ์ด์˜์ œ๊ธฐ ๋ธŒ๋žœ์นญ ๋กœ์ง ์„ค๊ณ„. ### **O-2 (๊ตฌ ISSUE-7): ๋™์ผ ์›Œํฌ์ŠคํŽ˜์ด์Šค ๋‚ด ์ค‘๋ณต ๋ฃจํ”„ ๊ธฐ๋™ ๋ฐฉ์ง€ ๋ฝ (Race-Free Lock)** - **ํ˜„์ƒ**: ๋™์ผ ์ž‘์—… ํŠธ๋ฆฌ์—์„œ ๋‹ค์ˆ˜์˜ `run_loop.sh` ์Šคํฌ๋ฆฝํŠธ๊ฐ€ ๋ณ‘๋ ฌ ๊ธฐ๋™๋  ๊ฒฝ์šฐ SQLite DB ๊ฐฑ์‹  ๊ฒฝํ•ฉ ๋ฐ YAML ๋ฐ์ดํ„ฐ ์˜ค์—ผ์ด ์ผ์–ด๋‚  ์ˆ˜ ์žˆ์Œ. - **๋ฌธ์ œ์ **: ๋‹จ์ˆœ PID ํŒŒ์ผ ์กด์žฌ ์—ฌ๋ถ€๋งŒ ์ฒดํฌํ•  ๊ฒฝ์šฐ, PID Rollover(ํ”„๋กœ์„ธ์Šค ID ์žฌ์‚ฌ์šฉ) ๋˜๋Š” `mkdir`๊ณผ PID ๊ธฐ๋ก ์‚ฌ์ด์˜ ์ƒ์„ฑ ์ฐฝ(Grace Window)์—์„œ ์‚ด์•„์žˆ๋Š” ๋ฝ์„ ํƒ€ ํ”„๋กœ์„ธ์Šค๊ฐ€ ํ›”์ณ๊ฐ€๋Š” "๋ฝ ๋„๋‚œ(Live-lock theft)" ํ˜„์ƒ ๋ฐœ์ƒ. - **ํ•ด๊ฒฐ ๋ฐฉ์•ˆ**: 1. ๋ฝ ์†Œ์œ ์ž ๋ ˆ์ฝ”๋“œ๋ฅผ ๋‹จ์ˆœ `PID`์—์„œ **`PID + ์‹œ์ž‘์‹œ๊ฐ(lstart) + ์›Œํฌ์ŠคํŽ˜์ด์Šค`** 3์ค‘ ๊ตฌ์กฐ๋กœ ๊ฒฐํ•ฉํ•˜์—ฌ PID ์žฌ์‚ฌ์šฉ์„ ๊ฒฐ์ •์ ์œผ๋กœ ์ฐจ๋‹จ. 2. `mkdir` ์งํ›„ ์ƒ์„ฑ ์ฐฝ ์œ ์˜ˆ ๋Œ€๊ธฐ(Sleep Grace Period)๋ฅผ ๋ถ€์—ฌํ•˜์—ฌ ๋ฝ ๋„๋‚œ ๋ฐฉ์ง€. 3. `ps` CLI ๋ถ€์žฌ ์‹œ Fails-Open(๋ฝ ๋ฌด์‹œ) ๋Œ€์‹  **Fails-Safe(๋ฝ ์กด์ค‘ + ๊ฒฝ๊ณ )** ๋กœ ์ „ํ™˜ํ•˜์—ฌ DB/YAML ์˜ค์—ผ ์›์ฒœ ๋ฐฉ์ง€. ### **O-3 (๊ตฌ ISSUE-9): ์กฐ๊ฑด๋ถ€ ์˜ค์ผ€์ŠคํŠธ๋ ˆ์ด์…˜ ์œ„์ž„ ๊ฐ€๋“œ (Invocation-Aware Scoped Guard)** - **ํ˜„์ƒ**: ์˜ค์ผ€์ŠคํŠธ๋ ˆ์ดํ„ฐ(Antigravity)๊ฐ€ ํ‰์ƒ์‹œ์—๋Š” Main Creator๋กœ์„œ ์ฝ”๋“œ ๋ฐ ๋ฌธ์„œ๋ฅผ ์ง์ ‘ ์ง‘ํ•„ํ•ด์•ผ ํ•˜์ง€๋งŒ, `/multi-agent-mux-loop` ์Šฌ๋ž˜์‹œ ์ปค๋งจ๋“œ/์Šคํ‚ฌ์ด ์ธ๋ณดํฌ๋œ ์ƒํ™ฉ์—์„œ๋„ ์ด๋ฅผ ์ธ์ง€ํ•˜์ง€ ๋ชปํ•˜๊ณ  ์—์ด์ „ํŠธ๋“ค์—๊ฒŒ ์œ„์ž„ํ•˜๋Š” ๋Œ€์‹  ์ง์ ‘ ์ˆ˜์ •์„ ์‹œ๋„ํ•˜๋Š” ์ง€์นจ ์ดํƒˆ ๋ฐœ์ƒ. - **ํ•ด๊ฒฐ ๋ฐฉ์•ˆ**: - **ํ‰์ƒ์‹œ (์ผ๋ฐ˜ ์š”์ฒญ)**: ์˜ค์ผ€์ŠคํŠธ๋ ˆ์ดํ„ฐ๊ฐ€ **Main Creator**๋กœ์„œ ์†Œ์Šค ๋ฐ ๋งˆํฌ๋‹ค์šด ํŒŒ์ผ ์ง์ ‘ ์ž‘์„ฑ/์ˆ˜์ • ๋„๊ตฌ(`write_to_file`, `replace_file_content`)๋ฅผ ์ž์œ ๋กญ๊ฒŒ ์‚ฌ์šฉํ•˜์—ฌ ๋‹จ๋… ๊ตฌํ˜„ ์ˆ˜ํ–‰. - **`/multi-agent-mux-loop` ํ˜ธ์ถœ ์‹œ (์Šคํ‚ฌ ํ™œ์„ฑํ™” ์ƒํƒœ)**: ์Šคํ‚ฌ ์ธํ„ฐ์…‰ํ„ฐ ๊ฐ€๋“œ(Guardrail)๊ฐ€ ์ž‘๋™ํ•˜์—ฌ ์ง์ ‘ ์ˆ˜์ • ๋„๊ตฌ ํ˜ธ์ถœ์„ ๊ฑฐ๋ถ€(Interception)ํ•˜๊ณ , **"์Šฌ๋ž˜์‹œ ์ปค๋งจ๋“œ๊ฐ€ ์ธ๋ณดํฌ๋˜์—ˆ์œผ๋ฏ€๋กœ ์ง์ ‘ ์ˆ˜์ •์„ ์ค‘๋‹จํ•˜๊ณ  `run_loop.sh`๋ฅผ ์‹คํ–‰ํ•˜์—ฌ ์œ„์ž„ํ•˜์‹ญ์‹œ์˜ค"**๋ผ๋Š” ์—๋Ÿฌ๋ฅผ ๋ฐ˜ํ™˜ํ•ด `run_loop.sh` ์ž์œจ ์œ„์ž„ ์‹คํ–‰์„ ์ฝ”๋”ฉ์ ์œผ๋กœ ๊ฐ•์ œ. --- ## 4. โšช ๋ ˆ๊ฑฐ์‹œ ์ž”์žฌ ๋ฐ ์ฃฝ์€ ์ฝ”๋“œ (Legacy Remnants โ€” 5๊ฑด) ### **C-1: Kanban ๋ฌธ์„œ 29ํšŒ ์–ธ๊ธ‰ vs ์‹ค์ œ ๊ตฌํ˜„ 0๊ฑด** - SKILL.md ํŒŒ์ผ๋“ค์— Kanban ์ง€์› ๋ฐ ์ƒํƒœ ํŒŒ์ผ ์„œ์ˆ ์ด 29ํšŒ ์–ธ๊ธ‰๋˜์–ด ์žˆ์œผ๋‚˜ ์Šคํฌ๋ฆฝํŠธ ๊ตฌํ˜„์€ 0๊ฑด์ž…๋‹ˆ๋‹ค. ### **C-2: ๋ฏธ์‚ฌ์šฉ `.cache/` ์ƒํƒœ ๋””๋ ‰ํ„ฐ๋ฆฌ ์ƒ์„ฑ** - `reconcile.sh`๊ฐ€ `.cache/multi-agent-mux-monitor` ๋””๋ ‰ํ„ฐ๋ฆฌ๋ฅผ `mkdir`๋งŒ ํ•˜๊ณ  ์•„๋ฌด๊ฒƒ๋„ ์ฝ๊ฑฐ๋‚˜ ์“ฐ์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ### **C-3: ๊ฒฉ๋ฆฌ ์Šคํ… 4์ข… ๋ฐ `stop_session.sh` ๋ฏธ์‚ฌ์šฉ isolation ์ฝ”๋“œ ์ž”์กด** - `provision_isolation` ๋“ฑ 4๊ฐœ ์Šคํ… ํ•จ์ˆ˜์™€ `stop_session.sh` ๋‚ด `.mam/agent_homes` ๊ฐ€๋“œ ์ฝ”๋“œ๊ฐ€ ํ˜ธ์ถœ์ž 0๊ฑด์ธ ์ฑ„ ์ž”์กดํ•ฉ๋‹ˆ๋‹ค. ### **C-4: ์ฐธ์กฐ 0ํšŒ ๋ฏธ์‚ฌ์šฉ ์‹ฌ๋ณผ 7์ข…** - `_HERDR_SHIM_DIR_PATTERN`, `_REAL_HERDR_PATH`, `TERMINAL_STATUSES`, `ISOLATE`, `local_herdr` ๋“ฑ 7๊ฐœ ๋ฏธ์‚ฌ์šฉ ์‹ฌ๋ณผ์ด ์ž”์กดํ•ฉ๋‹ˆ๋‹ค. ### **C-6: `stop_session.sh` ๋„์›€๋ง ๋ฌธ์„œ ๊ตฌ๋ฒ„์ „ ํ‘œ๊ธฐ** - ์Šคํฌ๋ฆฝํŠธ ๋„์›€๋ง์—๋Š” `--mode soft|hard` ๋“ฑ์ด ์„œ์ˆ ๋˜์–ด ์žˆ์œผ๋‚˜ ์‹ค์ œ ์˜ต์…˜ ํŒŒ์„œ๋Š” `exit 2`๋กœ ๊ฑฐ๋ถ€ํ•ฉ๋‹ˆ๋‹ค. --- ## 5. ๐ŸŽ‰ ์™„๋ฃŒ๋œ ๊ณผ์ œ (Completed Tasks โ€” 3๊ฑด) ### **A-1: ์›Œํฌ์ŠคํŽ˜์ด์Šค ์„ธ์…˜ ๊ฒฉ๋ฆฌ & drift-B ์˜ค๋“ฑ๋ก ๋ฐฉ์ง€** โ€” โœ… ์™„๋ฃŒ - `derive_workspace_slug` ํ—ฌํผ ํ•จ์ˆ˜๋ฅผ ์ถ”๊ฐ€ํ•˜์—ฌ ์›Œํฌ์ŠคํŽ˜์ด์Šค ๊ฒฝ๋กœ ๊ธฐ๋ฐ˜ ๋‹จ์ผ ์†Œ์ผ“ ์Šฌ๋Ÿฌ๊ทธ(`mam--`) ๋„์ถœ ์ฒด๊ณ„๋ฅผ ๊ตฌ์ถ•ํ–ˆ์Šต๋‹ˆ๋‹ค. - `reconcile.sh` drift-B ์ž๋™ ๋“ฑ๋ก ์‹œ foreign cwd ์ฐจ๋‹จ ๊ฒŒ์ดํŠธ๋ฅผ ๊ตฌ์ถ•ํ•˜์—ฌ ์„ธ์…˜ ์˜ค๋“ฑ๋ก์„ ๋ฐฉ์ง€ํ–ˆ์Šต๋‹ˆ๋‹ค. ### **A-5: `HERDR_SESSION_NAME` ๋„ค์ดํ‹ฐ๋ธŒ ์ „ํ™˜** โ€” โœ… ์™„๋ฃŒ - ๊ธฐ์กด `HERDR_SERVER_NAME` ํ™˜๊ฒฝ๋ณ€์ˆ˜๋ฅผ herdr ์‹œํ”„ํŠธ๊ฐ€ ์ง์ ‘ ์ฝ๋Š” ๋„ค์ดํ‹ฐ๋ธŒ **`HERDR_SESSION_NAME`** ๋ฐ YAML ๋ ˆ์ง€์ŠคํŠธ๋ฆฌ ํ‚ค **`herdr_session`**์œผ๋กœ ์ „์ˆ˜ ์ „ํ™˜ ๋‹จ์ผํ™”ํ–ˆ์Šต๋‹ˆ๋‹ค. ### **B-1: `find_workspace_uuid` tier-3 ์‹ ์› ์บ์‹œ ํ•ด์„ ์˜ค๋ฅ˜ ํ•ด๊ฒฐ** โ€” โœ… ์™„๋ฃŒ - `lib.sh` tier-3 ์‹ ์› ์บ์‹œ ์กฐํšŒ ์‹œ ๋ฏธ์ •์˜ ๋ณ€์ˆ˜(`db_path`, `yaml_path`) ๋ฐ `yaml` import ๋ˆ„๋ฝ์œผ๋กœ ๋ฌด์กฐ๊ฑด `NameError` ์˜ˆ์™ธ๊ฐ€ ๋ฐœ์ƒํ•˜๋˜ ๊ฒฐํ•จ์„ ํ•ด๊ฒฐํ–ˆ์Šต๋‹ˆ๋‹ค. - DB๋ฅผ 1์ฐจ ๊ถŒ์œ„ ๊ฒฝ๋กœ๋กœ, `$YAML_PATH`๋ฅผ ํด๋ฐฑ์œผ๋กœ ์ •์ œํ•˜๊ณ  ์ „์šฉ ํšŒ๊ท€ ํ…Œ์ŠคํŠธ `tests/test_b1_tier3_identity.py` (8/8 PASS)๋ฅผ ์ž‘์„ฑํ•˜์—ฌ ์ž…์ฆํ–ˆ์Šต๋‹ˆ๋‹ค. --- ## 6. ๊ฒฐ๋ก  ๋ฐ ํ–ฅํ›„ ๋ณด์™„ ๋กœ๋“œ๋งต `IMPROVEMENTS.md` ๋ฌธ์„œ์— ๋”ฐ๋ผ ํ–ฅํ›„ ์ฝ”๋“œ๋ฒ ์ด์Šค ๊ฐœํŽธ ์‹œ ๋‚จ์€ ๋ฐฑ๋กœ๊ทธ ํ•ญ๋ชฉ(์•„ํ‚คํ…์ฒ˜ 2๊ฑด, ์—ฃ์ง€์ผ€์ด์Šค 8๊ฑด, ์˜ค์ผ€์ŠคํŠธ๋ ˆ์ด์…˜ 3๊ฑด, ๋ ˆ๊ฑฐ์‹œ ์ž”์žฌ 5๊ฑด)์„ ์ผ์›ํ™”๋œ ๋ณด์™„ ๋กœ๋“œ๋งต์œผ๋กœ ๊ด€๋ฆฌํ•ฉ๋‹ˆ๋‹ค.