Communitygithub.com

wellwelwel/blue-spec

๐ŸŒŠ Blue Spec์€ ๋ณด์•ˆ ์ฃผ๋„ ๊ฐ•ํ™”(Security-Driven Hardening)๋ฅผ ์œ„ํ•œ ๋„๊ตฌ ๋ชจ์Œ์œผ๋กœ, AI ์—์ด์ „ํŠธ๊ฐ€ ์‹œ์Šคํ…œ ๋™์ž‘์„ ๊ฐ์ง€ํ•˜๊ณ  ์ค‘์š”ํ•œ ๋ฐฉ์–ด๋ฅผ ๊ฐ•ํ™”ํ•  ์ˆ˜ ์žˆ๋„๋ก ๋„์™€์ฃผ๋Š” ๋ฐฉ์–ด์  ์ž‘์—… ํ๋ฆ„์ž…๋‹ˆ๋‹ค.

blue-spec๋ž€ ๋ฌด์—‡์ธ๊ฐ€์š”?

Blue Spec์€ AI ์—์ด์ „ํŠธ๊ฐ€ ๋ณด์•ˆ ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•  ๋•Œ ์ฒด๊ณ„์ ์ด๊ณ  ํˆฌ๋ช…ํ•˜๊ฒŒ ์ง„ํ–‰ํ•˜๋„๋ก ์„ค๊ณ„๋œ ๊ธฐ์ˆ  ์‚ฌ์–‘์ž…๋‹ˆ๋‹ค. `charter`, `detect`, `plan`, `harden`, `verify`์˜ 5๋‹จ๊ณ„๋กœ ๊ตฌ์„ฑ๋œ ๋ช…๋ น ์ฒด์ธ์„ ํ†ตํ•ด ํ”„๋กœ์ ํŠธ์˜ ๋ณด์•ˆ ์ƒํƒœ๋ฅผ ๋ถ„์„ํ•˜๊ณ  ์ทจ์•ฝ์ ์„ ์‹๋ณ„ํ•œ ํ›„ ๋‹จ๊ณ„์ ์œผ๋กœ ๋ฐฉ์–ด๋ฅผ ๊ฐ•ํ™”ํ•ฉ๋‹ˆ๋‹ค. ๊ฐ ๋‹จ๊ณ„๋Š” ์ด์ „ ๋‹จ๊ณ„์˜ ๊ฒฐ๊ณผ๋ฌผ์„ ์ž…๋ ฅ์œผ๋กœ ๋ฐ›์•„ `.bluespec/memory/` ๋””๋ ‰ํ† ๋ฆฌ์— ๋งˆํฌ๋‹ค์šด ํŒŒ์ผ๋กœ ๊ธฐ๋ก๋˜๋ฉฐ, ์—์ด์ „ํŠธ๋Š” ์ด ์‚ฌ์–‘์„ ๋ฌธ์ž ๊ทธ๋Œ€๋กœ ๋”ฐ๋ผ์•ผ ํ•ฉ๋‹ˆ๋‹ค. ํŠนํžˆ ์‹œ๋ฎฌ๋ ˆ์ด์…˜ ๊ธฐ๋Šฅ์ด ์ค‘์š”ํ•˜์—ฌ, ์‚ฌ์šฉ์ž๊ฐ€ ๋ช…๋ น์„ ๋ฏธ๋ฆฌ ์ฒดํ—˜ํ•ด๋ณผ ์ˆ˜ ์žˆ๋„๋ก `./temp` ๋””๋ ‰ํ† ๋ฆฌ์—์„œ ์‹ค์ œ ์ฝ”๋“œ๋ฅผ ๋Œ€์ƒ์œผ๋กœ ๋ช…๋ น์„ ์‹คํ–‰ํ•˜๊ณ  ๊ทธ ๊ณผ์ •๊ณผ ๊ฒฐ๊ณผ๋ฅผ ํˆฌ๋ช…ํ•˜๊ฒŒ ๋ณด์—ฌ์ค๋‹ˆ๋‹ค. ์ด๋Š” ๋‹จ์ˆœํžˆ ๊ฒฐ๊ณผ๋ฅผ ์„ค๋ช…ํ•˜๋Š” ๊ฒƒ์ด ์•„๋‹ˆ๋ผ ์‹ค์ œ ์‹คํ–‰ ๊ณผ์ •์„ ์‚ฌ์šฉ์ž๊ฐ€ ์ง์ ‘ ํ™•์ธํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ•จ์œผ๋กœ์จ ์‹ ๋ขฐ์„ฑ์„ ๋†’์ž…๋‹ˆ๋‹ค. Claude Code, Cursor ๋“ฑ AI ์ฝ”๋”ฉ ๋„๊ตฌ์™€ ํ•จ๊ป˜ ์‚ฌ์šฉ๋˜๋ฉฐ, ๊ฐœ๋ฐœ์ž๊ฐ€ ๋ณด์•ˆ ์ทจ์•ฝ์ ์„ ๋ฐœ๊ฒฌํ•˜๊ณ  ํ•ด๊ฒฐํ•˜๋Š” ์›Œํฌํ”Œ๋กœ์šฐ๋ฅผ ์ž๋™ํ™”ํ•ฉ๋‹ˆ๋‹ค.

์ง€์› ๋Œ€์ƒโœ“Claude Code~Codex CLI~Cursor
npx skills add wellwelwel/blue-spec

์ฆ๊ฒจ ์‚ฌ์šฉํ•˜๋Š” AI์—๊ฒŒ ๋ฌผ์–ด๋ณด๊ธฐ

์ด ์—์ด์ „ํŠธ ์Šคํ‚ฌ์ด ๋ฏธ๋ฆฌ ๋กœ๋“œ๋œ ์ƒˆ ์ฑ„ํŒ…์„ ์—ฝ๋‹ˆ๋‹ค.

๋ฌธ์„œ

Blue Spec ๋ช…๋ น ์‹œ๋ฎฌ๋ ˆ์ด์…˜ํ•˜๊ธฐ

์ด ์Šคํ‚ฌ์€ ๋ช…๋ น์„ ์‹œ๋ฎฌ๋ ˆ์ด์…˜ํ•˜๋Š” ๊ฒƒ์ด ์ƒ๊ฐ๋ณด๋‹ค ์‰ฝ๊ฒŒ ์ž˜๋ชป๋˜์–ด ์‚ฌ์šฉ์ž์˜ ์‹œ๊ฐ„๊ณผ ์‹ ๋ขฐ๋ฅผ ๋‚ญ๋น„ํ•  ์ˆ˜ ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ์กด์žฌํ•ฉ๋‹ˆ๋‹ค. ์ˆ˜๋งŽ์€ ์‹œํ–‰์ฐฉ์˜ค ๋์— ๋„ค ๊ฐ€์ง€ ๋ถˆ๊ฐ€์นจ ๊ทœ์น™๊ณผ ํ•˜๋‚˜์˜ ๋ฐฉ๋ฒ•๋ก ์ด ๋„์ถœ๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ์ด๋ฅผ ์ •ํ™•ํžˆ ๋”ฐ๋ฅด์„ธ์š”.

์‚ฌ์šฉ์ž๊ฐ€ /bluespec.* ๋ช…๋ น(charter, detect, plan, harden, verify) ์ค‘ ํ•˜๋‚˜๋ฅผ "์‹œ๋ฎฌ๋ ˆ์ด์…˜", "๋ฐ๋ชจ", "์‹ค์ œ๋กœ ๋ณด์—ฌ์ค˜", "์‹คํ–‰", ๋˜๋Š” "์‹ค์ œ ๋™์ž‘"์„ ์š”์ฒญํ•˜๊ฑฐ๋‚˜, ๋ช…๋ น์„ ์‹ค์ œ๋กœ ์ ์šฉํ•˜๊ธฐ ์ „์— ์–ด๋–ป๊ฒŒ ๋™์ž‘ํ•˜๋Š”์ง€ ๋ฏธ๋ฆฌ ๋ณด๋ ค๊ณ  ํ•  ๋•Œ ์ด ์Šคํ‚ฌ์„ ์‚ฌ์šฉํ•˜์„ธ์š”.

์‹œ์ž‘ํ•˜๊ธฐ ์ „์— (ํ•„์ˆ˜)

์‹œ๋ฎฌ๋ ˆ์ด์…˜์„ ์‹œ์ž‘ํ•˜๊ฑฐ๋‚˜, ์‹œ๋‚˜๋ฆฌ์˜ค๋ฅผ ๊ตฌ์„ฑํ•˜๊ฑฐ๋‚˜, ํ”ฝ์Šค์ฒ˜๋ฅผ ๋ณต์‚ฌํ•˜๊ธฐ ์ „์— ๋‹ค์Œ ๋‘ ๊ฐ€์ง€๊ฐ€ ๋ฐ˜๋“œ์‹œ ์ˆœ์„œ๋Œ€๋กœ ํ•ด๊ฒฐ๋˜์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค:

  1. ์‚ฌ์šฉ์ž๋Š” ์–ด๋–ค Blue Spec ๋ช…๋ น์„ ์‹œ๋ฎฌ๋ ˆ์ด์…˜ํ• ์ง€ ์•Œ๋ ค์ค˜์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์ด๋Š” ํ•„์ˆ˜์ด๋ฉฐ, ์ ˆ๋Œ€ ์ถ”์ธกํ•˜๊ฑฐ๋‚˜ ์„ ํƒํ•˜์ง€ ๋งˆ์„ธ์š”. ์‚ฌ์šฉ์ž๊ฐ€ ๋ช…๋ น(charter, detect, plan, harden, ๋˜๋Š” verify)์„ ์ง€์ •ํ•˜์ง€ ์•Š์•˜๋‹ค๋ฉด, ๋‹ค๋ฅธ ์ž‘์—…์„ ํ•˜๊ธฐ ์ „์— ๋จผ์ € ์–ด๋–ค ๋ช…๋ น์ธ์ง€ ๋ฌผ์–ด๋ณด์„ธ์š”. ๋‘ ๊ฐœ ์ด์ƒ์„ ์ง€์ •ํ–ˆ๋‹ค๋ฉด, ์‹คํ–‰ํ•  ์ˆœ์„œ๋ฅผ ํ™•์ธํ•˜์„ธ์š”.
  2. ๊ทธ๋Ÿฐ ๋‹ค์Œ ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•œ ํ”ฝ์Šค์ฒ˜(fixture)๋ฅผ ๋ฒˆํ˜ธ ๋ชฉ๋ก์œผ๋กœ ์ œ์‹œํ•˜๊ณ  ์‚ฌ์šฉ์ž๊ฐ€ ์„ ํƒํ•˜๋„๋ก ํ•ฉ๋‹ˆ๋‹ค. ๋ช…๋ น์ด ์ •ํ•ด์ง€๋ฉด .claude/skills/simulate/fixtures/ ๋””๋ ‰ํ† ๋ฆฌ์—์„œ ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•œ ํ”ฝ์Šค์ฒ˜๋ฅผ ๊ฐ ์‹œ๋‚˜๋ฆฌ์˜ค๋ฅผ ํ•œ ์ค„๋กœ ์„ค๋ช…ํ•˜์—ฌ ๋ฒˆํ˜ธ ๋ชฉ๋ก์œผ๋กœ ๋ณด์—ฌ์ฃผ๊ณ , ์‚ฌ์šฉ์ž์—๊ฒŒ ๋ฒˆํ˜ธ๋กœ ํ•˜๋‚˜๋ฅผ ์„ ํƒํ•ด ๋‹ฌ๋ผ๊ณ  ์š”์ฒญํ•˜์„ธ์š”. ์ž๋™์œผ๋กœ ํŠน์ • ํ”ฝ์Šค์ฒ˜๋ฅผ ์„ ํƒํ•˜์ง€ ๋งˆ์„ธ์š”. ํ”ฝ์Šค์ฒ˜๊ฐ€ ํ•˜๋‚˜๋งŒ ์žˆ๋”๋ผ๋„, ๊ทธ๊ฒƒ์„ ์ œ์‹œํ•˜๊ณ  ์‚ฌ์šฉํ•˜๊ธฐ ์ „์— ํ™•์ธ์„ ๋ฐ›์œผ์„ธ์š”. ์–ด๋–ค ํ”ฝ์Šค์ฒ˜๋„ ๋ช…๋ น์— ์ ํ•ฉํ•˜์ง€ ์•Š๋‹ค๋ฉด, ๊ทธ๋ ‡๊ฒŒ ๋งํ•˜๊ณ  ์ƒˆ ํ”ฝ์Šค์ฒ˜๋ฅผ ์ถ”๊ฐ€ํ•˜๊ฒ ๋‹ค๊ณ  ์ œ์•ˆํ•˜์„ธ์š” (ํ”ฝ์Šค์ฒ˜ ์„น์…˜ ์ฐธ๊ณ ).

๋ช…๋ น์ด ์ง€์ •๋˜๊ณ  ํ”ฝ์Šค์ฒ˜๊ฐ€ ์„ ํƒ๋œ ํ›„์—๋งŒ ์•„๋ž˜์˜ ๊ทœ์น™๊ณผ ๋ฐฉ๋ฒ•์„ ์ง„ํ–‰ํ•ฉ๋‹ˆ๋‹ค.

์ด ์Šคํ‚ฌ์ด ์กด์žฌํ•˜๋Š” ์ด์œ  (๋จผ์ € ์ฝ์œผ์„ธ์š”)

Blue Spec ๋ช…๋ น์€ ๋…๋ฆฝ ์‹คํ–‰ํ˜• ํ”„๋กœ๊ทธ๋žจ์ด ์•„๋‹™๋‹ˆ๋‹ค. ์ด๊ฒƒ์€ AI ์—์ด์ „ํŠธ์—๊ฒŒ ๋ณด์•ˆ ์ž‘์—…์˜ ํ•œ ๋‹จ๊ณ„๋ฅผ ์ˆ˜ํ–‰ํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ์•Œ๋ ค์ฃผ๋Š” ๋ช…๋ น์–ด ํŒŒ์ผ(spec/commands/bluespec.<phase>.md, ์—์ด์ „ํŠธ๊ฐ€ ์ฝ๋Š” ์Šคํ‚ฌ๋กœ ์Šค์บํด๋”ฉ๋จ)์ž…๋‹ˆ๋‹ค. "๋ช…๋ น์„ ์‹คํ–‰ํ•œ๋‹ค"๋Š” ๊ฒƒ์€ ์—์ด์ „ํŠธ๊ฐ€ ๊ทธ ์ง€์นจ์„ ๋”ฐ๋ฅด๋Š” ๊ฒƒ์„ ์˜๋ฏธํ•ฉ๋‹ˆ๋‹ค. ์—์ด์ „ํŠธ์™€ ๋…๋ฆฝ์ ์œผ๋กœ ๊ฒฐ์ •์ ์ธ ๊ฒฐ๊ณผ๋ฅผ ๋‚ด๋†“๋Š” ๋ฐ”์ด๋„ˆ๋ฆฌ ๊ฐ™์€ ๊ฒƒ์€ ์—†์Šต๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ "์‹œ๋ฎฌ๋ ˆ์ด์…˜"์€ ์—์ด์ „ํŠธ๊ฐ€ ์‹ค์ œ ์‹œ๋‚˜๋ฆฌ์˜ค๋ฅผ ๋Œ€์ƒ์œผ๋กœ ๋ช…๋ น์˜ ๋‹จ๊ณ„๋ฅผ ์‹ค์ œ๋กœ ์ˆ˜ํ–‰ํ•˜๋ฉด์„œ ๊ทธ ์ž‘์—… ๊ณผ์ •์„ ๋ณด์—ฌ์ฃผ๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.

ํ”ผํ•ด์•ผ ํ•  ์‹คํŒจ ํŒจํ„ด: ๋ช…๋ น์ด ์ถœ๋ ฅํ•  ๊ฒƒ์ด๋ผ๊ณ  ์ƒ์ƒํ•˜๋Š” ๋‚ด์šฉ์„ ์„œ์ˆ ํ•˜๊ณ , ๋งˆ์น˜ ํ„ฐ๋ฏธ๋„ ์ถœ๋ ฅ์ฒ˜๋Ÿผ ๋ณด์ด๊ฒŒ ํฌ๋งทํŒ…ํ•œ ๋‹ค์Œ, ์‹ค์ œ๋กœ ์‹คํ–‰๋œ ๊ฒƒ์ฒ˜๋Ÿผ ์ œ์‹œํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๊ทธ๊ฒƒ์€ ์—ฐ๊ทน์ผ ๋ฟ์ž…๋‹ˆ๋‹ค. ์‚ฌ์šฉ์ž๋Š” ๋งŒ๋“ค์–ด์ง„ ์ถœ๋ ฅ๊ณผ ์‹ค์ œ ์ถœ๋ ฅ์„ ๊ตฌ๋ถ„ํ•  ์ˆ˜ ์—†์œผ๋ฉฐ, ๋‹น์—ฐํžˆ ๊ทธ๊ฒƒ์„ "ํ—ˆ๊ตฌ"๋ผ๊ณ  ๋ถ€๋ฅผ ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์•„๋ž˜์˜ ๋ชจ๋“  ๋‚ด์šฉ์€ ์‹œ๋ฎฌ๋ ˆ์ด์…˜์ด ์‹ค์ œ๋กœ ์ˆ˜ํ–‰๋˜๊ณ  ์‚ฌ์šฉ์ž๊ฐ€ ํ™•์ธํ•  ์ˆ˜ ์žˆ๋„๋ก ๋งŒ๋“ค๊ธฐ ์œ„ํ•ด ์„ค๊ณ„๋œ ๊ฒƒ์ด์ง€, ์‡ผ๋ฅผ ์œ„ํ•œ ๊ฒƒ์ด ์•„๋‹™๋‹ˆ๋‹ค.

๋„ค ๊ฐ€์ง€ ๋ถˆ๊ฐ€์นจ ๊ทœ์น™

๊ทœ์น™ 1: ./temp ๋””๋ ‰ํ† ๋ฆฌ ์•„๋ž˜์—์„œ ์‹œ๋‚˜๋ฆฌ์˜ค ์‹คํ–‰

์‹œ๋ฎฌ๋ ˆ์ด์…˜์ด ๋‹ค๋ฃจ๋Š” ๋ชจ๋“  ๊ฒƒ(ํ”ฝ์Šค์ฒ˜, ๋‹จ๊ณ„๊ฐ€ ์ƒ์„ฑํ•˜๋Š” .bluespec/memory/ ์•„ํ‹ฐํŒฉํŠธ, ๋ชจ๋“  ์ž…๋ ฅ)์„ ์‹œ์Šคํ…œ /tmp๊ฐ€ ์•„๋‹Œ ์ €์žฅ์†Œ ๋ฃจํŠธ์˜ ./temp ๋””๋ ‰ํ† ๋ฆฌ ์•ˆ์— ๊ตฌ์ถ•ํ•˜์„ธ์š”.

  • /tmp๋Š” ์‚ฌ์šฉ์ž์—๊ฒŒ ๋ณด์ด์ง€ ์•Š์Šต๋‹ˆ๋‹ค: ์—๋””ํ„ฐ์—์„œ ํ•ด๋‹น ํŒŒ์ผ์„ ์—ด ์ˆ˜ ์—†์œผ๋ฏ€๋กœ, ๊ฑฐ๊ธฐ์„œ ํ•˜๋Š” ๋ชจ๋“  ์ž‘์—…์€ "์ €๋ฅผ ๋ฏฟ์œผ์„ธ์š”"๊ฐ€ ๋ฉ๋‹ˆ๋‹ค. ./temp๋Š” ์‚ฌ์šฉ์ž์˜ ์ž‘์—… ๊ณต๊ฐ„์— ์žˆ์œผ๋ฉฐ, ์—ด๊ณ  ๊ฒ€์‚ฌํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  • ./temp๋Š” git์— ๋ฌด์‹œ๋˜๋ฏ€๋กœ(.gitignore ์ฒ˜๋ฆฌ), ์‹œ๋ฎฌ๋ ˆ์ด์…˜์ด ์ปค๋ฐ‹์„ ์˜ค์—ผ์‹œํ‚ค์ง€ ์•Š์Šต๋‹ˆ๋‹ค.
  • ์‚ฌ์šฉ์ž๊ฐ€ ์ž‘์—…์„ ๋งˆ์น˜๋ฉด ./temp๋ฅผ ์ •๋ฆฌํ•˜๊ฑฐ๋‚˜, ๊ฒ€์‚ฌํ•  ์ˆ˜ ์žˆ๋„๋ก ๋‚จ๊ฒจ๋‘๋˜, ๋จผ์ € ์‚ฌ์šฉ์ž์—๊ฒŒ ๋ฌผ์–ด๋ณด์„ธ์š”.

ํ”ฝ์Šค์ฒ˜: ๋ชจ๋“  ์‹œ๋ฎฌ๋ ˆ์ด์…˜์€ ํ•˜๋‚˜์˜ ํ”ฝ์Šค์ฒ˜์—์„œ ์‹œ์ž‘

์ค‘๋ฆฝ์ ์ธ ์ƒ˜ํ”Œ ํ”„๋กœ์ ํŠธ๋Š” ์ด ์Šคํ‚ฌ ์˜†์— ์ œ๊ณต๋˜๋ฉฐ, ๊ฐ๊ฐ .claude/skills/simulate/fixtures/<name>/ ๋””๋ ‰ํ† ๋ฆฌ์— ์žˆ์Šต๋‹ˆ๋‹ค. ๋ช…๋ น์ด ํ•„์š”๋กœ ํ•˜๋Š” ์‹œ๋‚˜๋ฆฌ์˜ค์— ๋งž๋Š” ํ”ฝ์Šค์ฒ˜๋ฅผ ์„ ํƒํ•˜๊ฑฐ๋‚˜, ์ƒˆ ํ”ฝ์Šค์ฒ˜๋ฅผ ์ถ”๊ฐ€ํ•˜์„ธ์š” (์•„๋ž˜ ์ฐธ๊ณ ). ๋ชจ๋“  ํ”ฝ์Šค์ฒ˜๋Š” ์ž‘๊ณ  ์‹ค์ œ์ ์ธ ํ”„๋กœ์ ํŠธ๋กœ, **์ค‘๋ฆฝ์ ์ธ ์Œ(neutral pairs)**์œผ๋กœ ์˜๋„์ ์œผ๋กœ ๊ฒฌ๊ณ ํ•œ ์ฝ”๋“œ์™€ ์ทจ์•ฝํ•œ ์ฝ”๋“œ๋ฅผ ๋ชจ๋‘ ํฌํ•จํ•˜๊ณ  ์žˆ์–ด ๋ช…๋ น์ด ๋ ˆ์ด๋ธ”์„ ์ฝ๋Š” ๊ฒƒ์ด ์•„๋‹Œ ์ฝ”๋“œ๋ฅผ ๋ถ„์„ํ•˜๋„๋ก ํ•ฉ๋‹ˆ๋‹ค.

์‚ฌ์šฉ ๊ฐ€๋Šฅํ•œ ํ”ฝ์Šค์ฒ˜:

  • image-upload-service: ์ด๋ฏธ์ง€ ์—…๋กœ๋“œ๋ฅผ ๋ฐ›๊ณ  ๋‹ค์‹œ ์ œ๊ณตํ•˜๋Š” ์ž‘์€ ESM HTTP ์„œ๋น„์Šค์ž…๋‹ˆ๋‹ค.
  • template-toolkit: ํ…œํ”Œ๋ฆฟ ๋ Œ๋”๋ง ๋ฐ ํ…์ŠคํŠธ ํŒŒ์‹ฑ์„ ์œ„ํ•œ, ๋ฐฐํฌ ๊ฐ€๋Šฅํ•œ ESM npm ํŒจํ‚ค์ง€(๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ + tmpl CLI)์ž…๋‹ˆ๋‹ค.

ํ•ญ์ƒ ํ•˜๋‚˜์˜ ํ”ฝ์Šค์ฒ˜๋ฅผ ๊ทธ๋Œ€๋กœ ./temp ๋””๋ ‰ํ† ๋ฆฌ๋กœ ๋ณต์‚ฌํ•˜์—ฌ ์‹œ๋ฎฌ๋ ˆ์ด์…˜์„ ์‹œ์ž‘ํ•˜์„ธ์š”. ๋งŒ์•ฝ ./temp๊ฐ€ ์ด๋ฏธ ์กด์žฌํ•˜๊ณ  ๋น„์–ด์žˆ์ง€ ์•Š๋‹ค๋ฉด, ๋จผ์ € ๋น„์šด ํ›„ ๊ฐ ์‹คํ–‰์ด ๊นจ๋—ํ•˜๊ฒŒ ์‹œ์ž‘๋˜๋„๋ก ํ•˜์„ธ์š” (<name>์„ ์„ ํƒํ•œ ํ”ฝ์Šค์ฒ˜ ์ด๋ฆ„์œผ๋กœ ๋ฐ”๊พธ์„ธ์š”):

rm -rf ./temp && mkdir -p ./temp
cp -R .claude/skills/simulate/fixtures/<name>/. ./temp/

๊ทธ๋Ÿฐ ๋‹ค์Œ ๊ทœ์น™ 4์— ๋”ฐ๋ผ ์ƒ์œ„ ๋‹จ๊ณ„๋ฅผ ์‹ค์ œ๋กœ ์‹คํ–‰ํ•˜์—ฌ ./temp์— ์ฒด์ธ์„ ๊ตฌ์ถ•ํ•˜์„ธ์š”. ๋ช…๋ น์ด ์ฝ๋Š” .bluespec/memory/*.md ์•„ํ‹ฐํŒฉํŠธ๋Š” ์ง์ ‘ ์ž‘์„ฑ๋œ ๊ฒƒ์ด ์•„๋‹ˆ๋ผ ํ•ด๋‹น ๋‹จ๊ณ„ ์ž์ฒด์— ์˜ํ•ด ์ƒ์„ฑ๋˜์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ๊ทœ์น™ 3์— ๋”ฐ๋ผ ์‚ฌ์–‘์„ ๋ฌธ์ž ๊ทธ๋Œ€๋กœ ๋”ฐ๋ฅด๋ฉฐ ./temp๋ฅผ ๋Œ€์ƒ์œผ๋กœ ๋ช…๋ น์˜ ๋‹จ๊ณ„๋ฅผ ์‹คํ–‰ํ•˜๊ณ , ๊ทœ์น™ 2์— ๋”ฐ๋ผ ๊ฐ ๋‹จ๊ณ„์˜ ์ถœ๋ ฅ์„ ๋ณด์—ฌ์ฃผ์„ธ์š”.

ํ”ฝ์Šค์ฒ˜๋ฅผ ์ถ”๊ฐ€ํ•˜๋ ค๋ฉด .claude/skills/simulate/fixtures/<new-name>/ ๋””๋ ‰ํ† ๋ฆฌ๋ฅผ ์ž์ฒด package.json์„ ๊ฐ€์ง„ ์ž‘๊ณ  ์‹ค์ œ์ ์ธ ํ”„๋กœ์ ํŠธ๋กœ ๋งŒ๋“ค๊ณ , ๊ฒฌ๊ณ ํ•œ ์ฝ”๋“œ์™€ ์ทจ์•ฝํ•œ ์ฝ”๋“œ๋ฅผ ์ค‘๋ฆฝ์ ์ธ ์Œ์œผ๋กœ ์œ ์ง€ํ•˜๋ฉฐ, ๋‚ด์šฉ์„ ์•”์‹œํ•˜๋Š” ์ฃผ์„์ด๋‚˜ ์ด๋ฆ„์„ ์ถ”๊ฐ€ํ•˜์ง€ ๋งˆ์„ธ์š”. ๊ทธ๋ฆฌ๊ณ  ์œ„ ๋ชฉ๋ก์— ์ถ”๊ฐ€ํ•˜์„ธ์š”. ํ˜„์žฌ ํ”ฝ์Šค์ฒ˜๊ฐ€ ๋‹ค๋ฃจ์ง€ ์•Š๋Š” ์ž๋ฃŒ(๋‹ค๋ฅธ ์–ธ์–ด๋‚˜ ์Šคํƒ, ๋น„๋ฐ€ ์ฒ˜๋ฆฌ, ์ธ์ฆ, ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ๋“ฑ)๊ฐ€ ๋ช…๋ น์— ํ•„์š”ํ•  ๋•Œ ์ถ”๊ฐ€ํ•˜์„ธ์š”.

๊ทœ์น™ 2: ํ”„๋กฌํ”„ํŠธ์™€ ์‘๋‹ต์„ ์ฑ„ํŒ… ๋ฉ”์‹œ์ง€์— ํŽœ์Šค ์ฝ”๋“œ ๋ธ”๋ก์œผ๋กœ ํ‘œ์‹œ

์ด ๊ทœ์น™์„ ๋ฐฐ์šฐ๋Š” ๋ฐ ๊ฐ€์žฅ ์˜ค๋žœ ์‹œ๊ฐ„์ด ๊ฑธ๋ ธ์Šต๋‹ˆ๋‹ค. ๋„๊ตฌ(Bash, Read)๋ฅผ ์‹คํ–‰ํ•  ๋•Œ, ์‚ฌ์šฉ์ž ์ธํ„ฐํŽ˜์ด์Šค๋Š” ํ•ด๋‹น ๋„๊ตฌ์˜ IN๊ณผ OUT์— ๋Œ€ํ•œ ์ž˜๋ฆฐ ๋ฏธ๋ฆฌ๋ณด๊ธฐ๋ฅผ ๋ณด์—ฌ์ค๋‹ˆ๋‹ค. ์–ผ๋งˆ๋‚˜ ๋งŽ์ด ๋ณด์—ฌ์ค„์ง€๋Š” ํ†ต์ œํ•  ์ˆ˜ ์—†์œผ๋ฉฐ, ๋Œ€๋ถ€๋ถ„ ์ž˜๋ ค์„œ ๋ณด์ž…๋‹ˆ๋‹ค. ๋งŒ์•ฝ ์ฃผ์žฅ์„ ๋’ท๋ฐ›์นจํ•˜๋Š” ์ฆ๊ฑฐ๊ฐ€ ๋„๊ตฌ ํ˜ธ์ถœ์˜ ์ถœ๋ ฅ ์•ˆ์—๋งŒ ์žˆ๋‹ค๋ฉด, ์‚ฌ์šฉ์ž๋Š” ๊ทธ๊ฒƒ์„ ๋ณผ ์ˆ˜ ์—†๊ณ , ๊ทธ๊ฒƒ์„ ์„ค๋ช…ํ•˜๋Š” ์–ด๋–ค ๋ฌธ์žฅ๋„ ํ—ˆ๊ตฌ์ฒ˜๋Ÿผ ์ฝํž ๊ฒƒ์ž…๋‹ˆ๋‹ค.

๋”ฐ๋ผ์„œ:

  • ๋„๊ตฌ๋ฅผ ์‹คํ–‰ํ•œ ํ›„, ๊ด€๋ จ ์›์‹œ ์ถœ๋ ฅ์„ ํŽœ์Šค ์ฝ”๋“œ ๋ธ”๋ก(์‚ผ์ค‘ ๋ฐฑํ‹ฑ ```)์œผ๋กœ ๋ณต์‚ฌํ•˜์—ฌ ์ผ๋ฐ˜ ์ฑ„ํŒ… ๋ฉ”์‹œ์ง€์— ๋„ฃ์œผ์„ธ์š”. ํŽœ์Šค ๋ธ”๋ก์€ ๋ชจ๋“  ์ธํ„ฐํŽ˜์ด์Šค์—์„œ ์™„์ „ํ•˜๊ณ  ๋™์ผํ•˜๊ฒŒ ๋ Œ๋”๋ง๋ฉ๋‹ˆ๋‹ค. ์ด๊ฒƒ์ด ์‚ฌ์šฉ์ž๊ฐ€ ์˜๋ฏธํ•˜๋Š” "๋…ธ๋ž€ ๊ธ€์”จ(yellow letters)", ์ฆ‰ ๋งˆํฌ๋‹ค์šด ์ฝ”๋“œ ๋ธ”๋ก์ž…๋‹ˆ๋‹ค.
  • ๋ช…๋ น์˜ ํ”„๋กฌํ”„ํŠธ์™€ ์ƒํ˜ธ์ž‘์šฉ(์ฆ‰, /bluespec.<phase>๊ฐ€ ์‹คํ–‰๋  ๋•Œ ๋ณด์—ฌ์ฃผ๋Š” ๋‹จ๊ณ„๋ณ„ ์ง„ํ–‰, ๋ฒ”์œ„ ๊ฒฐ์ •, ํŒ์ • ๋“ฑ)๋„ ํŽœ์Šค ์ฝ”๋“œ ๋ธ”๋ก์— ๋Œ€ํ™”๋ก์ฒ˜๋Ÿผ ๋„ฃ์œผ์„ธ์š”.
  • ์ ˆ๋Œ€ ๋„๊ตฌ ํ˜ธ์ถœ์„ ๊ฐ€๋ฆฌํ‚ค๋ฉฐ "์œ„ ์ถœ๋ ฅ์ด X๋ฅผ ๋ณด์—ฌ์ค๋‹ˆ๋‹ค"๋ผ๊ณ  ์“ฐ์ง€ ๋งˆ์„ธ์š”. ์‚ฌ์šฉ์ž๊ฐ€ ์ „์ฒด๋ฅผ ์ฝ์„ ์ˆ˜ ์žˆ๋„๋ก ๋‹น์‹ ์ด ๋ถ™์—ฌ๋„ฃ์€ ํŽœ์Šค ๋ธ”๋ก์„ ๊ฐ€๋ฆฌํ‚ค์„ธ์š”.
  • ๋Œ€ํ™”๋ก์— ์žˆ๋Š” ์ˆซ์ž๋‚˜ ์ค„์ด ์‹ค์ œ ์‹คํ–‰์—์„œ ๋‚˜์˜จ ๊ฒƒ์ด๋ผ๋ฉด, ๋‹น์‹ ์ด ๋ถ™์—ฌ๋„ฃ์€ ์›์‹œ ์ถœ๋ ฅ๊ณผ ์ผ์น˜ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ๋ถ™์—ฌ๋„ฃ์€ ์›์‹œ ์ถœ๋ ฅ์œผ๋กœ ๋’ท๋ฐ›์นจ๋˜์ง€ ์•Š๋Š” ๋Œ€ํ™”๋ก ์ค„์„ ์ž‘์„ฑํ•œ๋‹ค๋ฉด, ๊ทธ๊ฒƒ์€ ์ง€์–ด๋‚ด๋Š” ๊ฒƒ์ด๋‹ˆ ์ค‘๋‹จํ•˜์„ธ์š”.

์‹ ๋ขฐํ•  ์ˆ˜ ์žˆ๋Š” ํŒจํ„ด: ๋ช…๋ น์„ ์‹คํ–‰ํ•˜๊ณ , ์›์‹œ ์ถœ๋ ฅ์„ ./temp ์•„๋ž˜ ํŒŒ์ผ(์˜ˆ: ./temp/run.log)๋กœ ๋ฆฌ๋””๋ ‰์…˜ํ•œ ๋‹ค์Œ, ํ•ด๋‹น ํŒŒ์ผ์„ Readํ•˜๊ณ  (Read ๊ฒฐ๊ณผ๋Š” ์ „์ฒด๊ฐ€ ํ‘œ์‹œ๋จ) ๊ทธ ๋‚ด์šฉ์„ ํŽœ์Šค ๋ธ”๋ก์— ๋ถ™์—ฌ๋„ฃ์œผ์„ธ์š”. ์‚ฌ์šฉ์ž๋Š” ๋˜ํ•œ ./temp/run.log๋ฅผ ์—ด์–ด ํ™•์ธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๋งˆ์ง€๋ง‰์— ํ•œ๊บผ๋ฒˆ์— ๋ชจ์•„์„œ ๋ณด์—ฌ์ฃผ์ง€ ๋ง๊ณ , ์ง„ํ–‰ํ•˜๋ฉด์„œ ๋ฐ”๋กœ๋ฐ”๋กœ ๋ณด์—ฌ์ฃผ์„ธ์š”. ํŠธ๋ฆฌ๊ฑฐ๋Š” ๋‹จ๊ณ„๋ณ„์ž…๋‹ˆ๋‹ค: ๋‹จ๊ณ„๊ฐ€ ์‚ฌ์šฉ์ž๊ฐ€ ๋ด์•ผ ํ•  ๋ฌด์–ธ๊ฐ€(์ฝ์€ ์ž…๋ ฅ, ๋Œ€ํ™”๋ก, ์ž‘์„ฑํ•œ ์•„ํ‹ฐํŒฉํŠธ)๋ฅผ ์ƒ์„ฑํ•˜๋Š” ์ฆ‰์‹œ, ๋‹ค์Œ ๋‹จ๊ณ„ ์ „์— ๊ฐ™์€ ๋ฉ”์‹œ์ง€์˜ ํŽœ์Šค ๋ธ”๋ก์— ๋ถ™์—ฌ๋„ฃ์œผ์„ธ์š”. ๋งŒ์•ฝ ๋‹ค์Œ ๋‹จ๊ณ„๋‚˜ ์ˆ˜์ •์„ ์‹œ์ž‘ํ•˜๋ ค๊ณ  ํ•˜๋Š”๋ฐ ์ด์ „ ๋‹จ๊ณ„์˜ ์ถœ๋ ฅ์ด ์•„์ง ํ™”๋ฉด์— ์—†๋‹ค๋ฉด, ๋ฉˆ์ถ”๊ณ  ๋จผ์ € ๋ถ™์—ฌ๋„ฃ์œผ์„ธ์š”. ์‚ฌ์šฉ์ž๊ฐ€ ๋ช…๋ น์˜ ์ถœ๋ ฅ์„ ๋ณด์—ฌ๋‹ฌ๋ผ๊ณ  ์ƒ๊ธฐ์‹œ์ผœ์•ผ ํ•œ๋‹ค๋ฉด, ์ด๋ฏธ ๊ทœ์น™์„ ์œ„๋ฐ˜ํ•œ ๊ฒƒ์ž…๋‹ˆ๋‹ค.

๊ทœ์น™ 3: ๋‹น์‹ ์ด ๋ช…๋ น์ด๋ฏ€๋กœ, ๊ทธ ์‚ฌ์–‘์„ ๋ฌธ์ž ๊ทธ๋Œ€๋กœ ๋”ฐ๋ฅด์„ธ์š”

"๋ช…๋ น ์‹คํ–‰"์€ ๋‹น์‹ ์ด spec/commands/bluespec.<phase>.md๋ฅผ ๋‹จ๊ณ„๋ณ„๋กœ ์‹คํ–‰ํ•˜๋Š” ๊ฒƒ์ด์ง€, ๋‹น์‹ ๋งŒ์˜ ๋ฐฉ์‹์œผ๋กœ ๋‹จ๊ณ„๋ฅผ ์ˆ˜ํ–‰ํ•˜๊ณ  ๊ทธ๊ฒƒ์„ ๋ช…๋ น์ด๋ผ๊ณ  ๋ถ€๋ฅด๋Š” ๊ฒƒ์ด ์•„๋‹™๋‹ˆ๋‹ค.

  • ๋จผ์ € ํ•ด๋‹น ์‚ฌ์–‘์„ ์—ด๊ณ  ๋‹จ์ผ ์ง„์‹ค ๊ณต๊ธ‰์›์œผ๋กœ ์ทจ๊ธ‰ํ•˜์„ธ์š”. ์ˆœ์„œ๋Œ€๋กœ ๋‹จ๊ณ„๋ฅผ ๋”ฐ๋ฅด์„ธ์š”. ๊ธฐ์–ต์ด๋‚˜ ์ด ์Šคํ‚ฌ์˜ ์š”์•ฝ์—์„œ ๋‹จ๊ณ„๋ฅผ ์‹คํ–‰ํ•˜์ง€ ๋งˆ์„ธ์š”.
  • ์‚ฌ์–‘์ด ์š”๊ตฌํ•˜๋Š” ๋ชจ๋“  ํ™•์ธ ์ค‘๋‹จ(confirmation stop)์„ ์‹ค์ œ๋กœ ์ˆ˜ํ–‰ํ•˜์„ธ์š”. harden์€ ์ฝ”๋“œ๋ฅผ ํŽธ์ง‘ํ•˜๊ธฐ ์ „์— ๋ฐ˜๋“œ์‹œ ํ™•์ธ์„ ๋ฐ›์•„์•ผ ํ•˜๋ฉฐ, ์ „์ฒด detect ์Šค์บ”์€ ํ† ํฐ์„ ๋งŽ์ด ์‚ฌ์šฉํ•˜๊ธฐ ๋•Œ๋ฌธ์— ํ™•์ธ์ด ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค. ์‚ฌ์–‘์ด ์ œ์‹œํ•˜๋ผ๊ณ  ํ•˜๋Š” ๋‚ด์šฉ์„ ๋Œ€ํ™”๋ก ๋ธ”๋ก์— ์ œ์‹œํ•˜๊ณ  ๊ธฐ๋‹ค๋ฆฌ์„ธ์š”. ํ™•์ธ ์—†์ด ์ฝ”๋“œ๋ฅผ ํŽธ์ง‘ํ•˜๊ฑฐ๋‚˜ ์ค‘๋‹จ๋œ ๋‹จ๊ณ„๋ฅผ ์‹คํ–‰ํ•˜์ง€ ๋งˆ์„ธ์š”.
  • ๋ฒ”์œ„, ํŒ์ •, ์ˆ˜์ •, ์šฐ์„ ์ˆœ์œ„, ๋ฐœ๊ฒฌ ์‚ฌํ•ญ์„ ์‹ค์ œ ์‹œ๋‚˜๋ฆฌ์˜ค๋ฅผ ๋ฐ”ํƒ•์œผ๋กœ ์‚ฌ์–‘์˜ ๋‹จ๊ณ„๊ฐ€ ๊ฒฐ์ •ํ•˜๋Š” ๋ฐฉ์‹์œผ๋กœ ๊ฒฐ์ •ํ•˜์„ธ์š”. ๋งŒ์•ฝ ์ถœ๋ ฅ์˜ ํ•œ ์ค„์„ ์ •๋‹นํ™”ํ•˜๋Š” ์‚ฌ์–‘ ๋‹จ๊ณ„๋ฅผ ๊ฐ€๋ฆฌํ‚ฌ ์ˆ˜ ์—†๋‹ค๋ฉด, ๋‹น์‹ ์€ ๋‹น์‹  ์ž์‹ ์œผ๋กœ ํ–‰๋™ํ•˜๊ณ  ์žˆ๋Š” ๊ฒƒ์ด๋ฏ€๋กœ, ์ค‘๋‹จํ•˜๊ณ  ์‚ฌ์–‘์„ ๋”ฐ๋ฅด์„ธ์š”.

๊ทœ์น™ 4: ๊ฐ ๋‹จ๊ณ„์˜ ์ž…๋ ฅ์€ ๋‹น์‹ ์ด ์•„๋‹Œ ์ด์ „ ๋‹จ๊ณ„ ์‹คํ–‰์—์„œ ๋‚˜์™€์•ผ ํ•จ

์ฒด์ธ์€ charter โ†’ detect โ†’ plan โ†’ harden โ†’ verify ์ˆœ์„œ์ด๋ฉฐ, ๊ฐ ๋‹จ๊ณ„๋Š” ์ด์ „ ๋‹จ๊ณ„๊ฐ€ ์ž‘์„ฑํ•œ ๋‚ด์šฉ์„ ์ฝ์Šต๋‹ˆ๋‹ค. ๋‹น์‹ ์ด ์˜ˆ์ƒํ•˜๋Š” ๋‹ต๋ณ€์ด ์ด๋ฏธ ๊ธฐ๋ก๋œ ํ•˜์œ„ ๋‹จ๊ณ„ ์•„ํ‹ฐํŒฉํŠธ(์˜ˆ๋ฅผ ๋“ค์–ด, verify๊ฐ€ ํ™•์ธํ•˜๊ฑฐ๋‚˜ ์žก์•„๋‚ด๊ธธ ์›ํ•˜๋Š” ๊ฒƒ์„ ์ •ํ™•ํžˆ ๊ธฐ๋กํ•œ harden.md)๋ฅผ ์ง์ ‘ ์ž‘์„ฑํ•˜๋Š” ๊ฒƒ์€ ์‹คํŒจ์ž…๋‹ˆ๋‹ค: ๊ทธ๋Ÿฌ๋ฉด ํ•˜์œ„ ๋‹จ๊ณ„๋Š” ์‹ค์ œ ์ƒํ™ฉ์ด ์•„๋‹Œ ๋‹น์‹ ์˜ ์˜ˆ์ธก์„ ๋Œ€์ƒ์œผ๋กœ ํ…Œ์ŠคํŠธ๋˜๋ฏ€๋กœ, ๋‹น์‹ ์ด ๋†“์นœ ๊ฒƒ์„ ๊ทธ๋Œ€๋กœ ๋†“์น˜๊ฒŒ ๋ฉ๋‹ˆ๋‹ค.

  • ๋ชจ๋“  ์ƒ์œ„ ๋‹จ๊ณ„ ์•„ํ‹ฐํŒฉํŠธ๋ฅผ ํ•ด๋‹น ๋‹จ๊ณ„๋ฅผ ์‹คํ–‰ํ•˜์—ฌ ์ƒ์„ฑํ•˜๊ณ , ๊ทœ์น™ 2์— ๋”ฐ๋ผ ๊ทธ ๊ณผ์ •์„ ๋ณด์—ฌ์ฃผ์„ธ์š”. verify๋ฅผ ๋ฐ๋ชจํ•˜๋ ค๋ฉด, detect(์ฝ”๋“œ ์ฝ๊ธฐ)๋ฅผ ์‹คํ–‰ํ•˜๊ณ , plan(detect.md ์ฝ๊ธฐ)์„ ์‹คํ–‰ํ•˜๊ณ , harden(plan.md ์ฝ๊ธฐ, ์ฝ”๋“œ ํŽธ์ง‘)์„ ์‹คํ–‰ํ•˜์„ธ์š”. ์‚ฌ์šฉ์ž๊ฐ€ ์ค‘๊ฐ„ ์ฒด์ธ๋ถ€ํ„ฐ ์‹œ์ž‘ํ•˜๋”๋ผ๋„, ์ด๋ ‡๊ฒŒ ์ˆœ์„œ๋Œ€๋กœ ๋ˆ„๋ฝ๋œ ์•„ํ‹ฐํŒฉํŠธ๋ฅผ ๊ตฌ์ถ•ํ•˜์„ธ์š”.
  • ์•„ํ‹ฐํŒฉํŠธ๊ฐ€ ์‹ค์ œ ์‹คํ–‰ ๊ฒฐ๊ณผ๋ฅผ ๋งํ•˜๊ฒŒ ํ•˜์„ธ์š”. Partial, Blocked, ์˜ˆ์ƒ์น˜ ๋ชปํ•œ ๋ฐœ๊ฒฌ ๋“ฑ ๊ทธ๋Œ€๋กœ ํฌํ•จ์‹œ์ผœ์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์˜์‹ฌ์Šค๋Ÿฌ์šธ ์ •๋„๋กœ ๊น”๋”ํ•œ ์•„ํ‹ฐํŒฉํŠธ๋Š” ์ด ๊ทœ์น™์ด ์œ„๋ฐ˜๋˜์—ˆ์Œ์„ ์•Œ๋ ค์ฃผ๋Š” ์‹ ํ˜ธ์ž…๋‹ˆ๋‹ค.
  • ์˜๋„์ ์œผ๋กœ ์‹œ๋‚˜๋ฆฌ์˜ค๋ฅผ ๋‹ค๋ฅด๊ฒŒ ๋งŒ๋“œ๋Š” ๊ฒƒ์€ ๊ดœ์ฐฎ์Šต๋‹ˆ๋‹ค(harden์ด ๋ชจ๋“  ๊ฒƒ์„ ์ ์šฉํ•œ ํ›„, ์ฝ”๋“œ๋ฅผ ๋˜๋Œ๋ ค์„œ verify๊ฐ€ ๋ณ€๊ฒฝ์„ ์žก์•„๋‚ด์•ผ ํ•˜๋„๋ก ํ•˜๋Š” ๊ฒฝ์šฐ ๋“ฑ). ํ•˜์ง€๋งŒ ๋ณ€๊ฒฝ ์‚ฌํ•ญ์„ ์‹œ๊ฐ์ ์œผ๋กœ ๋„์ž…ํ•˜๊ณ (ํ‘œ์‹œ๋œ ๋„๊ตฌ ํ˜ธ์ถœ์—์„œ ๋˜๋Œ๋ฆฌ๊ธฐ, ์‹ค์ œ ์•„ํ‹ฐํŒฉํŠธ ์œ ์ง€), ์‹คํ–‰์—์„œ ์ƒ์„ฑ๋˜์ง€ ์•Š์€ ๊ธฐ๋ก์„ ์ง์ ‘ ์ž‘์„ฑํ•˜์ง€ ๋งˆ์„ธ์š”.

๋ฐฉ๋ฒ•๋ก : ๋‹จ๊ณ„๋ณ„

๊ฐ ๋‹จ๊ณ„๋Š” ์ด์ „ ๋‹จ๊ณ„๋ฅผ ์ฝ๊ณ  ํ•˜๋‚˜์˜ ์•„ํ‹ฐํŒฉํŠธ๋ฅผ ์”๋‹ˆ๋‹ค. ์ด ์ฒด์ธ์„ ์•Œ๊ณ  ์ ˆ๋Œ€ ๊นจ๋œจ๋ฆฌ์ง€ ๋งˆ์„ธ์š”:

๋‹จ๊ณ„์ฝ๋Š” ๋Œ€์ƒ์“ฐ๋Š” ๋Œ€์ƒ
charterํ”„๋กœ์ ํŠธ ์ปจํ…์ŠคํŠธ.bluespec/memory/charter.md
detect์ฝ”๋“œ.bluespec/memory/detect.md
plan์˜ค์ง detect.md๋งŒ, ์ ˆ๋Œ€ ์ฝ”๋“œ๋Š” ์ฝ์ง€ ์•Š์Œ.bluespec/memory/plan.md
harden์˜ค์ง plan.md + ํ—Œ์žฅ(charter), ๊ทธ๋ฆฌ๊ณ  ์‚ฌ์šฉ์ž ์ฝ”๋“œ๋ฅผ ํŽธ์ง‘.bluespec/memory/harden.md
verifyharden.md ๋ฐ ์ฝ”๋“œ๋ฅผ ์ฝ์–ด ๊ธฐ๋ก๊ณผ ์‹ค์ œ๋ฅผ ๋Œ€์กฐํ•˜๊ณ , ์•„๋ฌด๊ฒƒ๋„ ๋ณ€๊ฒฝํ•˜์ง€ ์•Š์Œ.bluespec/memory/verify.md

๊ทธ๋Ÿฐ ๋‹ค์Œ, ์‹œ๋ฎฌ๋ ˆ์ด์…˜ํ•˜๋Š” ๋ช…๋ น์— ๋Œ€ํ•ด:

  1. ํ”ฝ์Šค์ฒ˜๋ฅผ ๊ทธ๋Œ€๋กœ ./temp์— ๋ณต์‚ฌํ•ฉ๋‹ˆ๋‹ค (๊ทœ์น™ 1).
  2. ๊ฐ ์ƒ์œ„ ๋‹จ๊ณ„๋ฅผ ์ˆœ์„œ๋Œ€๋กœ ./temp์— ๋Œ€ํ•ด ์‹คํ–‰ํ•˜์—ฌ ์ฒด์ธ์„ ๊ตฌ์ถ•ํ•ฉ๋‹ˆ๋‹ค (๊ทœ์น™ 4).
  3. ๋Œ€์ƒ ๋‹จ๊ณ„๋ฅผ ํ•ด๋‹น spec/commands/bluespec.<phase>.md ์‚ฌ์–‘์— ๋”ฐ๋ผ ๋ฌธ์ž ๊ทธ๋Œ€๋กœ ์‹คํ–‰ํ•ฉ๋‹ˆ๋‹ค (๊ทœ์น™ 3).
  4. ์ง„ํ–‰ํ•˜๋ฉด์„œ ๋ชจ๋“  ์ž…๋ ฅ, ๋Œ€ํ™”๋ก, ์•„ํ‹ฐํŒฉํŠธ๋ฅผ ํŽœ์Šค ๋ธ”๋ก์œผ๋กœ ๋ณด์—ฌ์ค๋‹ˆ๋‹ค (๊ทœ์น™ 2). ๊ฐ ์ถœ๋ ฅ ์•„ํ‹ฐํŒฉํŠธ๋ฅผ ์‹ค์ œ ํŒŒ์ผ๋กœ ์ž‘์„ฑํ•œ ๋‹ค์Œ, Readํ•˜์—ฌ ๋ณด์—ฌ์ค๋‹ˆ๋‹ค.

๋ฌด์—‡์ด๋“  ์ œ์‹œํ•˜๊ธฐ ์ „์— ์ •์ง์„ฑ ํ™•์ธ

  • ์ด๊ฒƒ์ด ์‹ค์ œ๋กœ ์‹คํ–‰๋œ ๊ฒƒ์ธ๊ฐ€, ์•„๋‹ˆ๋ฉด ๋‚ด๊ฐ€ ๋ฌด์—‡์ด ์ผ์–ด๋‚ ์ง€ ์ƒ๊ฐ๋‚˜๋Š” ๋Œ€๋กœ ์ž…๋ ฅํ•˜๊ณ  ์žˆ๋Š”๊ฐ€?
  • ๋ชจ๋“  ๋Œ€ํ™”๋ก ์ค„์ด ๋‚ด๊ฐ€ ๋ถ™์—ฌ๋„ฃ์€ ์›์‹œ ์ถœ๋ ฅ์ด๋‚˜ ์‚ฌ์šฉ์ž๊ฐ€ ์—ด ์ˆ˜ ์žˆ๋Š” ./temp ํŒŒ์ผ(์ž˜๋ฆฐ ๋„๊ตฌ ํ˜ธ์ถœ์ด ์•„๋‹Œ)๋กœ ๋’ท๋ฐ›์นจ๋˜๋Š”๊ฐ€? (๊ทœ์น™ 2)
  • ์ง€๊ธˆ๊นŒ์ง€ ๊ฐ ๋‹จ๊ณ„์˜ ์ถœ๋ ฅ์„ ์ด๋ฏธ ๋ถ™์—ฌ๋„ฃ์–ด์„œ ์‚ฌ์šฉ์ž๊ฐ€ ์ ˆ๋Œ€ ๋ฌผ์–ด๋ณผ ํ•„์š”๊ฐ€ ์—†๊ฒŒ ํ–ˆ๋Š”๊ฐ€? (๊ทœ์น™ 2)
  • ๋‚ด๊ฐ€ ์•„๋‹Œ ๋ช…๋ น์œผ๋กœ์„œ ํ–‰๋™ํ•˜๊ธฐ ์œ„ํ•ด ๊ฐ ๋‹จ๊ณ„์˜ ์‚ฌ์–‘๊ณผ ํ™•์ธ ์ค‘๋‹จ์„ ๋”ฐ๋ž๋Š”๊ฐ€? (๊ทœ์น™ 3)
  • ๊ฐ ์ƒ์œ„ ๋‹จ๊ณ„ ์•„ํ‹ฐํŒฉํŠธ๊ฐ€ ๋‚ด๊ฐ€ ์›ํ•˜๋Š” ๊ฒฐ๊ณผ๋ฅผ ์ง์ ‘ ์ž‘์„ฑํ•œ ๊ฒƒ์ด ์•„๋‹ˆ๋ผ, ํ•ด๋‹น ๋‹จ๊ณ„๋ฅผ ์‹คํ–‰ํ•˜์—ฌ ๋‚˜์˜จ ๊ฒƒ์ธ๊ฐ€? (๊ทœ์น™ 4)
  • ์‹œ๋‚˜๋ฆฌ์˜ค๊ฐ€ /tmp์— ์ˆจ๊ฒจ์ง€์ง€ ์•Š๊ณ  ./temp ์•„๋ž˜์— ์žˆ๋Š”๊ฐ€? (๊ทœ์น™ 1)

๋งŒ์•ฝ ํ•˜๋‚˜๋ผ๋„ '์•„๋‹ˆ์˜ค'๋ผ๋ฉด, ๋ณด๋‚ด๊ธฐ ์ „์— ์ˆ˜์ •ํ•˜์„ธ์š”. ์‚ฌ์šฉ์ž๋Š” ์ •์ œ๋œ ํ—ˆ๊ตฌ๋ณด๋‹ค๋Š” ์†Œ๋ฐ•ํ•˜์ง€๋งŒ ์‹ค์ œ์ ์ธ ์ถœ๋ ฅ์„ ๋ณด๋Š” ๊ฒƒ์„ ์„ ํ˜ธํ•ฉ๋‹ˆ๋‹ค.

๊ด€๋ จ ์Šคํ‚ฌ