| ํญ๋ชฉ | ๋ด์ฉ |
|---|---|
| Invoke | /e2e:draft |
| Aliases | /e2e:d |
| Category | e2e-authoring |
| Complexity | moderate |
/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๋ฅผ ๋ถ์ด๋ฉด ๊ธฐ์กด ์๋๋ฆฌ์ค ํ์ผ๊ณผ ํ๋๋ก ํฉ์นฉ๋๋ค. (์ ๋ถ์ด๋ฉด ๋ณ๋ ์ด์ ํ์ผ๋ก ๋ฐ๋ก ์ ์ฅ)
์์์ ๋ฌด์จ ์ผ์ด ๋ฒ์ด์ง๋์#
- ๊ธฐ๋ก ํ์ธ โ ํ์ ์ ๋์ด ์ค์ ๋ก ์๋์ง ๋จผ์ ํ์ธํฉ๋๋ค. ์์ผ๋ฉด ๋๋ฌ๋ณด๊ธฐ๋ถํฐ ํ๋ผ๊ณ ์๋ดํฉ๋๋ค.
- ๊ธฐ๋ก ์ ๋ฆฌ โ ์ ๋์ ์๊ฐ ์์๋๋ก ์ฝ์ด "๋ฌด์์ ์ด๋ค ์์๋ก ํ๋์ง" ํ๋ฆ์ ์ฌ๊ตฌ์ฑํฉ๋๋ค.
- ์๋๋ฆฌ์ค ์ด์ ์์ฑ โ ๊ทธ ํ๋ฆ์ Given/When/Then ์๋๋ฆฌ์ค ํ์ผ๋ก ๋ง๋ญ๋๋ค. (๊ธฐ์กด ํ์ผ์ด ์์ผ๋ฉด ๋ณ๋ ์ด์์ผ๋ก ์์ ํ๊ฒ ๋ณด๊ด)
- ๋ค๋ฌ๊ธฐ ๋์ ๋ฝ๊ธฐ โ ํ ์คํธ๋ฅผ ๋ ํผํผํ๊ฒ ๋ง๋ค ์ง์ ์ ๋ชฉ๋ก์ผ๋ก ์ถ๋ ค ๋ ๋๋ค.
- ์์ฑ ํํธ ๋ง๋ค๊ธฐ โ ๋ค์ ๋จ๊ณ ์์ ์ ๋๋ ํํธ ๋ฉ๋ชจ๋ฅผ ๋จ๊น๋๋ค.
- ํ์ง ์ ๊ฒ โ ์๋๋ฆฌ์ค๊ฐ ์ต์ ํ์(Given/When/Then ๊ฐ 1๊ฐ ์ด์)์ ๊ฐ์ท๋์ง ํ์ธํฉ๋๋ค.
- ๋ค์ ๋จ๊ณ ์๋ด โ ๋ค๋ฌ๊ธฐ โ ๋จ๊ณ ๊ตฌํ โ ๋ฐ์ (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 |
์คํ ๋จ๊ณ#
- ์ ๋ ์กด์ฌ ๊ฒ์ฆ โ
.claude/e2e-journal/{feature}.jsonlํ์ - ์ ๋ ํ์ฑ โ ์๊ฐ์ ์ด๋ฒคํธ ์ํ์ค ๊ตฌ์ฑ
- Gherkin ์ด์ ์์ฑ โ
integration_test/features/{feature}.feature- ์๋จ์ ๊ฒฝ๊ณ ์ฃผ์ + ์๋ณธ ์ ๋ ๊ฒฝ๋ก
- ๊ธฐ์กด ํ์ผ ์กด์ฌ ์
--merge๊ฐ ์์ผ๋ฉด.draft.feature๋ก ์ ์ฅ
- Key-Hardening ํ๊ฒ ์ถ์ถ โ
.claude/e2e-journal/key-harden-targets.md - Step hints ์์ฑ โ
.claude/e2e-journal/{feature}.step-hints.md - ํ์ง ๊ฒ์ฌ โ Given/When/Then ์ต์ 1๊ฐ + canonical step ๊ท์ฝ ๊ฒ์ฆ
- ๋ค์ ๋จ๊ณ ์๋ด โ 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 โ ๋ฐ์ ๋จ๊ณ