LogoSkills

e2e:draft

Convert the .claude/e2e-journal/{feature}.jsonl journal into a Gherkin .feature draft and key-hardening target list (E2E authoring stage 2).

ํ•ญ๋ชฉ๋‚ด์šฉ
Invoke/e2e:draft
Aliases/e2e:d
Categorye2e-authoring
Complexitymoderate

/e2e:draft โ€” ํƒ์ƒ‰ ๊ธฐ๋ก์„ ํ…Œ์ŠคํŠธ ์ดˆ์•ˆ์œผ๋กœ ๋ฐ”๊พธ๊ธฐ#

ํ•œ๋งˆ๋””๋กœ#

์•ฑ์„ ์ง์ ‘ ๋ˆŒ๋Ÿฌ๋ณด๋ฉฐ ๋‚จ๊ธด ํƒ์ƒ‰ ๊ธฐ๋ก(์ €๋„) ์„, ์‚ฌ๋žŒ์ด ์ฝ๊ณ  ๋‹ค๋“ฌ์„ ์ˆ˜ ์žˆ๋Š” ํ…Œ์ŠคํŠธ ์‹œ๋‚˜๋ฆฌ์˜ค ์ดˆ์•ˆ์œผ๋กœ ์ž๋™ ๋ณ€ํ™˜ํ•ด ์ฃผ๋Š” ๋‹จ๊ณ„์ž…๋‹ˆ๋‹ค. ๋ฐ›์•„์“ด ํšŒ์˜๋ก์„ ๊น”๋”ํ•œ ์ •์‹ ๋ฌธ์„œ ์–‘์‹์œผ๋กœ ์ •๋ฆฌํ•ด ์ฃผ๋Š” ๊ฒƒ๊ณผ ๋น„์Šทํ•ฉ๋‹ˆ๋‹ค.

๋ˆ„๊ฐ€ยท์–ธ์ œ ์“ฐ๋‚˜์š”#

  • /e2e:explore ๋กœ ์•ฑ์„ ๋‘˜๋Ÿฌ๋ณด๋ฉฐ ํƒ์ƒ‰ ๊ธฐ๋ก์„ ์ด๋ฏธ ๋‚จ๊ธด ์‚ฌ๋žŒ
  • ๊ทธ ๊ธฐ๋ก(.claude/e2e-journal/ ํด๋” ์•ˆ์˜ ์ €๋„)์„ ๋ฐ”ํƒ•์œผ๋กœ ์ •์‹ ํ…Œ์ŠคํŠธ ์‹œ๋‚˜๋ฆฌ์˜ค ์ดˆ์•ˆ์„ ๋งŒ๋“ค๊ณ  ์‹ถ์„ ๋•Œ

์ฆ‰, "๋‘˜๋Ÿฌ๋ณด๊ธฐ(explore)"๋ฅผ ๋๋‚ธ ๋‹ค์Œ ๊ณง๋ฐ”๋กœ ์ด์–ด์„œ ์“ฐ๋Š” 2๋‹จ๊ณ„ ์ž‘์—…์ž…๋‹ˆ๋‹ค.

๋ฌด์—‡์„ ํ•ด์ฃผ๋‚˜์š”#

ํƒ์ƒ‰ ๊ธฐ๋ก์„ ์ฝ์–ด ๋‹ค์Œ ๊ฒฐ๊ณผ๋ฌผ์„ ๋งŒ๋“ค์–ด ์ค๋‹ˆ๋‹ค.

  • ํ…Œ์ŠคํŠธ ์‹œ๋‚˜๋ฆฌ์˜ค ์ดˆ์•ˆ โ€” integration_test/features/{feature}.feature (Given/When/Then ํ˜•์‹์œผ๋กœ, ์‚ฌ๋žŒ์ด ์ฝ๊ธฐ ์‰ฌ์šด ์‹œ๋‚˜๋ฆฌ์˜ค)
    • ์ด๋ฏธ ๊ฐ™์€ ์ด๋ฆ„์˜ ํŒŒ์ผ์ด ์žˆ์œผ๋ฉด, ๋ฎ์–ด์“ฐ์ง€ ์•Š๊ณ  .draft.feature ๋ผ๋Š” ๋ณ„๋„ ์ดˆ์•ˆ ํŒŒ์ผ๋กœ ์•ˆ์ „ํ•˜๊ฒŒ ์ €์žฅํ•ฉ๋‹ˆ๋‹ค.
  • ๋‹ค์Œ ์ž‘์—… ๋Œ€์ƒ ๋ชฉ๋ก โ€” .claude/e2e-journal/key-harden-targets.md (ํ…Œ์ŠคํŠธ๋ฅผ ๋” ํŠผํŠผํ•˜๊ฒŒ ๋‹ค๋“ฌ์„ ์ง€์  ์ •๋ฆฌ)
  • ์ž‘์„ฑ ํžŒํŠธ โ€” .claude/e2e-journal/{feature}.step-hints.md
  • ํ’ˆ์งˆ ์ ๊ฒ€ ๋ฆฌํฌํŠธ โ€” ์ดˆ์•ˆ์ด ์ตœ์†Œ ํ˜•์‹์„ ๊ฐ–์ท„๋Š”์ง€ ์ž๋™ ํ™•์ธํ•œ ๊ฒฐ๊ณผ

์–ด๋–ป๊ฒŒ ์“ฐ๋‚˜์š”#

# ๊ธฐ๋ณธ โ€” ํƒ์ƒ‰ ๊ธฐ๋ก์„ ์‹œ๋‚˜๋ฆฌ์˜ค ์ดˆ์•ˆ + ๋‹ค๋“ฌ๊ธฐ ๋Œ€์ƒ ๋ชฉ๋ก์œผ๋กœ ๋ณ€ํ™˜
/e2e:draft sign_in

# ์ดˆ์•ˆ๋งŒ ๋งŒ๋“ค๊ธฐ (๋‹ค๋“ฌ๊ธฐ ๋Œ€์ƒ ๋ชฉ๋ก์€ ์ƒ๋žต)
/e2e:draft sign_in --skip-key-harden

# ๊ฐ™์€ ์ด๋ฆ„์˜ ๊ธฐ์กด ์‹œ๋‚˜๋ฆฌ์˜ค ํŒŒ์ผ์ด ์žˆ์œผ๋ฉด ํ•ฉ์น˜๊ธฐ
/e2e:draft sign_in --merge
  • sign_in ์ž๋ฆฌ์—๋Š” ํƒ์ƒ‰ ๊ธฐ๋ก์„ ๋‚จ๊ฒจ ๋‘” ๊ธฐ๋Šฅ ์ด๋ฆ„์„ ์ ์Šต๋‹ˆ๋‹ค. (ํ•„์ˆ˜)
  • --skip-key-harden ์„ ๋ถ™์ด๋ฉด "๋‹ค๋“ฌ๊ธฐ ๋Œ€์ƒ ๋ชฉ๋ก" ๋งŒ๋“ค๊ธฐ๋ฅผ ๊ฑด๋„ˆ๋œ๋‹ˆ๋‹ค.
  • --merge ๋ฅผ ๋ถ™์ด๋ฉด ๊ธฐ์กด ์‹œ๋‚˜๋ฆฌ์˜ค ํŒŒ์ผ๊ณผ ํ•˜๋‚˜๋กœ ํ•ฉ์นฉ๋‹ˆ๋‹ค. (์•ˆ ๋ถ™์ด๋ฉด ๋ณ„๋„ ์ดˆ์•ˆ ํŒŒ์ผ๋กœ ๋”ฐ๋กœ ์ €์žฅ)

์•ˆ์—์„œ ๋ฌด์Šจ ์ผ์ด ๋ฒŒ์–ด์ง€๋‚˜์š”#

  1. ๊ธฐ๋ก ํ™•์ธ โ€” ํƒ์ƒ‰ ์ €๋„์ด ์‹ค์ œ๋กœ ์žˆ๋Š”์ง€ ๋จผ์ € ํ™•์ธํ•ฉ๋‹ˆ๋‹ค. ์—†์œผ๋ฉด ๋‘˜๋Ÿฌ๋ณด๊ธฐ๋ถ€ํ„ฐ ํ•˜๋ผ๊ณ  ์•ˆ๋‚ดํ•ฉ๋‹ˆ๋‹ค.
  2. ๊ธฐ๋ก ์ •๋ฆฌ โ€” ์ €๋„์„ ์‹œ๊ฐ„ ์ˆœ์„œ๋Œ€๋กœ ์ฝ์–ด "๋ฌด์—‡์„ ์–ด๋–ค ์ˆœ์„œ๋กœ ํ–ˆ๋Š”์ง€" ํ๋ฆ„์„ ์žฌ๊ตฌ์„ฑํ•ฉ๋‹ˆ๋‹ค.
  3. ์‹œ๋‚˜๋ฆฌ์˜ค ์ดˆ์•ˆ ์ž‘์„ฑ โ€” ๊ทธ ํ๋ฆ„์„ Given/When/Then ์‹œ๋‚˜๋ฆฌ์˜ค ํŒŒ์ผ๋กœ ๋งŒ๋“ญ๋‹ˆ๋‹ค. (๊ธฐ์กด ํŒŒ์ผ์ด ์žˆ์œผ๋ฉด ๋ณ„๋„ ์ดˆ์•ˆ์œผ๋กœ ์•ˆ์ „ํ•˜๊ฒŒ ๋ณด๊ด€)
  4. ๋‹ค๋“ฌ๊ธฐ ๋Œ€์ƒ ๋ฝ‘๊ธฐ โ€” ํ…Œ์ŠคํŠธ๋ฅผ ๋” ํŠผํŠผํ•˜๊ฒŒ ๋งŒ๋“ค ์ง€์ ์„ ๋ชฉ๋ก์œผ๋กœ ์ถ”๋ ค ๋ƒ…๋‹ˆ๋‹ค.
  5. ์ž‘์„ฑ ํžŒํŠธ ๋งŒ๋“ค๊ธฐ โ€” ๋‹ค์Œ ๋‹จ๊ณ„ ์ž‘์—…์„ ๋•๋Š” ํžŒํŠธ ๋ฉ”๋ชจ๋ฅผ ๋‚จ๊น๋‹ˆ๋‹ค.
  6. ํ’ˆ์งˆ ์ ๊ฒ€ โ€” ์‹œ๋‚˜๋ฆฌ์˜ค๊ฐ€ ์ตœ์†Œ ํ˜•์‹(Given/When/Then ๊ฐ 1๊ฐœ ์ด์ƒ)์„ ๊ฐ–์ท„๋Š”์ง€ ํ™•์ธํ•ฉ๋‹ˆ๋‹ค.
  7. ๋‹ค์Œ ๋‹จ๊ณ„ ์•ˆ๋‚ด โ€” ๋‹ค๋“ฌ๊ธฐ โ†’ ๋‹จ๊ณ„ ๊ตฌํ˜„ โ†’ ๋ฐ•์ œ(lock) ๋กœ ์ด์–ด์ง€๋Š” ๋‹ค์Œ ์ž‘์—…์„ ์•Œ๋ ค ์ค๋‹ˆ๋‹ค.

โš™๏ธ ์ƒ์„ธ ์˜ต์…˜ยท์‹คํ–‰ ๋ช…์„ธ (๊ฐœ๋ฐœ์ž / AI ์—์ด์ „ํŠธ์šฉ)

Triggers#

  • /e2e:explore ๋กœ ์ €๋„ ์ƒ์„ฑ ์™„๋ฃŒ ํ›„
  • exploration ์ €๋„์ด .claude/e2e-journal/ ์— ์ด๋ฏธ ์กด์žฌํ•  ๋•Œ

์‚ฌ์šฉ๋ฒ•#

# ๊ธฐ๋ณธ โ€” ์ €๋„์„ Gherkin ์ดˆ์•ˆ + key-harden ํƒ€๊ฒŸ์œผ๋กœ ๋ณ€ํ™˜
/e2e:draft sign_in

# ์ดˆ์•ˆ๋งŒ ์ƒ์„ฑ (key-hardening ๊ฑด๋„ˆ๋œ€)
/e2e:draft sign_in --skip-key-harden

# ๊ธฐ์กด .feature ํŒŒ์ผ์ด ์žˆ์œผ๋ฉด ๋ณ‘ํ•ฉ
/e2e:draft sign_in --merge

ํŒŒ๋ผ๋ฏธํ„ฐ#

ํŒŒ๋ผ๋ฏธํ„ฐํ•„์ˆ˜์„ค๋ช…๊ธฐ๋ณธ
featureโœ…exploration ์ €๋„์ด ์žˆ๋Š” feature ์ด๋ฆ„โ€”
--skip-key-hardenโŒkey-harden ํƒ€๊ฒŸ ํŒŒ์ผ ์ƒ๋žตfalse
--mergeโŒ๊ธฐ์กด .feature ์™€ ๋ณ‘ํ•ฉ (์•„๋‹ˆ๋ฉด .draft.feature ๋กœ ๋ณ„๋„ ์ƒ์„ฑ)false

์‹คํ–‰ ๋‹จ๊ณ„#

  1. ์ €๋„ ์กด์žฌ ๊ฒ€์ฆ โ€” .claude/e2e-journal/{feature}.jsonl ํ•„์ˆ˜
  2. ์ €๋„ ํŒŒ์‹ฑ โ€” ์‹œ๊ฐ„์ˆœ ์ด๋ฒคํŠธ ์‹œํ€€์Šค ๊ตฌ์„ฑ
  3. Gherkin ์ดˆ์•ˆ ์ƒ์„ฑ โ€” integration_test/features/{feature}.feature
    • ์ƒ๋‹จ์— ๊ฒฝ๊ณ  ์ฃผ์„ + ์›๋ณธ ์ €๋„ ๊ฒฝ๋กœ
    • ๊ธฐ์กด ํŒŒ์ผ ์กด์žฌ ์‹œ --merge ๊ฐ€ ์—†์œผ๋ฉด .draft.feature ๋กœ ์ €์žฅ
  4. Key-Hardening ํƒ€๊ฒŸ ์ถ”์ถœ โ€” .claude/e2e-journal/key-harden-targets.md
  5. Step hints ์ƒ์„ฑ โ€” .claude/e2e-journal/{feature}.step-hints.md
  6. ํ’ˆ์งˆ ๊ฒ€์‚ฌ โ€” Given/When/Then ์ตœ์†Œ 1๊ฐœ + canonical step ๊ทœ์•ฝ ๊ฒ€์ฆ
  7. ๋‹ค์Œ ๋‹จ๊ณ„ ์•ˆ๋‚ด โ€” key-hardening โ†’ step-implement โ†’ lock

์ถœ๋ ฅ#

  • integration_test/features/{feature}.feature (๋˜๋Š” .draft.feature)
  • .claude/e2e-journal/key-harden-targets.md (ํœ˜๋ฐœ์„ฑ)
  • .claude/e2e-journal/{feature}.step-hints.md (ํœ˜๋ฐœ์„ฑ)
  • ํ’ˆ์งˆ ์ฒดํฌ ๋ฆฌํฌํŠธ

์‹คํŒจ ์ผ€์ด์Šค#

์›์ธ๋Œ€์‘
์ €๋„ ์—†์Œ/e2e:explore {feature} ์•ˆ๋‚ด
์ €๋„์ด session_end ์—†์ด ๋‹ซํž˜์„ธ์…˜ ์žฌ๊ฐœ ๋˜๋Š” ๊ฐ•์ œ draft ์˜ต์…˜ ์•ˆ๋‚ด
๊ธฐ์กด .feature ์ถฉ๋Œ.draft.feature ๋กœ ๋ณ„๋„ ์ €์žฅ + diff ์ถœ๋ ฅ

๊ด€๋ จ#

  • skills/scenario-draft/SKILL.md
  • rules/feature-file-conventions.md
  • commands/e2e/explore.md โ€” ์ด์ „ ๋‹จ๊ณ„
  • commands/e2e/lock.md โ€” ๋ฐ•์ œ ๋‹จ๊ณ„