# ๐Ÿ“ ๊ตฌํ˜„ ๊ณ„ํš์„œ Rev.2 โ€” `deploy/*` ๋ฐฐํฌ ์Šคํฌ๋ฆฝํŠธ ๊ฐœ์„  (Job `0d43714b`) - **์ž‘์„ฑ์ž**: Planner (`canary-projects-multi-agent-mux-creator-claude`) - **๊ฐœ์ • ์‚ฌ์œ **: Creator `agy`์˜ ์ด์˜์ œ๊ธฐ(Job `029f61b1`) ๋ฐ˜์˜ - **์„ ํ–‰ ๋ฌธ์„œ**: Job `101c90a2` ๊ณ„ํš์„œ Rev.1 (๋ณธ ๋ฌธ์„œ๊ฐ€ ์ด๋ฅผ ๋Œ€์ฒดํ•จ โ€” ๊ตฌํ˜„ ์‹œ **๋ณธ ๋ฌธ์„œ๋งŒ** ์ฐธ์กฐ) - **๊ธฐ์ค€ ์ปค๋ฐ‹**: `2ff8b2c` (branch `main`) --- ## 0. ์ด์˜์ œ๊ธฐ ํŒ์ • (Challenge Adjudication) `agy`์˜ ์ง€์ ์€ **์‹ค์žฌํ•˜๋Š” ๋ฐ์ดํ„ฐ ์†Œ์‹ค ์œ„ํ—˜์„ ์ •ํ™•ํžˆ ์งš์—ˆ๊ณ , ์ฑ„ํƒํ•ฉ๋‹ˆ๋‹ค.** ๋‹ค๋งŒ ์›์ธ ๊ท€์†๊ณผ ์ฒ˜๋ฐฉ ๋‘ ๊ฐ€์ง€์—๋Š” ์‹ค์ธก์œผ๋กœ ๋ฐ˜๋ฐ•๋˜๋Š” ๋ถ€๋ถ„์ด ์žˆ์–ด ์ˆ˜์ • ์ฑ„ํƒํ•ฉ๋‹ˆ๋‹ค. | # | `agy`์˜ ์ฃผ์žฅ / ์ฒ˜๋ฐฉ | ํŒ์ • | ๊ทผ๊ฑฐ | | :-- | :--- | :---: | :--- | | โ‘  | ๋กœ์ปฌ ์ปค์Šคํ…€ ์Šคํ‚ฌ ์ฝ”๋“œ๊ฐ€ ๋ฌด๋‹จ ๋ฎ์–ด์“ฐ๊ธฐ๋กœ ์†Œ์‹ค๋  ์ˆ˜ ์žˆ๋‹ค | **์ฑ„ํƒ** | E-6/E-7์—์„œ ์‹ค์ œ ์†Œ์‹ค ์žฌํ˜„. ์ž”์กด ์‚ฌ๋ณธ 0๊ฑด | | โ‘ก | "๊ธฐ์กด `install.sh`๋Š” ํŒŒ์ผ์ด ์žˆ์œผ๋ฉด ๊ฑด๋„ˆ๋›ฐ์–ด ์•ˆ์ „ํ•˜๊ฒŒ **๋ณดํ˜ธ๋˜์—ˆ๋‹ค**" | **๋ฐ˜๋ฐ•** | ํ”„๋ ˆ์ž„์›Œํฌ ์†Œ์œ  ํŒŒ์ผ์€ ์ด๋ฏธ `cp -f`๋กœ **๋ฌด์กฐ๊ฑด ๋ฎ์–ด์“ฐ๊ธฐ**(`install.sh:166`). ๋ณดํ˜ธ๋Š” ์ •์ฑ…์ด ์•„๋‹ˆ๋ผ fetch ๋ธ”๋ก์ด ํ†ต์งธ๋กœ ์Šคํ‚ต๋œ **๋ถ€์ž‘์šฉ**์ด์—ˆ์Œ | | โ‘ข | "R-1(`MAM_REFRESH=1`)์ด ์ด ์œ„ํ—˜์„ **๋ฐœ์ƒ์‹œํ‚จ๋‹ค**" | **๋ฐ˜๋ฐ•(๋ถ€๋ถ„ ์ฑ„ํƒ)** | ์œ„ํ—˜์€ **์˜ค๋Š˜ ์ด๋ฏธ ์กด์žฌ**ํ•จ โ€” `install.sh -f`(๋ฌธ์„œํ™”๋œ ํ”Œ๋ž˜๊ทธ)์™€ `update.sh` ๋‘ ๊ฒฝ๋กœ์—์„œ ์žฌํ˜„๋จ. R-1์€ ์›์ธ์ด ์•„๋‹ˆ๋ผ **๋…ธ์ถœ ๋นˆ๋„๋ฅผ ๋„“ํžˆ๋Š” ์š”์ธ**. ๋”ฐ๋ผ์„œ ๊ฐ€๋“œ๋Š” R-1์˜ ์ „์ œ์กฐ๊ฑด์œผ๋กœ **ํ•„์ˆ˜**์ด๋˜, R-1๋งŒ ๊ณ ์ณ์„œ๋Š” ๋ถ€์กฑ | | โ‘ฃ | ์ฒ˜๋ฐฉ A: ๋ฎ์–ด์“ฐ๊ธฐ ์ „ `.agents/skills/.../*.user-bak` ์ž๋™ ๋ฐฑ์—… | **๋ฐ˜๋ ค โ†’ ๋Œ€์ฒด** | `.agents/`๋Š” ยง5.1์—์„œ **์˜๋„์ ์œผ๋กœ gitignoreํ•˜์ง€ ์•Š๊ธฐ๋กœ** ๊ฒฐ์ •ํ•œ ๊ฒฝ๋กœ. ๋ฐฑ์—…์ด ์‚ฌ์šฉ์ž ์ €์žฅ์†Œ์— ์ถ”์  ํŒŒ์ผ๋กœ ์Œ“์ด๊ณ , manifest์— ์—†์–ด `remove.sh`๊ฐ€ ์ ˆ๋Œ€ ์ฒญ์†Œํ•˜์ง€ ๋ชปํ•จ โ†’ `agy` ๋ณธ์ธ์ด ์ง์ „ ๋ผ์šด๋“œ(`c6c43df9`)์—์„œ ์ง€์ ํ•œ **๋ฐฑ์—… ๋ฌดํ•œ ์ฆ์‹**์„ ์žฌํ˜„. `.mam/skill-backups//`๋กœ ์ด์ „ | | โ‘ค | ์ฒ˜๋ฐฉ B: ๋กœ์ปฌ ๋ณ€๊ฒฝ ๊ฐ์ง€๋ฅผ **diff/hash/mtime**๋กœ | **๋ฐ˜๋ ค โ†’ ๋Œ€์ฒด** | **์น˜๋ช…์  ์˜ค์„ค๊ณ„.** ์ˆ˜์‹  ํŒŒ์ผ๊ณผ ๋น„๊ตํ•˜๋ฉด "๊ตฌ๋ฒ„์ „ ์„ค์น˜๋ณธ"๊ณผ "์‚ฌ์šฉ์ž ์ˆ˜์ •"์„ ๊ตฌ๋ถ„ํ•  ์ˆ˜ ์—†์–ด **๋ชจ๋“  ์ •์ƒ ์—…๋ฐ์ดํŠธ๊ฐ€ ๋กœ์ปฌ ์ˆ˜์ •์œผ๋กœ ์˜คํŒ**๋จ โ†’ ๊ฐฑ์‹ ์ด ์˜๊ตฌ no-op์ด ๋˜์–ด R-1์ด ๊ณ ์น˜๋ ค๋˜ E-4 ๋ฒ„๊ทธ๋กœ ํšŒ๊ท€. mtime์€ `cp -f`๊ฐ€ ๋งค ์„ค์น˜๋งˆ๋‹ค ๊ฐฑ์‹ ํ•˜๋ฏ€๋กœ ์ถœ์ฒ˜ ์ •๋ณด๊ฐ€ ์•„์˜ˆ ์—†์Œ. **์„ค์น˜๊ธฐ๊ฐ€ ๋งˆ์ง€๋ง‰์— ๊ธฐ๋กํ•œ ํ•ด์‹œ**์™€ ๋น„๊ตํ•ด์•ผ ํ•จ(ยง2.2) | | โ‘ฅ | ์ฒ˜๋ฐฉ C: ๊ธฐ๋ณธ ๋ณด์กด + `--overwrite-custom` ํ”Œ๋ž˜๊ทธ + ์•ˆ๋‚ด ๋ฌธ๊ตฌ | **์ฑ„ํƒ** | ์•ˆ์ „ํ•œ ๊ธฐ๋ณธ๊ฐ’. ๋‹ค๋งŒ "์กฐ์šฉํžˆ ๊ฑด๋„ˆ๋›ฐ๊ธฐ"๋Š” ๋ฒ„์ „ ๋ถˆ์ผ์น˜๋ฅผ ์œ ๋ฐœํ•˜๋ฏ€๋กœ **ํ•ญ๋ชฉ๋ณ„ ๊ฒฝ๊ณ  + ์ƒํƒœ ๊ธฐ๋ก**์„ ์˜๋ฌดํ™”(ยง2.4) | | โ‘ฆ | (๋ฏธ์ง€์ ) ์ฒ˜๋ฐฉ์ด `install.sh` ๋ณต์‚ฌ ๋ฃจํ”„์—๋งŒ ์ ์šฉ๋จ | **๋ณด์™„ ์ถ”๊ฐ€** | `update.sh`๋Š” `remove.sh --force`๋กœ **์Šคํ‚ฌ์„ ๋จผ์ € ์ „๋ถ€ ์‚ญ์ œํ•œ ๋’ค** ์žฌ์„ค์น˜ํ•œ๋‹ค. install.sh์— ๊ฐ€๋“œ๋ฅผ ๋„ฃ์–ด๋„ ์ด ๊ฒฝ๋กœ์—์„œ๋Š” ์ด๋ฏธ ํŒŒ์ผ์ด ์—†์–ด ์•„๋ฌด ํšจ๊ณผ๊ฐ€ ์—†์Œ(E-7). 3๊ฐœ ๊ฒฝ๋กœ ์ „๋ถ€๋ฅผ ๋ฎ์–ด์•ผ ํ•จ(ยง3) | **์ถ”๊ฐ€ ์ž๊ธฐ์ˆ˜์ •(Planner ๊ท€์ฑ…)**: Rev.1 ยง5.2๊ฐ€ `gitignore_created`๋ฅผ `.mam/install_state`์— ๊ธฐ๋กํ•˜๋„๋ก ํ–ˆ์œผ๋‚˜, `update.sh`๋Š” `.mam`์—์„œ **๋ช…์‹œ์  allowlist 4์ข…๋งŒ** ์Šคํ…Œ์ด์ง•ํ•˜๋ฏ€๋กœ ์—…๋ฐ์ดํŠธ ์‹œ ์ด ์ƒํƒœ๊ฐ€ ์†Œ์‹ค๋ฉ๋‹ˆ๋‹ค(ยง4). `agy`๊ฐ€ ์ง€์ ํ•˜์ง€ ์•Š์•˜์ง€๋งŒ ๊ฐ™์€ ๊ณ„์—ด์˜ ๊ฒฐํ•จ์ด๋ฏ€๋กœ ํ•จ๊ป˜ ์ˆ˜์ •ํ•ฉ๋‹ˆ๋‹ค. --- ## 1. ์‹ ๊ทœ ์‹ค์ธก ๊ทผ๊ฑฐ (Evidence, Rev.2) ์ž„์‹œ ์›Œํฌ์ŠคํŽ˜์ด์Šค์— ์ •์ƒ ์„ค์น˜ ํ›„ ํ”„๋ ˆ์ž„์›Œํฌ ์†Œ์œ  ํŒŒ์ผ 2๊ฐœ(`scripts/mqtt_common.py`, delegate-job ๋ž˜ํผ)์— ๋กœ์ปฌ ์ปค์Šคํ„ฐ๋งˆ์ด์ฆˆ๋ฅผ ๊ฐ€ํ•˜๊ณ  ๊ฐ ๊ฒฝ๋กœ๋ฅผ ์‹คํ–‰ํ–ˆ์Šต๋‹ˆ๋‹ค. ### E-6. ์˜ค๋Š˜์˜ `install.sh -f`๊ฐ€ ์ด๋ฏธ ๋ฌด๊ฒฝ๊ณ ๋กœ ํŒŒ๊ดดํ•จ ``` $ bash install.sh -f "$WORK" exit=0 mqtt_common.py CORP_CA_BUNDLE : 1 โ†’ 0 โ† ์†Œ์‹ค wrapper LOCAL marker : 1 โ†’ 0 โ† ์†Œ์‹ค ์›Œํฌ์ŠคํŽ˜์ด์Šค ๋‚ด ์ž”์กด ์‚ฌ๋ณธ : (NONE) ๋กœ์ปฌ ๋ณ€๊ฒฝ ๊ด€๋ จ ๊ฒฝ๊ณ  : ์—†์Œ ์‹ค์ œ ์ถœ๋ ฅ๋œ ๋ฌธ๊ตฌ: "โœ… Skills staged into workspace (user documents and custom configs preserved)." ``` ๋งˆ์ง€๋ง‰ ์ค„์ด ํ•ต์‹ฌ์ž…๋‹ˆ๋‹ค. ์„ค์น˜๊ธฐ๋Š” **์ปค์Šคํ…€ ์„ค์ •์„ ๋ณด์กดํ–ˆ๋‹ค๊ณ  ๋ช…์‹œ์ ์œผ๋กœ ์•ˆ์‹ฌ์‹œํ‚ค๋Š” ๋ฌธ๊ตฌ๋ฅผ ์ถœ๋ ฅํ•˜๋ฉด์„œ ๊ฐ™์€ ์‹คํ–‰์—์„œ ์ปค์Šคํ…€ ์ฝ”๋“œ๋ฅผ ํŒŒ๊ดด**ํ•ฉ๋‹ˆ๋‹ค. ๋ฌธ๊ตฌ์˜ ์›๋ž˜ ์˜๋„๋Š” `.mam.env`ยท์‚ฌ์šฉ์ž ๋ฌธ์„œ๋ฅผ ๊ฐ€๋ฆฌํ‚ค์ง€๋งŒ, ์Šคํ‚ฌ ์ˆ˜์ •๋ณธ์„ ์žƒ์€ ์‚ฌ์šฉ์ž์—๊ฒŒ๋Š” ๊ฒฝ๊ณ ๊ฐ€ ์•„๋‹ˆ๋ผ **์—ญ๋ฐฉํ–ฅ์˜ ์˜ค์‹ ํ˜ธ**์ž…๋‹ˆ๋‹ค. ์ฆ‰ `agy`๊ฐ€ ์ง€์ ํ•œ ์œ„ํ—˜์€ "R-1์ด ๋„์ž…ํ•  ๋ฏธ๋ž˜์˜ ์œ„ํ—˜"์ด ์•„๋‹ˆ๋ผ **์ด๋ฏธ ์ถœ์‹œ๋˜์–ด ๋ฌธ์„œํ™”๋œ ํ”Œ๋ž˜๊ทธ์— ์กด์žฌํ•˜๋Š” ํ˜„์žฌ์˜ ๋ฒ„๊ทธ**์ž…๋‹ˆ๋‹ค. ### E-7. ์—…๋ฐ์ดํŠธ ๊ฒฝ๋กœ๋Š” install.sh ๊ฐ€๋“œ๋กœ ๋ง‰์„ ์ˆ˜ ์—†์Œ `update.sh:151`์ด ์‹คํ–‰ํ•˜๋Š” ๋ช…๋ น์„ ๊ทธ๋Œ€๋กœ ์žฌํ˜„ํ–ˆ์Šต๋‹ˆ๋‹ค. ``` $ bash remove.sh --force exit=0 .agents/skills/.../mqtt_common.py ์กด์žฌ : NO โ€” deleted ์ž”์กด ์‚ฌ๋ณธ : (NONE) ``` `remove.sh`๊ฐ€ manifest์— ๋”ฐ๋ผ `.agents/skills/**` 28๊ฐœ ํŒŒ์ผ์„ ์‚ญ์ œํ•œ **๋’ค์—** ์ƒˆ `install.sh`๊ฐ€ ์‹คํ–‰๋ฉ๋‹ˆ๋‹ค. ๊ทธ ์‹œ์ ์— ๋กœ์ปฌ ์ˆ˜์ •๋ณธ์€ ์ด๋ฏธ ์กด์žฌํ•˜์ง€ ์•Š์œผ๋ฏ€๋กœ, **๋ณต์‚ฌ ๋ฃจํ”„์— ์–ด๋–ค ๊ฐ์ง€ ๋กœ์ง์„ ๋„ฃ์–ด๋„ ๊ฐ์ง€ํ•  ๋Œ€์ƒ์ด ์—†์Šต๋‹ˆ๋‹ค.** `agy`์˜ ์ฒ˜๋ฐฉ์„ ๊ทธ๋Œ€๋กœ ๊ตฌํ˜„ํ•˜๋ฉด "๊ฐ€๋“œ๋ฅผ ๋„ฃ์—ˆ๋Š”๋ฐ๋„ ์—…๋ฐ์ดํŠธ ํ•œ ๋ฒˆ์— ์ฝ”๋“œ๊ฐ€ ์‚ฌ๋ผ์ง„๋‹ค"๋Š” ์ตœ์•…์˜ ๊ฒฐ๊ณผ๊ฐ€ ๋ฉ๋‹ˆ๋‹ค โ€” ์•ˆ์ „ํ•˜๋‹ค๊ณ  ๋ฏฟ๊ฒŒ ๋งŒ๋“ค๋ฉด์„œ ๋ณดํ˜ธํ•˜์ง€ ๋ชปํ•˜๋Š” ์ƒํƒœ. ### E-8. ๊ฐ์ง€ ๊ธฐ์ค€์˜ ๋ฐ˜์ฆ `agy`๊ฐ€ ์ œ์•ˆํ•œ "๊ธฐ์กด ํŒŒ์ผ์ด **์›๋ณธ ํ…œํ”Œ๋ฆฟ๊ณผ ๋‹ค๋ฅธ์ง€**" ๊ฒ€์‚ฌ๋ฅผ ๊ทธ๋Œ€๋กœ ์ ์šฉํ•˜๋ฉด: | ์ƒํ™ฉ | ๋กœ์ปฌ ํŒŒ์ผ vs ์ˆ˜์‹  ํ…œํ”Œ๋ฆฟ | ์˜ฌ๋ฐ”๋ฅธ ์ฒ˜๋ฆฌ | `agy` ๊ธฐ์ค€์˜ ํŒ์ • | | :--- | :---: | :--- | :--- | | ์‚ฌ์šฉ์ž๊ฐ€ ์ˆ˜์ •ํ•จ | ๋‹ค๋ฆ„ | ๋ณด์กด | ๋ณด์กด โœ… | | **๊ตฌ๋ฒ„์ „์ด ์„ค์น˜๋ผ ์žˆ์Œ(์ •์ƒ ๊ฐฑ์‹  ๋Œ€์ƒ)** | **๋‹ค๋ฆ„** | **๋ฎ์–ด์“ฐ๊ธฐ** | **๋ณด์กด โŒ โ†’ ๊ฐฑ์‹  ์˜๊ตฌ ์‹คํŒจ** | | ์ตœ์‹ ๋ณธ์ด ์ด๋ฏธ ์„ค์น˜๋จ | ๊ฐ™์Œ | no-op | no-op โœ… | 2ํ–‰์ด R-1์˜ **์œ ์ผํ•œ ์กด์žฌ ์ด์œ **์ž…๋‹ˆ๋‹ค. ์ˆ˜์‹  ํŒŒ์ผ๊ณผ์˜ ๋น„๊ต๋กœ๋Š” 2ํ–‰๊ณผ 1ํ–‰์ด ์›๋ฆฌ์ ์œผ๋กœ ๊ตฌ๋ถ„๋˜์ง€ ์•Š์œผ๋ฏ€๋กœ, R-1์„ ๊ตฌํ˜„ํ•˜๋ฉด์„œ ์ด ๊ธฐ์ค€์„ ์“ฐ๋ฉด E-4(์žฌ์‹คํ–‰์ด ์กฐ์šฉํ•œ no-op)๋กœ ์ •ํ™•ํžˆ ๋˜๋Œ์•„๊ฐ‘๋‹ˆ๋‹ค. --- ## 2. ์„ค๊ณ„ R-1โ€ฒ โ€” ์•ˆ์ „ ๊ฐฑ์‹  (Safe Refresh) ### 2.1 ์›์น™ > ๊ฐฑ์‹ ์€ **์„ค์น˜๊ธฐ๊ฐ€ ์Šค์Šค๋กœ ์“ด ๊ฒƒ๋งŒ** ๋ฎ์–ด์“ด๋‹ค. ๊ทธ ์™ธ ๋ชจ๋“  ๊ฒƒ์€ ์‚ฌ์šฉ์ž ๊ฒƒ์œผ๋กœ ๊ฐ„์ฃผํ•œ๋‹ค. `.env` ๋งˆ์ด๊ทธ๋ ˆ์ด์…˜์—์„œ ํ™•๋ฆฝํ•œ **์ฆ๊ฑฐ ๊ธฐ๋ฐ˜ ์†Œ์œ  ํŒ์ •** ์›์น™๊ณผ ๋™์ผํ•ฉ๋‹ˆ๋‹ค. ์†Œ์œ  ์ฆ๊ฑฐ๋Š” manifest(๊ฒฝ๋กœ)๋งŒ์œผ๋กœ ๋ถ€์กฑํ•˜๋ฉฐ **๋‚ด์šฉ ์ง€๋ฌธ**์ด ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค. ### 2.2 ์†Œ์œ  ์ง€๋ฌธ ๋Œ€์žฅ โ€” `.mam/asset_hashes.txt` ์„ค์น˜๊ธฐ๊ฐ€ ํŒŒ์ผ์„ ์“ธ ๋•Œ๋งˆ๋‹ค ๊ทธ ์‹œ์ ์˜ ๋‚ด์šฉ ํ•ด์‹œ๋ฅผ ๊ธฐ๋กํ•ฉ๋‹ˆ๋‹ค. ``` .agents/skills/lib.sh .agents/skills/multi-agent-mux-delegate-job/scripts/mqtt_common.py ... ``` ๊ฐฑ์‹  ์‹œ 3-way ํŒ์ •: | ์กฐ๊ฑด | ์˜๋ฏธ | ์ฒ˜๋ฆฌ | | :--- | :--- | :--- | | `hash(ํ˜„์žฌ) == ๋Œ€์žฅ์˜ ํ•ด์‹œ` | ์„ค์น˜๊ธฐ๊ฐ€ ์“ด ๊ทธ๋Œ€๋กœ (๋ฏธ๋ณ€๊ฒฝ) | **๋ฎ์–ด์“ฐ๊ธฐ** + ๋Œ€์žฅ ๊ฐฑ์‹  | | `hash(ํ˜„์žฌ) != ๋Œ€์žฅ์˜ ํ•ด์‹œ` | ์‚ฌ์šฉ์ž๊ฐ€ ์ˆ˜์ •ํ•จ | **๋ณด์กด** + ๊ฒฝ๊ณ  + ์ƒํƒœ ๊ธฐ๋ก | | ๋Œ€์žฅ์— ํ•ญ๋ชฉ ์—†์Œ (๊ตฌ ์„ค์น˜๋ณธ) | ์ถœ์ฒ˜ ๋ถˆ๋ช… | ยง2.5 ๋ถ€ํŠธ์ŠคํŠธ๋žฉ ๊ทœ์น™ | | `hash(ํ˜„์žฌ) == hash(์ˆ˜์‹ )` | ์ด๋ฏธ ์ตœ์‹  | no-op (๋ฐฑ์—…ยท๊ฒฝ๊ณ  ๋ถˆํ•„์š”) | ๋Œ€์ƒ์€ `.agents/skills/**` **28๊ฐœ ํŒŒ์ผ**(432 KB)๋ฟ์ด๋ฏ€๋กœ ํ•ด์‹œ ๋น„์šฉ์€ ๋ฌด์‹œํ•  ์ˆ˜์ค€์ž…๋‹ˆ๋‹ค. > โš ๏ธ **๊ตฌํ˜„ ํ•จ์ •**: `sha256sum`์€ GNU coreutils ์ „์šฉ์ด๋ฉฐ **stock macOS์—๋Š” ์—†์Šต๋‹ˆ๋‹ค**(macOS๋Š” `shasum`). ๋ณธ ๊ฐœ๋ฐœ ๋จธ์‹ ์—๋Š” coreutils๊ฐ€ ์„ค์น˜๋ผ ์žˆ์–ด ๋กœ์ปฌ ํ…Œ์ŠคํŠธ๋Š” ํ†ต๊ณผํ•˜๊ณ  ์‹ค์‚ฌ์šฉ์ž๋งŒ ๊นจ์ง€๋Š” ์ „ํ˜•์  ๋ถ„๊ธฐ๊ฐ€ ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค. ยง2.3์˜ `python3 hashlib` ์ธ๋ผ์ธ์„ ์‚ฌ์šฉํ•˜์‹ญ์‹œ์˜ค โ€” `install.sh`๊ฐ€ ์ด๋ฏธ python3๋ฅผ ํ•˜๋“œ ์˜์กด์„ฑ์œผ๋กœ ๊ฒ€์ฆํ•ฉ๋‹ˆ๋‹ค(Rev.1 ยง2.3๊ณผ ๋™์ผํ•œ ๊ทผ๊ฑฐ). ### 2.3 ๋ฐฑ์—… ์œ„์น˜ โ€” `.mam/skill-backups//<์›๊ฒฝ๋กœ>` `.user-bak` ์ธํ”Œ๋ ˆ์ด์Šค ๋ฐฉ์‹์„ ์“ฐ์ง€ ์•Š๋Š” ์ด์œ : 1. `.agents/`๋Š” **์˜๋„์ ์œผ๋กœ gitignore ๋Œ€์ƒ์ด ์•„๋‹˜**(Rev.1 ยง5.1) โ†’ ๋ฐฑ์—…์ด ์‚ฌ์šฉ์ž ์ €์žฅ์†Œ์— ์ถ”์  ํŒŒ์ผ๋กœ ์œ ์ž…. 2. manifest์— ๋“ฑ์žฌ๋˜์ง€ ์•Š์œผ๋ฏ€๋กœ `remove.sh`๊ฐ€ **์˜๊ตฌํžˆ ์ฒญ์†Œํ•˜์ง€ ๋ชปํ•จ** โ†’ ์–ธ์ธ์Šคํ†จ ํ›„์—๋„ ์ž”์žฌ. 3. ๊ฐฑ์‹ ํ•  ๋•Œ๋งˆ๋‹ค ๋ˆ„์  โ†’ `agy`๊ฐ€ ์ง์ „ ๋ผ์šด๋“œ์—์„œ ์ •ํ™•ํžˆ ์ง€์ ํ•œ **๋ฐฑ์—… ์ฆ์‹** ์žฌํ˜„. `.mam/skill-backups/`๋Š” โ‘  gitignore ๊ด€๋ฆฌ ๋ธ”๋ก์˜ `/.mam/`์œผ๋กœ ์ด๋ฏธ ์ปค๋ฒ„ โ‘ก `remove.sh`์˜ `delete_asset ".mam"`์œผ๋กœ ์ž๋™ ์ •๋ฆฌ โ‘ข ์‚ฌ์šฉ์ž ํŠธ๋ฆฌ ๋ฌด์˜ค์—ผ์„ ๋ชจ๋‘ ๋งŒ์กฑํ•ฉ๋‹ˆ๋‹ค. **์ค‘๋ณต ์–ต์ œ(์ง์ „ ์žก `fe4e0e6f`์˜ ๊ตํ›ˆ ์ ์šฉ)**: ๋ฐฑ์—… ์ง์ „ ๊ธฐ์กด `skill-backups/*/<๊ฐ™์€ ๊ฒฝ๋กœ>` ์ค‘ ๋‚ด์šฉ์ด ๋™์ผํ•œ ์‚ฌ๋ณธ์ด ์žˆ์œผ๋ฉด ์ƒˆ๋กœ ๋งŒ๋“ค์ง€ ์•Š์Šต๋‹ˆ๋‹ค. `cmp` ์‹คํŒจ ์‹œ์—๋Š” **๋ณด์กด ์ชฝ์œผ๋กœ ์‹คํŒจ**(๋ฐฑ์—… ์ƒ์„ฑ)ํ•ฉ๋‹ˆ๋‹ค. ### 2.4 ๊ธฐ๋ณธ ๋™์ž‘๊ณผ ํ”Œ๋ž˜๊ทธ ```bash --overwrite-custom # ๋กœ์ปฌ ์ˆ˜์ •๋ณธ๊นŒ์ง€ ๋ฎ์–ด์“ด๋‹ค (๋ฐฑ์—…์€ ์—ฌ์ „ํžˆ ๋‚จ๊น€) MAM_OVERWRITE_CUSTOM=1 # curl | bash ํŒŒ์ดํ”„์šฉ ํ™˜๊ฒฝ๋ณ€์ˆ˜ ๋™์น˜ ``` - **๊ธฐ๋ณธ๊ฐ’ = ๋ณด์กด**. `agy`์˜ ์ฒ˜๋ฐฉ C๋ฅผ ์ฑ„ํƒํ•ฉ๋‹ˆ๋‹ค. - ๋ณด์กด ์‹œ **ํŒŒ์ผ ๋ชฉ๋ก์„ ํ•ญ๋ชฉ๋ณ„๋กœ ์ถœ๋ ฅ**ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์ด๊ณ„๋งŒ ์ฐ์œผ๋ฉด ์‚ฌ์šฉ์ž๋Š” ๋ฌด์—‡์ด ๋‚ก์•˜๋Š”์ง€ ์•Œ ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค. ``` โ„น๏ธ Local modifications detected โ€” these files were NOT updated: .agents/skills/multi-agent-mux-delegate-job/scripts/mqtt_common.py .agents/skills/multi-agent-mux-delegate-job/multi-agent-mux-delegate-job Your copies are preserved as-is. Backups: .mam/skill-backups/20260804T120000Z/ โš ๏ธ Mixing customised files with updated framework files can break the backplane. To take the upstream version (a backup is still made): re-run with --overwrite-custom ``` - **๋ฒ„์ „ ๋ถˆ์ผ์น˜ ๊ฒฝ๊ณ ๋ฅผ ์˜๋ฌดํ™”**ํ•˜๋Š” ์ด์œ : delegate-job ๋ฐฑํ”Œ๋ ˆ์ธ์€ `registry.py`ยท`mqtt_common.py`ยท`publish_event.py`ยท๋ž˜ํผ๊ฐ€ ํ•œ ๋ฒŒ๋กœ ๋™์ž‘ํ•ฉ๋‹ˆ๋‹ค. ํ•œ ํŒŒ์ผ๋งŒ ๊ตฌ๋ฒ„์ „์œผ๋กœ ๋‚จ์œผ๋ฉด "์—…๋ฐ์ดํŠธ ์„ฑ๊ณต"์ด๋ผ ํ‘œ์‹œ๋œ ์ฑ„ ์ด๋ฒคํŠธ๊ฐ€ ์‹คํŒจํ•˜๋Š”, ์ง„๋‹จ์ด ์–ด๋ ค์šด ์ƒํƒœ๊ฐ€ ๋ฉ๋‹ˆ๋‹ค. ์กฐ์šฉํ•œ skip์€ ๊ธˆ์ง€ํ•ฉ๋‹ˆ๋‹ค. - `.mam/version.txt`์— `preserved_local=`์„ ๊ธฐ๋กํ•ด ์‚ฌํ›„ ์ง„๋‹จ ๊ฐ€๋Šฅํ•˜๊ฒŒ ํ•ฉ๋‹ˆ๋‹ค. ### 2.5 ๋ถ€ํŠธ์ŠคํŠธ๋žฉ(๋Œ€์žฅ์ด ์—†๋Š” ๊ธฐ์กด ์„ค์น˜๋ณธ) ๊ธฐ์กด ์„ค์น˜๋ณธ์—๋Š” `asset_hashes.txt`๊ฐ€ ์—†์Šต๋‹ˆ๋‹ค. ์—ฌ๊ธฐ์„œ "์ถœ์ฒ˜ ๋ถˆ๋ช… = ๋ณด์กด"์„ ํƒํ•˜๋ฉด **์„ค์น˜ ๊ธฐ๋ฐ˜ ์ „์ฒด๊ฐ€ ์ฒซ ๊ฐฑ์‹ ์—์„œ no-op**์ด ๋˜์–ด R-1์ด ๋ฌด๋ ฅํ™”๋ฉ๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ: > ๋Œ€์žฅ ์—†์Œ + ๋‚ด์šฉ์ด ์ˆ˜์‹ ๋ณธ๊ณผ ๋‹ค๋ฆ„ โ†’ **๋ฐฑ์—… ํ›„ ๋ฎ์–ด์“ฐ๊ธฐ**, ๊ทธ๋ฆฌ๊ณ  ๊ทธ ์‚ฌ์‹ค์„ ์ถœ๋ ฅ. ์‹ ์„ ๋„(R-1์˜ ๋ชฉ์ )์™€ ๋ณต๊ตฌ ๊ฐ€๋Šฅ์„ฑ(agy์˜ ๋ชฉ์ )์„ ๋™์‹œ์— ๋งŒ์กฑํ•˜๋ฉฐ, ์ด 1ํšŒ ์ดํ›„๋กœ๋Š” ๋Œ€์žฅ์ด ์กด์žฌํ•˜๋ฏ€๋กœ ์ •๋ฐ€ ํŒ์ •(๊ธฐ๋ณธ ๋ณด์กด)์œผ๋กœ ์ „ํ™˜๋ฉ๋‹ˆ๋‹ค. ๋‚ด์šฉ์ด ์ˆ˜์‹ ๋ณธ๊ณผ ๊ฐ™์œผ๋ฉด ๋ฐฑ์—…๋„ ๊ฒฝ๊ณ ๋„ ๋งŒ๋“ค์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ``` โ„น๏ธ No asset fingerprints found (installed by an older version). Backing up current skills to .mam/skill-backups// before refresh. ``` --- ## 3. 3๊ฐœ ๊ฒฝ๋กœ ์ „์ˆ˜ ์ ์šฉ (`agy` ์ฒ˜๋ฐฉ์˜ ๊ฒฐ์ •์  ํ™•์žฅ) | # | ๊ฒฝ๋กœ | ํ˜„์žฌ ์œ„ํ—˜ | Rev.2 ์ฒ˜๋ฆฌ | | :-- | :--- | :--- | :--- | | P-A | `install.sh` ๊ฐฑ์‹ (`-f` ๋ฐ R-1 ๊ธฐ๋ณธ fetch) | E-6: ๋ฌด๊ฒฝ๊ณ  ํŒŒ๊ดด | ยง2 ์•ˆ์ „ ๊ฐฑ์‹  ์ ์šฉ | | P-B | `update.sh` (๋ฌธ์„œํ™”๋œ **์ฃผ ์—…๋ฐ์ดํŠธ ์ˆ˜๋‹จ**) | E-7: `remove.sh`๊ฐ€ ์„ ์‚ญ์ œ โ†’ ๊ฐ€๋“œ ๋ฌดํšจ | **remove.sh ํ˜ธ์ถœ ์ „ ์Šค๋ƒ…์ƒท**(ยง3.1) | | P-C | `remove.sh` ๋‹จ๋… ์‹คํ–‰(์–ธ์ธ์Šคํ†จ) | ์ˆ˜์ •๋ณธ์ด ์กฐ์šฉํžˆ ์‚ญ์ œ๋จ | ํ•ญ๋ชฉ๋ณ„ ๊ฒฝ๊ณ  + ์กฐ๊ฑด๋ถ€ ๋ณด์กด(ยง3.2) | ### 3.1 P-B โ€” `update.sh` ์„ ์Šค๋ƒ…์ƒท `update.sh`๋Š” ์ด๋ฏธ `.mam.update-tmp` ์Šคํ…Œ์ด์ง• ๊ตฌ์กฐ๋ฅผ ๊ฐ–๊ณ  ์žˆ์œผ๋ฏ€๋กœ ์—ฌ๊ธฐ์— ์–น์Šต๋‹ˆ๋‹ค. ``` 1) (remove.sh ํ˜ธ์ถœ ์ „) asset_hashes.txt ๊ธฐ์ค€์œผ๋กœ ์ˆ˜์ •๋œ ํ”„๋ ˆ์ž„์›Œํฌ ํŒŒ์ผ ์‚ฐ์ถœ 2) .mam.update-tmp/skill-backups// ๋กœ ๋ณต์‚ฌ โ† remove.sh๊ฐ€ ์ง€์šฐ์ง€ ๋ชปํ•˜๋Š” ์œ„์น˜ 3) bash "$REMOVER" --force "$TARGET_DIR" 4) ์ƒˆ install.sh ์‹คํ–‰ 5) .mam.update-tmp/skill-backups โ†’ .mam/skill-backups ๋กœ ๋ณต์› + ๋ชฉ๋ก ์ถœ๋ ฅ ``` **์ฃผ์˜**: ์ด ์Šค๋ƒ…์ƒท์€ "์ˆ˜์ •๋ณธ์„ ์ž๋™์œผ๋กœ ๋˜์‚ด๋ฆฌ์ง€ ์•Š์Šต๋‹ˆ๋‹ค." ์—…๋ฐ์ดํŠธ ํ›„ ํŠธ๋ฆฌ์—๋Š” ์ตœ์‹  ํ”„๋ ˆ์ž„์›Œํฌ๊ฐ€ ๋“ค์–ด๊ฐ€๊ณ , ์‚ฌ์šฉ์ž ์ˆ˜์ •๋ณธ์€ ๋ฐฑ์—…์œผ๋กœ๋งŒ ๋‚จ์Šต๋‹ˆ๋‹ค. ์ž๋™ ๋ณ‘ํ•ฉ์€ 3-way merge๊ฐ€ ํ•„์š”ํ•ด ์…ธ ์„ค์น˜๊ธฐ์˜ ์ฑ…์ž„ ๋ฒ”์œ„๋ฅผ ๋„˜์Šต๋‹ˆ๋‹ค. **์ถœ๋ ฅ์—์„œ ์ด ์ ์„ ๋ช…ํ™•ํžˆ ๋งํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค** โ€” "๋ฐฑ์—…ํ–ˆ๋‹ค"๊ฐ€ "๋ณต์›ํ–ˆ๋‹ค"๋กœ ์˜คํ•ด๋˜๋ฉด ์•ˆ ๋ฉ๋‹ˆ๋‹ค. ``` ๐Ÿ’พ 3 locally-modified skill file(s) backed up to .mam/skill-backups// The updated framework files are now in place; your changes were NOT re-applied. Diff and re-apply manually if you still need them. ``` ### 3.2 P-C โ€” `remove.sh` ์–ธ์ธ์Šคํ†จ - ์‚ญ์ œ ๋Œ€์ƒ ์ค‘ ๋กœ์ปฌ ์ˆ˜์ • ํŒŒ์ผ์ด **์žˆ์„ ๋•Œ๋งŒ** ๋™์ž‘ํ•ฉ๋‹ˆ๋‹ค(์—†์œผ๋ฉด ์ถœ๋ ฅยท๋””๋ ‰ํ† ๋ฆฌ ์ƒ์„ฑ ๋ชจ๋‘ ์—†์Œ โ†’ ์ผ๋ฐ˜ ์‚ฌ์šฉ์ž์—๊ฒŒ ์ž”์žฌ 0). - ๋Œ€ํ™”ํ˜•: ํ™•์ธ ํ”„๋กฌํ”„ํŠธ์— ์ˆ˜์ • ํŒŒ์ผ ๋ชฉ๋ก์„ ํฌํ•จํ•ด ์‚ฌ์šฉ์ž๊ฐ€ ์ค‘๋‹จํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ•ฉ๋‹ˆ๋‹ค. - `-y/--force`: ๋ชฉ๋ก์„ ์ถœ๋ ฅํ•˜๊ณ  `/.mam-skill-backup./`๋กœ ๋ณด์กดํ•ฉ๋‹ˆ๋‹ค. `.mam` ๋‚ด๋ถ€๋Š” ์–ธ์ธ์Šคํ†จ ์‹œ ์‚ญ์ œ๋˜๋ฏ€๋กœ ์“ธ ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค. - `--purge-skills` ์ง€์ • ์‹œ์—๋งŒ ๋ณด์กด ์—†์ด ์‚ญ์ œํ•ฉ๋‹ˆ๋‹ค. > ์ด๋Š” ์ง์ „ ์žก(P-1)์—์„œ ํ™•๋ฆฝํ•œ "`-y`(๋น„๋Œ€ํ™” ์˜๋„)๋Š” ์‚ญ์ œ ๊ถŒํ•œ์ด ์•„๋‹ˆ๋‹ค" ์›์น™์˜ ์ง์ ‘ ์ ์šฉ์ด๋ฉฐ, ๋ฃจํŠธ์— ๋ฐฑ์—…์„ ๋‚จ๊ธฐ๋Š” ๊ฒƒ์€ `.mam.env.mam-backup`์ด ์ด๋ฏธ ๋”ฐ๋ฅด๋Š” ๊ธฐ์กด ์ „๋ก€์™€ ์ผ๊ด€๋ฉ๋‹ˆ๋‹ค. ๊ด€๋ฆฌ ๋ธ”๋ก์— `/.mam-skill-backup.*/`๋ฅผ ์ถ”๊ฐ€ํ•ฉ๋‹ˆ๋‹ค(ยง5). --- ## 4. ์ž๊ธฐ์ˆ˜์ • โ€” `.mam` ์ž”์กด allowlist ๊ฒฐํ•จ `update.sh:94-120`์€ `.mam`์—์„œ **๋‹ค์Œ 4์ข…๋งŒ** ์Šคํ…Œ์ด์ง•ํ•ฉ๋‹ˆ๋‹ค: `agent-sessions.*`, `jobs/`, `delegate_job_logs/`, `install_manifest.txt`. `remove.sh`๊ฐ€ `.mam`์„ ํ†ต์งธ๋กœ ์ง€์šฐ๋ฏ€๋กœ **์—ฌ๊ธฐ ์—†๋Š” ๊ฒƒ์€ ์—…๋ฐ์ดํŠธ ๋•Œ๋งˆ๋‹ค ์†Œ๋ฉธ**ํ•ฉ๋‹ˆ๋‹ค. ์˜ํ–ฅ: | ํŒŒ์ผ | ๋„์ž… ์œ„์น˜ | ์†Œ์‹ค ์‹œ ๊ฒฐ๊ณผ | | :--- | :--- | :--- | | `.mam/install_state` (`gitignore_created`) | Rev.1 ยง5.2 | ์–ธ์ธ์Šคํ†จ ์‹œ `.gitignore` ์†Œ์œ  ํŒ์ • ๋ถˆ๊ฐ€ โ†’ ๋นˆ ํŒŒ์ผ ์ž”์กด(์•ˆ์ „์ธก ์‹คํŒจ, ๊ฒฝ๋ฏธ) | | `.mam/asset_hashes.txt` | Rev.2 ยง2.2 | **์—…๋ฐ์ดํŠธ๋งˆ๋‹ค ๋Œ€์žฅ ์†Œ์‹ค โ†’ ๋งค๋ฒˆ ๋ถ€ํŠธ์ŠคํŠธ๋žฉ ๊ฒฝ๋กœ โ†’ ์ •๋ฐ€ ํŒ์ •์ด ์˜๊ตฌํžˆ ๋™์ž‘ํ•˜์ง€ ์•Š์Œ** | | `.mam/version.txt` | Rev.1 ยง6.2 | ๋ฒ„์ „ ์ด๋ ฅ ๋‹จ์ ˆ | | `.mam/skill-backups/` | Rev.2 ยง2.3 | ๋ฐฑ์—…์ด ์—…๋ฐ์ดํŠธ๋กœ ์‚ญ์ œ | **์กฐ์น˜**: `update.sh`์˜ ์Šคํ…Œ์ด์ง•/๋ณต์› ๋ชฉ๋ก์— ์œ„ 4๊ฐœ๋ฅผ ์ถ”๊ฐ€ํ•˜๊ณ , ๋‚˜์•„๊ฐ€ **๊ฐœ๋ณ„ ์—ด๊ฑฐ ๋Œ€์‹  `.mam` ์ „์ฒด๋ฅผ ๋ณต์‚ฌํ•œ ๋’ค ์ƒˆ manifest๋งŒ ์ƒˆ๊ฒƒ์œผ๋กœ ๋ฎ๋Š” ๋ฐฉ์‹**์œผ๋กœ ๋ฐ”๊ฟ€ ๊ฒƒ์„ ๊ถŒ๊ณ ํ•ฉ๋‹ˆ๋‹ค(์‹ ๊ทœ ์ƒํƒœ ํŒŒ์ผ์ด ์ถ”๊ฐ€๋  ๋•Œ๋งˆ๋‹ค ์ด ๋ชฉ๋ก์„ ๊ณ ์ณ์•ผ ํ•˜๋Š” ๊ตฌ์กฐ์  ์ทจ์•ฝ์„ฑ ์ œ๊ฑฐ). ํ›„์ž๋ฅผ ํƒํ•  ๊ฒฝ์šฐ `.mam/jobs` ์šฉ๋Ÿ‰์ด ํฐ ์›Œํฌ์ŠคํŽ˜์ด์Šค์—์„œ ๋ณต์‚ฌ ๋น„์šฉ์ด ๋Š˜ ์ˆ˜ ์žˆ์œผ๋ฏ€๋กœ, `cp -a`๋กœ ํ•œ ๋ฒˆ์— ์ฒ˜๋ฆฌํ•˜๊ณ  ์‹คํŒจ ์‹œ ๊ธฐ์กด ํŠธ๋žฉ(`restore_on_failure`)์— ์œ„์ž„ํ•ฉ๋‹ˆ๋‹ค. --- ## 5. Rev.1์—์„œ ๋ณ€๊ฒฝ๋˜๋Š” ํ•ญ๋ชฉ ์š”์•ฝ | ์ ˆ | ๋ณ€๊ฒฝ | | :--- | :--- | | ยง5.1 ๊ด€๋ฆฌ ๋ธ”๋ก | `/.mam-skill-backup.*/` 1ํ–‰ ์ถ”๊ฐ€ | | ยง5.2 ์†Œ์œ ๊ถŒ ๊ธฐ๋ก | `.mam/install_state` ์œ ์ง€, ๋‹จ ยง4์— ๋”ฐ๋ผ `update.sh` ์ž”์กด ๋ชฉ๋ก์— ๋ฐ˜๋“œ์‹œ ํฌํ•จ | | ยง6.1 fetch ๊ธฐ๋ณธํ™” | **ยง2 ์•ˆ์ „ ๊ฐฑ์‹  ๊ฐ€๋“œ ๊ตฌํ˜„์ด ์„ ํ–‰ ์กฐ๊ฑด**. ๊ฐ€๋“œ ์—†์ด ๊ธฐ๋ณธ๊ฐ’๋งŒ ๋ฐ”๊พธ๋Š” ์ปค๋ฐ‹์€ ๊ธˆ์ง€ | | ยง6.2 ๋ฒ„์ „ ์Šคํƒฌํ”„ | `preserved_local=` ํ•„๋“œ ์ถ”๊ฐ€ | | ยง7 ์ปค๋ฐ‹ | C3 ๋ถ„ํ•  ๋ฐ C12~C14 ์ถ”๊ฐ€(ยง6) | | ยง8 ํ…Œ์ŠคํŠธ | T-D21~T-D28 ์ถ”๊ฐ€(ยง7) | | ยง11 ๋ฆฌ์Šคํฌ | RK-8 ์‹ ์„ค, RK-5 ์™„ํ™”์ฑ… ๋ณด๊ฐ• | ๊ทธ ์™ธ R-2(ํ•„์ˆ˜ ๋งˆํฌ๋‹ค์šด), R-3(`.mam_deploy`), R-4(`.gitignore`) ์„ค๊ณ„์™€ B-1/B-2/B-3 ์ฐจ๋‹จ ํ•ญ๋ชฉ์€ **Rev.1 ๊ทธ๋Œ€๋กœ ์œ ํšจ**ํ•ฉ๋‹ˆ๋‹ค. `agy`๋„ ํ•ด๋‹น ๋ถ€๋ถ„์—๋Š” ์ด์˜๋ฅผ ์ œ๊ธฐํ•˜์ง€ ์•Š์•˜์Šต๋‹ˆ๋‹ค. --- ## 6. ๊ฐœ์ • ์ปค๋ฐ‹ ๋ถ„ํ•ด | # | ์ปค๋ฐ‹ | ๋Œ€์ƒ | ๋น„๊ณ  | | :-- | :--- | :--- | :--- | | C1 | `feat(deploy): ship only runtime-essential markdown to targets` | `install.sh` | Rev.1 ยง3.2 | | C2 | `fix(deploy): align install_mam.sh asset excludes with install.sh` | `install_mam.sh` | Rev.1 ยง3.3 | | **C3a** | `feat(deploy): record asset fingerprints on install` | `install.sh` | ยง2.2 โ€” **๋Œ€์žฅ ๊ธฐ๋ก๋งŒ**, ํŒ์ • ๋กœ์ง ์—†์Œ(๋™์ž‘ ๋ฌด๋ณ€ํ™”) | | **C3b** | `feat(deploy): preserve locally modified skills on refresh` | `install.sh` | ยง2.3-2.5 โ€” ๋ฐฑ์—…ยท๋ณด์กดยท`--overwrite-custom` | | **C3c** | `feat(deploy): fetch latest assets by default and stamp version` | `install.sh` | Rev.1 ยง6 โ€” **C3b ์ดํ›„์—๋งŒ ๋จธ์ง€ ๊ฐ€๋Šฅ** | | C4 | `refactor(deploy): resolve workspace from script location` | `remove.sh`, `update.sh` | Rev.1 ยง4.2 | | C5 | `feat(deploy): support .mam_deploy layout in uninstaller/updater` | `remove.sh`, `update.sh` | Rev.1 ยง4.3/4.4 | | C6 | `feat(deploy): install remove.sh/update.sh under .mam_deploy/` | `install.sh` | **C5 ์ดํ›„** | | C7 | `feat(deploy): manage a .gitignore block for installed artifacts` | `install.sh` | Rev.1 ยง5.1-5.3 + ยง5 | | C8 | `feat(deploy): strip the managed .gitignore block on uninstall` | `remove.sh` | **C7 ์ดํ›„** | | C9 | `feat(deploy): unify install_mam.sh gitignore and deploy scripts` | `install_mam.sh` | Rev.1 ยง5.4 | | **C12** | `fix(deploy): preserve .mam state files across the update cycle` | `update.sh` | ยง4 โ€” **C3a ์ดํ›„, C3c ์ด์ „** | | **C13** | `feat(deploy): snapshot modified skills before update removal` | `update.sh` | ยง3.1 | | **C14** | `feat(deploy): warn and preserve modified skills on uninstall` | `remove.sh` | ยง3.2 โ€” GM ํŒ๋‹จ์œผ๋กœ ๋ถ„๋ฆฌ ๊ฐ€๋Šฅ(๋ถ„๋ฆฌ ์‹œ P-C ๊ตฌ๋ฉ ์ž”์กด ๋ช…์‹œ) | | C10 | `test(deploy): cover asset allowlist, layout, gitignore and safe refresh` | `tests/test_deploy_layout.py` | ยง7 | | C11 | `docs(deploy): document layout, refresh, gitignore and custom-skill policy` | ๋ฌธ์„œ 4์ข… | Rev.1 ยง9 + `--overwrite-custom`ยท๋ฐฑ์—… ์ •์ฑ… | **์‹ ๊ทœ ์ˆœ์„œ ์ œ์•ฝ (์œ„๋ฐ˜ ์‹œ ๋ฐ์ดํ„ฐ ์†Œ์‹ค ์ปค๋ฐ‹์ด ํŠธ๋ฆฌ์— ๋‚จ์Œ):** - **C3a โ†’ C3b โ†’ C3c** โ€” ๋Œ€์žฅ ์—†์ด ํŒ์ • ๋กœ์ง์„ ๋„ฃ์œผ๋ฉด ์ „๋Ÿ‰ ๋ถ€ํŠธ์ŠคํŠธ๋žฉ ๊ฒฝ๋กœ๋กœ ๋น ์ง€๊ณ , ๊ฐ€๋“œ ์—†์ด fetch๋งŒ ๊ธฐ๋ณธํ™”ํ•˜๋ฉด **E-6์˜ ํŒŒ๊ดด๋ฅผ ์ „ ์‚ฌ์šฉ์ž์—๊ฒŒ ๊ธฐ๋ณธ๊ฐ’์œผ๋กœ ๋ฐฐํฌ**ํ•˜๊ฒŒ ๋ฉ๋‹ˆ๋‹ค. C3c๋ฅผ ๋จผ์ € ๋จธ์ง€ํ•˜๋Š” ๊ฒƒ์€ **๊ธˆ์ง€**์ž…๋‹ˆ๋‹ค. - **C3a โ†’ C12** โ€” ๋Œ€์žฅ์„ ๋งŒ๋“ค์ž๋งˆ์ž ์—…๋ฐ์ดํŠธ๊ฐ€ ๊ทธ๊ฒƒ์„ ์ง€์šฐ๋ฉด ยง2.2๊ฐ€ ์˜๊ตฌํžˆ ๋ถ€ํŠธ์ŠคํŠธ๋žฉ ๋ชจ๋“œ๋กœ ๋™์ž‘ํ•ฉ๋‹ˆ๋‹ค. - **C13์€ C3a ์ดํ›„** โ€” ์ˆ˜์ • ํŒŒ์ผ ์‚ฐ์ถœ์— ๋Œ€์žฅ์ด ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค. --- ## 7. ์ถ”๊ฐ€ ํ…Œ์ŠคํŠธ (Rev.1 T-D1~T-D20์— ์ด์–ด์„œ) | ID | ๊ฒ€์ฆ ๋‚ด์šฉ | ํŒ์ • | | :--- | :--- | :---: | | T-D21 | ์ปค์Šคํ„ฐ๋งˆ์ด์ฆˆ๋œ ์Šคํ‚ฌ ํŒŒ์ผ์ด ์žˆ๋Š” ์ƒํƒœ๋กœ ๊ฐฑ์‹  โ†’ **ํŒŒ์ผ ๋‚ด์šฉ ๋ณด์กด**, exit 0, ๋ชฉ๋ก์ด stdout์— ์ถœ๋ ฅ๋จ | **B-4** | | T-D22 | ๋ฏธ๋ณ€๊ฒฝ ์Šคํ‚ฌ ํŒŒ์ผ์€ ์ •์ƒ ๊ฐฑ์‹ ๋จ(E-4 ํšŒ๊ท€ ๋ฐฉ์ง€๊ฐ€ T-D21์— ์˜ํ•ด ๋ฌด๋ ฅํ™”๋˜์ง€ ์•Š์•˜๋Š”์ง€) | **B-4** | | T-D23 | **๊ตฌ๋ฒ„์ „์ด ์„ค์น˜๋œ ์ƒํƒœ(๋Œ€์žฅ ์กด์žฌ, ์‚ฌ์šฉ์ž ๋ฏธ์ˆ˜์ •)์—์„œ ๊ฐฑ์‹  ์‹œ ๋ฎ์–ด์จ์ง** โ€” ยงE-8 2ํ–‰ ์˜คํŒ ๋ฐฉ์ง€ | **B-4** | | T-D24 | `--overwrite-custom` ์‹œ ๋ฎ์–ด์“ฐ๋˜ `.mam/skill-backups//`์— ์‚ฌ๋ณธ ์กด์žฌ | | | T-D25 | ๋ฐฑ์—…์ด `.agents/` ํ•˜์œ„์— **์ƒ์„ฑ๋˜์ง€ ์•Š์Œ**(`find .agents -name '*.user-bak'` โ†’ 0๊ฑด) | | | T-D26 | ๋™์ผ ๋‚ด์šฉ 2ํšŒ ๊ฐฑ์‹  ์‹œ ๋ฐฑ์—… ๋””๋ ‰ํ† ๋ฆฌ **์ฆ์‹ํ•˜์ง€ ์•Š์Œ**(์ค‘๋ณต ์–ต์ œ) | | | T-D27 | `update.sh` 1ํšŒ ์‹คํ–‰ ํ›„ `.mam/asset_hashes.txt`ยท`install_state`ยท`version.txt`ยท`skill-backups/`๊ฐ€ **๋ชจ๋‘ ์ž”์กด** | **B-5** | | T-D28 | ์ˆ˜์ •๋ณธ์ด ์žˆ๋Š” ์ƒํƒœ๋กœ `update.sh` ์‹คํ–‰ โ†’ ์ตœ์‹  ํ”„๋ ˆ์ž„์›Œํฌ ์ ์šฉ + ๋ฐฑ์—… ์กด์žฌ + "NOT re-applied" ๋ฌธ๊ตฌ ์ถœ๋ ฅ | | | T-D29 | ๋Œ€์žฅ ์—†๋Š” ๊ตฌ ์„ค์น˜๋ณธ ๊ฐฑ์‹  โ†’ ๋ฐฑ์—… ์ƒ์„ฑ ํ›„ ๋ฎ์–ด์“ฐ๊ธฐ, 2ํšŒ์ฐจ๋ถ€ํ„ฐ๋Š” ์ •๋ฐ€ ํŒ์ • | | | T-D30 | `remove.sh -y` (์ˆ˜์ •๋ณธ ์กด์žฌ) โ†’ `.mam-skill-backup./` ์ƒ์„ฑ; ์ˆ˜์ •๋ณธ ์—†์œผ๋ฉด **๋””๋ ‰ํ† ๋ฆฌ ๋ฏธ์ƒ์„ฑ** | C14 ์ฑ„ํƒ ์‹œ | | T-D31 | ํ•ด์‹œ ๊ณ„์‚ฐ์ด `sha256sum`/`shasum` ์กด์žฌ ์—ฌ๋ถ€์— ์˜์กดํ•˜์ง€ ์•Š์Œ(PATH์—์„œ ๋‘˜ ๋‹ค ์ œ๊ฑฐํ•ด๋„ ํ†ต๊ณผ) | | **์ฐจ๋‹จ ํ•ญ๋ชฉ ์ถ”๊ฐ€**: **B-4**(์•ˆ์ „ ๊ฐฑ์‹  3-way ํŒ์ • โ€” ์‹คํŒจ ์‹œ ์‚ฌ์šฉ์ž ์ฝ”๋“œ ์†Œ์‹ค ๋˜๋Š” ๊ฐฑ์‹  ์˜๊ตฌ ์‹คํŒจ), **B-5**(`.mam` ์ƒํƒœ ํŒŒ์ผ ์ž”์กด โ€” ์‹คํŒจ ์‹œ B-4๊ฐ€ ๊ตฌ์กฐ์ ์œผ๋กœ ๋™์ž‘ ๋ถˆ๋Šฅ). **์ฐจ๋‹จ ํ•ญ๋ชฉ์€ ์ด 5๊ฑด: B-1, B-2, B-3, B-4, B-5.** --- ## 8. DoD ๊ฒŒ์ดํŠธ (์ถ”๊ฐ€๋ถ„) | ๊ฒŒ์ดํŠธ | ์กฐ๊ฑด | | :--- | :--- | | **I. ์ปค์Šคํ…€ ๋ณด์กด** | ์ˆ˜์ •๋œ ์Šคํ‚ฌ ํŒŒ์ผ์ด `install.sh` ๊ฐฑ์‹ ยท`install.sh -f`ยท`update.sh` **3๊ฒฝ๋กœ ๋ชจ๋‘**์—์„œ ์†Œ์‹ค๋˜์ง€ ์•Š์Œ(์›๋ณธ ๋ณด์กด ๋˜๋Š” ๋ฐฑ์—… ์กด์žฌ) | | **J. ๊ฐฑ์‹  ์œ ํšจ์„ฑ** | ๋ฏธ์ˆ˜์ • ํŒŒ์ผ์€ 3๊ฒฝ๋กœ ๋ชจ๋‘์—์„œ ์ตœ์‹ ๋ณธ์œผ๋กœ ๊ฐฑ์‹ ๋จ โ€” ๋ณด์กด ๋กœ์ง์ด R-1์„ ๋ฌด๋ ฅํ™”ํ•˜์ง€ ์•Š์•˜์Œ์„ ์ฆ๋ช… | | **K. ๋ฌด์˜ค์—ผ** | ๊ฐฑ์‹ ยท์—…๋ฐ์ดํŠธยท์–ธ์ธ์Šคํ†จ ํ›„ `.agents/` ํ•˜์œ„์— ๋ฐฑ์—…/์ž”์žฌ ํŒŒ์ผ 0๊ฑด | | **L. ๋ฌธ๊ตฌ ์ •ํ•ฉ** | "custom configs preserved" ๋ฅ˜ ๋ฌธ๊ตฌ๊ฐ€ **์‹ค์ œ๋กœ ๋ณด์กด๋œ ๋Œ€์ƒ๋งŒ** ์ง€์นญํ•˜๋„๋ก ์ˆ˜์ •๋จ(E-6์˜ ์˜ค์‹ ํ˜ธ ์ œ๊ฑฐ) | ๊ฒŒ์ดํŠธ L์€ ๋ฌธ๊ตฌ ํ•œ ์ค„์ด์ง€๋งŒ ๋ณ„๋„ ํ•ญ๋ชฉ์œผ๋กœ ๋‘ก๋‹ˆ๋‹ค. E-6์—์„œ ํ™•์ธํ–ˆ๋“ฏ **ํ‹€๋ฆฐ ์•ˆ์‹ฌ ๋ฌธ๊ตฌ๋Š” ๊ฒฝ๊ณ ๊ฐ€ ์—†๋Š” ๊ฒƒ๋ณด๋‹ค ๋‚˜์ฉ๋‹ˆ๋‹ค.** --- ## 9. ๋ฆฌ์Šคํฌ (๊ฐœ์ •) | ID | ๋ฆฌ์Šคํฌ | ์˜ํ–ฅ | ์™„ํ™” | | :-- | :--- | :---: | :--- | | RK-1~RK-7 | Rev.1๊ณผ ๋™์ผ | โ€” | Rev.1 ยง11 | | **RK-8** | ๋ณด์กด ๋กœ์ง์ด ๊ณผ๋„ํ•˜๊ฒŒ ๋™์ž‘ํ•ด ๊ฐฑ์‹ ์ด ์‚ฌ์‹ค์ƒ no-opํ™”(E-4 ํšŒ๊ท€) | **๋†’์Œ** | ์ˆ˜์‹ ๋ณธ์ด ์•„๋‹Œ **๋Œ€์žฅ**๊ณผ ๋น„๊ต(ยง2.2), T-D22/T-D23์ด ์ฐจ๋‹จ | | **RK-9** | ๋ฐฑ์—…ํ–ˆ๋‹ค๋Š” ๋ฌธ๊ตฌ๋ฅผ ์‚ฌ์šฉ์ž๊ฐ€ "๋ณต์›๋๋‹ค"๋กœ ์˜คํ•ด | ์ค‘ | ยง3.1 ๋ฌธ๊ตฌ ๊ทœ์ •, ๊ฒŒ์ดํŠธ L | | **RK-10** | C3c(fetch ๊ธฐ๋ณธํ™”)๋ฅผ C3b๋ณด๋‹ค ๋จผ์ € ๋จธ์ง€ | **์น˜๋ช…** | ยง6 ์ˆœ์„œ ์ œ์•ฝ, B-4 | | **RK-11** | ๋ฒ„์ „ ์Šคํ(๊ตฌ ํŒŒ์ผ 1๊ฐœ + ์‹  ํŒŒ์ผ ๋‹ค์ˆ˜)๋กœ ๋ฐฑํ”Œ๋ ˆ์ธ ์˜ค์ž‘๋™ | ์ค‘ | ํ•ญ๋ชฉ๋ณ„ ๊ฒฝ๊ณ  ์˜๋ฌดํ™”(ยง2.4), `--overwrite-custom` ์•ˆ๋‚ด | | RK-5(๊ฐœ์ •) | fetch ๊ธฐ๋ณธํ™”๋กœ ์˜คํ”„๋ผ์ธ/CI ์‹คํŒจ | ์ค‘ | `--no-refresh` + ์ž์‚ฐ ๋ถ€์žฌ ์‹œ fetch ์œ ์ง€ | --- ## 10. ๊ฒฐ๋ก  `agy`์˜ ์ด์˜์ œ๊ธฐ๋Š” **์ฑ„ํƒ**ํ•ฉ๋‹ˆ๋‹ค. ๋‹ค๋งŒ ์„ธ ๊ฐ€์ง€๋ฅผ ์ˆ˜์ •ํ•ฉ๋‹ˆ๋‹ค. 1. ์ด ์œ„ํ—˜์€ R-1์ด ๋งŒ๋“œ๋Š” ๊ฒƒ์ด ์•„๋‹ˆ๋ผ **`install.sh -f`์™€ `update.sh`์— ์ด๋ฏธ ์กด์žฌํ•˜๋Š” ๋ฒ„๊ทธ**์ž…๋‹ˆ๋‹ค(E-6/E-7). ๋”ฐ๋ผ์„œ ๊ฐ€๋“œ๋Š” R-1์˜ ๋ถ€์†์ด ์•„๋‹ˆ๋ผ **์„ ํ–‰ ์กฐ๊ฑด**์ด๋ฉฐ, R-1์„ ์ฑ„ํƒํ•˜์ง€ ์•Š๋”๋ผ๋„ ๋…๋ฆฝ์ ์œผ๋กœ ๊ณ ์ณ์•ผ ํ•ฉ๋‹ˆ๋‹ค. 2. ๊ฐ์ง€ ๊ธฐ์ค€์„ **์ˆ˜์‹  ํ…œํ”Œ๋ฆฟ๊ณผ์˜ ๋น„๊ต์—์„œ ์„ค์น˜ ์‹œ์  ํ•ด์‹œ ๋Œ€์žฅ๊ณผ์˜ ๋น„๊ต๋กœ** ๋ฐ”๊ฟ‰๋‹ˆ๋‹ค. ์›์•ˆ๋Œ€๋กœ๋ฉด ์ •์ƒ ๊ฐฑ์‹ ๊ณผ ์‚ฌ์šฉ์ž ์ˆ˜์ •์ด ๊ตฌ๋ถ„๋˜์ง€ ์•Š์•„ R-1์ด ๋ฌด๋ ฅํ™”๋ฉ๋‹ˆ๋‹ค(E-8). 3. ๋ฐฑ์—… ์œ„์น˜๋ฅผ `.agents/**/*.user-bak`์—์„œ **`.mam/skill-backups//`**๋กœ ์˜ฎ๊ธฐ๊ณ , ๋ณดํ˜ธ ๋ฒ”์œ„๋ฅผ `install.sh` ๋ณต์‚ฌ ๋ฃจํ”„์—์„œ **install/update/remove 3๊ฒฝ๋กœ ์ „์ฒด**๋กœ ํ™•์žฅํ•ฉ๋‹ˆ๋‹ค. ์›์•ˆ ์œ„์น˜๋Š” gitignore๋˜์ง€ ์•Š๊ณ  manifest์—๋„ ์—†์–ด ์˜๊ตฌ ์ž”์žฌ๊ฐ€ ๋˜๋ฉฐ, ์›์•ˆ ๋ฒ”์œ„๋Š” ์ฃผ ์—…๋ฐ์ดํŠธ ๊ฒฝ๋กœ๋ฅผ ์ „ํ˜€ ๋ณดํ˜ธํ•˜์ง€ ๋ชปํ•ฉ๋‹ˆ๋‹ค(E-7). ๋ถ€์ˆ˜์ ์œผ๋กœ, `agy`๊ฐ€ ์ง€์ ํ•˜์ง€ ์•Š์•˜์œผ๋‚˜ ๊ฐ™์€ ๊ณ„์—ด์ธ Planner ๊ท€์ฑ… ๊ฒฐํ•จ 1๊ฑด(`.mam` ์ƒํƒœ ํŒŒ์ผ์ด ์—…๋ฐ์ดํŠธ ์‹œ ์†Œ๋ฉธ, ยง4)์„ ํ•จ๊ป˜ ์ˆ˜์ •ํ•ฉ๋‹ˆ๋‹ค. --- ## 11. ์—ญํ•  ๊ฒฝ๊ณ„ ๋ณธ ๋ฌธ์„œ๋Š” ์„ค๊ณ„ ์‚ฐ์ถœ๋ฌผ์ด๋ฉฐ **Planner๋Š” ์ €์žฅ์†Œ ์ฝ”๋“œ๋ฅผ ์ผ์ ˆ ์ˆ˜์ •ํ•˜์ง€ ์•Š์•˜์Šต๋‹ˆ๋‹ค**(`MULTI_AGENT_RULES.md` ยง4). E-6~E-8 ์‹คํ—˜์€ ์ž„์‹œ ๋””๋ ‰ํ† ๋ฆฌ(`/tmp/mam_cust_*`)์—์„œ ์ˆ˜ํ–‰ ํ›„ ์ •๋ฆฌํ–ˆ์œผ๋ฉฐ, ์ €์žฅ์†Œ ์›Œํ‚นํŠธ๋ฆฌ๋Š” ํด๋ฆฐ ์ƒํƒœ์ž…๋‹ˆ๋‹ค. ๊ตฌํ˜„์€ Creator, ์ปค๋ฐ‹์€ GM ์†Œ๊ด€์ž…๋‹ˆ๋‹ค. **์ฐจ๋‹จ ํ•ญ๋ชฉ์€ B-1, B-2, B-3, B-4, B-5 5๊ฑด์ž…๋‹ˆ๋‹ค.** [AGREEMENT: REACHED]